C语言赋值语句的判断
这是一个选择题,我也不知道他有没定义,选项如下,问哪个是不合法的赋值语句?
A. t++;
B. n1=(n2=(n3=0));
C.k=i==j;
D.a=b,c=1
[解决办法]
不懂
A, 合法,但不是赋值语句?
[解决办法]
语句语句肯定是以分号结束,所以我绝对最后一个不对
[解决办法]
C不符合赋值语句 ==
[解决办法]
A. t++;
本质是是给t赋了上个加1的新值,所以它是合法的赋值语句
B. n1=(n2=(n3=0));
这也是一个赋值语句,先把0赋给n3,再把表达式n3=0的值赋给n2(C和C++中表达式是有值的,很久很以前,好像C语言也叫表达式语言,只是后来大家都淡忘了,以至于都没有这个概念了,等号表达式值为等号左边的值,同理的还有++、--语句,++i和i++中变量i的值都加了1,相同,但表达式的值不同++i表达式的值为i+1,i++表达式的值 为i),然后再给n2赋值,再给n1赋值,所是是赋值语句
C.k=i==j;
==的优先级高于=号,所以这是把表达式i==j的值赋给k,即k会得到一个bool值,切记如果是(k=i)==j则是条件表达式,不是赋值语句(虽然也有赋值操作)
D.a=b,c=1
如果有分号的话这个也是赋值语句,可惜的是它少了分号,语法错误,所以不是语句
做C语言的是就是要考眼力和分析字眼的能力,这些虽然在真正的程序开发过程中都是些无聊的,没有意义的题,但中国教育就这样,真正有用的不考,没有任何价值的东西故意拿来当陷阱给学生做,想当初我为了考二级C为这些无聊的东西死了多少脑细胞,百思不得其解,现在想起来,真的被这教育坑的够多的
[解决办法]
d 。
[解决办法]
我也觉得是D
[解决办法]
a,b都有警告:
#include <stdio.h>
main()
{
int a,b,c,t;
a=b;
t++;
printf("%d\n",a);
printf("%d\n",c);
printf("%d\n",t);
}
对于b;正确
#include <stdio.h>
main()
{
int n1,n2,n3=0;
n1=(n2=(n3=0));
printf("%d\n",n1);
}
对c可以验证: 正确
#include <stdio.h>
main()
{
int k,i=2,j=2;//i=2,j=2;
k=i==j;
printf("%d\n",k);//i==j时,输出1, i !=j时,输出0
}自己可以选了吧
[解决办法]
A 表示在此语句之后,t= t+1; 应该是合法赋值语句
B 先把0赋给n3,再把n3的值(0)赋给n2,最后再把n2的值(0)赋给n1,应该是合法赋值语句
C i == j 为真,把1赋给k,否则把0赋给k, 应该也是合法赋值语句
D 没有分号 不是合法赋值语句
[解决办法]
A不是赋值语句,是自增语句;
D是赋值表达式,但不是赋值语句,因为缺;
任何表达式加上;即成语句。
[解决办法]
分号,d