国家二级(C语言)机试模拟试卷505
选择题
1.假定已建立以下数据链表结构,且指针p和q已指向如下图所示的结点:
(D)
A. (*)p.next=(*q).next;free(p)
B. b=q—>next;free(q)
C. p=q;free(q)
D. p—>next=q—>next;free(q)
解析:要删除结点q,应首先由q的上一个结点p的指针域指向q的指针域所指向的结点,即p—>next=q—>next;,然后才能释放结点q,即free(q)。
2.下列叙述中错误的是( )。(A)
A. 用户所定义的标识符允许使用关键字
B. 用户所定义的标识符应尽量做到“见名知意”
C. 用户所定义的标识符必须以字母或下划线开头
D. 用户定义的标识符中,大、小写字母代表不同标识
解析:在C语言中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须为字母或下划线,凡是要求标识符的地方都必须按此规则命名。在C语言的标识符中,大写字母和小写字母被认为是两个不同的字符。在选择标识符时,应注意做到“见名知义”,即选择具有一定含义的英文单词或汉语拼音作为标识符,以增加程序的可读性。
3.若变量都己正确说明,则以下程序段输出结果为( )。
#inc1ude
main()
{char a=’a’;
int b=2;
printf(a>b?\\(D)
A. ***a=3
B. ###b=3
C. ***a=3##b=5
D. 全部错误
解析:本题考查printf函数的格式和三目运算符“?:”的使用。printf函数中格式说明符之前插入的任何字符都原样输出。本题中“a>b”为真,所以返回 “***a=97”。
4.以下关于逻辑运算符两侧运算对象的叙述中正确的是( )。(A)
A. 可以是任意合法的表达式
B. 只能是整数0或非0整数
C. 可以是结构体类型的数据
D. 只能是整数0或1
解析:C语言的逻辑运算符比较特别,它的操作数没有明确的数据类型,可以是任意合法的表达式,所以选择A。
5.有以下程序:
#include
main()
{ int i,j,k,a=5,b=6;
i=(a==b)?++a:–b;
j=a++;k=b;printf(\\(B)
A. 7,6,5
B. 5,5,5
C. 7,5,5
D. 5,6,5
解析:条件表达式i=(a==b)?++a:–b;中先执行a==b,值为假,根据三元运算符语法规则,执行–b,此时b为5,赋给i,i=5;j=a++,将a=5先赋给j,再进行a++,j=5,a=6,k=b=5,故最后输出的是5,5,5。
6.以下数组定义中错误的是( )。
D
解析:D选项中x[2][3]定义的是一个两行三列的二维数组,而在给数组元素赋值时却赋成了三行,所以错误。
7.若有定义int a[5],*p=a;则正确引用数组元素的是( )。(D)
A. *&a[5]
B. *a+2
C. *(p+5)
D. *(a+2)
解析:本题考查通过指针引用数组元素。用指针引用数组有以下3种形式:①(p+n)与(a+n)表示数组元素a[n]的地址:②*(p+n)与*(a+n)表示数组元素a[n];③p[n]=*(p+n),都表示数组元素a[n]。
选项A、B没有这种引用形式;选项C,*(p+5)是引用数组的第6个元素,而数组一共有5个元素,出现越界;选项D,*(a+2)引用数组的第3个元素。
8.有以下程序:
#include<stdio.h>
main()
{
char c1,c2;
c1=’A’+’8’一’4’;
c2=’A’+’8’一’5’;
printf(\\(A)
A. E 68
B. D 69
C. E D
D. 输出无定值
解析:C语言中每个字符都对应一个ASCII码值,该值可以用来运算。本题中main函数将字符A经过加4和加3运算后分别赋值给c1、c2,然后将c1按字符格式输出,c2按整型格式输出。
9.有以下程序:
#include
main()
{ int a[]={2,3,5,4},i;
for(i=0;i<4;i++)
switch(i%2)
{ease 0:switch(a[i]%2)
{ ease 0:a[i]++;break;
case 1:a[i]一一;
}break;
ease 1:a[i]=0;
}
for(i:0;i<4;i++)printf(“%d”,a[i]);prinff(“\n”);
}
程序运行后的输出结果是( )。(D)
A. 0 3 0 4
B. 2 0 5 0
C. 3 3 4 4
D. 3 0 4 0
解析:第一次循环i为0,i%2为0,执行switch(a[0]%2)中的case 0语句后内容即a[0]++,a[0]的值变成3;第二次循环i的值为1,i%2为1,执行ease 1:a[i]=0;所以a[1]的值变成0;第三次循环i的值为2,i%2为0,执行switch(a[2]%2)中的case 1语句后的内容a[2]一一,a[2]的值变成4;第四次循环i的值为3,i%2为1,执行case 1:a[i]=0;所以a[3]的值变成0。
10.以下程序的输出结果是( )。
#inc1ude
main()
{ int a[3][3]={0,1,2,0,1,2,0,1,2},i,j,s=1;
for(i=0;i<3;i++)
for(j=i;j<=i;j++)
s+=a[i][a[j][j]];
printf(\\(B)
A. 3
B. 4
C. l
D. 9
解析:当外层循环为i时,内层循环i只能取j—i,所以s+=a[0][a[j][j],其实就是s+=a[i][a[i][i]],当i=0时,s=s+a[0][a[0][0]]=s+a[0][0]—1,当i=1时,s=s+a[1][a[1][1]]=s+a[1][1]=1+1=2,当1=2时,s=s+a[2][a[2][2]]=s+a[2][2]=2+2=4。
11.在C语言中,变量的隐含存储类别是( )。(A)
A. auto
B. stati
本文档预览:3600字符,共17725字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载