【错题】
1.执行如下程序,运行结果为?
#include <stdio.h>
int main()
{
int a = 10, b = 10, i;
for(i = 0; a > 8; b = ++i)
{
printf("%d %d", a--, b);
}
}
2.如下程序,执行次数为?
#include <stdio.h>
int main()
{
int m = -1;
do
{
m = m * m;
}while(!m);
}
3.如下程序,执行次数为?
#include <stdio.h>
int main()
{
int k = 5;
while(k = 0)
{
k = k - 1;
}
printf("%d\n", k);
}
4.
int x = 100, y = 200;
printf("%d\n", (x, y));
输出的结果为?
【同步练习1】
int x = 10, y = 3, z;
printf("%d\n", z = (x % y, x / y));
【同步练习2】
int x,y,z;
x = y = 1;
z = x++, y++, ++y;
printf("%d,%d,%d\n", x, y, z);
5.以下程序的输出结果为?
#include <stdio.h>
int main()
{
int k = 11;
printf("k = %d, k = %o, k = %x\n", k, k, k);
return 0;
}
【答案】
1. 第一次执行后:输出的a == 9, b == 10
第二次执行后:输出的a == 8, b == 1(因为循环条件b = ++i,将自增后的i赋给了b)
不再满足a > 8,跳出循环
故输出结果为:10 10 9 1
2.第一次执行后:m == 1
由于先执行循环再判断执行条件,而执行条件为while(!1) --> while(0)
while中的判断语句为假,因此退出循环。故只执行1次
3.因为循环条件中,while判断条件中的表达式为假的(while(k = 0))
因此不会执行循环。故执行0次
4.在C语言中,(x,y)是一个逗号表达式
逗号表达式将多个表达式按照从左到右的顺序执行,并返回最后一个表达式的值作为整个逗号表达式的值
故本式中:先执行表达式x,再执行表达式y,最后将表达式y的值作为整个逗号表达式的值返回
答案为:200
【同步练习1】 3
【同步练习2】 2 3 1(算术运算符优先级>赋值运算符>逗号运算符
因此先对三者分别计算,然后再进行赋值运算,最后进行逗号运算
所以,原式可以看作:(z = x++), y++, ++y; --> z == 1
5.【注】在借助%o、%x输出八进制、十六进制时,不需要在对应的输出结果前面添加0、0x
k = 11, k = 13, k = b