1、国家二级 C 语言程序设计机试(选择题)模拟试卷 2 及答案解析(总分:80.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列叙述中正确的是( )。(分数:2.00)A.一个算法的空间复杂度大,则其时间复杂度也必定大B.一个算法的空间复杂度大,则其时间复杂度必定小C.一个算法的时间复杂度太,则其空间复杂度必定小D.算法的时间复杂度与空间复杂度没有直接关系2.下列叙述中正确的是( )。(分数:2.00)A.循环队列中的元素个数随队头指针与队尾指针的变化而动态变化B.循环队列中的元素个数随队头指针的变化而动态变化C.循环队列中的元素个数随队尾指针的变化而动态变化D.
2、以上说法都不对3.一个栈的初始状态为空。现将元素 1,2,3,A,B,C 依次入栈,然后再依次出栈,则元素出栈的顺序是( )。(分数:2.00)A.1,2,3,A,B,CB.C,B,A,1,2,3C.C,B,A,3,2,1D.1,2,3,C,B,A4.一棵二叉树中共有 80 个叶子结点与 70 个度为 1 的结点,则该二叉树中的总结点数为( )。(分数:2.00)A.219B.229C.230D.2315.对长度为 10 的线性表进行冒泡排序,最坏情况下需要比较的次数为( )。(分数:2.00)A.9B.10C.45D.906.下列各项中,对对象概念描述正确的是( )。(分数:2.00)A.对
3、象间的通信靠消息传递B.对象是名字和方法的封装体C.任何对象必须有继承性D.对象的多态性是指一个对象有多个操作7.下列各项中,不属于软件设计阶段任务的是( )。(分数:2.00)A.软件总体设计B.算法设计C.制订软件并确认测试计划D.数据库设计8.一般情况下,当对关系 R 和 S 进行自然连接时,要求 R 和 s 含有一个或者多个共有的( )。(分数:2.00)A.记录B.行C.属性D.元组9.下列各项与栈结构有关联的是( )。(分数:2.00)A.数组的定义域使用B.操作系统的进程调度C.函数的递归调用D.选择结构的执行10.有两个关系 R 和 T 如下: (分数:2.00)A.选择B.交
4、C.投影D.并11.有以下定义:struct dataint i;char c;double d; x;以下叙述中错误的是( )。(分数:2.00)A.x 的内存地址与 xi 的内存地址相同B.struct data 是一个类型名C.初始化时,可以对 x 的所有成员同时赋初值D.成员 i、c 和 d 占用的是同一个存储空间12.以下函数的功能是计算 a 的 n 次方并作为函数值返回: double fun(double a,int n) int i;double s=10; for(i=1;isex);17.C 语言编译程序的功能是( )。(分数:2.00)A.执行一个 C 语言编写的源程序B
5、.把 C 源程序翻译成 ASCI码C.把 C 源程序翻译成机器代码D.把 C 源程序与系统提供的库函数组合成一个二进制执行文件18.有以下程序: #include int fun(int n) if(1n return fun(n 一 1)+n; else return 0; main() prinff(“dn”,fun(3); 程序的运行结果是( )。(分数:2.00)A.4B.5C.6D.719.有以下程序: #include main() int sum=0,x=5; d0sum+=x; while(!一一 x); printf(“dn”,sum); 程序的运行结果是( )。(分数:2.
6、00)A.0B.5C.14D.1520.有以下程序: #include #include typedef struct char name9; char sex; float score2;STU; void f(STU*a) strcpy(a 一name,“Zhao”); a 一sex=m; a 一score1=900; main() STU c=“Qian”,f,95,920,*d=&c; f(d); prinff(“s,c,2Of,2ofn”, d 一name,c.ex,c.score0,c.score1); 程序的运行结果是( )。(分数:2.00)A.Qian,f,95,92B.Zh
7、ao,f,95,90C.Zhao,m,95,90D.Zhao,f,95,9221.关于 C 语言程序的下列说法中,正确的是( )。(分数:2.00)A.函数的定义可以嵌套,但函数的调用不可以嵌套B.函数的定义不可以嵌套,但函数的调用可以嵌套C.函数的定义和调用均不可以嵌套D.函数的定义和调用均可以嵌套22.执行以下程序段后,s 的值为( )。 int a=1,2,3,4,5,6,7,8,9,s=0,k; for(k=0;kA.13B.16C.17D.4523.有以下程序: #include #define M 5 #define f(x,y)x*y+M main() int k; k=f(2,
8、3)*f(2,3);printf(“dn”,k); 程序的运行结果是( )。(分数:2.00)A.22B.41C.100D.12124.有以下程序: #include main() char ch=Z; ch=(ch 一A+1)26+A; putchar(ch); prinff(“n”); 程序的运行结果是( )。(分数:2.00)A.ZB.YC.BD.A25.有以下程序: #include main() int i,j,k,a=5,b=6; i=(a=b)?+a:一一 b; j=a+;k=b; printf(“d,d,dn”,i,j,k); 程序的运行结果是( )。(分数:2.00)A.7,
9、6,5B.5,5,5C.7,5,5D.5,6,526.C 语言程序中,若函数无返回值,则应该对函数说明的类型是( )。(分数:2.00)A.intB.doubleC.charD.void27.有以下程序: #include main() int k,n=0;char e,str=“teach”; for(k=0;strk;k+) c=strk; switch(k) case 1: case j: case 5:putchar(c);printf(“d”,+n);break; default:putchar(N); printf(“n”); 程序的运行结果是( )。(分数:2.00)A.Nel
10、NNB.e1 a2e3C.NelNc2ND.NalNNNN28.有以下程序: #include void fun(char(*P)6) int 1; for(i=0;iA.Aal FB.Ab3IC.ABCDD.fghij29.设变量 x 为 long int 型,并已正确赋值,以下表达式中能将 x 的百位上的数字提取出的是( )。(分数:2.00)A.x10100B.x10100C.x10010D.x1001030.有以下程序: #include #define N 4 void fun(int aN,int b) int i; for(i=0;iA.1,2,3,4,B.3,6,9,12,C.
11、4,7,10,13,D.1,5,9,13,31.有以下程序: #include main() int i,j,x=0; for(i=0;isex);解析:解析:SeX 是一个 char 类型变量,不是地址,A 项应为 scanf(“c”,aa.sex);。17.C 语言编译程序的功能是( )。(分数:2.00)A.执行一个 C 语言编写的源程序B.把 C 源程序翻译成 ASCI码C.把 C 源程序翻译成机器代码 D.把 C 源程序与系统提供的库函数组合成一个二进制执行文件解析:解析:编译程序的功能是将“高级语言”翻译为“机器语言”。每条 c 语言语句,经过编译最终都将转换成二进制的机器指令。1
12、8.有以下程序: #include int fun(int n) if(1n return fun(n 一 1)+n; else return 0; main() prinff(“dn”,fun(3); 程序的运行结果是( )。(分数:2.00)A.4B.5C.6 D.7解析:解析:fun 函数是一个递归函数,n=3,返回 f(31)+3=f(2)+3=f(1)+2+3=f(0)+1+2+3=0+6=6。19.有以下程序: #include main() int sum=0,x=5; d0sum+=x; while(!一一 x); printf(“dn”,sum); 程序的运行结果是( )。(
13、分数:2.00)A.0B.5 C.14D.15解析:解析:先执行 d0 中的表达式 sum+=x,则 sum=sum+x=0+5=5,再执行 while 中的表达式,结果为0,退出循环,所以运行结果是 5。20.有以下程序: #include #include typedef struct char name9; char sex; float score2;STU; void f(STU*a) strcpy(a 一name,“Zhao”); a 一sex=m; a 一score1=900; main() STU c=“Qian”,f,95,920,*d=&c; f(d); prinff(“s
14、,c,2Of,2ofn”, d 一name,c.ex,c.score0,c.score1); 程序的运行结果是( )。(分数:2.00)A.Qian,f,95,92B.Zhao,f,95,90C.Zhao,m,95,90 D.Zhao,f,95,92解析:解析:f 函数调用时,结构体数组名作为实参传给了形参指针,使结构体指针 a 指向了数组 c 的首地址。因此,f 持有了主函数中数组 c 的指针,可以对数组 c 中的元素赋值,故返回主函数之后,数组 c中的成员值已被更新。21.关于 C 语言程序的下列说法中,正确的是( )。(分数:2.00)A.函数的定义可以嵌套,但函数的调用不可以嵌套B.函
15、数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义和调用均不可以嵌套D.函数的定义和调用均可以嵌套解析:解析:函数定义都是在函数外部进行的,而函数调用是在函数内部发生的,所以函数的定义不可以嵌套,但函数的调用可以嵌套。22.执行以下程序段后,s 的值为( )。 int a=1,2,3,4,5,6,7,8,9,s=0,k; for(k=0;kA.13B.16 C.17D.45解析:解析:数组元素为:a0=1,a1=2a8=9。k=0 时,s=s+*(a+k)=0+1=1;k=2 时,s=1+*(a+2)=l=3=4;k=4 时,s=4+5=9;k=6 时,s=9+7=16。23.有以下程序
16、: #include #define M 5 #define f(x,y)x*y+M main() int k; k=f(2,3)*f(2,3);printf(“dn”,k); 程序的运行结果是( )。(分数:2.00)A.22B.41 C.100D.121解析:解析:宏定义中的函数在调用时只做简单的替换功能。所以 k=2*3+5*2*3+5=41。24.有以下程序: #include main() char ch=Z; ch=(ch 一A+1)26+A; putchar(ch); prinff(“n”); 程序的运行结果是( )。(分数:2.00)A.ZB.YC.BD.A 解析:解析:z 的
17、 ASCII 码是 90,A 的 AScII 码是 65,所以 ch=(ch 一A+1)26+A=2626+65=65,65对应的字符即 A。25.有以下程序: #include main() int i,j,k,a=5,b=6; i=(a=b)?+a:一一 b; j=a+;k=b; printf(“d,d,dn”,i,j,k); 程序的运行结果是( )。(分数:2.00)A.7,6,5B.5,5,5 C.7,5,5D.5,6,5解析:解析:i=(a=b)?+a:一一 b;中先执行 a:b,为否,根据三元运算符语法规则,执行一一 b,此时 b 为 5,赋给 i,i5;j=a+,将 a:5 先赋
18、给 j,再进行 a+,k=b=5,故最后输出的是 5,5,5。26.C 语言程序中,若函数无返回值,则应该对函数说明的类型是( )。(分数:2.00)A.intB.doubleC.charD.void 解析:解析:int 表示返回值是整型,double 表示返回值是双精度型,char 表示返回值是字符型,voicl表示无返回值。27.有以下程序: #include main() int k,n=0;char e,str=“teach”; for(k=0;strk;k+) c=strk; switch(k) case 1: case j: case 5:putchar(c);printf(“d”
19、,+n);break; default:putchar(N); printf(“n”); 程序的运行结果是( )。(分数:2.00)A.Nel NNB.e1 a2e3C.NelNc2N D.NalNNNN解析:解析:k=0 时,选择 default 分支,输出 N;k=1 时,c=str1=e,选择 case 1 分支,因为没有遇到 break 语句,故继续执行 case3、case5 分支,输出 c 和+n,即输出 e 和 1,依次往下执行,最终输出NelNc2N。28.有以下程序: #include void fun(char(*P)6) int 1; for(i=0;iA.Aal FB.
20、Ab3I C.ABCDD.fghij解析:解析:函数 fun 的功能是输出 sii,所以结果会输出 s00、s11、s22,即 Ab31。29.设变量 x 为 long int 型,并已正确赋值,以下表达式中能将 x 的百位上的数字提取出的是( )。(分数:2.00)A.x10100B.x10100C.x10010D.x10010 解析:解析:x100 的个位数是 x 的百位数上的数字,所以再进行10 运算即可得到该数字。30.有以下程序: #include #define N 4 void fun(int aN,int b) int i; for(i=0;iA.1,2,3,4,B.3,6,9
21、,12,C.4,7,10,13, D.1,5,9,13,解析:解析:调用 fun 函数,yi=xiN 一 1 一 i,N=4,x 是 4 行 4 列的二维数组。i=0 时,y0=x041=x03=4;i-1 时,y1=x1411=x12=7;i=2 时,y2=x2412=x21=10;i-3 时,y3=x30=13。31.有以下程序: #include main() int i,j,x=0; for(i=0;i=3;j+) if(j2=0)continue;x+; x+; printf(“x=dn”,x); 程序的运行结果是( )。(分数:2.00)A.x=4B.x=6C.x=8 D.x=12
22、解析:解析:第一次循环:i=0,执行 x+后 x=1,执行内层循环 j=0,由于 j2!=0 时才执行 x+,即只有 j 取 1 和 3 时,执行 x+,此时 x=1+1+1=3,跳出内层循环,执行下一条语句 x+,x=4,第二次循环:x=1 时,重复上述循环,共执行两次循环,故 x 最终结果是 4*2=8。32.若主函数中有定义语句:int a10,b10,c;,在主函数前定义的 fun 函数首部为:void fun(int x),则以下选项中错误的调用语句是( )。(分数:2.00)A.fun(b);B.fun(&c);C.fun(&a3);D.fun(b11); 解析:解析:fun 函数
23、的形式参数应为一个数组,而 b11是一个整型元素,参数类型不一致,且 b11已经溢出,所以 D 选项错误。33.下列各项中不合法的常量是( )。(分数:2.00)A.2E8B.一28C.一 028 D.2e 一 8解析:解析:0 开头表示的是八进制整型常量,但八进制只能用 0 一 7 的数字表示。34.以下各项中,不是 C 语言字符型或字符串常量的是( )。(分数:2.00)A.“Its”B.“0”C.a=0 D.010解析:解析:c 选项是一个赋值表达式。A、B 两项是字符串常量,D 选项是字符型常量。35.有以下程序: #include main() int k=10; printf(“4
24、d,0,xn”,k,k,k); 程序的运行结果是( )。(口代表一个空格。)(分数:2.00)A.10,12,aB.口口 10,012,aC.010,12,aD.口口 10,12,a 解析:解析:4d 表示先输出占 4 个字符的十进制,10 已占 2 个字符,故先输出 2 个空格,然后输出10;0 表示输出八进制,所以输出 10 的八进制为 12;x 表示输出十六进制,即 a。36.若有定义:int a=1,b=2,c=3;,则执行表达式(a=b+c)(+b)后,a,b,c 的值依次为( )。(分数:2.00)A.1,2,3B.5,3,2C.5,2,3 D.5,3,3解析:解析:I I 表示或
25、运算,当第一个表达式为真时,第二个表达式就不会被执行。根据优先级规则,两边都是括号,所以先计算(a=b+c),将 b+c 的值赋值给 a,则 a=5,而右边的括争不会被执行,所以b=2,c=3。37.设有:char s5,c;,则调用函数 scanf 能正确给 S 和 c 读入数据的是( )。(分数:2.00)A.scanf(“sc”,s,c);B.scanf(“dc”,&s,&c);C.scanf(“dc”,s,&c);D.scanf(“sc”,s,&c); 解析:解析:s5中放的是字符串,故输入的类型应该是s;c 中放的是字符,故输入的是c。要正确读入数据必须要使用 s 和 c 的地址,而
26、 s 代表地就是字符数组的首地址。38.若变量已正确定义并赋值,则错误的赋值语句是( )。(分数:2.00)A.a+a+1:B.a=sizeof(double);C.a=d c;D.a+1=a: 解析:解析:赋值号“=”的左边必须是一个变量名。39.有以下程序: #include void main() int m=1,n=2,*P=&m,*q=&n,*r; r=P;p=q;q=r; printf(“d,d,d,dn”,m,n,*P,*q); 程序运行后的输出结果是( )。(分数:2.00)A.1,2,1,2B.1,2,2,1 C.2,1,2,1D.2,1,1,2解析:解析:本题定义了两个整型
27、变量,然后用两个指针分别指向这两个整型变量,接着对指针进行交换,那么原来指向第一个整数的指针将指向第二个整数,原来指向第二个整数的指针将指向第一个整数。40.若有以下程序: #include int f(int m) static int n=0; int a=2: n+;a+; return n+m+a; main() int k; for(k=0;kA.3,5,7,9,B.4,7,10,13,C.4,5,6,7,D.4,6,8,10, 解析:解析:本题考查静态局部变量以及自增运算符,静态局部变量在函数调用结束后,并不释放,仍然保留它的值。本题中,k 为 0 时,return n+m+a 之前,n 为 1,a 为局部变量是 3,m 为 0,所以第一个返回值为 4。k 为 1 时,在函数返回值之前,静态局部变量为 2,局部变量 a 仍然为 3,m 为 1,所以结果是6。以此类推,答案为 D。