关于失眠的问题C语言的问题。

小木虫 --- 600万学术达人喜爱的学术科研平台
热门搜索:
&&关于c语言中++i计算的问题
关于c语言中++i计算的问题
请问q的值为多少,我试了下是22,但不理解
#include &stdio.h&
void main()
int j=5,q;
q=(++j)+(++j)+(++j);
printf(&%d&,q);
对呀,不知道怎么算的
我用vc6.0和codeblock编译都是22
同理最后一段运用到你这个式子上也一样也是21吧,。转自新浪爱问。。鱼鹰
按照这种算法是22
那个百度的解释是错的
24是因为vc认定三个++i的值是一样的,因为根据§5/4可以推测出所有左递增/递减算符可以提取到表达式之前,又递增递减算符都可以提取到表达式之后的结论,因此VC将这一表达式转化为
++i; ++i; ++i;
”谁会写出这样的语句”?其实几乎每个人都会,而且也是个重要的问题。这不只是表达式写法,而是C/C语音不完全解析顺序导致的。其他面向对象语言几乎都是可以不含糊的解析顺序的。这不只是++算符而已,如果任何表达式里有两个以上有side effect的函数,都有可能导致问题。这类含糊表达式非常常见,比如printf(..., x,f(x))这样简单的语句,如果f函数改变x的值,不同编译器都可能会给出不同的结果。
其他的例子,比如f(getc(), getc()),还有i=i++,还有以至于obj.f1()+obj.f2()这样常见的表达式,如果两个函数都有副作用,结果就可能因编译器不同而不同!
而这都是§5/4的结果。其实解析求值顺序不是不可能的,但是C本着速度第一的原则有意放松了标准
一个解决办法是,写程序时保证任何有返回值的函数没有副作用;而有副作用的都写成过程;但这样引入很大难度,实际上任何程序员都会写出很多依照标准含糊的C++表达式的。这也是提出C#语言的一个主要的原因之一。
学术必备与600万学术达人在线互动!
扫描下载送金币2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2014年10月 C/C++大版内专家分月排行榜第三2014年4月 C/C++大版内专家分月排行榜第三
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
本帖子已过去太久远了,不再提供回复功能。关于c语言的问题【编程吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:197,262贴子:
关于c语言的问题收藏
从键盘上输入5个数,输出最大数和最小数的值及其他们的标;、
#define N#include&stdio.h&void mian(){&&
int i, j, k, max,&&& static int a[5];&&
for(i=0;i&5;i++)&&&&&
scanf("%6d",& a[]);&&
min=max=a[0];&&
for(i=0;i&5;i++)&&&&& {&&&&&&& if(max&a[i]){max=a[i];j=i;}&&&&&&
else if (min&a[i]){min=a[i];k=i;}&&&&
printf("max:a[%d]=%d,min:a[%d]=%d",j,max,i,min);}1。在这个程序里面就是有点不明白min=max=a[0]; j=k;他把max赋值给min。把a[0]赋值给min。if(max&a[i])条件里的max和{max=a[i];j=i;}中的max是同一个数吗?我觉得不是同一个数,我看这问题很绕人头脑啊 ,有什么区分这些问题的好方法吗?
编程交流中心,教您编程!达内it软件编程专家,培养更多高端it人才.达内美国上市公司,新的教学模式,国内好的教师团队,让学生轻松学习.
首先这个程序有BUG如果第一个数最大
最大数a[i]的值就获取不到&&& if(max&a[i]){max=a[i];j=i;}只有第一个数最大,上面就没法比较 i的值没法获取 另外j=k;这句多余
应该是j=k=0吧
可以解决BUG
for(i=0;i&5;i++)应该改为for(i=1;i&5;i++)第一数没必要比第一个数
我来告诉你流程吧首先 a[0]&& 也就是第一数同时被赋值max和min 也就是说第一个数是最大数又是最小数,你可以认为是假设 j,k初始化为0 我们输入 5 4 3 2 1现在开始比较 5是最大数又是最小数 我们这么认为吧其他4个依次跟他比if(max&a[i]){max=a[i];j=i;}
if (min&a[i]){min=a[i];k=i;}注意,这两个if是先后运行的 首先
max还是为5接着马上比小 4比5 min为4
k=13比5 max不变3比min(min为4了) min=3 k=2。。。。。。。。。 接下来就不用我说了把。。。
给你的程序做稍许修改#define N#include&stdio.h&void main(){&&& int i, j, k, max,&&&& static int a[5];&&& for(i=0;i&5;i++)&&&&&& scanf("%6d",&a[i]);&&& min=max=a[0];&&& j=k=0;&&& for(i=1;i&5;i++)&&&&&& {&&&&&&&& if(max&a[i]){max=a[i];j=i;}&&&&&&& else if (min&a[i]){min=a[i];k=i;}&&&&& }&&& printf("max:a[%d]=%d,min:a[%d]=%d",j,max,k,min);}
这是一种方法,一种思维。程序刚开始时,我们默认第一个数既是最大值又是最小值。然后一个个往后作比较,从而求的结果。
登录百度帐号推荐应用问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
求较大者的一个题,为什么我运行以后,输入了数字按回车就自动关掉了cmd? 我用的是dev-c++
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
换成VS就好了
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
打上断点,或者ctrl+F5试一下
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:}

我要回帖

更多关于 关于格列佛游记的问题 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信