C语言中的概念题 二

来源:百度知道 编辑:UC知道 时间:2024/09/18 05:53:08
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=c;a=t;
printf("%d%d%d",a,b,c);
}
这段函数的输出结果是什么?我算到的是455,但是答案是4599?
想问下是不是题目有问题?还是我的思路有问题?

2.如果程序在编译时出现这段话:if(x>y&y!=0);为什么不会产生错误信息呢?中间那个&不是不对么?

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=c;a=t;
printf("%d%d%d",a,b,c);
}

输出结果和你自己算的结果不同是这样的写法误导了你
if(b<a&&a<c) t=a;a=c;c=t;
这样写等价于
if(b<a&&a<c) {t=a;} a=c;c=t;

if后面可以跟单个语句,也可以是几个语句,要是要跟几个语句的话,就必须加上{},否则编译器会认为if后面就是单个语句了
所以跟你的想法不同。
由于第一个if的条件不满足,所以紧跟if后面那个语句没有执行(这条语句是被编译器认为是if块里的),后面两个语句执行了(不属于if语句块,所以会执行)

这样的话就不是你想的那个结果了

而且你给出的输出输出也不对,应该是49999,不是4599

2.如果程序在编译时出现这段话:if(x>y&y!=0);为什么不会产生错误信息呢?中间那个&不是不对么?
这句话没有错,在C语言中是完全允许的
在C语言中没有逻辑类型的变量,是用整形值来代替的,并规定:
如果把非0值作为条件则表示“真”,而0值表示“假”
另外,C中逻辑表达式的值一定只有两个值0和1,0表示“假”,1表示“真”

因此只要if()括号里面是个整型表达式就行,并没有规定表达式一定是逻辑表达式,当表达式值非0时,则表示条件为真,否则为假。
这里x>y&y!=0中的子表达式执行顺序是这样的
x>y
y!=0
最后将上面两表达式的结果按位与
这样得到的结果就是if里面条件表达式的结果
你的本意可能是觉得
if(x>y&&y!=0)才对,但C语言没有这样的规定,所以上面那个表达式能通过编译

因为