评析:cp=c这个语句是将数组第0行的地址赋给了cp。cp+1使指针指向二维数组c的第一行;+(cp+3)是数组c的第三行的第0列的地址值;+(cp+1)+3是数组c的第一行第三列的地址值。
(40)下列选项中不能正确定义结构体的是_________。
A)typede fstruct B)struct color c1
{ int red; { int red;
int green; int green;
int blue; int blue;
}cOLOR; };
COLOR cl;
C)struct color D)struct
{ int red; { int red;
int green; int green;
int blue; int blue;
}cl; }cl;
答案:B
评析:将一个变量定义为标准类型与定义为结构体类型不同之处在于:后者不仅要求指定变量为结构体类型,而且要求指定为某一特定的结构体类型(例如,struct color),不能只指定结构体名。其中可以不出现结构体名,答案D就是缺省结构体名的情况。而变量名列表必须放在成员列表后面,所以B答案不能正确将c1定义为结构体变量。
(41)设有以下语句
char a=3,b=6,c;
c=a^b<<2:
则c的二进制值是_________。
A)00011011 B)00010100 C)00011100 D)00011000
答案:A
评析:“<<”是c语言中规定的左移运算符,n是异或运算符,所以,c的二进制值应为0001 1011。
(42)设有如下定义
struct ss
{ char name[10];
int age;
char sex;
}std[3],*p=std;
下列各输入语句中错误的是__________.
A)scanf(”%d”,&(*p).age); B)scanf(”%s”,&std.name);
C)scanf(”%c”,&std[O].sex); D)SCanf(”%c”,&(p->SEX));
答案:B
评析:在c语言中,结构体变量的引用有三种等价方式:
1、结构体变量.成员名;2、(*p).成员名;3、p->成员名。
因为std.name是字符数组名,-本身代表地址,其前面不应该使用“&”符号,所以选项B错误。
(43)设有
static char str[]=”Beijing”;
则执行
printf(%d\n”,strlen(strcpy(str,”China”)));
后的输出结果为__________。
A)5 B)7 C)12 D)14
答案:A
评析:在执行printf()函数前,数组str的长度是7,但是当使用strcpy()函数将新的值赋给str后,strlenr)函数返回的应当是现在的str字符串的字符个数,即是5。
(44)下列程序段中,不是死循环的是__________。
A)int i=100; B)unsigned k=0;
while(1) do
{ {
i=i%100+l: ++k;
if(i>=100)break; }
} while(k>=0);
C)for(;;); D)int s=3379;
while(s++%2+s%2)s++;
答案:A
评析:当表达式为非0值时,执行while语句中的内嵌语句,可用break语句跳出循环,用continue语句结束本次循环。选项A不是死循环,当i=100时跳出循环。选项c为空循环语句。
(45)以下程序的输出结果是________。
#include
main()
{ int i;
for(i=l;i<5;i++){
if(i%2)print引剃’);
else continue;
printf(”≠f”);
}
printf(”$\n”);