C语言赋值表达式问题:若定义有语句:int a=3, b=2, c=1; 以下选项
若定义有语句:inta=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为什么...
若定义有语句: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又为什么对? 展开
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又为什么对? 展开
4个回答
展开全部
测试代码:
#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!
楼主好运!
#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!
楼主好运!
展开全部
赋值语句的对象只能是变量,而不是表达式 b=4已经是个表达式。若换成a=b=3,就对了。
对于B,最后的值:a=2,b=2,c=1
对于C,整个语句是个赋值语句,里面又嵌套了个b=4的赋值语句,所以,最后的结果是a=5,b=4,c=1
对于D,解法同C,a=5,b=4,c=4.
所以A 是错误滴。
对于B,最后的值:a=2,b=2,c=1
对于C,整个语句是个赋值语句,里面又嵌套了个b=4的赋值语句,所以,最后的结果是a=5,b=4,c=1
对于D,解法同C,a=5,b=4,c=4.
所以A 是错误滴。
追问
谭浩强书中(a=3*5)=4*3又为什么是对?
而且我带入vc中A答案可以运行通过。
这还是真题,疯了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
A错了,不能将3赋值给表达式,b=4已经是个表达式了,既然是表达式就只有真假(即0和1),
而 (a=3*5)=4*3 中的a=3*5 是赋值
而 (a=3*5)=4*3 中的a=3*5 是赋值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我在vc++6.0中粘贴你的代码,编译运行都通过
#include <stdio.h>
int main()
{
int a=3, b=2, c=1;
a=(b=4)=3;
a=(b=4)+c;
a=b=c+1;
1+(b=c=4);
printf("%d %d %d\n",a,b,c);
return 0;
}
结果2 4 4
#include <stdio.h>
int main()
{
int a=3, b=2, c=1;
a=(b=4)=3;
a=(b=4)+c;
a=b=c+1;
1+(b=c=4);
printf("%d %d %d\n",a,b,c);
return 0;
}
结果2 4 4
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询