关于C语言中++运算符的讨论.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关于C语言中++运算的讨论 姜文周 在C语言教学中讲到例1程序时输出结果分析没有问题。 例1程序 #include stdio.h main() { int i=2,l; k= i ++ + i++ +i++; printf(\n i=%d , k=%d,i,k); } 输出 i=5 ,k=6 在讲到例2时遇到了问题 例2 #include stdio.h main() { int i,l; i=2; k= ++i + ( ++i) + (++i); printf(\n i=%d , k=%d,i,k); } 原讲义中说是 输出 i=5 ,k=15 该讲义以前用过,所以备课时没有仔细分析,授课时学生分析结果应该是i=5 , k=12,当公布结果时引起学生的讨论,由于课堂时间有限没有仔细讨论,承诺下次课前专门讨论。 课后将例2程序在计算机上行发现了问题。 在TC 2.0编译器下运行,输出是:i=5 ,k=15 在VC 6.0编译器下运行,输出是:i=5 ,k=13 显然同一个程序在不同的编译器上运行结果不一样,引起兴趣。在百度网上有哪些信誉好的足球投注网站“++i+++i+++i ”看到了一些讨论的帖子,受到启发,首先看看这些帖子 贴1 j=(++i)+(++i)+(++i)=(((++i)+(++i))+(++i)) 计算机在计算j=(a+b)+(c+d)+(e+f)先计算(a+b)+(c+d),并把结果存储(例如:存储在j中),然后再计算j+(e+f)=j; 所以计算机先计算了两个++i(前两项i为3,++i先于+号);也就是j=3+3;然后j=6+(++i)(最后的i为4),也就是j=6+4=10。 首先++i=2,再计算第二个++i=3,此时计算机里i=3,第一个i也=3,第二个i也=3,因为计算机里只有一个i,因此原式=(3+3)+4=10,记住计算机里只有一个i,算第二个时第一个i改变了。 贴2 j=++i+++i+++i 根据最大可读入原则应该解释成 j=++(i++)+(i++)+i而++(i++)这个是有错误 因为 i++只能作为右值,而前增运算符需要左值。 而j=(++i)+(++i)+(++i)在不同的编译器中结果是不样的比如tuborC中为 15 VC中为13(象楼上鱼鹰说的) , 这和编译器的结构有关,讨论起来没有多少意义 。 结合帖子的讨论我们再看例2的处理过程。 i=2; k= ++i + ( ++i) + (++i); 我们将这个表达式分为A、B、C三个部分,具体如下: i=2; k= ++i + ( ++i) + (++i); A B C 通常的理解 按照C语言的算术优先级的定义,这个表达式的计算次序是: (1)#include stdio.h main() { int i,k,j; i=2; k=++i+ (++i) + (++i); printf(\n 1. i=%d , k=%d \n ,i,k); i=2; k=++i+ (++i) + (++i) + (++i); printf(\n 2. i=%d , k=%d \n ,i,k); i=2; k=++i+ ++i + ++i; printf(\n 3. i=%d , k=%d \n ,i,k); i=2; k=++i+ ++i + ++i + ++i; printf(\n 4. i=%d , k=%d \n ,i,k); i=2; k=++i+ ++i +10+ ++i; printf(\n 5. i=%d , k=%d \n ,i,k); i=2; k=++i+ ++i + ++i + 10 + ++i; printf(\n 6. i=%d , k=%d \n ,i,k); getch(); } 输出结果是: 1. i=5 ,k=15 2. i=6 ,k=24 3. i=5 ,k=15 4. i=6 ,k=24 5. i=6 ,k=25 6. i=6 ,k=34 其中1. 的是原来程序的输出,2.的在原来程序的基础上增加一次‘++’运算产生的输出,3.、4.的输出在1.、2.的基础上验证括号的影响,5.、6.是在1.、2.的基础上验证中间有其他表达式的影响。 结论是:TC的处理是在一个表达式中先执行完所有同级的运算,再执

文档评论(0)

word.ppt文档 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档