作业帮 > 综合 > 作业

C语言赋值表达式问题:若定义有语句:int a=3,b=2,c=1; 以下选项

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/22 07:56:12
C语言赋值表达式问题:若定义有语句:int a=3,b=2,c=1; 以下选项
若定义有语句:int a=3,b=2,c=1; 以下选项中错误表达式是()
a)a=(b=4)=3;
b)a=(b=4)+c;
c)a=b=c+1;
d)1+(b=c=4);
A为什么错?
谭浩强书中(a=3*5)=4*3又为什么对?
测试代码:
#include "stdio.h"
#include "conio.h"
main()
{
int a=3,b=2,c=1;
a=(b=4)=3;
printf("a=%d,b=%d,c=%d\n",a,b,c);
a=(b=4)+c;
printf("a=%d,b=%d,c=%d\n",a,b,c);
a=b=c+1;
printf("a=%d,b=%d,c=%d\n",a,b,c);
1+(b=c=4);
printf("a=%d,b=%d,c=%d\n",a,b,c);
(a=3*5)=4*3;
printf("a=%d,b=%d,c=%d\n",a,b,c);
getch();
}
测试平台:
【Dev_C++】 顺利通过
结果:
a=3,b=3,c=1
a=5,b=4,c=1
a=2,b=2,c=1
a=2,b=4,c=4
a=12,b=4,c=4
【TC2.0测试】
a=(b=4)=3;
(a=3*5)=4*3;
2句话有语法错误!
这个怎么说呢?其实就是赋值等号从右往左看就可以了.主要的原因是【C的标准和编译器】的实现不同吧.C89,99,11都有很多变化.而且不同的编译器对一些处理是不同的.
比如一个函数的多个参数含有表达式的话,是从左往左呢还是从右往左计算都有差异的.
如:int fun1(int a,int b,int c)
调用的时候:fun1(i++,++i,i++) 不同的编译器有不同处理.
再说大一点:不同的语言对同一功能也是不同的.
就说求模函数.C,Java,Javascript ,VB,C#,C++,PHP,Go等在负数求余的时候选择的处理是不一样的.-7.2%-3.8 -7.8%-3.2,-7.8%-3.8,-7.2%-3.2 楼主可以好好测试和琢磨下.
总结:这种题目总的来说就考试无厘头的试题了.实际项目和开发中我们也会老老实实在分成多条语句来写.考试的时候楼主就不要纠结了.
选A吧.不能将常量3赋值给一个表达式(非变量),b=4已经是个表达式了,既然是表达式就只有真假(即True和False)
楼主还记得这样的考题吗:
int a=3,b=2,c=1;
if(b=3)
{
printf("True");
}
else
{
printf("False");
}
所以本题,考试就选A!
楼主好运!