2 claysystem claysystem 于 2015.05.26 05:29 提问

mooc上老师讲的代码有两段没有看太懂

代码如下

 #include<stdio.h>  //输入数字然后程序判断这是几位数 
int main ()
{
    int x ,n=0;            //x输入的数字 n是用来输出的位数
    scanf("%d",&x);

    n=n+1;        // 3        只要输入数字都是1位以上的不存在0位所以先+1
    x /=10;         // 4   利用两整数相除省略小数部分,将输入的数字位数减去1位 

    while(x>0)   //判断输入的数字是否小于0
    {
        n++;               //n的值+1
        x/=10;               //将输入的数字位数再减去1位
    }
    printf("%d\n",n);

        return 0 ;
}

这程序的3 4行不是很理解 想听听您们的讲解,多谢了!

6个回答

wsh1992o
wsh1992o   Rxr 2015.05.26 14:27
已采纳

第三步完全可以并到第一步去
直接n=1;就行了
第四步可以理解为 x=x/10;

claysystem
claysystem 有道理,多谢指教.
2 年多之前 回复
gamefinity
gamefinity   Rxr 2015.05.26 06:11
  • 1. n=n+1

把n+1的值赋给n。对了,别说数学的事情。这里的等号不是等于的意思,是赋值的意思

  • 2. x /= 10; 从意义上理解,可以看做x=x/10;当然实际执行上,有点不一样,不过暂时可以忽略这些不一样。
  • 另外,提醒一点,整数除以整数,结果必然是整数,如果出现小数部分,会被截尾
91program
91program   Ds   Rxr 2015.05.26 07:27

从算法的实现上来说,完全没有必要有第3和第4行。
因为它的 while 循环体的语句完全是一样的,直接进入 while 循环进行判断即可。

91program
91program 回复牛战士: 呵呵,没有关系,有人说的你能看懂就行。
2 年多之前 回复
claysystem
claysystem 回复91program: 额。多谢回复!可是我还是没有看懂你说的...晕。。。
2 年多之前 回复
91program
91program 回复牛战士: while 中已经对 x 进行了判断 x >0。再说了,你的代码 return 0,无论什么情况下返回都是零。如果 return 的是 n,那么 c 已经有初值了,为零。不进 while 循环一样可以返回零。
2 年多之前 回复
91program
91program 回复牛战士: 小于零,也不是那样判断的。
2 年多之前 回复
claysystem
claysystem 不对啊,进while之前要判断这个数字是否小于0,如果这数字就是0的话呢?就输出0位了,所以只要输入数字就肯定是1位以上的数字
2 年多之前 回复
zzkjliu
zzkjliu   2015.05.26 08:06

#include //输入数字然后程序判断这是几位数
int main ()
{
int x ,n=0; //x输入的数字 n是用来输出的位数
scanf("%d",&x);

do {
n++; //n的值+1
x/=10; //将输入的数字位数再减去1位
}while(x>0) //判断输入的数字是否大于0

printf("%d\n",n);

return 0 ;

}

claysystem
claysystem 的确这个用do while 比较合适
2 年多之前 回复
u012271952
u012271952   2015.05.26 08:41

其实这个程序很简单的,第3行、第4行完全没有必要,可以删除了,不影响程序运行结果。这个程序要实现的功能是判断输入数字的位数,n是用来输出数字的位数
,x /= 10,则是利用/运算符的功能来实现目的。写程序,要注意简约而不简单,能不要的就不要。

claysystem
claysystem 哦.. 我试了,把三行四行删除,然后我输进去0 程序却输出的是0位。
2 年多之前 回复
xiaokangxu
xiaokangxu   2015.05.26 10:37

一开始n的值为0,但是显然最少都是一位,所以预先处理。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!