标题: 求助:c语言编程题
性别:男-离线 岱瀛
(deving)

长平侯
川峡东路经略使
监管使

Rank: 19Rank: 19Rank: 19Rank: 19
组别 经略使
级别 左将军
好贴 1
功绩 2293
帖子 1370
编号 55810
注册 2005-12-22
来自 人间
家族 慕容世家


发表于 2007-1-11 10:47 资料 个人空间 短消息 看全部作者
没想到菲菲也会写程序啊. 佩服一个。

后面两道菲菲写了,就不重复了,第一道代码如下:
#include <stdio.h>
#include "math.h"
void main()
{
        int m,n=1;
        scanf("%d",&m);               
         if (m<0) m=-m;       
        n += (int)log10(m);                 
        printf("%d\n",n);
}

m没有说明是正数还是负数.所以直接求对数的做法是不对的

本来以为要判断0,可是发现log10(0)不会出错,返回0,那就省掉判断的代码了

当然,楼主不想引入math.h的话,可以用简单的循环除10的方法吧,效率应该没有这个快.

如果考虑m是有小数的,那么如下:
#include <stdio.h>
#include "math.h"
void main()
{
        float m;
        int n=1;
        scanf("%f",&m);
        if (m<1&&m>-1&&m!=0)
        {
                n=0;
                printf("%d\n",n);
                return;
        }

        if (m<0) m=-m;       
        n += (int)log10(m);                 
        printf("%d\n",n);
}
p.s 有个疑惑,0算1位吧.0.123算几位.我这里把0算1位整数,0.123算0位整数,怪怪的


当然,数有越界的问题,由于题目中的M始终没有定义域,而电脑里的类型都是有自己的定义域的,所以,其实这道题要是仔细去分析,还要判断是否超过最大值的异常处理.

然后再考虑m 是从键盘上输入的,那么从代码健壮性看,有必须考虑是否有人乱输入东西,不输入数字而 是随便输入字符的问题或者说输入的是十六进制.这个就比较麻烦了,楼主的题目应该是小作业吧,老师不会想那么多的,就偷懒吧

[ 本帖最后由 岱瀛 于 2007-1-11 11:18 编辑 ]


顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2025-8-27 08:31
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.009966 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP