C语言程序问题(if语句)

来源:百度知道 编辑:UC知道 时间:2024/07/05 03:29:39
第一题如下:
main()
{
int a=1,b=2,c=3;
if(c=a)
printf("%d\n",c);
else
printf("%d\n",b);
}
输出结果是: 1

第二题如下:
main()
{
int a=3,b=4,c=5,t=99;
if(b<a&&a<c) t=a;a=c;c=t;
if(a<c&&b<c) t=b;b=a;a=t;
printf("%d%d%d\n",a,b,c);
}
输出结果是:4599

第三题如下(请附注说明break的作用,我的书上不是很明确):
main()
{
int i;
for(i=0;i<3;i++)
switch(i)
{
case 0:printf("%d",i);
case 2:printf("%d",i);
default:printf("%d",i);
}
//输出结果是:000122

第一题只会执行printf("%d\n",c);,这是初学者经常犯的错误,因为if(c=a)中的c=a是一个赋值语句将a的值赋给c,所以if的判断始终都是真,因此打印出来的值是1,此时C的值因为c=a而改为了1.如果你想判断c与a是否相等的话,应该使用if(c==a)。

第二题:if(b<a&&a<c) t=a;a=c;c=t;我不知道你是不是掉了花括号还是别的,因为b<a&&a<c判断为假,所以t=a将不会执行,此时执行a=c;c=t;之后得到a的值变为5,c的值变为99.接着执行if(a<c&&b<c)因为a<c&&b<c判断为真所以语句 t=b;被执行,然后执行b=a;a=t;得到最终结果。if语句如果不加符号"{}"的话只会执行紧跟其后的语句。

第三题:break的作用是结束本次循环开始下次循环。拿本例来说,第一次执行时i==0,过在case 2:前有break;语句的话,那么只会执行case 0:printf("%d",i);这一句,然后结束本次循环不会再执行下面的语句,开始下一次循环此时i的值就变为1了。

第一题 应该是 c==a , c =a 不是判断语句 是 赋值语句

第二题 没有加括号

if(b<a&&a<c) {t=a;a=c;c=t; }
if(a<c&&b<c) {t=b;b=a;a=t; }

第三题 , 不加break 的话, switch 语句就完全错误了。
switch 的标准格式就是要break;
不然的话 当i==0时, 执行完printf("%d",i); , 它会接着执行后面的两行 , 无视case 2 default:

第一题:if(c=a)?你是想写if(c==a)吧,(c=a)是赋值表达式,其作用是将a的值付给c。而该表达式的值是赋值号右边的值,也就是a的值1,所以判断的结果为真,执行“printf("%d\n",c);”,而变量c刚被赋值为a的值,所