int a=10,b=20,c=30,d; d=++a<=10||b-->=20||c++; printf("%d %d %d %dn",a,b,c,d);求高手分析此程序段

int a=10,b=20,c=30,d; d=++a<=10||b-->=20||c++; printf("%d %d %d %dn",a,b,c,d);求高手分析此程序段,第1张

主要运算部分:d=++a<=10||b-->=20||c++

首先执行++a<=10||b-->=20,a自增1后为11,则++a<=10为假,b为20,则b-->=20为真(b的自减运算在之后执行,故b的输出值将会是19)

至此++a<=10||b-->=20的结果为真,程序不再继续执行||c++的内容,故c的值不发生变化

最终输出结果为 11 19 30 1

if不是函数

是c++的一条语句而已

①if(条件)

{分支体}

这种

分支结构

中的分支体可以是一条语句,此时“{

}”可以省略,也可以是多条语句即复合语句。它有两条分支路径可选,一是当条件为真,执行分支体,否则跳过分支体,这时分支体就不会执行。如:要计算x的绝对值,根据绝对值定义,我们知道,当x>=0时,其绝对值不变,而x<0时其绝对值是为x的反号,因此程序段为:if(x<0)

x=-x

②if(条件)

{分支1}

else

{分支2}

这是典型的分支结构,如果条件成立,执行分支1,否则执行分支2,分支1和分支2都可以是1条或若干条语句构成。如:求ax^2+bx+c=0的根

分析:因为当b^2-4ac>=0时,方程有两个实根,否则(b^2-4ac<0)有两个共轭复根。其程序段如下:

d=b*b-4*a*c

if(d>=0)

{x1=(-b+sqrt(d))/2a

x2=(-b-sqrt(d))/2a

printf(“x1=%8.4f,x2=%8.4f\n”,x1,x2)

}

else

{r=-b/(2*a)

i

=sqrt(-d)/(2*a)

printf(“x1=%8.4f+%8.4fi\n”r,

i)

printf(“x2=%8.4f-%8.4fi\n”r,i)

}

③嵌套分支语句:其语句格式为:

if(条件1)

{分支1};

else

if(条件2)

{分支2}

else

if(条件3)

{分支3}

……

else

if(条件n)

{分支n}

else

{分支n+1}

嵌套分支语句虽可解决多个入口和出口的问题,但超过3重嵌套后,语句结构变得非常复杂,对于程序的阅读和理解都极为不便,建议嵌套在3重以内.

我刚才用VC++ 2010 测试了一下,果然是你说的这个答案。我调式了一下,看了一下运行的过程。下面给你解释一下:

其实关键是这句:

i=l=f=d=8/5

这里等号总是先算最右边, 8/5 两个整数相除,默认结果也是整数,所以就是 1.0。这个1.0依次赋值给左边的那些数,并且会自动类型匹配。所以就会出现你看到的结果了。

要想得到 1.6,可以改成这样:

i=l=f=d=(double)8/5

结果就是1,1,1.6,1.6 了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7774152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存