1、国家二级( C语言)机试模拟试卷 72及答案与解析 一、选择题 1 在关系代数运算中,有 5种基本运算,它们是 ( )。 ( A)并 ( )、差 ( )、交 ()、除 ()和笛卡儿积 () ( B)并 ( )、差 ( )、交 ()、投影 ()和选择 () ( C)并 ( )、交 ()、投影 ()、选择 ()和笛卡儿积 () ( D)并 ( )、差 ( )、投影 ()、选择 ()和笛卡儿积 () 2 在数据库系统的组织结构中,下列 ( )映射把用户数据库与概念数据库联系了起来。 ( A)外模式模式 ( B)内 模式外模式 ( C)模式内模式 ( D)内模式模式 3 下列关于线性链表的描述中,正确
2、的是 ( )。 I、只含有一个指针域来存放下一个元素地址 II、指针域中的指针用于指向该结点的前一个或后一个结点 (即前件或后件 ) III、结点由两部分组成:数据域和指针域。 ( A)仅 I、 II ( B)仅 I、 III ( C)仅 II、 III ( D)全部 4 下面关于数据库三级模式结构的叙述中,正确的是 ( )。 ( A)内模式可以有多个,外模式和模式只有一个 ( B)外模式可以有多个,内模式和模式只有 一个 ( C)内模式只有一个,模式和外模式可以有多个 ( D)模式只有一个,外模式和内模式可以有多个 5 设有关键码序列 (66, 13, 51, 76, 81, 26, 57,
3、 69, 23),要按关键码值递增的次序排序,若采用快速排序法,并以第一个元素为划分的基准,那么第一趟划分后的结果为 ( )。 ( A) 23, 13, 51, 57, 66, 26, 81, 69, 76 ( B) 13, 23, 26, 51, 57, 66, 81, 76, 69 ( C) 23, 13, 51, 57, 26, 66, 81, 69, 76 ( D) 23, 13, 51, 57, 81, 26, 66, 69, 76 6 下列哪一条不属于数据库设计的任务 ?( ) ( A)设计数据库应用结构 ( B)设计数据库概论结构 ( C)设计数据库逻辑结构 ( D)设计数据库物
4、理结构 7 数据库技术的根本目标是 ( )。 ( A)数据存储 ( B)数据共享 ( C)数据查询 ( D)数据管理 8 需求分析阶段的任务是 ( )。 ( A)软件开发方法 ( B)软件开发工具 ( C)软件开发费用 ( D)软件系统功能 9 关系数据库管理系统能实现的专门关系运算包括 ( )。 ( A)排序、索引、统计 ( B)选择、投影、连接 ( C)关联、更新、排序 ( D)显示、打印、制表 10 数据管理技术发展的三个阶段中, ( )没有专门的软件对数据进行管理。 I人工管理阶段 II文件系统阶段 III数据库阶段 ( A)仅 I ( B)仅 III ( C) I和 II ( D)
5、II和 III 11 下面说法正确的是 ( )。 ( A)一个 C程序可以有多个主函数 ( B)一个 C语言的函数中只允许有一对花括号 ( C) C程序的书写格式是自由的,一个语句可以写在一 行上,也可以写在多行内 ( D)在对 C程序进行编译时,可以发现注释行中的拼写错误 12 下列不合法的用户标识符是 ( )。 ( A) j2_KEY ( B) Double ( C) 4d ( D) _8_ 13 以下 4个选项,不能看作一条语句的是 ( )。 ( A) ; ( B) int x 0, y 1, z 0; ( C) if(!a); ( D) if(b=0)m 1; n 2; 14 设 a和
6、 b均为 int型变量,且 a 6、 b 11、 c 3,则能使值为 3的表达式是( )。 ( A) b (c 4) ( B) b (c a 5) ( C) b a a 5 ( D) (b a) (a 4) 15 以下程序的输出结果是 ( )。 main() int a 4,b 3,c 2,d 1; printf(“ d“, a b?a: d c?d: b); ( A) 1 ( B) 3 ( C) 2 ( D) 4 16 阅读以下程序 #include main() Int Case; float printF; printf(“请输入 2个数: “); scanf(“ d f“, main(
7、) char s “aa89gggh“; del(s); printf(“ n s“, s); ( A) aa ( B) 89 ( C) gggh ( D) aa89gggh 27 下列说法不正确的是 ( A) int *fun(); -fun是一个返回 int指针的函数 ( B) int(*fun)(); -fun是一个返回 int指针的函数 ( C) int(*array5)0; -array是一个有 5个元素的数组,每一个元素都是一个函数指针,指向一个返回 int的函数。 ( D) int(*fun(int)(int); -fun是带有一个 int参数的函数,返回值是一个函数指针,这个指
8、针指向带有一个 int参数并返回 int的函数。 28 下列程序的输出结果是 ( )。 #include void fun(int*a, int*b) int*k; k a; a b; b k; main() int a 1, b 2, *x tM; int n,i; printf(“ nThe original string n n“); for(i 0; i N; i )puts(chi); printf(“ n“); printf(“ nEnter a string for search: “); gets(t); n fun(ch, t); *found* if(n=_3_)print
9、f(“ nDont found! n“); else printf(“ nThe position is d n“, n); 三、程序修改题 42 给定程序 MODI1 C中函数 fun的功能是:从低位开始取出长整型变量 S中奇数位上的数,依次构成一个新数放在 t中。高位仍在高位,低位仍在低位。 例如,当 S中的数为: 7654321时, t中的数为: 7531。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include *found* void fun(long s, long t) long s1 10; *t S
10、 10; while(s 0) s s 100; *t s 10*s1 *t; *found* s1 s1*100; main() long S, t; printf(“ nPlease enter s: “); scanf(“ ld“, &s); fun(s, &t); printf(“The result is: ld n“,t); 四、程序设计题 43 请编写一个函数 fun,它的 功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。 主函数中 x是数组名, n是 x中的数据个数, max存放最大值, index存放最
11、大值所在元素的下标。 注意:部分源程序存在文件 PROG1 C文件中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include void fun(int a, int n, int*max, int *d) main() int i, x20, max, index, n 10; void NONO(); for(i 0; i n; i )xi rand() 50; printf(“ 4d“, xi); printf(“ n“); fun(x, n, &max, &index); printf(“Max 5d, In
12、dex 4d n“, max, index); NONO(); void NONO() *木本函数用于打开文件,输入数据,调用函数,输出数据,关闭 文件。 * FILE*fp, *wf; int i, x20, max, index, n 10, j; fp fopen(“in dat“,“r“); wf fopen(“out dat“, “W“); for(i 0; i 10; i ) for(j 0; j n; j )fscanf(fp, “ d, “, &xj); fun(x, n, &max, &index); fprintf(wf,“Max d,Index d n“, max, in
13、dex); fclose(fp); fclose(wf); 国家二级( C语言)机试模拟试卷 72答案与解析 一、选择题 1 【正确答案】 D 【试题解析】 并、差、笛卡儿积、投影和选择是 5种基本的运算,其他运算即交、连接和除,均可以通过 5种基本的运算来表达。 2 【正确答案】 A 【试题解析】 数据库有两层映像,即外模式模式和模式内模式映像。模式内模式映像定义数据库全局逻辑结构与存储结构之间的对应关系。 3 【正确答案】 D 【试题解析】 在定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表 为单链表或线性链表。 在链式存储方式中,要求每个结点由两部分组成:一部分用于存放
14、数据元素值,称为数据域;另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点 (即前件或后件 )。 4 【正确答案】 B 【试题解析】 数据库的三级模式结构是指数据库系统的外模式、模式和内模式。一个数据库可以有多个外模式,但只有一个模式和一个内模式。 5 【正确答案】 A 【试题解析】 快速排序是起泡排序的改进。在快速排序中,任取一个记录,以它为基准用交换的方法将所有的记录分成两部分,关键 码值比它小的在一部分,关键码值比它大的在另一部分,再分别对两个部分实施上述过程,一直重复到排序完成。 6 【正确答案】 A 【试题解析】 数据库设计工作量大而且过程复杂,既是一项数据
15、库工程也是一项庞大的软件工程。考虑数据库及其应用系统开发全过程,将数据库设计分为以下 6个阶段:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库实施和数据库的运行和维护。 7 【正确答案】 B 【试题解析】 数据库是长期储存在计算机内、有组织的、可共享的大量数据的集合,它具有统一的结构形式并存放于统一 的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享,所以数据库技术的根本目标是解决数据共享问题。 8 【正确答案】 D 【试题解析】 需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的各种需求,然后在这些基
16、础上确定新系统的功能。 9 【正确答案】 B 【试题解析】 关系数据库管理系统的专门关系运算包括选择运算、投影运算和连接运算。 10 【正确答案】 A 【试题解析】 数据管理技术发展的三个阶段中, 只有人工管理阶段,没有操作系统,没有管理数据的软件,数据处理方式是批处理。在文件系统阶段,操作系统中已经有了专门数据管理软件,一般称为文件系统。在数据库系统阶段,出现了统一管理数据的专门软件系统,即数据库管理系统。 11 【正确答案】 C 【试题解析】 本题涉及 c语言基本的 3个知识点: C语言规定一个程序只允许有一个主函数,一个函数内可以允许有多个花括号; C程序的注释部分仅仅是方便程序员阅读,
17、提高程序的可读性和可移植性,它并不参与程序的编译,所以编译器也就不会发现注释中的错误。 12 【正确 答案】 C 【试题解析】 在 C语言程序中,合法标识符的命名规则是:标识符可以由字母、数字和下划线组成,并且第一个字符必须是字母或下划线。 13 【正确答案】 D 【试题解析】 if语句是用来判定所给的条件是否满足,根据判定的结果 (真或假 )决定执行给出的两种操作之一。 在 if和 else后面可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括号 “”将几个语句括起来成为一个复合语句。选项 D中没有将两个操作语句括起来,不能看作一条语句。 14 【正确答案】 D 【试题解析】 选
18、项 D括号内的运算分别是 b a 11 6 5和 a c 6 4 2,最后得到 5-2 3。 15 【正确答案】 D 【试题解析】 本题首先判断 ab,当 ab时结果等于 a,否则等于 “dc?d: b”,因为 ab,所以直接输出 a的值,注:这里 “a: dc?d: b”是用来干扰考生的。 16 【正确答案】 B 【试题解析】 C语言是一种大小写敏感的语言,因此 Int应为 int,而 Case printF则可以使用。 17 【正确答案】 C 【试题解析】 在 C语言中, switch()后的一对圆括 号中可以是整型表达式或字符表达式。 case语句后面的常量表达式的类型必须与 switc
19、h后圆括号中的表达式类型相同,各 case语句标号的值应该互不相同。选项 A中 case后面的常量表达式为实型,所以不正确;选项 D中 case后面出现了变量表达式,所以选项 D错误。 18 【正确答案】 D 【试题解析】 本题考查不同进制间的转换。 printf输出函数中输出变量的格式,由输出格式符决定。题中 “ o”格式符表示以八进制的形式输出: “ x”格式符表示以十六进制的形式输出。 “33”的八进制和十六进制分别是 41和 21。 19 【正确答案】 C 【试题解析】 本程序是通过 getchar()函数读入字符,并通过 putchar()函数将字符逐个输出,当用户输入 “?”时停止
20、输出。 20 【正确答案】 A 【试题解析】 本题中, (int)(x*1000 0 5)的结果为 1237, (float)1000是将 1000强制转换成 float类型;整个表达式 (int)(x*1000 0 5) (float)1000的结果为1 237000,再以实数 (6位小数 )形式输出。 21 【正确答案】 A 【试题解析 】 本题考查 printf的输出格式和条件表达式 “?: ”的使用。 printf函数输出时, “& d n”和 “! d n”中的 “&”和 “!”都是直接输出。 条件表达式的基本格式为: a?b: c。其运算规则为:当 a为非 0时,整个表达式的值取
21、b的值,当 a为 0时,整个表达式取 c的值。 printf函数中如果在格式说明符之前插入任何字符都将原样输出。本题中 a b为真,所以返回 “&ad”。 22 【正确答案】 C 【试题解析】 “ b”格式符表示退格,功能是将它后面的字母把它前面的字母覆盖,导致 “ b”格式符前面的字母不能输出; “ ”格式符表示输出单引号字符; “ ”格式符表示输出反斜线字符。 23 【正确答案】 A 【试题解析】 分析程序可知,程序循环 5次,然后利用 if语句决定每次循环时输出的字符。当 i为奇数时, i 2 1, if(i 2)为真,输出 “*”;当 i为偶数时, i 2 0, if(i 2)为假,执
22、行 else语句,输出 “ ”,所以当 i取 1、 3、 5值时输出“*”,当 i取 2、 4值时输出 “ ”。 24 【正确答案】 A 【试题解析】 return语句主要用于返回函 数的值。在一个自定义函数中,可以根据不同的情况设置多条 return语句返回函数的值,也可以不包含 return语句。 25 【正确答案】 C 【试题解析】 本题考查 dowhile 循环。在 dowhile 构成的循环体中,总是先执行一次循环体,然后再求表达式的值。当执行完第三次循环时,得到 n 3,while循环表达式仍然成立,接着执行直到 n 4,表达式不成立,跳出循环,结束程序。 26 【正确答案】 B
23、【试题解析】 本题中 del(char*s)函数实现的功能是:逐个读入 s数组中的字符,如果 遇到数字,则将其重新存在 s中,遇到非数字字符则跳过。所以最后输出的应该是字符串 s中的所有数字。 27 【正确答案】 B 【试题解析】 该函数中 fun是一个函数指针。指向一个返回 int的函数。 28 【正确答案】 B 【试题解析】 本题考查函数调用时的参数传递。分析题目可知 fun函数的形参是指向实参的指针,但 main()函数中调用 fun()函数时,实参是指针变量 x、 y(分别为指向 a和 b的指针 ), a、 b的值在函数调用前后未发生变化,因而 a 1, b2,即输出 1 2。 29
24、【正确答案】 B 【试题解析】 此题考查的是二维数组的初始化。题干中数组 a的第二个下标为3,由此可知数组 a是一个 2行 3列的数组,初始化时未赋初值的元素的值自动为0,所以与选项 B是等价的,最后一个元素的值为 0。 30 【正确答案】 C 【试题解析】 strlen(s)返回 s字符串中字符的个数,若 s是一个数组,则返回数组元素的个数。 31 【正确答案】 A 【试题解析】 此题考查的是函数参数的传递。 main函数中首先调用 fun函数,fun函数的功能是使字符 c的 ASCII码值加 1并输出,使 d加 1并输出 对应的字符; fun(&b,a)输出 “g, G”,但是由于 fun
25、函数的第一个参数进行的是地址传递,而第二个参数进行的是值传递,所以 main函数中的 printf函数输出 “F, g”。 32 【正确答案】 D 【试题解析】 本题考查如何引用数组元素的地址。选项 A中, p 5引用的是 a5的地址,而数组 a只有 5个元素,即 a0、 a1、 a2、 a3、 a4,所以引用错误;选项 B中, *a 1指的是将数组 a的第一个元素加 1;选项 C中,这种引用方式错误;选项 D中, &a0引用的是数组的首地址。 33 【正确答案】 C 【试题解析】 本题考查字符串比较函数 strcmp(),调用形式: strcmp(str 1, str 2),其中 str 1
26、、 str 2分别是字符串存储区的首地址,函数功能:比较字符串str1和 str2,当 str1 str2时,返回值为负数;当 str1 str2时,返回 0;当 str1 str2,返回值为正数。注意:不能使用关系运算符比较两个字符串的大小。 34 【正确答案】 B 【试题解析】 本题考查字符比较函数和字符复制函数: stremp(s1, s2);函数功能:比较字符串 str1和 str2比较的是字符的 ASCII码的值,当 stHr1 str2时,返回值为负数;当 str1 str2时,返回 0;当 str1 str2,返回值为正数。 35 【正确答案】 C 【试题解析】 本题考查的是 f
27、or循环以及 while循环。 fun函数中定义了静态变量 i 0, fun(a)使得 a0 a0 a1 4, a1 a1 a2 8,此时 i的值变为1, i 2不成立,所以 do while循环结束,输出数组 a的各元素即得到48549。 36 【正确答案】 D 【试题 解析】 分析程序, i k;使得 i的值每次增加 2然后再和 j进行比较看 i j是否成立, i的变化过程为: i 2,i 4, i 6,i 8,i 10,i 12,此时 i j成立,所以判断 i j共执行的次数为 6次。 37 【正确答案】 B 【试题解析】 本题考查的是结构和数组元素所占的字节数。题目中定义的结构 st因
28、为包含 x、 y、 z这 3个元素,所以 size(struct st) 2 2 2 6;而联合体所占的字节数,由于最后存入的元素会把前面存入的元素覆盖掉,所以联合体所占的字节数就是占据最多存储单元的元素所占 的字节数, sizeof(un) sizeof(long) 4。 38 【正确答案】 B 【试题解析】 由于联合体是同一存储区域由不同类型的变量共事,所以不可以直接对联合体变量名进行赋值,且联合体中的空间在某一时刻只能保持莱一成员的数据;另外合体中可以出现结构类型的成员。 39 【正确答案】 A 【试题解析】 本题主要考查按位异或和右移运算。 b 4的二进制为 00000100, b 2
29、后为 00000001, a 2的二进制为 00000010,两者异或为 00000011。 40 【正确答案】 A 【试题解析】 分析程序段,首先以只写方式打开文件,利用 fprintf函数将 i和 j的值写入到文件 d1 dat中,然后关闭文件;再以只读方式打开文件,利用格式化输入函数 fseanf将文件中的数据赋值给 k和 n,最后输出 k和 n的值,分别是20和 30。 二、程序填空题 41 【正确答案】 (1)N (2)i (3) 1 【试题解析】 第一空: “for(i 0; i _1_; i )”补充循环的结束条件, fun的参数 (*ss)M是指向 N行 M列的字符串数组,循环
30、是逐行查找是否存在 t所指的字符串,因此循环次数是 N次,故第一空处应为 “N”。 第二空: “if(strcmp(ssi, t)=0)return_2_; ”说明两个字符串相同,按照题干要求,应返回该串在字符串数组中的位置 i,故第二空处为 “i”。 第三空: “if(n=_3_)printf(“ nDont found! n“); ”, fun函数未找到则返回 1,因此这里是判断 n是否等于 1,如果 n等于 1标识没有找到,在屏幕上输出 “Dont found!”,因此第三空处为 “ 1”。 三、程序修改题 42 【正确答 案】 (1)void fun (long s, long *t)
31、 (2)s1 s1*10; 【试题解析】 (1)根据 “*t s 10”判断, t应该是个指针变量,所以 “void fun(long s, long t)”语句中的 t只需改为 “void fun(long s, long *t)”。 (2)分析函数内的循环过程可知 s1的用途是每次将 *t扩大,记录每次得到的奇数位的数字的权值, s1的权值每次增加 1位,因此第二个标识下应该是 “s1s1*10: ”。 四、程序设计题 43 【正确答案】 int i; *max a0; *d 0; *把数组的第 1个元素值赋值给最大值变量 *max* fur(i 1; i n; i ) if(*maxai) *判断 *max是否小于当前值 * *max ai; *重新把最大值赋值给 *max* *d i; *记住下标 * 【试题解析】 进入 fun函数,根据前面的分析: (1)*max指针变量首先指向数组 a的第一个数据,同时将标志位 *d初始值赋为 0。 (2)然后利用 for循环对每一个当前数组数据与 max标记的数据进行比较。 (3)循环中将求得 的最大数据 ai赋值给 *max,并将该数据项数组标志位赋给标志位 *d。