国家二级C语言机试(选择题)模拟试卷178 (题后含答案及解析)
题型有:1.
1. 算法的空间复杂度是指
A.算法在执行过程中所需要的计算机存储空间 B.算法所处理的数据量
C.算法程序中的语句或指令条数
D.算法在执行过程中所需要的临时工作单元数
正确答案:A 解析:算法的空间复杂度是指执行这个算法所需要的内存空间。这个内存空间包括算法程序所占的空间,输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。 知识模块:公共基础知识
2. 某带链的队列初始状态为front=rear=NULL。经过一系列正常的入队与退队操作后,front=10,rear=5。该队列中的元素个数为( )。
A.4 B.5 C.6
D.不确定
正确答案:D 解析:带链的队列使用了链表来表示队列,而链表中的元素存储在不连续的地址中,因此当front=10,rear=5时,不能确定队列中元素的个数。 知识模块:公共基础知识
3. 阅读以下程序 #include <stdio.h> main( ) { int case ; float printF; printf(“请输入2个数:”); scanf(“%d%f”,&case,&printF); prin七f(“%d %f\n”,case,printF ); } 该程序在编译时产生错误,其出错原因是
A.定义语句出错,printF不能用作用户自定义标识符
B.定义语句出错,case是关键字,不能用作用户自定义标识符 C.定义语句无错,scanf不能作为输入函数使用 D.定义语句无错,printf不能输出case的值
正确答案:B
解析:case是C语言中的一个关键字,不能用作用户标识符来使用,所以这段程序代码在编译时就会出错。 知识模块:C语言基础知识
4. 有以下程序#include<stdio.h>main( ){inta=3;printf(‘‘%d\\n’’,(a+=a-=a*a));}程序运行后的输出结果是
A.9 B.0 C.3 D.-12
正确答案:D
解析:对于表达式a+=a-=a*a相当于a=a.(a*a),然后计算a=a+a,a的初值为3,则表达式的值为-12。 知识模块:C语言基础知识
5. 设有某函数的说明为:int*fune(int a[10],int n);则下列叙述中,正确的是( )。
A.形参a对应的实参只能是数组名
B.说明中的a[10]写成a[]或*a效果完全一样
C.func的函数体中不能对a进行移动指针(如a++)的操作 D.只有指向10个整数内存单元的指针,才能作为实参传给a
正确答案:B
解析:考查数组名作为函数参数。传递给形参的实参可以是数组名,还可以是指向该数组的指针变量,选项A错误;a[10]、a[]、*a做形参都是接受实参数组首地址,效果一样,选项B正确;数组名可以看作一个指针常量,对其进行自加自减运算相当于指针变量的自加自减,选项C错误;数组名作为函数参数时,只传递数组的首地址而不检查形参数组的长度,所以形参表中可以不给出形参数组的长度,形参数组和实参数组长度也可以不同,选项D错误。故答案选B。
6. C语言中允许用外部说明来指定变量、函数和其他标识符的特征,这里所说的外部指的是( )。
A.冠以关键字extern B.位置在函数体外部 C.作用范围是全程的 D.位置在函数的外部
正确答案:D
解析:C语言中允许用位置在函数外部的说明来指定变量、函数和其他标识符的特征。
7. 有以下程序 main( ){int x=1,y=0; if(!x)y++; else if(x==0) if(x)y+=2; else y+=3; pfintf(“%d\n”,y);} 程序运行后的输出结果是
A.2 B.0 C.1 D.3
正确答案:B
解析:x=1,if和else if的条件都不满足,故y值不改变输出。 知识模块:C语言程序设计
8. 有两个关系R和T如下:则由关系R得到关系T的操作是 A.选择 B.投影 C.交 D.并
正确答案:A
解析:由关系R和T所包含的元素可知,关系R经过选择操作就可以得到关系T。 知识模块:公共基础知识
9. 以下程序段的输出结果是( )。int a,b,c;a=10;b=50;c=30; if(a>b) a=b,b=c;c=a;printf(‘‘a=%d b=%d c=%d\n’’,a,b,c);
A.a=30 b=50 c=10 B.a=10 b=30 c=10 C.a=10 b=50 c=10 D.a=50 b=30 c=50
正确答案:C
解析:本题考查条件表达式,程序段首先定义三个整型变量a,b,c,并且其初始值分圳等于10,50,30,然后判断a>b是否成立,如果条件成立,则把b的值赋给a,把c的值赋给b。由a和b的初始值可知,此条件表达式不成立,所以a和b的值保持不变。再执行下一条语句,把a的值赋给c,所以c的当前值等于10,最后由输出语句输出变量a,b,c的当前值,分别为10,50,10。 知识模块:C语言程序设计
10. 设有定义语句:char*aa[2]={“abcd”,”ABCD”};则以下叙述正确的是 A.aa数组的两个元素只能存放含有4个字符的一维数组的首地址 B.aa数组的值分别是字符串”abcd”和”ABCD”
C.aa是指针变量,它指向含有两个元素的字符型数组 D.aa[0]存放了字符串”abcd”的首地址
正确答案:D 解析:题目中char*aa[2],定义了指针数组aa,有两个元素,aa[0]存放”abcd”地址,而aa[1]存放”ABCD”地址。 知识模块:函数和数组
11. 若有以下程序,则程序的输出结果是#include<stdio.h>main( ){int a=0,b=0,c=0;c=(a-=++A),(a+=b,b+=4);printf(“%d,%d,%d\n”,a,b,c);}
A.0,4,4 B.1,4,1 C.0,4,0
D.1,4,4
正确答案:C
解析:表达式c=(a-=++a),(a+=b,b+=4)相当于逗号表达式,首先计算c=(a-=++a),其中a-=++a)等价于a=a-(++a),得到a的值0,c的值为0,在计算(a+=b,b+=4)时,a和b的初值为0,计算以后,a为0,b为4。 知识模块:C语言程序设计
12. 若有以下程序#include char*a=“you”,b[]=“welcome#you#to#China!”; main( ){int i,j=0;char*p; for(i=0;b[i]!=‘\0’;i++) {if(*a==b[i]) {p=&b[i]; for(j=0;a[j]!=‘\0’;j++) {if(a[j]!=*p)break;p++;} if(a[j]=‘\0’)break; }} printf(“%s\n”,p);} 则程序的输出结果是
A.#you#to#China! B.me#you#to#China! C.#China! D.#to#China!
正确答案:D
解析:程序中循环部分的主要功能是,在字符串b中寻找是否含有子串a,如果含有则退出,字符指针p指向该匹配子串后面的位置,利用printf函数输出则从该位置开始一直输出到字符串b的结尾。 知识模块:函数和数组
13. 若有定义int a;float b;double c;程序运行时输入:3 4 5<回车>能把值3输入给变量a、4输入给变量b、5输入给变量c的语句是( )。
A.scanf(“%d%f%lf”, &a,&b,&c); B.scanf(“%d%lf%lf”, &a,&b,&c); C.scanf(“%d%f%f”, &a,&b,&c); D.scanf(“%lf%lf%lf”, &a,&b,&c);
正确答案:A
解析:考查scanf的格式输入。scanf函数的一般形式为 scanf(“格式控制字符串”,输入项1,输入项2,…),其中,”格式控制字符串”用于指定输入的格式,”%d”表示按照十进制整型输入,”%f”表示按照浮点型输入,”%lf”表示按照长精度浮点型输入,所以答案选A。 知识模块:顺序结构程序设计
14. 以下关于typedef的叙述错误的是
A.typedef只是将已存在的类型用一个新的名字来代表
B.用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名
C.用typedef可以增加新类型
D.用typedef为类型说明一个新名,通常可以增加程序的可读性
正确答案:C
解析:C语言允许用typedef说明一种新的类型名,其一般形式为:typedef类型名标识符;在此“类型名”必须是在此语句之前已有定义的类型标识符。“标识符”是一个用户定义标识符,用作新的类型名。Typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型.原来的类型名依然有效,这样可以增加程序的可读性。 知识模块:结构体、共用体、位运算及文件操作
15. 在关系表中,属性值必须是另一个表主键的有效值或空值,这样的属性是
A.外键 B.候选键 C.主键 D.主属性
正确答案:A 解析:如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。为了保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值。所以选项A正确。 知识模块:数据库设计基础
16. 下列关系表达式中,结果为“假”的是 A.(3<<4)==1 B.(3+4)>6 C.(3!=4)>2 D.3<=4
正确答案:C
解析:关系表达式和逻辑表达式的结果为非零或者0,其中0表示假,而非零表示真,由于3!=4的结果为1,而1>2的结果为假。 知识模块:C语言基础知识
17. 有以下程序main( ){int a=3; do{printf(“%d,”,a-=2);}while(!(--a)); printf(“\n”);}程序运行后的输出结果是
A.1,
B.1,-2, C.3,0, D.1,0
正确答案:B
解析:循环体执行两次。首先输出a=1,然后判断表达式!(--a),a为0,循环条件表达式值为1,执行第二次循环体,输出a=-2。判断循环条件表达式值为0,循环退出。 知识模块:C语言程序设计
18. 有以下程序#include<stdio.h>void main( ){char s[]=“012xy\08s34f4w2”;int i,n=0;for(i=0;s[i]!=0;i++)if(s[i]>=‘0’&&s[i]<=‘9’)n++;printf(“%d\n”,n);}程序运行后的输出结果是
A.0 B.7 C.3 D.8
正确答案:C 解析:在主函数中的for循环语句中,当s[i]的值不等于0~9之间的数字时,结束循环语句的执行。由字符数组s的初值可以得到for循环语句执行了三次,所以变量n的值等于3。 知识模块:函数和数组
19. 有下列程序:#include<stdio.h>/*fun函数的功能是将a所指数组元素从大到小排序*/void fun(int*a,int n){int t,i,j;for(i=0;i<n-1.j++)ford=i+1;j<n;j++)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[i]=t;}}main( ){int c[10]={1,2,3,4,5,6,7,8,9,0},i;fun(c+4,6);for(i=0;i<10;i++)printf(“%d,”,c[i]);printf(“\n”);}程序的运行结果是
A.1.2,3,4,9,8,7,6,5,0, B.0.9,8,7,6,5,1,2,3,4, C.0.9,8,7,6,5,4,3,2,1, D.1,2,3,4,5,6,7,8,9,0,
正确答案:A
解析:fun( )函数的功能是对数组a[]的元素从大到小进行排序。所以在主函数执行fun(c+4,6)语句时,将从数组c的第5个元素开始的后6个元素进行从大到小排序。排序之后,数组c的内容变为{1,2,3,4,9,8,7,6,5,0}。 知识模块:函数和数组
20. 有以下程序 #include<stdio.h> main( ){ int c[6]={10,20,30,40,50,60},*p,*s; p=c; s=&c[5]; printf(“%d\n”,s-p);} 程序运行后的输出结果是
A.50 B.6 C.5 D.60
正确答案:C
解析:主函数中指针变量p指向数组c,s保存了数组最后一个元素的地址,那么s中为两个地址之间的元素差5。 知识模块:函数和数组
21. 有以下程序 #include<stdio.h> main( ) void fun(char*c,int d) { char b=‘a’,a=‘A’; { *c=*c+1;d=d+1; fun(&b,a);
printf(“%c,%c\n”,b,a); printf(“%c,%c,”,*c,d);} }程序运行后的输出结果是
A.b,B,b,A B.b,B,B,A C.a,B,B,a D.a,B,a,B
正确答案:A
解析:本题中fun函数的参数传递方式,形参c是传地址,形参d是传值,所以在主函数中,执行胁时,把变量b的地址传给了c,把a的值传递给了d,经过运算,输出的值为b.B。在主函数的输出语句中,输出变量b的值为b,变量a的值为A。 知识模块:编译预处理和指针
22. 有以下程序void fun(int x,int y,int*c,int*d){*c=x+y;*d=x-y;}main( ){int a=4,b=3,c=0,d=0;fun(a,b,&c,&d);printf(“%d%d\n”,c,d);}程序的输出结果是
A.4 3 B.3 4 C.7 1 D.0 0
正确答案:C
解析:函数fun有四个形参,功能是利用参数的地址传递来计算前两个参数的和与差。主函数中调用fun函数c计算4+3,d计算4.3值为1。 知识模块:编译预处理和指针
23. 有下列程序:main( ){ int a[4][4]={{1,4,3,2},{8,6,5,7},{3,7,2,5},{4,8,6,1}},i,k,t;for(i=0;i<3;i+ +)for(k=i+l;k<4;k+ +)if(a[i][i]<a[k][k]){t=a[i][i];a[i][i]=a[k][k];a[k][k]=t;}for(i=0;i<4;i+ +)printf(“%d,”,a[0][i]);}程序运行后的输出结果是
A.6,2,1,1, B.1,1,2,6, C.2,3,4,6, D.6,4,3,2,
正确答案:D
解析:利用二重for循环对二维数组a[4][4]的主对角线上的元素{1,6,2,1}实现按列从大到小排序,所以数组a[4][4]的值变为{{6,4,3,2,},{8,2,5,7},{3,7,1,5},{4,8,6,1}},最后输出数组a[4][4]第一行上的元素,所以输出结果为6,4,3,2。 知识模块:函数和数组
24. 以下叙述中错误的是
A.函数的返回值类型不能是结构体类型,只能是简单类型 B.只要类型相同,结构体变量之间可以整体赋值
C.可以通过指针变量来访问结构体变量的任何成员 D.函数可以返回指向结构体变量的指针
正确答案:A 解析:函数的返回值类型可以是结构体类型。结构体变量之间可以相互复制。 知识模块:结构体、共用体、位运算及文件操作
25. 以下关于typedef的叙述错误的是
A.typedef只是将已存在的类型用一个新的名字来代表
B.用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名
C.用typedef可以增加新类型
D.用typedef为类型说明一个新名,通常可以增加程序的可读性
正确答案:C 解析:C语言允许用typedef说明一种新的类型名,其一般形式为:typedef 类型名 标识符;在此“类型名”必须是在此语句之前已有定义的类型标识符。“标识符”是一个用户定义标识符,用作新的类型名。Typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,并未产生新的数据类型,原来的类型名依然有效,这样可以增加程序的可读性。 知识模块:结构体、共用体、位运算及文件操作
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.com 版权所有 湘ICP备2023023988号-11
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务