1、国家二级 C 语言程序设计机试(选择题)模拟试卷 5 及答案解析(总分:80.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.下列叙述中正确的是( )。(分数:2.00)A.算法的效率只与问题的规模有关,而与数据的存储结构无关B.算法的时间复杂度是指执行算法所需要的计算工作量C.数据的逻辑结构与存储结构是一一对应的D.算法的时间复杂度与空间复杂度一定相关2.栈和队列的共同点是( )。(分数:2.00)A.都是先进后出B.都是先进先出C.只允许在端点处插入和删除元素D.没有共同点3.对于现实世界中事物的特征,在实体联系模型中使用( )。(分数:2.00)A.属性描述B
2、.关键字描述C.二维表格描述D.实体描述4.下列关于队列的叙述中正确的是( )。(分数:2.00)A.在队列中只能插入数据B.在队列中只能删除数据C.队列是“先进先出”的线性表D.队列是“先进后出”的线性表5.下列选项中属于面向对象设计方法主要特征的是( )。(分数:2.00)A.继承B.自顶向下C.模块化D.逐步求精6.关系表中的每一横行称为一个( )。(分数:2.00)A.元组B.字段C.属性D.码7.下列对软件测试和软件调试叙述中错误的是( )。(分数:2.00)A.严格执行测试计划,排除测试的随意性B.软件调试的目的是改正软件错误C.软件测试不需要考虑测试成本D.正确的执行测试用例8.
3、下列测试方法中,( )均属于白盒测试的方法。(分数:2.00)A.语句覆盖法和边界值分析法B.条件覆盖法和基本路径测试法C.边界值分析法和代码检查法D.等价类划分和错误推测法9.负责数据库中查询操作的数据库语言是( )。(分数:2.00)A.数据定义语言B.数据管理语言C.数据操纵语言D.数据控制语言10.一般情况下,当对关系 R 和 S 进行自然连接时,要求 R 和 S 含有一个或者多个共有的( )。(分数:2.00)A.记录B.行C.属性D.元组11.以下说法中正确的是( )。(分数:2.00)A.C 语言程序总是从第一个定义的函数开始执行B.在 C 语言程序中,要调用的函数必须放在 ma
4、in()函数中定义C.C 语言程序总是从 main()函数开始执行D.C 语言程序中的 main()函数必须放在程序的开始部分12.以下叙述中正确的是( )。(分数:2.00)A.在算法设计时,可以把复杂任务分解成一些简单的子任务B.在 C 语言程序设计中,所有函数必须保存在一个源文件中C.只要包含三种基本结构的算法就是结构化程序D.结构化程序必须包含所有三种基本结构,缺一不可13.以下叙述中正确的是( )。(分数:2.00)A.字符变量在定义时不能赋初值B.字符常量可以参与任何整数运算C.同一英文字母的大写和小写形式代表的是同一个字符常量D.转义字符用符号开头14.表达式 a+=a 一=a:
5、9 的值是( )。(分数:2.00)A.0B.一 9C.18D.915.以下各项中,当 x 为大于 1 的奇数时,值为 0 的表达式是( )。(分数:2.00)A.x2=0B.x2C.x2!=0D.x2=116.若有定义语句:int x=12,y=8,Z;在其后执行语句:z=09+xy;则 z 的值为( )。(分数:2.00)A.1B.19C.2D.2417.有以下程序段: int m=33,n=66; m=mn;n=nm;m=mn;执行上述语句后,m 和 n 的值分别是( )。(分数:2.00)A.m=66,n=33B.m=33,n=66C.m=66,n=66D.m=33,n=3318.设有
6、定义:double x=212;,以下不能完整输出变量 X 值的语句是( )。(分数:2.00)A.prinff(“x=50fn”,x);B.prinff(“x=fn”,x);C.prinff(“x=lfn”,x);D.prinff(“x=05fn”,x);19.有以下程序: #include main() int x=1,y=0; if(!x)y+; else if(X=0) if(x)y+=2; else y+=3; prinff(“dn”,y); 程序运行后的输出结果是( )。(分数:2.00)A.0B.2C.1D.320.有以下程序: #include void fun(int*P,i
7、nt*q) P=P+1;*q=*q+1; main() int m=1,n=2,*r=m; fun(r,n); printf(“d,dn”,m,n); 程序运行后的输出结果是( )。(分数:2.00)A.1,3B.2,3C.1,4D.1,221.有以下程序: #include #define S(x)x*x void main() int k-5,j=2; prinff(“d,dn”,S(k+j+2),S(+k+2); 程序的运行结果是( )。(分数:2.00)A.2118B.81,81C.21,21D.181822.有以下程序 #include main() int i=1; for(pri
8、ntf(“d”,i);iA.0123B.123C.1123D.00123.有以下程序: #include main() int i,array6=1,5,0,4; for(i=0;iA.0 4 0 4 0B.1 5 0 4 0C.1 5 5 4 0D.1 2 1 2 024.以下数组定义中错误的是( )。(分数:2.00)A.int x23=1,2,3,4,5,6;B.int X3=0;C.int x3=1,2,3,4,5,6;D.int x23=1,2,3,4,5,6;25.C 语言程序中,运算对象必须是整型数的运算符是( )。(分数:2.00)A.&B.C.D.*26.对于函数声明: vo
9、id fun(float array,int*ptr); 以下叙述中正确的是( )。(分数:2.00)A.函数参数 array、ptr 都是指针变量B.函数声明有语法错误,参数 array 缺少数组大小定义C.调用函数时,array 数组中将存储从实参中复制来的元素值D.调用函数时,array 数组的元素和 ptr 都是按值传送27.下列定义数组的语句中,正确的是( )。(分数:2.00)A.int x;B.int N=10;int XN;C.int X010;D.#define N 10 int xN;28.有以下程序: #include main() int b 33=0,1,2,0,1,
10、2,0,1,2, i,j,t=1; for(i=0;i=0 时没有任何输出D.printf 函数调用语句总是被跳过30.有以下程序: #include #define N 4 void fun(int aN) int i; for(i=0;iA.17 6 11 16B.1 6 11 16C.4 7 10 13D.5 13 21 2931.有以下程序: #include int a=1,b=2; void funl(int a,int b) printf(“dd”,a,b); void flun2() a=3;b=4; main() funl(5,6);fun2(); printf(“ddn”,
11、a,b); 程序运行后的输出结果是( )。(分数:2.00)A.5 6 3 4B.3 4 5 6C.1 2 5 6D.5 6 1 232.有以下程序: #include void fun(char*a,char*b) while(*a=*)a+; while(*b=*a) b+;a+; main() char *s=“*a*b*” t80; fun(s,t);puts(t); 程序的运行结果是( )。(分数:2.00)A.a*b*B.a*bC.*a*bD.ab33.以下叙述中正确的是( )。(分数:2.00)A.语句 P=NULL;执行后,指针 P 指向地址为 0 的存储单元B.指针变量只能通
12、过求地址运算符&来获得地址值C.语句 P=NULL;与 P=0;是等价的语句D.int*p1;、int*p2;、int*p3;都是合法的定义指针变量的语句34.设有定义:int a=64,b=8;,则表达式(ab)和(a I b)(a I I b)的值分别为( )。(分数:2.00)A.1 和 1B.1 和 0C.0 和 1D.0 和 035.有以下程序: #include main() int a=2,c=5; printf(“a=d,b=dn”,a,c); 程序的输出结果是( )。(分数:2.00)A.a=2b=5B.a=2b=5C.a=D.b=d d.a=d.b=d36.有以下程序: #
13、include main() char*s=“12134”: int k=0,a=0; while(sk+1) k+: if(k2=0) a=a+(sk一0+1); continue; a=a+(sk一0); printf(“k=d a=dn”,k,a); 程序运行后的输出结果是( )。(分数:2.00)A.k=5 a=15B.k=4 a=12C.k=6 a=11D.k=3 a=1437.有以下程序段:struct float weight; char sex; char name10; rec,*ptr; ptr=&rec;从键盘读入字符串给结构体变量 Fee 的 name 成员,错误的输入
14、语句是()。(分数:2.00)A.scanf(“s”,Fee 一name);B.scanf(“s”,recname);C.scanf(“s”,(*ptr)name);D.scanf(“s”,ptr 一nallle);38.若有以下程序: #include void fun(int a,int n) int i,j,t; for(i=1;iaj) t=ai;ai=aj;aj=t; main() int c10=10,9,8,7,6,5,4,3,2,1,i; fun(e,10); for(i=0;iA.1,10,3,8,5,6,7,4,9,2,B.10,9,8,7,6,5,4,3,2,1,C.2,
15、9,4,7,6,5,8,3,10,1,D.10,1,8,3,6,5,4,7,2,9,39.有以下程序: #include int sum(int m) static int n=1; return n+=m: main() int i; for(i=1;i=0 时没有任何输出D.printf 函数调用语句总是被跳过解析:解析:continue 语句的功能是结束本次循环,而不是终止整个循环的执行,所以 B 选项错误;当x=0 时,程序执行 printf(”4dn”,x);语句,所以 C、D 选项错误。因为 for 循环的循环次数 i 是从 1 到 100,如果先后输入 100 个非负整数,则这些
16、数将全部输出。30.有以下程序: #include #define N 4 void fun(int aN) int i; for(i=0;iA.17 6 11 16 B.1 6 11 16C.4 7 10 13D.5 13 21 29解析:解析:按照二维数组的访问方式逐个查找,然后总结规律是这种题型常用的解决方法。31.有以下程序: #include int a=1,b=2; void funl(int a,int b) printf(“dd”,a,b); void flun2() a=3;b=4; main() funl(5,6);fun2(); printf(“ddn”,a,b); 程序
17、运行后的输出结果是( )。(分数:2.00)A.5 6 3 4 B.3 4 5 6C.1 2 5 6D.5 6 1 2解析:解析:在一个源文件中,如果外部变量和局部变量同名,则在该局部变量的作用域内,该外部变量会被“屏蔽”,所以函数 funl()输出的是局部变量 a、b 的值:5 6;fun2()改变的是全局变量 a、b 的值,输出结果为 3 4,答案选 A。32.有以下程序: #include void fun(char*a,char*b) while(*a=*)a+; while(*b=*a) b+;a+; main() char *s=“*a*b*” t80; fun(s,t);puts
18、(t); 程序的运行结果是( )。(分数:2.00)A.a*b* B.a*bC.*a*bD.ab解析:解析:注意两个 while,第一个是判断相等“=”,第二个是赋值“=”,第一个循环终止的条件是指针指向的字符不为“*”,就会在遇到字符“a”时停止,第二个循环把 a 指针所指的内容依次赋给了b 指针指向的内容,直到字符串结束时终止。所以结果就是字符串的后半段,选项 A 正确。33.以下叙述中正确的是( )。(分数:2.00)A.语句 P=NULL;执行后,指针 P 指向地址为 0 的存储单元B.指针变量只能通过求地址运算符&来获得地址值C.语句 P=NULL;与 P=0;是等价的语句D.int
19、*p1;、int*p2;、int*p3;都是合法的定义指针变量的语句 解析:解析:考查指针变量。指针变量的定义形式为:类型名*指针变量名,表示指向某一个变量的指针,如果定义形式为:类型名*指针变量名,则表示指向某一个指针变量的指针,所以 D 选项正确。指针变量本身存储的是其指向的变量的地址值,不需要使用求地址运算符&来获得地址,B 选项错误。p=NULL;是将空指针赋给指针变量,表示该指针变量当前未指向任何变量,语句 p=O;本身不正确,两者不等,故选项 A、C 错。答案选 D。34.设有定义:int a=64,b=8;,则表达式(ab)和(a I b)(a I I b)的值分别为( )。(分
20、数:2.00)A.1 和 1 B.1 和 0C.0 和 1D.0 和 0解析:解析:常用的位运算符有:“一”按位求反,“name); B.scanf(“s”,recname);C.scanf(“s”,(*ptr)name);D.scanf(“s”,ptr 一nallle);解析:解析:本题中声明了一个结构体类型 person,定义了两个结构体变量,分别是 rec 和指针变量ptr。A 选项中,rec 是一个结构体变量,结构体变量访问结构成员的方式应该是 rec.name,故答案选 Ao38.若有以下程序: #include void fun(int a,int n) int i,j,t; fo
21、r(i=1;iaj) t=ai;ai=aj;aj=t; main() int c10=10,9,8,7,6,5,4,3,2,1,i; fun(e,10); for(i=0;iA.1,10,3,8,5,6,7,4,9,2,B.10,9,8,7,6,5,4,3,2,1,C.2,9,4,7,6,5,8,3,10,1,D.10,1,8,3,6,5,4,7,2,9, 解析:解析:该题首先对一维数组进行初始化,c0到 c9依次赋值为 10 到 1。fun(c,10);语句调用fun 函数,fun 函数的功能是将一维数组偶数位元素的数值由小到大排序,最后将排好序的新的一维数组进行输出。故 D 选项正确。39
22、.有以下程序: #include int sum(int m) static int n=1; return n+=m: main() int i; for(i=1;i=1;i+) prinff(“d,”,sum(i); prinff(“n”); 程序运行后的输出结果是( )。(分数:2.00)A.2, B.1,C.4,D.3,解析:解析:在输出函数中,调用 sum 函数,sum 函数的作用是定义一个常数 n=1,对 n 进行叠加主函数传递的 m 值,随后将和返回给主函数,因此输出为 2,。40.设文件指针 fp 已定义,执行语句 fp=fopen(“file”,“w”);后,以下针对文本文件 file 操作叙述的选项中正确的是( )。(分数:2.00)A.只能写不能读 B.写操作结束后可以从头开始读C.可以在原有内容后追加写D.可以随意读和写解析:解析:文件打开方式为“w”表示只写不读,选项 A 正确。