1、国家二级(C 语言)机试历年真题试卷汇编 16及答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.设栈的顺序存储空间为 S(0:49),栈底指针 bottom=49,栈顶指针 top=30(指向栈顶元素)。则栈中的元素个数为( )。(分数:2.00)A.30B.29C.20D.192.下列与队列结构有关联的是( )。(分数: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.N-S流程图只能描述简单的顺序结构的程序D.计算机可以直接处理 C语言程序,不必进行任何转换9.以下选项中不能用于描述算法的是( )。(分数:2.00)A.伪代码和流程图B.程序语句C.ER图D.文字叙述10.层次型、网状型和关系型数据库的划分原则是( )。(分数:2.00)A.记录长度B.文件的大小C.联系的复杂程度D.数据之间的联系方式11.有三个关系 R、S 和 T加下: (分数:2.00)A.自然连接B.差C.交D.并12.以下叙述中正确的是( )。(
4、分数:2.00)A.不同函数的形式参数不能使用相同名称的标识符B.用户自己定义的函数只能调用库函数C.实用的 C语言源程序总是由一个或多个函数组成D.在 C语言的函数内部,可以定义局部嵌套函数13.以下选项中叙述正确的是( )。(分数:2.00)A.C程序必须由 main语句开始B.函数体必须由开始C.C程序中的注释可以嵌套D.C程序中的注释必须在一行里完成14.下列选项中正确的标识符是( )。(分数:2.00)A.一 a1B.aiC.a2_iD.int15.有以下程序(字母 A的 ASCII代码为 65): #include stdioh main() char c1=A,c2=Y; pri
5、ntf(“d dn“,c1,c2); 程序运行后的输出结果是( )。(分数:2.00)A.输出格式不合法,输出出错信息B.A YC.65 90D.65 8916.有以下程序: #include stdioh main() int a; a=(int)(一 153*3); printf(“dn“,a); 程序的运行结果是( )。(分数:2.00)A.一 3B.一 4C.一 5D.结果不确定17.以下叙述中正确的是( )。(分数:2.00)A.在 scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上B.在使用 scan函数输入整数或实数时,输入数据之间只能用空格来分隔C.在 pri
6、ntf函数中,各个输出项只能是变量D.使用 printf函数无法输出百分号18.设有定义:double x=212;,以下选项中不能完整输出变量 x值的语句是( )。(分数:2.00)A.printf(“x=50fn“,x);B.printf(“x=fn“,x);C.printf(“x=1fn“,x);D.printf(“x=05fn“,x);19.关于“while(条件表达式)循环体”,以下叙述正确的是( )。(分数:2.00)A.循环体的执行次数总是比条件表达式的执行次数多一次B.条件表达式的执行次数总是比循环体的执行次数多一次C.条件表达式的执行次数与循环体的执行次数一样D.条件表达式的
7、执行次数与循环体的执行次数无关20.有以下程序: #includestdioh main() int a,b; for(a=0;a3;a+) scanf(“d“, r=f(p,q); printf(“d,d,d,d,dn“,i,j,*p,*q,*r); 则程序的输出结果是( )。(分数:2.00)A.5,3,3,5,5B.3,5,5,3,5C.3,5,3,5,5D.5,3,5,3,537.有以下程序: #includestdioh int a=1,b=2; void fun1(int a,int b) printf(“d d“,a,b); void fun2() a=3;b=4; main()
8、 fun1(5,6);fun2(); printf(“d dn“,a,b); 程序运行后的输出结果是( )。(分数:2.00)A.5 6 1 2B.3 4 5 6C.1 2 5 6D.5 6 3 438.设有定义: structint n;float x;) s2,m2=(10,28,0,00; 则以下赋值语句中正确的是( )。(分数:2.00)A.s0=m1;B.s=m;C.s13=mn;D.s2x=m2x;39.有以下程序: #includestdioh #includestringh struct S char name10; void change(struct S*data,int
9、value) strcpy(dataname,“#“); value=6; main() struct S input; int num=3; strcpy(inputname,“OK“); change(input,num); printf(“s dn“,inputname,num); 程序运行后的输出结果是( )。(分数:2.00)A.#3B.#6C.OK 3D.OK 640.有以下程序: #includestdioh typedef structint b,p;)A; void f(A c)*注意:c 是结构变量名* int j; cb+=1;cp+=2; main() int i; A
10、 a=1,2;f(a); printf(“d dn“,ab,ap); 程序运行后的输出结果是( )。(分数:2.00)A.2 4B.1 2C.1 4D.2 3二、程序填空题(总题数:1,分数:2.00)41.程序通过定义学生结构体数组,存储若干名学生的学号、姓名和三门课的成绩。函数 fun的功能是:将存放学生数据的结构体数组,按姓名的字典序(从小到大)排序。 请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh #includestringh struct student long sno; c
11、har name10; float score3; ; void fun(struct student a,int n) *found* 【1】t; int i,j; *found* for(i=0;i【2】;i+) for(j=i+1;jn;j+) *found* if(strcmp(【3】)0) t=ai;ai=aj;aj=t;) main() struct student s4=10001,“ZhangSan”,95,80,88),10002,“LiSi“,85,70,78),10003,“CaoKai“,75,60,88,10004,“FangFang“,90,82,87; int i
12、,j; printf(“The original data:n“); for(j=0;j4;j+) printf(“nNo:ld Name:一8sScores:“,sjsno,sjname); for(i=0;i3;i+) printf(“62f“,sjscorei);printf(“n“); fun(s,4); printf(“The data after sorting:n“); for(j=0;j4;j+) printf(“nNo:ld Name:一 8sScores:”,sjsno,sjname); for(i=0;i3;i+) printf(“62f“,sjscorei); prin
13、tf(“n“); (分数:2.00)_三、程序修改题(总题数:1,分数:2.00)42.下列给定程序中,函数 fun的功能是:根据以下公式求兀值,并作为函数值返回。 例如,当给指定精度的变量 eps输入 00005 时,应输出 Pi=3140578。 2=1+13+1325+132537+13253749+ 请改正程序中的错误,使它能得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! #includemathh #includestdioh double fun(double eps) double s,t;int n=1;s=00; *found* t=0: while(teps
14、) s+=t: t=t*n(2*n+1); n+: *found* return(s); main() double x: printf(“Please enter a precision:“);scanf(“1f“,hi=hj;hj=tt; for(i=0;i_国家二级(C 语言)机试历年真题试卷汇编 16答案解析(总分:86.00,做题时间:90 分钟)一、选择题(总题数:40,分数:80.00)1.设栈的顺序存储空间为 S(0:49),栈底指针 bottom=49,栈顶指针 top=30(指向栈顶元素)。则栈中的元素个数为( )。(分数:2.00)A.30B.29C.20 D.19解析:
15、解析:栈底指针 bottom=49,栈顶指针 top=30,则栈中的元素个数为 4930+1=20个,答案选 C。2.下列与队列结构有关联的是( )。(分数:2.00)A.函数的递归调用B.数组元素的引用C.多重循环的执行D.先到先服务的作业调度 解析:解析:队列的修改是依“先进先出”的原则进行的,故 D选项正确。3.下列叙述中正确的是( )。(分数:2.00)A.有一个以上根结点的数据结构不一定是非线性结构B.只有一个根结点的数据结构不一定是线性结构 C.循环链表是非线性结构D.双向链表是非线性结构解析:解析:线性结构应满足:有且只有一个根结点;每个结点最多有一个前驱,也最多有一个后继,所以
16、 B选项正确。有一个以上根结点的数据结构一定是非线性结构,所以 A选项错误。循环链表和双向链表都是线性结构的数据结构,所以 CD选项错误。故 B选项正确。4.面向对象方法中,继承是指( )。(分数:2.00)A.一组对象所具有的相似性质B.一个对象具有另一个对象的性质C.各对象之间的共同性质D.类之间共享属性和操作的机制 解析:解析:继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。广义地说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,因此继承是指类之间共享属性和操作的机制,选项 D正确。5.数据库设计中反映用户对数据要求的模式是( )。(分数:
17、2.00)A.内模式B.概念模式C.外模式 D.设计模式解析:解析:数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户的公共数据视图。外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述,因此选择 C。内模式又称物理模式,它给出了数据库物理存储结构与物理存取的方法。6.程序测试的目的是( )。(分数:2.00)A.为被测程序设计正确的测试用例B.发现并改正程序中的错误C.发现程序中的错误 D.改正程序中的错误解析:解析:程序测试是使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清
18、预期结果与实际结果之间的差别,即为发现错误而执行程序的过程,而不是改正错误。故正确答案为 C。7.在数据库中,数据模型包括数据结构、数据操作和( )。(分数:2.00)A.数据约束 B.数据类型C.关系运算D.查询解析:解析:数据模型是数据特征的抽象,从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表与操作提供一个抽象的框架,即描述了数据结构、数据操作及数据约束。故正确答案为 A。8.以下叙述中正确的是( )。(分数:2.00)A.程序的算法只能使用流程图来描述B.结构化程序的三种基本结构是循环结构、选择结构、顺序结构 C.N-S流程图只能描述简单的顺序结构的程序D.计
19、算机可以直接处理 C语言程序,不必进行任何转换解析:解析:程序的算法可以用流程图、程序语句、伪代码和流程图以及文字进行描述,选项 A错误;NS能完整描述程序的所有结构,不仅仅包括简单的顺序结构,选项 C错误;C 语言的源文件需要经过编译、链接生成可执行文件后才可以被计算机执行,选项 D错误;循环结构、选择结构、顺序结构是结构化程序的三种基本结构,所以答案选 B。9.以下选项中不能用于描述算法的是( )。(分数:2.00)A.伪代码和流程图B.程序语句C.ER图 D.文字叙述解析:解析:E-R 图即“实体一联系图”将现实世界中的要求转化成实体、联系、属性等基本概念,描述的是实体之间的联系,而不能
20、对算法进行描述,相对而言,程序语句、伪代码和流程图以及文字都能描述算法的基本思想,所以答案选 C。10.层次型、网状型和关系型数据库的划分原则是( )。(分数:2.00)A.记录长度B.文件的大小C.联系的复杂程度D.数据之间的联系方式 解析:解析:层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制的无向图,关系模型采用二维表来表示,因此三种数据库的划分原则是数据之间的联系方式,选项 D正确。11.有三个关系 R、S 和 T加下: (分数:2.00)A.自然连接B.差 C.交D.并解析:解析:关系 T中的元组是 R关系中有而 S关系中没有的元组的集合,进行的是差的运算。12.以下叙述
21、中正确的是( )。(分数:2.00)A.不同函数的形式参数不能使用相同名称的标识符B.用户自己定义的函数只能调用库函数C.实用的 C语言源程序总是由一个或多个函数组成 D.在 C语言的函数内部,可以定义局部嵌套函数解析:解析:一个 C程序可以有一个或多个程序文件,所以也可以有一个或多个函数,选项 C正确;除了main函数不能被其他函数调用之外,用户自定义函数可以调用其他任意函数,选项 B错误;函数是一个独立的模块,不同函数之间的定义相互没有影响,所以标识符可以相同,选项 A错误;函数体内部只可以调用但是不可以定义其他函数,选项 D错误;答案选 C。13.以下选项中叙述正确的是( )。(分数:2
22、.00)A.C程序必须由 main语句开始B.函数体必须由开始 C.C程序中的注释可以嵌套D.C程序中的注释必须在一行里完成解析:解析:编写函数的时候需要用“”将其函数体括起来,表示是该函数的一部分,所以函数体必须由“”开始,选项 B正确;C 程序必须由 main函数开始,而不是 main语句,选项 A错误;C 程序中的注释有单行注释“”和多行注释“*”,多行注释以“*”开始,直到遇到“*”结束,只是寻找配套,而不能嵌套,选项 C、D 错误;答案选 B。14.下列选项中正确的标识符是( )。(分数:2.00)A.一 a1B.aiC.a2_i D.int解析:解析:本题考查标识符的命名规则。标识
23、符只能由字母、数字、下画线组成;数字不能作为标识符的开头;关键字不能作为标识符。A 选项中“一”和 B选项中“”和“”均不满足标识符的构成条件;D选项中 int是关键字,故 C选项正确。15.有以下程序(字母 A的 ASCII代码为 65): #include stdioh main() char c1=A,c2=Y; printf(“d dn“,c1,c2); 程序运行后的输出结果是( )。(分数:2.00)A.输出格式不合法,输出出错信息B.A YC.65 90D.65 89 解析:解析:考查字符型数据。字符常量与其 ASCII码值一一对应,在计算的时候,一般是字符数据对应的 ASCII码
24、参与运算,输出时会根据格式控制符输出对应的字符或者 ASCII码。所以答案选 D。16.有以下程序: #include stdioh main() int a; a=(int)(一 153*3); printf(“dn“,a); 程序的运行结果是( )。(分数:2.00)A.一 3B.一 4 C.一 5D.结果不确定解析:解析:考查数据类型之间的强制转换,程序中将表达式(一 153*3)的值一 459 强制转换成 int型,然后赋值给 a,处理方法是直接将小数部分舍去,保留带有符号的整数部分,所以答案选 B。17.以下叙述中正确的是( )。(分数:2.00)A.在 scanf函数中的格式控制字
25、符串是为了输入数据用的,不会输出到屏幕上 B.在使用 scan函数输入整数或实数时,输入数据之间只能用空格来分隔C.在 printf函数中,各个输出项只能是变量D.使用 printf函数无法输出百分号解析:解析:scanf 函数中的格式控制字符串是为了输入数据用的,无论其中有什么字符,也不会输出到屏幕上,所以 A选项正确。scanf()的格式控制串可以使用其他非空自字符,如逗号,但在输入时必须输入这些字符以保证匹配,所以 B选项错误。printf 函数可以输出常量,也可以输出变量,所以 C选项错误。printf 函数可以通过 printf(“”)来输出百分号,所以 D选项错误。18.设有定义:
26、double x=212;,以下选项中不能完整输出变量 x值的语句是( )。(分数:2.00)A.printf(“x=50fn“,x); B.printf(“x=fn“,x);C.printf(“x=1fn“,x);D.printf(“x=05fn“,x);解析:解析:本题考查 printf函数的格式输出,“格式控制字符串”部分为“f”表示按照浮点型输出,选项 B正确;加入长度格式符 1即“1”表示按照双精度浮点型输出,选项 C正确;若要控制输出精度,则需以“”开头,后跟十进制整数,如“2f”或“02f”,选项 D正确;控制输出宽度则是用整数表示,如“5f”。选项 A中“50f”表示输出宽度为
27、 5,右对齐,小数点后保留位数为 0,所以结果输出为 2,不能完整输出 x,答案选 A。19.关于“while(条件表达式)循环体”,以下叙述正确的是( )。(分数:2.00)A.循环体的执行次数总是比条件表达式的执行次数多一次B.条件表达式的执行次数总是比循环体的执行次数多一次 C.条件表达式的执行次数与循环体的执行次数一样D.条件表达式的执行次数与循环体的执行次数无关解析:解析:while 循环是先判断条件,满足条件后执行循环体,执行完后接着判断条件,执行,直到最后一次判断条件后不成立,跳出循环,所以最后一次执行了条件表达式,但是没有执行循环体,故 B选项正确。20.有以下程序: #inc
28、ludestdioh main() int a,b; for(a=0;a3;a+) scanf(“d“, r=f(p,q); printf(“d,d,d,d,dn“,i,j,*p,*q,*r); 则程序的输出结果是( )。(分数:2.00)A.5,3,3,5,5B.3,5,5,3,5C.3,5,3,5,5D.5,3,5,3,5 解析:解析:在主函数中分别给整型变量 i、j 和指针型变量 p、q 赋初值,并声明指针变量 r,调用 f函数,并将实参变量 p和 q的值传递给形参变量 s和 t,并且 f函数是指针型函数,即函数的返回值将是一个地址。在 f函数中,如果条件成立,则将指针变量 s和 t的值
29、互换,并且将指针 s的地址返回主函数。最后输出 i,j,*p,*q,*r 的值,即 5,3,5,3,5。故 D选项正确。37.有以下程序: #includestdioh int a=1,b=2; void fun1(int a,int b) printf(“d d“,a,b); void fun2() a=3;b=4; main() fun1(5,6);fun2(); printf(“d dn“,a,b); 程序运行后的输出结果是( )。(分数:2.00)A.5 6 1 2B.3 4 5 6C.1 2 5 6D.5 6 3 4 解析:解析:fun1 函数中的 a、b 为局部变量,fun2 函数
30、中的 a、b 为全局变量。执行 fun1函数后输出5,6;执行完 fun2后 a变为 3,1 变为 4,所以输出结果为 3,4。故 D选项正确。38.设有定义: structint n;float x;) s2,m2=(10,28,0,00; 则以下赋值语句中正确的是( )。(分数:2.00)A.s0=m1; B.s=m;C.s13=mn;D.s2x=m2x;解析:解析:定义了结构体类型数组 s,长度为 2,结构体类型数组 m,长度为 2,并进行了初始化。同类型的结构体可以直接用变量名实现赋值,A 项正确。数组名为数组首地址,地址常量之间不可以相互赋值,B项错误。C 项引用结构体成员错误,数组
31、名为地址常量不是结构体变量,不能引用成员。D 项数组越界,不存在 s2与 m2。39.有以下程序: #includestdioh #includestringh struct S char name10; void change(struct S*data,int value) strcpy(dataname,“#“); value=6; main() struct S input; int num=3; strcpy(inputname,“OK“); change(input,num); printf(“s dn“,inputname,num); 程序运行后的输出结果是( )。(分数:2.0
32、0)A.#3 B.#6C.OK 3D.OK 6解析:解析:考查结构体成员的引用规则。40.有以下程序: #includestdioh typedef 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 4B.1 2 C.1 4D.2 3解析:解析:考查结构体变量作为函数实参整体传递,也是一种值传参,形参的变化不能影响到实参,所以调用函数 f(a)对 a中的数据没有影响
33、,输出结果为 12,答案选 B。二、程序填空题(总题数:1,分数:2.00)41.程序通过定义学生结构体数组,存储若干名学生的学号、姓名和三门课的成绩。函数 fun的功能是:将存放学生数据的结构体数组,按姓名的字典序(从小到大)排序。 请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh #includestringh struct student long sno; char name10; float score3; ; void fun(struct student a,int n) *f
34、ound* 【1】t; int i,j; *found* for(i=0;i【2】;i+) for(j=i+1;jn;j+) *found* if(strcmp(【3】)0) t=ai;ai=aj;aj=t;) main() struct student s4=10001,“ZhangSan”,95,80,88),10002,“LiSi“,85,70,78),10003,“CaoKai“,75,60,88,10004,“FangFang“,90,82,87; int i,j; printf(“The original data:n“); for(j=0;j4;j+) printf(“nNo:l
35、d Name:一8sScores:“,sjsno,sjname); for(i=0;i3;i+) printf(“62f“,sjscorei);printf(“n“); fun(s,4); printf(“The data after sorting:n“); for(j=0;j4;j+) printf(“nNo:ld Name:一 8sScores:”,sjsno,sjname); for(i=0;i3;i+) printf(“62f“,sjscorei); printf(“n“); (分数:2.00)_正确答案:(正确答案: (1)struct student (2)n 一 1 (3)ai
36、name,ajname)解析:解析:本题考查:变量定义;for 循环语句;strcmp 函数;结构体变量的表示方法。 填空 1:变量 t是中间变量,用来存放结构体数组中的元素,因此应定义为结构体类型。 填空 2:for 循环语句用来遍历结构体数组,n 是数组的长度,因此循环变量的取值范围是 0n 一 1。 填空 3:字符串比较函数strcmp的一般格式为“strcmp(字符串 1,字符串 2)”。 功能:按照 ASCII码顺序比较两个字符数组中的字符串,并由函数返回值返回比较结果。 字符串 1=字符串 2,返回值=0; 字符串 1字符串 2,返回值0; 字符串 1字符串 2,返回值0。三、程序
37、修改题(总题数:1,分数:2.00)42.下列给定程序中,函数 fun的功能是:根据以下公式求兀值,并作为函数值返回。 例如,当给指定精度的变量 eps输入 00005 时,应输出 Pi=3140578。 2=1+13+1325+132537+13253749+ 请改正程序中的错误,使它能得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! #includemathh #includestdioh double fun(double eps) double s,t;int n=1;s=00; *found* t=0: while(teps) s+=t: t=t*n(2*n+1); n
38、+: *found* return(s); main() double x: printf(“Please enter a precision:“);scanf(“1f“,hi=hj;hj=tt; for(i=0;i_正确答案:(正确答案: int fun(STREC *a,STREC *b,int 1,int h) int i,j=0; for(i=0;iN;i+) if(ais=1 return j;*返回分数范围内的学生人数* )解析:解析:本题考查:结构体数组操作;循环判断结构。 本题使用循环判断结构实现程序操作,循环语句用于遍历结构体数组,条件语句用于判断当前元素是否符合条件,若符合条件则将其存入结构体数组b中。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1