| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 309 人关注过本帖
标题:c语言编程题求助,关于a++的问题
只看楼主 加入收藏
as2872590483
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-3-10
结帖率:50%
  已结贴   问题点数:20  回复次数:4   
c语言编程题求助,关于a++的问题
(32)有以下程序
     #include <stdio.h>
     int f(int  n)
     { int  t = 0,   a=5;
       if (n/2) {int  a=6;    t += a++;  }
       else    {int  a=7;     t += a++;  }
       return  t + a++;
     }
     main()
     { int  s=0, i=0;     
       for (; i<2;i++)  s += f(i);
       printf("%d\n", s);
     }
程序运行后的输出结果是
A) 28
B) 24
C) 32
D) 36
答案是24,可是第4行第5行不是有a++吗,第一次return我觉得应该是7+6=13第二次return为6+7=13啊。最后答案应该是26啊?这个是怎么回事。
2018-03-10 13:24
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
  得分:10 
是说int  a=6; 和int b=7;这两个a是局部变量只在他们所在的花括号里有效。
return t + a++;里的a++都是5,t都是7 所以答案是24
2018-03-10 14:15
as2872590483
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-3-10
  得分:0 
回复 2楼 李晨经纪人
可是{int  a=6;    t += a++;  }在这里,a++不是运算了一次吗,尽管这里int是局部变量,a++运算完了应该要返回值吧
2018-03-10 14:33
李晨经纪人
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:175
专家分:848
注 册:2018-2-14
  得分:10 
回复 3楼 as2872590483
首先第一个 if就没有执行过。而且这里的3个a都不一样,只是变量名一样而已,各自都有作用范围
你可以把程序看成:
     int f(int  n)
     { int  t = 0,   a=5;
       if (n/2) {int  b=6;    t += b++;  }
       else    {int  c=7;     t += c++;  }
       return  t + a++;
     }
     
2018-03-10 14:41
浅草没马蹄
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:12
专家分:18
注 册:2018-3-10
  得分:0 
这涉及到了一个先后问题,比如 t += a++ 来说,是先运算t = t + a,再远算 a++的,
2018-03-10 16:25







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021997 second(s), 9 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved