1.题目:设int a,b;,表达式a=2,b=5,b++,a+b的值是 ?
- [ ] 分析:逗号表达式的结果是最右边(末尾)表达式的值
int a, b;
printf("%d\n", (a =2,b = 5,b++,a + b));//8
printf("a=%d,b=%d\n", a,b);
//a=2,b=6
//分析:a =2赋值成功,b = 5赋值成功
//接着进行计算:b++=5,执行完该语句b=6
//a+b=2+6=8
2.题目:设int a=1,b=2;,则执行a=b+2,a++,a+b;后a和b的值分别是 ?
- [ ] 分析:逗号运算符结合性:左结合,结果为末尾值
int a = 1, b = 2;
printf("%d\n", (a = b + 2, a++, a + b));
printf("a=%d,b=%d\n", a, b);
//分析:a=b+2=2+2=4,此时a赋值为4
//a++=4, 执行完该语句a=5
//a + b=5+2=7
//表达式值=7,a=5,b=2
3.题目:设int a=3,b=4;,则printf("%d,%d\n",(a,b),(b,a));的输出结果是 ?
- [ ] 分析:多个表达式取末尾表达式最末尾的数据值
int a = 3, b = 4;
printf("%d,%d\n", (a, b), (b, a));// 4,3
//分析:两个括号取末尾的值
//(a, b)=(3,4)取4为结果
//所以(b, a)=(4,3)取3为结果
4.题目:表达式 (d=35,*d * 4 ,d+5)最后的值为?
- [ ] 分析:d=3*5=15,此时d赋值为15
- [ ] d4=154=60并未赋值
- [ ] d+5=15+5=20
5.题目:
int x=1,y=2;
x=x+y; y=x-y; x=x-y;
则执行后x和y的值分别为?
- [ ] 分析:x=x+y→x=1+2=3此时x=3
- [ ] y=x-y→y=3-2=1 此时y=1
- [ ] x=x-y→x=3-1=2 此时x=2
6.题目:设int a,b;,表达式(a=2,b=5,--a+b)的值是?
- [ ] 分析:a=2,此时a赋值为2
- [ ] b=5,此时b赋值为5
- [ ] --a+b→1+5=6
7.题目:设int a=2,b=6,c=8;,表达式(a,b),(c,10)的值是?
int a = 2, b = 6, c = 8;
printf("%d\n", ((a, b), (c, 10)));//10
//括号将两个表达式括起来,看成一个大式子。
//所以只输出一个值,结果为最末尾的10
printf("%d,%d\n", (a, b), (c, 10));//6,10
//输出两个值需要去掉一层括号
//(a, b)=(2,6)该表达式输出6
//(c, 10)=(8,10)该表达式输出10
8.题目:设int a;,则表达式printf("%d,%d\n", (a=(2,3),a+1);的值是 ?
- [ ] 分析:a=(2,3)→a=3此时a赋值为3
- [ ] a+1→3+1=4表达式结果为4
9.题目:逗号表达式a=26,a**3,a+5的值是 ?
- 分析:a=2*6=12此时a赋值为12
- a**3=123=36 此时未赋值a还是12
- a+5=12+5=17
10.题目:设int a;执行表达式(a=1,2,3),a+1后a和表达式的值分别是 ?
- printf("%d\n", (a = 1, 2, 3), a + 1);若代码这样写,只能输出一个值输出的是前面表达式的值3
- printf("%d,%d\n", (a = 1, 2, 3), a + 1);加一个占位符,输出结果为3,2
int a;
printf("%d\n", ((a = 1, 2, 3), a + 1));
printf("a=%d\n", a);//a=1
//分析:(a = 1, 2, 3)此时a赋值为1,这个小表达式的结果为3
// a + 1=1+1=2,未赋值a的值还是1
//最终表达式结果为2
11.题目:设int a=12;,语句printf("%d\n",(a/3,a%3,a/10>0));
的输出结果是?
int a = 12;
printf("%d\n", (a / 3, a % 3, a / 10 > 0));
//分析:a/3=4未赋值
//a % 3=0未赋值
//a / 10 > 0 ,12>10为真,输出结果1
13.题目:设int x,y,t;执行语句t=10+(x=3,y=5,x-y);后t的值是?
- 分析:先看括号里的内容:x=3,y=5赋值成功
- x-y=3-5=-2
- t=10+(-2)=8
14.题目:
设int n=5;
执行语句printf("%d\n",(n=34,n5,n+1));后输出结果是 ?
- 分析:n=3*4=12,此时n赋值为12
- n*5=12+5=17 未赋值
- n+1=12+1=13表达式结果为13