1、国家二级( C语言)机试模拟试卷 132及答案与解析 一、选择题 1 有关队列的叙述中正确的是 ( )。 ( A)循环队列是队列的一种链式存储结构 ( B)循环队列是队列的一种顺序存储结构 ( C)循环队列是非线性结构 ( D)循环队列是一种逻辑结构 2 一棵二叉树共有 20个节点,其中 5个是叶子节点,则度为 1的节点数为 ( )。 ( A) 15 ( B) 11 ( C) 6 ( D) 4 3 在下列模式中,能够给出数据库物理存储结构与物理存取方法的是 ( )。 ( A)内模式 ( B)外模式 ( C)概念 模式 ( D)逻辑模式 4 在满足实体完整性约束的条件下 ( )。 ( A)一个关
2、系中可以没有任何候选关键字 ( B)一个关系中有且只有一个候选关键字 ( C)一个关系中必须有多个候选关键字 ( D)一个关系中应该有一个或多个候选关键字 5 有三个关系 R、 S和 T如下:则由关系 R和 S得到关系 T的操作是 ( )。 ( A)自然连接 ( B)差 ( C)除 ( D)交 6 在软件设计中不使用的工具是 ( )。 ( A) PAD图 ( B)程序流程图 ( C)系统结构图 ( D)数据流图 (DFD图 ) 7 关于需求分析阶段任务的叙述中不正确的是 ( )。 ( A)确定软件系统的功能需求 ( B)确定软件系统的性能需求 ( C)需求规格说明书评审 ( D)制订软件测试计
3、划 8 黑盒测试用例的主要根据是 ( )。 ( A)算法合理性 ( B)程序外部功能 ( C)相关数据结构 ( D)程序流程图 9 关于软件危机表现的叙述中不正确的是 ( )。 ( A)软件过程文件不规范 ( B)软件开发生产率低 ( C)软件质量难以控制 ( D)软件成本不断提高 10 关于程序模块化的叙述中错误的是 ( )。 ( A)可采用自顶向下、逐步细化的设计方法把若干独立模块组装成所要求的程序 ( B)把程序分成若干相对独立、功能单一的模块,可便于重复使用这些模块 ( C)把程序分成若干相对独立的模块,可便于编码和调试 ( D)可采用自底向上、逐步细化的设计方法把若干独立模块组装成所
4、要求的程序 11 关于 C语言程序格式的叙述中正确的是 ( )。 ( A)用 C语言编写的程序只能放在一个程序文件中 ( B) C程序书写格式严格,要求一行内只能写一个语句 ( C) C程序中的注释只能出现在程序的开始位置和语句的后面 ( D) C程序 书写格式自由,一个语句可以写在多行上 12 设 int m=0;与其他三个表达式的结果不同的是 ( )。 ( A) m+ ( B) m+=1 ( C) +m ( D) m+1 13 关于 C语言数据类型叙述中,错误的是 ( )。 ( A)若要处理如 “人员信息 ”等含有不同类型的相关数据,应自定义结构体类型 ( B)若要保存带有多位小数的数据,
5、可使用双精度类型 ( C)若只处理 “真 ”和 “假 ”两种逻辑值,应使用逻辑类型 ( D)整数类型可以用来表示自然数 14 以下数值常量不符合 C语言语法的是 ( )。 ( A) 3 0E0 2 ( B) le3 ( C) 012 ( D) 0xabcd 15 有如下程序段: int x=12; double y=3 141593; printf( d 8 6f, x, y); 其输出结果是 ( )。 ( A) 12, 3 141593 ( B) 123 141593 ( C) 12 3 141593 ( D) 123 1415930 16 已知字符 A的 ASC 代码值是 65,字符变量
6、a的值是 A, b的值是 D。则执行语句 orintf( d, d, a, b一 2);的输 出结果是 ( )。 ( A) A, D ( B) A, B ( C) 65, 68 ( D) 65, 66 17 当 x为大于 1的奇数时,值为 0的表达式是 ( )。 ( A) x 2=0 ( B) x 3 ( C) x 2! =0 ( D) x 2=1 18 有以下程序: #include main() int x; scanf( d, &x); if(x =4); else if(x 8)printf( d n, x); 程序运行时,输入的值在哪个范围才会有输出结果 ?( ) ( A)小于 4的
7、整数 ( B)不等于 8的整数 ( C)大于 4或等于 8的整数 ( D)大于 4且小于 8的整数 19 有以下程序: #include main() int a=7; while(a ); printf( d n, +a); 程序运行后的输出结果是 ( )。 ( A) 0 ( B)一 1 ( C) 1 ( D) 7 20 有以下程序: #include main() char b, c; inti; b=a; c=A; for(i=0; i 6; i+) if(i 2)putehar(i+b); else putchar(i+c); printf( n); 程序运行后的输出结果是 ( )。
8、( A) abcDEF ( B) ABcDEf ( C) aBcDeF ( D) AbCdEf 21 有以下程序: #include main() int i, j, x=0; for(i=0; i 2; i+) x+: for(j=0; j 4; j+) if(j 2)continue; x+: x+: printf(x: d n, x); 程序执行后的输出结果是 ( )。 ( A) x: 4 ( B) x: 8 ( C) x: 6 ( D) x: 12 22 设有以下函数: int fun(int n, char*s) 则下面对函数指针的定义和赋值均正确的是 ( )。 ( A) int(*
9、pf)(int, char); pf=&fun; ( B) int*pf(); pf=fun; ( C) int*pf(); *pf=fun; ( D) int(*pf)(int, char*); pf=fun; 23 若用变量作为实 参调用函数,以下正确的是 ( )。 ( A)函数的形参和实参分别占用不同的存储单元 ( B)形参只是形式上的存在,不占用具体存储单元 ( C)同名的实参和形参占同一存储单元 ( D)函数的形参会覆盖实参存储空间的值 24 若要求定义具有 10个 float型元素的一维数组 a,则以下定义语句中错误的是( )。 ( A) float a5+5; ( B) floa
10、t n=10, an; ( C) #define n 5 float a2*n; ( D) #define N 10 float aN; 25 有以下程序: #include main() int i, t3=1, 2, 3, 4, 5, 6, 7, 8, 9; for(i=0; i 3; i+) printf( d, t2一 ii); 程序执行后的输出结果是 ( )。 ( A) 3 5 7 ( B) 7 5 3 ( C) 3 6 9 ( D) 7 5 1 26 有以下程序: #include void fun(int*s, int n1, int n2) int i, j, t; i=n1;
11、 j=n2; while(i j) t=si; si: sj; sj: t; i+; j main() int a10=9, 8, 7, 6, 5, 4, 3, 2, 1, 0, k; fun(a, 0, 2); fun(a, 7, 9); fun(a, 0, 7); for(k=0; k 10; k+) printf( d, ak); printf( n); 程序运行后的输出结果是 ( )。 ( A) 2341098765 ( B) 03456987 12 ( C) 9876543210 ( D) 0987651234 27 有以下程序: #include main() int a44=1,
12、 2, 3, 4, 1, 6, 5, 9, 3, 7, 2, 5, 4, 2, 4, l, i,k, t; for(i=0; i 3; i+) for(k=i+1; k 4; k+) if(aii akk) t=aii; aii=akk; akk=t; for(i=0; i 4; i+) printf( d, , a0i); 程序运行后的输出结果 是 ( )。 ( A) 9, 1, 2, 6 ( B) 6, 2, 3, 4 ( C) 6, 4, 3, 2 ( D) 9, 3, 4, 6 28 以下关于字符串的表达式中正确的语句组是 ( )。 ( A) char*s; s=Chinese! ;
13、( B) char*s; s=Chinese! ; ( C) char s 10; s=Chinese! ; ( D) char s; s=Chinese! ; 29 若有以下定义和语句: #include char cl10=123, c2= n123 ; printf( d d n, strlen(c1), strlen(c2); 则输出结果是 ( )。 ( A) 10 7 ( B) 10 5 ( C) 3 7 ( D) 3 5 30 有以下程序: #include void funl(char*p) char*q; q=p; while(*q! = 0) (*q)+; q+; main(
14、) char a=1234567, *P; p=&a3; funl(P); printf( s n, a); 程序执行后的输出结果是 ( )。 ( A) 1235678 ( B) 2345678 ( C) 1245678 ( D) 7654321 31 有以下函数: int sf(char*s) char*t=s; while(*t+); t; return(t一 s); 以下关于 sf函数功能叙述正确的是 ( )。 ( A)将字符串 s复制到字符串 t ( B)求字符串的 ASC 码值 ( C)求字符串 s的长度 ( D)求字符串 s所占字节数 32 有以下程序: #include int
15、fun(int x, int y) if(y=0)return x; else return(fun(一一 x,一一 y); main() printf( d n, fun(5, 3); 程序运行后的输出结果是 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 33 关于函数的叙述中错误的是 ( )。 ( A) C程序函数中定义的自动变量,系统不自动赋确定的初值 ( B)在 C程序的同一函数中,可以在复合语句内定义变量 ( C) C程序函数中定义的赋有初值的静态变量,每调用一次函数,赋一次初值 ( D) C程序函数的形参不可以说明为 static型变量 34 有以下程序段: s
16、truct st int x; int*y; *ps; int a: 1, 2, b=3, 4; struct st c2=10, a, 15, b; ps=c; 以下选项中表达式的值为 15的是 ( )。 ( A) +ps一 x ( B) ps一 x ( C) *ps一 y ( D) (ps+)一 x 35 有以下程序: #include struct STint n; int a20; ; void fun(int*a, int n) int i; for(i=0; i n一 1; i+) ai+=1; main() int i; struct ST s=10, 1, 2, 3, 4, 5
17、, 6, 7, 8, 9, 10; fun(s a, s n); for(i=0; i s n; i+) printf( d, , s a i); 程序运行后的输出结果是 ( )。 ( A) 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, ( B) 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ( C) 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, ( D) 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 36 有以下程序: #include #include typedef structchar name9; char sex
18、; float score2; ST; void fun(ST x) STU y=Tom, m, 98 0, 90 0; int i; strcpy(x name, y name); x sex=y sex: for(i=0; i 2; i+) x score i=y score 1; main() ST student=Bob, f, 99 2, 89 0; fun(student); printf( s, c, 2 0f, 2 0f n, student name, student sex,student score0, student score1); 程序运行后的输出结果是 ( )。
19、( A) Tom, m, 98, 90 ( B) Bob, f, 99, 89 ( C) Bob, f, 98, 90 ( D) Tom, f, 99, 89 37 设文件指针 fp=fopen(file, W),关于此文本文件操作的叙述中正确的是 ( )。 ( A)可以随意读和写 ( B)写操作结束后可以从头开始读 ( C)可以在原有内容后追加写 ( D)只能写不能读 38 有以下程序: #include #define f(x)2*x*x main() int a=2, s, t; s=f(a+1); t=f(a+1); printf( d, d n, s, t); 程序运行后的输出结果是
20、 ( )。 ( A) 7, 18 ( B) 18, 18 ( C) 7, 7 ( D) 18, 7 39 有以下程序: #include main() char x=4; printf( d n, x=x 2); 程序运行后的输出结果是 ( )。 ( A) 16 ( B) 8 ( C) 40 ( D) 4 40 设 fp为指向某二进制文件的指针,且已读到此文件末尾,则函数 feof(fp)的返回值为 ( )。 ( A) 0 ( B) 0 ( C)非 0值 ( D) NULL 二、程序填空题 41 下列给定程序中,函数 fun的功能是:从形参 SS所指字符串数组中,删除所有串长超过 k的字符串,
21、函数返回剩余字符串的个数。 SS所指字符串数组中共有 N个字符串,且串长小于 M。请在程序的下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #define N 5 #define M 10 int fun(ehar(*ss)M, int k) int i, j=0, len; *found* for(i=0; i int fun(int*b) int k, a1, a2, i=0; for(k=10; k #include #define M 14 void
22、 NONO(): void fun(char(*t)M, int*a, int*c) void get(char(*s)M) int i, j; for(i=0; iM; j+) for(j=0; jM; j+) sij=65+rand() 12; printf(“ c”, si 3j); printf(“ n”); main() char aMM; int x, y; get(a); fun(a, &x, &y); printf(“A= d C= d n”, x, y); NONO(); void NONO() *本函数用于打开文件,输人数据,调用函数,输出数据,关闭文件。 * FILE*r
23、p, *wf: int i, j, x, y: char aMM; fp=fopen(“c: test in dat”, “r”); wf=fopen(“c: test out dat”, “W”); for(i=0; iM; i+) for(j=0; jM; j+) fscanf(rp, “ c”, &aij); fun(a, &x, &y); fprintf(wf, “A= d n”, x); fprintf(wf, “C= d n”, y); fclose(fp); fclose(wf); 国家二级( C语言)机试模拟试卷 132答案与解析 一、选择题 1 【正确答案】 B 【试题解析】
24、 队列是一种线性结构,所以 C、 D两项错误,循环队列是一种顺序存储结构。 2 【正确答案】 B 【试题解析】 二叉树中度为 0的叶子节点总比度为 2的节点多 1个,所以度为 2的节点个数是 5 1=4,总节点是 20,所以度为 1的节点数是 20 5 4=11。 3 【正确答案】 A 【试题解析】 数据库模式分为内模式、外模式和概念模式。概念模式是指数据库中数据逻辑结构的描述,外模式是 用户的数据视图,给每个用户的局部数据描述,内模式是指数据库物理存储结构与存取方法。 4 【正确答案】 D 【试题解析】 实体完整性约束要求关系的主键中属性值不能为空。 5 【正确答案】 C 【试题解析】 设两
25、个关系 R和 S的元数分别为 r和 s(r s 0),那么 T=RS是一个 (r一 s)元的元组的集合,即 T中的域是在 R中但不在 S中的域组成,所以选C项。 6 【正确答案】 D 【试题解析】 PAD图在软件设计的详细设计阶段用到,系统结构图在程序需求分析阶段用到,程序流程图也在软件详细 设计阶段用到,均属于软件设计过程中使用的工具,唯有数据流图不是在软件设计阶段用到的工具,它是结构化分析方法中用到的工具,是在可行性分析阶段用到的工具,而非软件设计阶段。 7 【正确答案】 D 【试题解析】 因为是软件需求阶段,所以 D选项不正确。 8 【正确答案】 B 【试题解析】 黑盒测试主要是对软件的
26、功能进行测试和验证,因此不用测试软件内部的相关内容,包括算法、数据结构和流程等。 9 【正确答案】 A 【试题解析】 软件危机主要是指软件需求无法满足,软件进度无法控制,软件不可 维护,软件开发生产率低,软件质量难以控制,软件成本不断提高。所以选 A项。 10 【正确答案】 D 【试题解析】 程序模块化设计是采用自顶向下、逐步细化的方法,不是自底向上,所以选项 D不正确。 11 【正确答案】 D 【试题解析】 因为选项 B和 D是互反选项,所以答案定是其中之一, C语言的一个语句可以写在多行上,所以 D正确; A的错误在于 C语言可以通过 include语句将其他文件的内容引入当前文件, C项
27、的错误在于 C语言的注释可以出现在程序中间位置,当然也可以出现在语句前面。 12 【正确答 案】 A 【试题解析】 m+是先使用表达式的值再计算加 1,所以表达式的值是 0, +m是先计算加 1再使用值,所以表达式的值为 1,其他两个选项表达式的值均为 1,所以选项 A正确。 13 【正确答案】 C 【试题解析】 C语言中没有逻辑类型;多种数据类型的全集可以通过结构体来定义,双精度类型可以表示带有多位小数的数据,整数可以精确表示自然数。 14 【正确答案】 A 【试题解析】 科学计数法的 E后面必须是整数,所以 A)项不合法, C)项和 D)项分别是合法的八进制数和十六进制数。 15 【正确答
28、案】 B 【试题解析】 printf的输出完全按照格式输出,格式中两个输出变量之间没有空格,因此,输出结果应该是 123 141593输出格式中的 8 6f。是指总共有 8位,其中小数部分占 6位,所以 D)错。 16 【正确答案】 D 【试题解析】 C语言的字符变量可以当作特殊的整数变量对待,所以以 d的格式输出字符时,输出的是其对应的 ASC 代码。如果其和整数做运算,也是用ASC 代码进行运算,因此,结果是 65, 66。 17 【正确答案】 A 【试题解析】 x=3, 5, 7, 9 , x 2永远是大于 1的奇数,所以 A)项表达式为假, C项和 D)项表达式为真; x 3的值是大于
29、 1的整数,所以表达式不为 0。 18 【正确答案】 D 【试题解析】 if条件语句后跟了一个空语句,故要执行 else if后面的语句,必须是要 x大于 4且小于 8。 19 【正确答案】 A 【试题解析】 注意到 while后面的分号是一个空语句,且 a是先用表达式,再减 1,所以 while循环结束后 a的值是一 1,在打印语句中 +a是先加 1再使用表达式,所以输出结果是 0。 20 【正确答案】 D 【 试题解析】 当 i=0时,执行 else语句,打印 A,当 i=1时执行 if语句,打印b。 21 【正确答案】 B 【试题解析】 分析知,两个循环的外循环执行 2次,内循环执行 2
30、次,但外部循环体内有两个 x+,内循环体内有一个 x+,所以执行 x+的次数共计是外部 4次,内部是 2*2=4次,所以总共执行 8次,结果是 8。 22 【正确答案】 D 【试题解析】 函数的参数可以是指针类型。它的定义形式为 void(*pf)(),原函数定义的形参变量是一个整数型和一个字符指针型,所以答案 D正确。 23 【 正确答案】 A 【试题解析】 如果用变量作为实参进行函数调用,则实参和形参会占用不同的存储单元,即使变量名相同,也不会互相影响;但如果使用指针作为实参调用函数,则因为地址在内存中是唯一的,所以实参和形参占用相同的存储单元。 24 【正确答案】 B 【试题解析】 注意
31、定义数组时,元素个数可以是宏定义常量,但不能是变量。因此选项 B错。 25 【正确答案】 B 【试题解析】 for循环的变量 i=0, 1, 2,所以输出的数组元素是 t20,t11, t02,所以应该是 7, 5, 3。 26 【正确答案】 B 【试题解析】 子函数的功能是将数组中的元素进行对调,如 fun(a, 0, 2)是将数组中的元素 a0和 a2对调,所以执行 3次子函数以后的结果是 0345698712。 27 【正确答案】 B 【试题解析】 双重 for循环和 if条件语句结合实现对二维数组对角线上的元素1, 6, 2, 1进行从大到小的排序,输出结果只是第一行的内容,所以结果是
32、 6,2, 3, 4。 28 【正确答案】 B 【试题解析】 A选项错在不能用大括号, C选项和 D选项应在定义时赋初 值,如果定义之后赋值,则需要对数组的每个元素分别进行赋值。 29 【正确答案】 D 【试题解析】 数组元素在求长度时只计算其中的有效字符,所以 123的有效长度是 3,字符串的是转义字符,所以 n代表一个字符 (回车符 ),也只代表一个字符 ( ),所以 n123 的有效长度是 5。 30 【正确答案】 A 【试题解析】 子函数的功能是将字符串的每个字符加 1,注意到主函数中的实参是数组 a的第 4个元素,所以结果是 1235678。 31 【正确答案】 C 【试题解析】 子
33、函数中开始时两个指针 s和 t均指向字符串的首字符,执行while空循环语句后,由于 t+是先用值再加 1,所以 t指向了字符串结束符的下一个字符, t一一再将其移动回字符串的结束字符,而 s的位置一直没有变化,所以, t s是求字符串的长度。 32 【正确答案】 B 【试题解析】 子函数的功能是递归调用,但可以看出递归时, x和 y的值是同时减小的,且没有其他表达式,所以当 y为 0的时候, x=x y=5 3=2。 33 【正确答案】 C 【试题解析】 静态变量的值只在第一次定义时赋初值,所以选项 C错误; 定义的自动变量是个动态值,而可以在复合语句中定义变量;函数的形参是动态变量,不能说
34、明为 static类型。 34 【正确答案】 D 【试题解析】 定义的结构体中有两个变量,一个是整型变量,一个是整型指针;用此结构体定义了一个有两个元素的数组,并将此数组名赋给了此结构体指针,因此,结构体指针 ps便指向了数组第一个元素,因此, +ps一 x=+(ps一x)=11, ps一 x=10, *ps一 y=*(ps一 y)=1, (ps+)一 x=15。 35 【正确答案】 D 【试题解析】 子函数的 功能是将传入的数组的前 n一 1个元素的值均加 1。主函数中定义的结构体中包含了一个整数和一个数组,将其传入了函数后便实现了前n 1个元素的加 1操作。 36 【正确答案】 B 【试题
35、解析】 子函数的功能是将形参的值用一个固定的值覆盖,但因为是值传递,所以实参的值不会变化,所以在主函数中的结构体 astudent的值没有发生变化。 37 【正确答案】 D 【试题解析】 文件打开时的 w选项指该文件只能写不能读,因此答案 D正确。 38 【正确答案】 A 【试题解析】 此题考查的宏定义的代 入计算,在使用宏定义时,一定是先代入值再计算表达式的值,因此, f(a+1)=2*a+1*a+l=2*2+1*2+1=7,而f(a+1)=2*(a+1)*(a+1)=2*(2+1)*(2+1)=18。 39 【正确答案】 A 【试题解析】 位运算是以二进制数为对象的, 4的二进制是 000
36、00100,向左移动两位后是 00010000,是 16。 40 【正确答案】 C 【试题解析】 本题考查文件的定位, feof函数的用法是从输入流读取数据,如果到达文件末尾 (遇文件结束符 ), eof。函数值为非 零值,否则为 0,所以选项 C正确。 二、程序填空题 41 【正确答案】 (1)N (2)k (3)ssi 【试题解析】 本题考查: for循环语句; if语句条件表达式;字符串拷贝函数strcpy的使用。 填空 l: for循环语句作用是遍历字符串数组中的每一个字符串,所以循环变量 i的循环条件是 iN。填空 2:题目要求删除串长度小于 k的字符串,所以 if条件语句的条件表达
37、式是 len=k。填空 3:通过字符串拷贝函数将串长不大于 k的字符串另存,并记录个数。字符串拷贝函数 strcpy,其格式为: strcpy(字符数组名 1,字符数组名 2)功能:把字符数组 2中的字符串拷贝到字符数组 1中。字符串结束标识 0也一同拷贝。字符数名 2,也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。 三、程序修改题 42 【正确答案】 (1)a2=k 10; (2)return i; 【试题解析】 (1)a2存放十位数,所以是 a2=k 10,此处是一个书写错误。 (2)根据题意,要返回能被 3整除的数的个数,从循环体中可以知道其个数是由 i来计算的,所以返回的是 i。 四、程序设计题 43 【正确答案 】 int i=0, j=0;循环统计的下标 *a=0;初始化 a字符统计的个数 *c=0;初始化 c字符统计的个数 for(i=0; iM; i+)行 for(j=0; jM; j+)列 if(tij=A)字符是 a,计数 (*a)+; if(tij=c)字符是 c,计数 (*c)+; 【试题解析】 对二维数组的行列分别循环,行优先,查找数组中元素为 A或者C,分别对其进行计数。