c语言程序功能:交换a和b的值,a=88,b=90,要求互换完成后 a=90,b=88?

c代码-利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

我在tc2.0中运行了,a b 值实现了交换。求高手指点原理,请详细讲解程序的运行过程,谢谢。

把这句话拆分成三句话来看:

和编译器有关,TC是从左到右计算的,而VC是从右到左计算的。
拿TC分析,先是算a+b,即a+b=3+5=8,然后将a的值赋给b,此时b=3,最后得到a=8-3=5。于是a,b的值实现了交换。

应该属于未定义行为吧,lz还用TC,

第一、用临时变量的交换数值的方法比较保险:

第二、楼主的程序运行过程是这样的:
首先进行小括号里面的赋值语句,b = a,这样一来,b的值就等于了3,这样一个值已经换位成功了,但在运算过程中,式子里前面的b变量还是5,所以a = 3 + 5 - 3,因此,a就等于了5,这样,两个变量的数值交换成功。

1). 赋值运算服优先级最低,因此先求值等号右侧的表达式。
5). 用2)中计算的8减4)中得到的3,因此等号右侧为5
6). 将5)中计算得到的5赋值给a

按照 C99 的说法,这类表达式的结果是不确定的,也就是说依赖于求值顺序和编译器优化程度。不建议书写此类代码。

楼上都各位说得很清楚了!就是长表达式并没有规定执行顺序。在写代码时尽量避免这种依赖编译器行为的代码!

还是用一个意思明显的语句比较好

难道这个不是最好的?tmp 优化成寄存器变量。

这个结果和编译器有关,不同的编译器会有不同的结果。

呃,如果这是老师讲的,那就得建议楼主果断换老师了。

能实现交换的是因为b=a前,b的值是原值,上面的汇编代码很清楚

开发中这中语句是要坚决杜绝的,不管是阅读性,语言标准,还是便于调试上。。。。

以下是用户最新保存的代码

发布于: 19:58 发布于: 发布于: 16:08 发布于:

我要回帖

更多关于 c语言源程序文件的后缀是什么 的文章

 

随机推荐