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()
{ intI=3;
switch(i)
{case1:
case2:
printf(”%d”,i);
case3:
case4:
break;
default:
printf(”OK”);
}
}
A)0 B)3 C)OK D)没有任何输出
答案:
D
评析:
在题中,i的值为3,由于“case3:
”后面没有break语句,所以继续向下执行“case4:
”后面的语句,由于“case4:
”后面的语句为break强行退出switch语句,所以,本题没有任何输出。
(21)下列程序执行后的输出结果是________。
main()
{ intm[][3]={1,4,7,2,5,8,3,6,9};
inti,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,但由于本题并没有设置循环条件,所以循环的条件永远默认为真,即无限次执行循环。
(23)下面程序的输出结果是___________。
unsignedfun(unsignednum)
{ unsignedk=1;
do{
k*=num%lO;
num/=lO;
}while(num);
return(k);
}
main()
{ unsignedn。
26;
printf(”%d\n”,fun(n));
}
A)0 B)4 C)12 D)无限次循环
答案:
C
评析:
本题定义了一个fun函数,用于num求和,具体执行过程如下:
num=26:
k=k*(num%10)=1*(26%10),所以k=6,num=num/10=2;
num=2:
k=k*(num%10)=6*(2%10),所以k=12,num=num/lO=O;
num=O:
while条件不成立,所以返回k的值12.
(24)已知字母A的ASCII码值是65,字母a的ASCII码值是97,以下程序_______。
main()
{ chara=‘A’;
intb=20;
printf(“%d,%o”,(a=a+a,a+b,b),a+‘a’-‘A’,b);
}
A)表达式非法,输出零或不确定值
B)因输出项过多,无输出或输出不确定值
C)输出结果为20,141
D)输出结果为20,141,20
答案:
C
评析:
本题中首先输出逗号表达式“a=a+a,a+b,b”的值,即20。
然后以八进制的形式输出a+‘a’-‘A’的值为97对应的八进制数141,由于最后一个表达式b没有对应输出格式的输出项表列就不会输出。
(25)C语言函数返回值的类型是由__________决定的。
A)return语句中的表达式类型 B)调用函数的主调函数类型
C)调用函数时临时 D)定义函数时所指定的函数类型
答案:
D
评析:
函数值的类型应当是在定义函数时指定的。
在定义函数时对函数值说明的类型一般应该和return语句中的表达式类型一致,如果不_致,则以函数类型为准,即函数类型决定返回值的类型。
(26)下列程序执行后输出的结果是___________。
intd=l:
fun(intp)
{ intd。
5;
d+=p++;
printf(”%d,”,d);
}
main()
{ inta=3;
fun(a);
d+=a++:
printf(”%d\n”,d);
}
A)8,12 B)9,13 C)8,4 D)9,5
答案:
C
评析:
本题执行过程如下:
首先调用fun函数,使得实参a的值3传递给形参p,得到局部变量d=8,打印出局部变量d的值8;返回主函数执行“d+=a++”,此处的d为全局变量,所以d=1+3=4(由于本题是值传递,所以在函数fun中对p值的改变并不能引起a的改变),故本题的输出是8,4。
(27)已知下面的程序段,正确的判断是_________。
#defineA3
#defineB(A)((_A+1)‘a)
inta=3:
……
X=3*(A+B(7));
A)程序错误,不允许嵌套定义 B)X=93
C)X=8l D)程序错误,宏定义不允许有参数
答案:
C
评析:
本题的宏定义是合法的,宏定义展开为3*(3+((A+1)*a))=3*(3+((7+1)*3))=81。
(28)定义int*swap()指的是_______。
A)一个返回整型值的函数swap()
B)一个返回指向整型值指针的函数swap()
C)一个指向函数swap()的指针,函数返回一个整型值
D)以上说法均错
答案:
B
评析:
一个函数可以带回一个整型值、字符值、实型值等,但也可以带回指针型数据,即地址。
本题的定义中,包括括号和·号,由于f)优先级高于t。
故它是一个返回整型指针的函数。
(29)以下程序段的输出结果是__________。
main()
{ chars1[10],s2[10],s3[10];
scanf(”%s”,s1);gets(s2);gets(s3);
puts(s1);puts(s2);puts(s3);
}
输入数据如下:
(此处代表回车符)
aaa
bbb
A)aaa B)aaa C)aaa\0bbb\0 D)aaabbb
bbb
bbb
答案:
B
评析:
scanf是标准输入函数,在输入字符串aaa时,实际的内容为“aaa\0”,“\0”是由系统自动加入的;gets的功能是从终端读入一行字符,即一直读到换行符为止,并由系统自动以“\0”代替换行符。
(30)下述函数功能是________。
Intfun(char*x)
{ char*y=x;
while(*y++);
returny-x-l;
}
A)求字符串的长度 B)求字符串存放的位置
C)比较两个字符串的大小 D)将字符串x连接到字符串y后面
答案:
A
评析:
在函数体内定义一字符型指针并指向形参,然后遍历其中各字符直到NULL,最后返回字符串首尾地址的差值,即字符串的长度。
(31)以下程序的输出结果是_________。
main()
{charstr[12]={‘s’,‘t’,‘r’,‘i’,‘n’,‘g’};
printf(”%d\n”,strlen(str));
}
A)6 B)7 C)ll D)12
答案:
A
评析:
在c语言中,字符串的长度是其首字符到NULL(不含)字符的总字符个数。
本题定义字符数组str的同时,对第7个元素,由系统自动添加上“\0”,故字符串的长度为6。
(32)请读程序段:
charstr[]=”ABCD”,*p=str;
printf(”%d\n”,*(p+4));
程序段的输出结果是_________。
A)68 B)0
C)字符‘D’的地址 D)不确定的值
答案:
B
评析:
在对字符数组赋字符串值时,系统会自动在字符串的末尾加上一个字符串结束标志“\0”,故指向字符数组的指针p的+(p+4)的值为“\0”。
由于“\0”的编码值就是0,所以本题输出为0。
(33)若有定义:
inta[4][10];,则以下选项中对数组元素a[i][j]引用错误的是________。
(0<=i<4,0<=j<10)
A)*(&a[O][O]+10*i+j) B)*(a+i)+j
C)*(*(a+i)+j) D)*(a[i]+j)
答案:
B
评析:
本题中选项B是错误的引用,*(a+i)+j只代表了a[i][i]的地址。
(34)设有以下语句:
charstrl[]=”string”,str2[8],。
str3,。
str4=”strin∥;
则__________不是对库函数的正确调用。
A)strcpy(strl,”HELLOl”); B)strcpy(str2,”HELL02”);
C)strcpy(str3,”HELL03”); D)strcpy(str4,”HELL04”);
答案:
C
评析:
c语言中:
sgcpy(stl,st2);,其两个参数均为字符指针或字符数组,选项c中的目的串指针str3没有指向具体有效的存储单元,故是错误的调用。
(35)请读程序:
#include
#include
main()
{ char*sl=”AbCdEf”,*s2=”aB”;
s1++;s2++;
printf(”%d\n”,strcmp(s1,s2));
}
上面程序的输出结果是___________。
A)正数 B)负数 C)零 D)不确定的值
答案:
A
评析:
函数strcmp的功能是比较字符串s1和s2,如果sl>s2,则返回个正数;如果sls2,所以函数的值为正数。
(36)下面程序的输出是_________。
chars[]=”ABcD”;
main()
{ char*p;
for(p=s;p
printf(”%s\n”,p);
}
A)ABCD B)A C)D D)ABCD
BCD B C ABC
CD C B AB
D D A A
答案:
A
评析:
在第一次执行for循环时,字符数组的首地址赋给了指针变量p,使得指针变量p指向了s的首地址,输出p所指向的字符串;第二次执行for循环时,p值增加1,p指向了s的第二个元素输出BCD;第三次输出CD;第四次输出D;直到p指向字符串的结束字符“\0”,for循环终止执行。
(37)以下程序输出的结果为__________。
main()
{ char*alpha[6]={“ABCD”,EFGH”,”IJKL”,”MNOP”,”QRST”,”UVwX”};
char**p;
inti:
p=alpha;
for(I=0;i<4;i++)
printf(”%s”,p[I]);
}
A)ABCDEFGHIJKL B)ABCD
C)ABCDEFGHIJKLMNOP D)AEIM
答案:
C
评析:
alpha[O]指向“ABCD”的首地址;alpha[1]指向“EFGH”的首地址;alpha[2]指向“IJKL”的首地址,依此类推。
当执行p=alpha后,p指向指针数组alpha的首地址。
for循环中输出了4个字符串。
(38)下面程序的输出结果是_________。
#include
main()
{ char*p[]={”B00L”,”0PK”,”H”,”SP”};
inti:
for(i=3;i>=0;i–,i–)
printf(“%c”,*p[i]);
printf(”\n”);
}
A)SO B)SP C)SPOPK D)SHOB
答案:
A
评析:
p[0]存放的是“BOOL\0”的首地址;p[1]存放的是“OPK\0”的首址等。
在printf语句中输出的+p[I]表示p[i]字符串的第一个字符。
在for循环中,i的初值为3,那么输