printf(“%-5.2f\\n”,x); }
以上程序输出的结果是________。
A)123.4 B)123.5 C)123.45 D)123.46 答案:D
评析:f格式符,用来输出实数,以小数形式输出。“%-m.nf”的含义是:输出数据共占m列,其中n位小数,如果输出位数小于m。则右端补空格。如果总长度大于列数,则按实际情况四舍五入输出。
(16)下面语句的输出结果是________。
Printf(“%d\n”,strlen(“\t\”\065\xff\n”));
A)14 B)8
C)5 D)输出项不合法,无正常输出 答案:C
评析:在c语言中,以“\”开头的字符均为转义字符,其中“\”后可跟l~3位八进制数或在“\”后跟字母x及l~2位十六进制数,以此来代表一个特定的字符。
(17)下列程序的输出结果是________。 main()
{ int a=0,b=0,c=0;
if(++a>0lI++b>0)++c;
printf(“\na=%d,b=%d,c=%d”,a,b,C); }
A)a=0,b=0,c=0 B)a=l,b=l,c=1
C)a=l,b=O, c=I D)a=0, b=1.c=1 答案:C 评析:
“︱︱”是或运算,它有个“短路”的特点需特别注意,当“︱︱”运算符左边的表达式的值为真时,则程序就不再对“︱︱”右边的表达式的值进行运算,而是使得整个表达式的值直接为真。
(18)下列程序的输出结果是_________。 Main() { int i;
for(i=1;i+l;i++)
{ if(i>4){printlf(”%d”,i++);break;} }
printf(“%d”,i++); }
A)55 B)56
C)程序错误,没有输出 D)循环条件永远为真,死循环 答案:B
评析:本程序中有个for循环,但注意到for循环的条件是“i+l”,也就是只要i+l的值为真(非零值均为真),就执行循环。当i=l的时,i+l的值为真,判断if条件不成立,执行i++,输出i的值为5。
(19)下列程序的输出结果是_________。
#define A 100 main()
{ int i=O,sum=O;
do{ if(I==(i/2)*2)continue;
sum+=i;
}while(++i
printf(“%d\n”,sum); }
A)2500 B)2050 C)4 D)O 答案:A
评析:本题程序的功能是求1到_99之问(包括1和99)所有奇数之和。程序中的while循环的终止条件为++i=100,在while循环体内,如果i是偶数,则执行continue,跳过这一次循环,执行下一次循环,否则求和。最后输出的值是1到99之间(包括l和99)所有奇数之和(1+99)*50/2=2500。
(20)下列程序的输出结果是_________。 main()
{ int I=3; switch(i)
{ case 1:
case 2:printf(”%d”,i); case 3:
case 4:break;
default:printf(”OK”); } }
A)0 B)3 C)OK D)没有任何输出 答案:D
评析:在题中,i的值为3,由于“case 3:”后面没有break语句,所以继续向下执行“case 4:”后面的语句,由于“case 4:”后面的语句为break强行退出switch语句,所以,本题没有任何输出。
(21)下列程序执行后的输出结果是________。
main()
{ int m[][3]={1,4,7,2,5,8,3,6,9};
int i,k=2:
for(I=0;i<3;i++)
{printf(”%d”,m[k][i]);} }
A)456 B)258 C)369 D)789 答案:C
评析:根据二维数组的定义得出:m[O][O]=1,m[O][1]=4,m[O][2]=7,m[1][0]=2,rail][1]=5,m[1][2]=8,m[2][0]=3,m[2][l]=6,m[2][2]=9,所以本题的输出是第3行的值m[2][0],m[2][1],m[2][2],即369。
(22)设已定义洱口k为int类型变量,则以下for循环语句_________。
for(i=0;k=-1,k=1;i++,k++)
printf(”****\n”);
A)判断循环结束的条件不合法 B)是无限循环
C)循环一次也不执行 D)循环只执行一次 答案:B
评析:本题定义了一个for循环,循环变量是i,但由于本题并没有设置循环条件,所以循环的条件永远默认为真,即无限次执行循环。