1、国家二级(C 语言)机试模拟试卷 129及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.以下关于 C语言数值常量的选项中,合法的是( )。(分数:2.00)A.120Xa23 45e0B.0285e 一 3一 0xfC.177 4e15 0abcD.0x8A 10,000 3e52.若有定义:double d=68;int i=0,k=21;,则以下选项中不符合 C语言规定的赋值语句是( )。(分数:2.00)A.i一(d+k)=(i+k);B.i=d3;C.d=(d+,i+);D.i=(int)!d;3.若有代数式 (分数:2.00)A.s
2、qrt(fabs(pow(n,x)+exp(x)B.sqrt(fabs(pow(n,x)+pow(x,e)C.sqrt(abs(n x+e x)D.sqrt(fabs(pow(x,n)+exp(x)4.有关 C语言标识符,以下选项中不合法的是( )。(分数:2.00)A.&aB.FORC.printD._005.有以下序: #include void main() int num1,num2; int i=10; double d=1234: nunl=sizeof(i);num2=sizeof(d); pfintf(d,dn,s1,s2); 在 VC 60 平台上编译运行,程序运行后的输出结
3、果是( )。(分数:2.00)A.16,4B.2,8C.4,8D.1,46.有以下程序: #nclude void main() char a,b,c,d; scanf(cc,&a,&b); c=getchar();d=getchar(); pfintf(ccccn,a,b,c,d); 运行程序后输入数据(代表回车符) 34 56 则输出结果是( )。(分数:2.00)A.34B.3456C.34D.347.以下关于 C语言中逻辑运算符两侧运算对象的叙述中正确的是( )。(分数:2.00)A.只能是整数 0或非 0整数B.可以是任意合法的表达式C.可以是结构体类型的数据D.只能是整数 0或 1
4、8.有以下程序: #nelude main() int a=0,b=0,C=0,d=0; if(a=1)b=1;c=2; else d=3; pfintf(d,d,d,dn,a,b,c,d); 程序运行后的输出结果是( )。(分数:2.00)A.1,1,2,0B.0,0,0,3C.编译有错D.0,1,2,09.有以下程序: #include main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0:a+;break; case 1:b+;break; case 2:a+;b+;break; case 3:a+;b+; prin
5、tf(a=d,b=dn,a,b); 程序运行后的输出结果是( )。(分数:2.00)A.a=2,b=2B.a=2,b=1C.a=1,b=1D.a=1,b=010.以下程序段中的变量已正确定义:for(i=0;i4;i+,i+)for(k=l;k3;k+);printf(*);程序段的输出结果是( )。(分数:2.00)A.*B.*C.*D.*11.有以下程序段: #nclude int i,n; for(i=0;i8;i+) n=rand()5; switch(n) case 1: case 3:printf(dn,n);break; case 2: case 4:printf(dn,n);c
6、ontinue; case 0:exit(0); pfintf(dn,n); 以下关于程序段执行情况的叙述,正确的是( )。(分数:2.00)A.for循环语句固定执行 8次B.当产生的随机数 n为 4时结束循环操作C.当产生的随机数 n为 1和 2时不做任何操作D.当产生的随机数 n为 0时结束程序运行12.有以下程序: #include int f(int x); main() int n=1,m; m=f(f(f(n);printf(dn,m); int f(int x) retum x*2; 程序运行后的输出结果是( )。(分数:2.00)A.8B.2C.4D.113.以下叙述中错误的
7、是( )。(分数:2.00)A.可以给指针变量赋一个整数作为地址值B.函数可以返回地址值C.改变函数形参的值,不会改变对应实参的值D.当在程序的开头包含头文件 stdioh 时,可以给指针变量赋 NULL14.设已有定义:float x;,则以下对指针变量 P进行定义且赋初值的语句中正确的是( )。(分数:2.00)A.int*p=(float)x;B.float*p=&x;C.float p=&x;D.float*p=1024;15.以下数组定义中错误的是( )。(分数:2.00)A.int x 23=1,2,3,4,5,6;B.int x3=0;C.int x3=1,2,3,4,5,6;D
8、.int x 23=1,2,3,4,5,6;16.有以下程序:#includestdiohvoid fun(int a,int n) int i,t;for(i=0;in2;i+)t=ai;ai=an 一 1一 i;an 一 1一 i:t;main()int k10=1,2,3,4,5,6,7,8,9,10,i;fun(k,5);for(i=2;i8;i+)printf(d,ki);printf(n);程序运行后的输出结果是( )。(分数:2.00)A.321678B.876543C.1098765D.34567817.有以下程序: #include #define N 4 void fun(
9、int aN,int b) int i; for(i=0;iN;i+)bi=aii一 aiN一 1一 i; main() int xNN=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,yN,i; fun(x,y); for(i=0;iN;i+)printf(d,yi);printf(n); 程序运行后的输出结果是( )。(分数:2.00)A.一 3,一 1,1,3B.12,3,0,0C.0,1,2,3D.一 3,一 3,一 3,一 318.设有定义:char s81;int i=0;,以下不能将一行(不超过 80个字符)带有空格的字符串正确读入的语句或语句组是(
10、 )。(分数:2.00)A.gets(s);B.while(si+=getchar()!=n);si=0;C.scanf(s,s);D.doscanf(c,&si);while(si+!=n);si=0;19.设有定义:char P=1,2,3,*q=p;,以下不能计算出一个 char型数据所占字节数的表达式是( )。(分数:2.00)A.sizeof(p)B.sizeof(char)C.sizeof(*q)D.sizeof(p0)20.有以下程序: #include #include main() char str20=One*World,One*Dream!,*p=str1; printf
11、(d,strlen(p);printf(sn,p); 程序运行后的输出结果是( )。(分数:2.00)A.10,One*Dream!B.9,One*Dream!C.9,One*WorldD.10,One*World21.有以下程序: #nclude main() char s=012xy08s34f4w2; int i,n=0; for(i=0;si!=0;i+) if(si=0&si=9)n+; printf(dn,n); 程序运行后的输出结果是( )。(分数:2.00)A.0B.3C.7D.822.有以下程序: #include fun(int x,int y) static int m=
12、0,i=2; i+=m+1;m=i+x+y;return m; main() int j=1,m=1,k; k=fun(j,m);printf(d,k); k=fun(j,m);printf(dn,k); 程序执行后的输出结果是( )。(分数:2.00)A.5,11B.5,5C.11,11D.11,523.在 C语言中,只有在使用时才占用内存单元的变量,其存储类型是( )。(分数:2.00)A.auto和 staticB.extem和 registerC.auto和 registerD.static和 register24.下面结构体的定义语句中,错误的是( )。(分数:2.00)A.stru
13、ct ordint x;int y;int z;struct ord a;B.struct ordint x;int y;intz;struct ord a;C.struct ordint x;int y;int z;a;D.structim x;int y;int z;a;25.有以下程序: #ineludestdiohtypedef structint b,p;A;void f(A c)*注意:C 是结构变量名*int j;cb+=1:cp+=2;main()int i;A a=1,2;f(a); printf(d,dn,ab,ap);程序运行后的输出结果是( )。(分数:2.00)A.2
14、,4B.1,2C.1,4D.2,326.读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其中 buffer代表的是( )。(分数:2.00)A.一个内存块的字节数B.一个整型变量,代表待读取的数据的字节数C.一个文件指针,指向待读取的文件D.一个内存块的首地址,代表读人数据存放的地址27.有以下程序: #include #include int fun(int n) int*p; p=(int*)malloc(sizeof(int); *P=n;return*p; main() int a; a=fun(10);printf(dn,a+fun(10);
15、 程序运行后的输出结果是( )。(分数:2.00)A.0B.10C.20D.出错28.有以下程序: #include main() unsigned char a=8,c; c=a3; printf(dn,c); 程序运行后的输出结果是( )。(分数:2.00)A.16B.1C.32D.029.以下叙述中正确的是( )。(分数:2.00)A.在 C语言中,预处理命令行都以“#”开头B.预处理命令行必须位于 C源程序的起始位置C.#include必须放在 C程序的开头D.C语言的预处理不能实现宏定义和条件编译的功能30.下面关于编译预处理的命令行中,正确的是( )。(分数:2.00)A.#def
16、ine int INTB.#define eps 0001C.#DEFINE TRUED.#define E 28831.有如下程序 #include main() int i,data; seallf(“d”,&data) for(i=0;idata&i3=0)continue; printf(“d,”,i); 程序运行时,从键盘输入:13 后,程序输出结果为( )。(分数:2.00)A.0,2,4,B.1,3,5,C.0,1,2,3,4,5,D.0,1,2,3,32.设变量 n已正确定义并赋值,以下不能实现自然数 1到 n累加求和的程序段是( )。(分数:2.00)A.int sum=1,
17、i=0: while(idata&i3=0)continue; printf(“d,”,i); 程序运行时,从键盘输入:13 后,程序输出结果为( )。(分数:2.00)A.0,2,4, B.1,3,5,C.0,1,2,3,4,5,D.0,1,2,3,解析:解析:程序通过 scanf()函数,输入 data的值 13,for 循环中,i 的值遍历 04,对每个 i的值执行 if语句判断,其中:idata 始终为假;所以表达式 idata&i3=0 始终为假;所以 if语句的判断条件需要看 idata&i2 的值,由于 idata始终为真,所以 idata&i2 的值又取决于 i2 的值,也就是
18、说整个 if语句的判断条件取决于 i2 的值,如果 i2 为真,那么 if语句成立,执行continue,否则执行 prinff。()函数,所以当 i取值 1、3 时,i2 的为 l,if 条件成立,执行continue;当 i取值 0、2、4 时,i2 的值为 0,if 条件不成立,执行 print()函数,输出 0,2,4,本题答案为 A。32.设变量 n已正确定义并赋值,以下不能实现自然数 1到 n累加求和的程序段是( )。(分数:2.00)A.int sum=1,i=0: while(i=n) i+;sum+=i; B.int sum=0,i=1; while(i=n) sum+=i;
19、i+;C.intsum=0,i=0: whie(iD.intsum=1:i=1; while(i解析:解析:选项 A中,sum 初值为 1,i 初值为 0;当 i=n成立时,执行 while()循环,首先 i自增 1,此时 1的值为 1,然后 sum累加 i,此时 sum的值为 1+1=2,所以选项 A计算了 2次 1,不满足题意,选项B、C、D 都正确,本题答案为 A。33.关于栈的叙述中正确的是( )。(分数:2.00)A.在栈中,栈中元素随栈底指针与栈顶指针的变化而动态变化B.在栈中,栈顶指针不变,栈中元素随栈底指针的变化而动态变化C.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态
20、变化 D.以上说法都不正确解析:解析:栈的存取原则是先进后出,所以,栈底指针不变,栈中元素随栈顶指针的变化而动态变化。34.关于栈的叙述中正确的是( )。(分数:2.00)A.栈底元素最先能被删除B.栈顶元素最后才能被删除C.栈顶元素永远不能被删除D.栈顶元素最先被删除 解析:解析:栈的存取原则是先进后出,所以最后进入的栈顶元素将最先被删除。35.某二叉树共有 5个节点,其中叶子节点只有 1个,则该二叉树的深度为(假设根节点在第 1层)( )。(分数:2.00)A.3B.4C.5 D.7解析:解析:二叉树中度为 0的节点(叶子节点),总是比度为 2节点多 1个,所以此题中,度为 2的节点是 1
21、一 1=0个,因此,本题中的其他节点均为度为 1的节点,该二叉树只有一个分支,且深度为 5。36.计算机软件可分为应用软件、系统软件和支撑软件。下面属于应用软件的是( )(分数:2.00)A.Office文字处理系统 B.C语言编译程序C.UNIX操作系统D.数据库管理系统解析:解析:操作系统、编译程序和数据库管理系统都属于系统软件。37.不属于结构化程序基本结构的是( )。(分数:2.00)A.顺序结构B.重复(循环)结构C.选择(分支)结构D.GOTO跳转 解析:解析:结构化程序基本结构包括顺序结构、重复(循环)结构和选择(分支)结构。38.关于软件设计的叙述中不正确的是( )。(分数:2
22、.00)A.系统总体结构图支持软件系统的详细设计 B.软件设计是将软件需求转换为软件表示的过程C.数据结构与数据库设计是软件设计的任务之一D.PAD图是软件详细设计的表示工具解析:解析:软件设计是将软件需求转换为软件表示的过程,设计过程中 PAD图是软件详细设计的表示工具。但系统总体结构图主要是确定算法和数据结构,而非详细设计。39.数据库查询语言是( )。(分数:2.00)A.数据定义语言B.数据管理语言C.数据控制语言D.数据操纵语言 解析:解析:数据操纵语言是指对数据的增、删、改、查;数据控制语言负责数据的完整性、安全性的定义与检查等,数据定义与数据管理语言也不涉及查询。40.一个学生可
23、选多门课程,一门课程也可由多个学生来选。则学生和课程间的联系是( )。(分数:2.00)A.1:1 联系B.1:m 联系C.m:1 联系D.m:n 联系 解析:解析:一个学生可选多门课程,一门课程也可由多个学生来选,所以他们之间是多对多的关系。二、程序填空题(总题数:1,分数:2.00)41.下列给定程序中,函数 fun的功能是:将 s所指字符串中的所有数字字符移到所有非数字字符之后,开保持数字字符串和非数字字符串原有的次序。例如,s 所指的字符串为“def35adh3kjsdf7”,执行后结果为“defadhajsdf3537”。请在程序的下划线处填人正确的内容并将下划线删除,使程序得出正确
24、的结果。注意:部分源程序在文件 BLANK1C 中。不得增行或删行,也不得更改程序的结构! #includestdioh void fun(char*s) int i,j=0,k=0;char tl80,t280; for(i=0;si!=0;i+) if(si=D&si=9) *ound* t2j=si;1; else t1k+=si; t2j=0;t1k=0; *found* for(i=0;ik;i+)2; *found* for(i=0;i一3;i+)sk+i:t2i; main() char s80=“ba3a54j7sd567sdffs”; printf(“nThe origina
25、l string is:sn”,s); fun(s); printf(“nThe result is:sn”,s); (分数:2.00)_正确答案:(正确答案:(1)j+或 j+=l或+j 或 j=j+1 (2)si=t1i (3)j)解析:解析:本题考查:指针型变量;数组变量赋值;for 循环语句。 填空 1:根据函数 fun中的内容可知,数组 11存储了 s中的非数字字符,数组 t2存储了 s中的数字字符,为了存储下一个数字字符,下标j要进行加 1操作。 填空 2:将 s串中的数字与非数字字符分开后,要先将非数字字符放入字符串 s中,因此填入 8i=t1i。 填空 3:最后将数字字符加到
26、s串之后,并且 i要小于数字的个数 j。三、程序修改题(总题数:1,分数:2.00)42.给定程序 MODllC 中,函数 fun的功能是:判断输入的任何一个正整数 n,是否等于某个连续正整数序列之和。若是,则输出所有可能的序列,否则输出“不能分解”。例如:当输入 100时,输出:100=9+10+11+12+13+14+15+16100=18+19+20+21+22请改正函数 fun中指定部位的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题程序: #includestdioh void fun(int n) int j,b,c,m,fla
27、g=0; for(b=1;b=n2;b+) *found* n=m; c=b; while(m!=0m=c) *found* m=mC;C+ *found* if(m!=0) prinff(“d=”,n); for(j=b;jc 一 1;j+)prinff(“d+”,j); prinff(“dn”,j); flag=1: if(nag=0) prinff(“不能分解n”); main() int n; prinff(“请输入一个整数:”);seanf(“d”,&n); fun(n);(分数:2.00)_正确答案:(正确答案:(1)m=n; (2)m=mc:c+: (3)if(m=0)解析:四、
28、程序设计题(总题数:1,分数:2.00)43.学生记录由学号和成绩组成,N 名学生的数据已放入主函数中的结构体数组中,请编写函数 fun,其功能是:把分数最低的学生数据放入 b所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生人数。 注意:部分源程序在文件 PROGlC 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #define N 16 typedef struct char hum10; int s; STREC; int fun(STREC* a,STREC*b) main() STREC
29、sN=“GA05”,85,“GA03”,76,“GA02”,69,“GA04”,85, “GA01”,91,“GA07”,72,“GA08”,64,“GA06”,87, “GA015”,85,“GA013”,91,“GAO12”,64,“GA014”,91, “GA011”,91,“GA017”,64,“GA018”,64,“GA016”,72; STREC hN; int i,n;FILE*out; n=fun(s,h); prinff(“Thed lowest score:n”,n); for(i=0;i_正确答案:(正确答案:int fun(STREC*a,STREC*b) int i,j=0,min=a0s; for(i=0;iN;i+) if(minais) min=ai_s;*找出最小值* for(i=0;iN;i+) if(min=ais) bj+=ai;*找出成绩与 min相等的学 生的记录,存入结构体 b中* return j; )解析:解析:本题考查:查找结构体数组中的最小数据,需要通过 for循环语句和 if条件语句来完成。 本题中第一个循环语句的作用是遍历数组求出最低分数,第二个循环语句的作用是将数组中的元素与最低分比较,查找是否存在与最低分相等的成绩。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1