查看: 1950|回复: 25
收起左侧

[已解决] 两个有些疑惑的C程序。。。

 关闭 [复制链接]
luolwz1988
发表于 2010-10-27 19:27:04 | 显示全部楼层 |阅读模式
程序如下:一:
#include<stdio.h>
void main()
{

int a=3,s;

s=(++a)+(++a)+(++a);

printf("%d\n",s);
}
用VC++6.0调试的结果是16,为什么?

二.
#include<stdio.h>
void main()
{

int a;

scanf("%d",&a);
}

这个在XP上面的VC++6.0调试出现过问题,不过在win7下面没出问题,不知道什么原因。
lixun12358
发表于 2010-10-27 20:29:43 | 显示全部楼层
本帖最后由 lixun12358 于 2010-10-28 08:00 编辑

第一个从理论上讲是18.......
第二个是对的
jackyid
发表于 2010-10-27 20:44:52 | 显示全部楼层
lixun12358 发表于 2010-10-27 20:29
第一个4+5+6不是16吗???
第二个是对的

4+5+6=15
MJ君
发表于 2010-10-27 21:57:01 | 显示全部楼层
5+5+6

第二个可能是程序本身的问题吧……
qgyjs
发表于 2010-10-27 22:03:20 | 显示全部楼层
看准了:  首先第一个(++a),a=4;
              然后向后扫描,+(++a),再次执行++,a=5;
              现在才是a+a,结果为10!
              继续扫描,+(++a),又执行++,a=6;
              用第一次结果10,+6,就是16.
EOF
eLiT3CH_KSP
发表于 2010-10-27 22:22:28 | 显示全部楼层
本帖最后由 eLiT3CH_KSP 于 2010-10-27 22:22 编辑

第一题的正确答案是 18. LZ 你确认一下.
三个 ++a 被最先计算. 所以 s = 6+6+6 = 18


第二个唯一的问题是这个.
warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
qgyjs
发表于 2010-10-27 22:45:42 | 显示全部楼层
eLiT3CH_KSP 发表于 2010-10-27 22:22
第一题的正确答案是 18. LZ 你确认一下.
三个 ++a 被最先计算. 所以 s = 6+6+6 = 18

用 Turbo C 来编译,就能得到 18 这个结果。 MS C 也是。
其它编译器,按照"从左到右"的顺序求解。
比如类似的(a++)+(a++)+(a++) ,设初值仍为3,有3+4+5与3+3+3两种。
luolwz1988
 楼主| 发表于 2010-10-27 22:51:42 | 显示全部楼层
回复 2楼 lixun12358 的帖子

汗。。4+5+6这个都可以算错,
luolwz1988
 楼主| 发表于 2010-10-27 22:52:34 | 显示全部楼层
回复 4楼 MJ君 的帖子

怎么算的?
luolwz1988
 楼主| 发表于 2010-10-27 22:57:27 | 显示全部楼层
回复 6楼 eLiT3CH_KSP 的帖子

运行结果确实是16


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-6-10 18:01 , Processed in 0.131691 second(s), 18 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表