(26)下面程序的输出结果是__________。
#define P1(x)printf(x)
main()
{
char d[]。\"p\";
Pl(d);
P1(\"d\");
}
A)pd B)d\"d\"
C)\"p\"d D)\"p\"\"d\"
答案:A
评析:带参数的宏定义的一般形式为:#define宏名(参数表)字符串
程序中的Pl(d);经宏置换后为printf(d);,所以输出字符串p;程序中的Pl(\"d\");经宏置换后printf(\"d\")。
(27)以下选项中,能定义s为合法的结构体变量的是__________。
A) typedef struct abc
{ double a;
charb[10];
}s;
B) struct
{ double a;
char b[10];
}s;
C) struct ABC
{ double a;
char b[10];
}
ABC s:
D) typedef ABC
{ double a;
char b[10];
}
ABC s:
答案:B
评析:定义一个结构体类型的变量,可采用三种方法:
①先定义结构体类型,再定义变量名;②在定义类型的同时定义变量:③直接定义结构类型变量,即不出现结构体名:选项B符合第三种定义方法。
(28)请读程序:
#include<stdiO.h>
#include<string-h>
main()
{
char*s1=\"AbCdEf\", *s2=\"aB\";
s1++; s2++;
printf(\"%d、n\",strcmp(sl,s2));
}
上面程序的输出结果是________。
A)正数 B)负数
C)零 D)不确定的值
答案:A
评析:strcmp(X1,X2)是串比较函数,本题中\"s1\"、\"s2\"分别表示这两个串中第一个字符的地址,s1++和s2++是将指针指向串的第二个字符,则*sl为\"bCdEf’’,*s2为\"B\"。在字符串比较中,大小的确定是各个字符串相应位置字符的ASCII码值的大小决定的, sl>s2,返回值为正数。
(29)请读程序:
#include<stdiO.h>
main()
{
int a=5,b=7,c=9;
printf(\"%d,%d,\",a,b,c);
printf(\"%d,%d,%d,\"a,b);
}
上面程序的输出结果是________。
A)5,7,9,5,7 B)5,7,5,7
C)5,7,不定,7,9 D)5,7,5,7,不定
答案:D
评析:printf函数按格式控制符的个数输出表列中对应的数据,若输出表列的个数大于格式控制符个数,则输出与格式控制符对应的输出表列的数据,输出表列中多的则省略;若格式控制符个数大于输出表列的个数,则输出与格式控制符对应的输出表列的数据,格式控制符多的部分输出的数据是随机的。
(30)请读程序:
#incIude<stdio.h>
func(int a,int b){
Int C;
c=a+b:
return C:
}
main(){
int x=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf(\"%d\n\",r);
}
上面程序的输出结果是________。
A)ll B)20
C)2l D)31
答案:C
评析:函数func()的作用是返回两个形参的和,第一个形参是x、y分别自减和自增后的和,其中(x--,y++,x+y)是一个逗号表达式,它的值应该等于x+y,所以整个表达式(x--,y++,x+y)的值为13,而第二个形参的值为8(根据语法规则,应当先使用,后自增),所以func()的返回值为13+8=21。
(31)请读程序:
#include<stdiO.h>
main()
{
int a,b;
for(a=l,b=1;a<=100;a十+){
if(b>=20)break;
if(b%3==1){b+=3;continue;}
b-=5:
}
printf(\"%d\n\",a);
}
上面程序的输出结果是_________。
A)7 B)8
C)9 D)10
答案:B
评析:break语句的作用是用于跳出循环体; continue语句的作用是用于跳出本次循环。执行第一次循环时,(b%3==1)为真,b=4,继续下一次循环,如此反复,当b=22时结束循环,共循环8次,即a=8。
(32)设变量x为float型且已经赋值,则以下语句中能够将x中的数值保留到小数点后面两位,并将第三位四舍五入的是__________。
A)X=X*100+0.5/100.0
B)x=(X*100+0.5)/100
C)x=(int)(x*100+0.5)/100.0
D)x=(x/100+0.5)*100.0
答案:C
评析:本题通过算术表达式的运算实现小数位数保留两位并四舍五入的操作,其中(int)(x*100+0.5)是指将(x*100+0.5)的值强制转换成整型。
(33)请读程序片段(字符串内没有空格字符):
printf(\"%d\n\",strlen(\"ATS\n012\1\\\"));
上面程序片段的输出结果是____________。
A)ll B)10
C)9 D)8
答案:C
评析:这个语句的目的是输出\"ATS\n012\1\\\"这个串的长度,在串中\"\\\"代表一个\"\\",而\"\1\"代表数字1,也占一个字符,\"\n\"是回车换行符,也占一个字符,加上A、T、s、0、l、2,共9个字符。