黑马程序员技术交流社区

标题: 判断程序的输出的结果?! [打印本页]

作者: 刘圣涛    时间: 2014-7-11 00:38
标题: 判断程序的输出的结果?!
之前做的一道题目,貌似结果是输出是2 0,不过现在思路有点混乱,有哪位大神能帮忙详细解答一下?
int main()
{ int n=4;
    while (n--)
     printf(〞%d〞,--n);
}


作者: fantacyleo    时间: 2014-7-11 00:44
本帖最后由 fantacyleo 于 2014-7-11 00:46 编辑

n--和--n最关键的是分清变量的值和表达式的值。无论--在前还是在后,执行完后变量的值一定都减了1。但是,表达式的值是不同的:n--这个表达式的值是n减1之前的值,--n这个表达式的值是n-1之后的值
作者: 骑着飞机去看海    时间: 2014-7-11 00:44
  1. //main()
  2. //{
  3. //    int n=4;                    第一轮                 第二轮        第三轮
  4. //    while (n--)                 4   n =  3          2   n = 1     0    循环退出
  5. //        printf(〞%d〞,--n)输出:  2   n = 2     输出:0  n = 0
  6. //        }
复制代码

作者: 丶白菜你个小番    时间: 2014-7-11 09:39
首先n--的表达式值为n,然后n-1,--n的表达式值为n-1;又每次判断和输出n都会-1,所以此while循环只执行2次,第一次判断后n=3,输出是--n,所以打印出2出来,n的值为2;第二次判断后n=1,输出是--n,所以打印出0,n的值为0
作者: zhs    时间: 2014-7-11 10:34
本帖最后由 zhs 于 2014-7-11 11:28 编辑

此代码的执行步骤为:
第一步:n先运算即while判断n为4成立(注意:此时不会直接进入循环,因为n--表达式还没有执行结束),而后紧跟着会n自减1后表达式结束,这时才进入循环。
第二步:进入循环后输出时执行--n,先自减,此时n变为2,随后执行输出语句n=2输出。
输出结果0思路同上,楼主可以自己过一遍。
作者: 楠瓜果    时间: 2014-7-11 14:05
这是一个先减和后减的问题,第一次运行,n是后减,所以当while循环的时候,n已经减1变成3,打印的时候,是先减后打印,所以先打印2,如果减号放在n的后面,那就是先打印3,循环的时候再减。再次循环的时候,当while中n的值为2,满足,继续运行,此是n已经变成了1,然后打印的时候再减一次,所以就变成了0;
作者: Devchen    时间: 2014-7-11 16:24
2 0;n = 4; n--时,先将n=4代表n--参与判断,之后将n减1(为3);printf中--n,先将n减去1(为2),之后n代表--n输出。
作者: 愿望    时间: 2014-7-11 17:42
本帖最后由 愿望 于 2014-7-11 17:43 编辑

我自己的话,来说, 不知道你能不能理解,
  运行到while的时候,n还是4, 但是经过n--就变成3 . 3就来到了 printf里,  "--n"是先减之后再赋值, 减了变成2,这就输出了一个2 ;

  2再回来while里, 一样,经过 n--就变成1 , 成立, 1 又来到了printf里, 再被--n一运行, 就变成了0 , 于是输出了0
  0再回去 while的条件就不成立了. over

主要明白后面的--n是要先减再printf这个地方, 就明白了!  
   希望你看的明白.....:)

作者: 幕夏    时间: 2014-7-11 23:43
细化一下你的代码这个你应该看懂了
  1. int main()
  2. { int n=4;
  3.     while (n!=0)
  4.      n--;
  5.      --n;
  6.      printf(〞%d〞,n);
  7. }
复制代码


作者: Bugist    时间: 2014-7-12 00:51
C语言基本已忘光
作者: 云霄之上    时间: 2014-7-12 14:48
这个程序的思路是这样的:while循环语句 先从4开始 whil(4--)此时因为4--也就是4!=0进入循环体输出--n也就是输出此时的n也就是4
作者: 小海    时间: 2014-7-12 16:16
关键要分清判断时与判断后n的值,第一轮:判断时,n=4,判断后,n=3,打印时:n=2,
第二轮,判断时:n=2,判断后:n=1,打印时:n=0;
第三轮,判断时,n=0,循环结束
作者: 刘圣涛    时间: 2014-7-12 22:36
谢谢大家的回答
作者: mybdgw    时间: 2014-7-12 22:52
int main()
{ int n=4;
    while (n--) //先判断n的值是否为0,不为0就往下走 第一次n=4 到printf之前n--变为3
     printf(〞%d〞,--n);//先减1再输出 n变为2 如此循环最终结果为: 2,0
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2