C语言:关于“条件”的常考题型
一、关系类
例1:int a=1,b=2,c=3;
if(b>c) printf("b大于c");
else printf("b小于c");
结果:b小于c
此类题型较简单,直接比较关系型条件所涉及的变量的大小即可。
但是需要注意条件(c>b>a)这种形式,很显然,在数学关系中,c>b>a是成立的,但是C语言中就要视情况而定。
对于条件c>b>a,C语言是分布计算的,先计算c>b,返回结果再与a进行比较。c>b结果是1,那么1在与a进行比较,1>1是错误的,所以条件c>b>a是错误的。
二、赋值、数值型
例2:int a;
while(a=125)
printf("%d",a);
}
结果:无限输出125
例3:
int a=125;
while(a)
printf("%d",a);
}
结果:无限输出125
解析:赋值、数值型条件,记住一句话:所有非零的数,都看做条件正确,只有0才看错条件错误。a=125,所以条件是正确的,会无限输出a的值。
三、逻辑运算型
例4:以下程序段的输出结果是
int a=-3,b=-4;
if(++a&&b++)
printf("%d,%d",a,b);
结果:-2,-3
解析:条件(++a&&b++),++a,a+1之后再使用a(即使用-2),-2为非零的数,所以b++要执行(直接使用b的值,即-4),整个条件转化为 1&&1,所以条件正确。a,b在条件中都执行了一次自增,所有a变成-2,b变成-3.
逻辑运算型条件,应注意短路性问题(可参考文章:)。
四、“等价”型
例5:填空,语句while(!e);中的条件!e等价于()
答案:!e!=0
解析:在C语言中,涉及条件等价的,其实就是指条件什么时候正确,这样就转化成了数值型条件,很显然,不等于0就是正确的条件。再举个例子while(e);中的条件e,等价于e!=0.
春考有约,你与大学的约定