1、国家二级( C语言)笔试模拟试卷 224 及答案与解析 1 设有表示学生选课的三张表,学生 S(学号,姓名,性别,年龄,身份证号 ),课程 C(课号,课名 ),选课 SC(学号,课号,成绩 ),则表 SC的关键字 (键或码 )为 ( A)课号,成绩 ( B)学号,成绩 ( C)学号,课号 ( D)学号,姓名,成绩 2 软件调试的目的是 ( )。 ( A)发现错误 ( B)改善软件的性能 ( C)改正错误 ( D)验证软件的正确性 3 下列叙述中正确的是 _。 ( A)一个逻辑数据 结构只能有一种存储结构 ( B)数据的逻辑结构属于线性结构,存储结构属于非线性结构 ( C)一个逻辑数据结构可以有
2、多种存储结构,且各种存储结构不影响数据处理效率 ( D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理效率 4 软件工程的出现是由于 ( A)程序设计方法学的影响 ( B)软件产业化的需要 ( C)软件危机的出现 ( D)计算机的发展 5 两个或两个以上模块之间关联的紧密程度称为 ( )。 ( A)耦合度 ( B)内聚度 ( C)复杂度 ( D)数据传输特性 6 数据结构作为计算机的一门学科 ,主要研究数据的逻辑结构、对各种数据结构进行的运算 ,以及 ( A)数据的存储结构 ( B)计算方法 ( C)数据映象 ( D)逻辑存储 7 下面的概念中,不属于面向对象方法的是 ( )。
3、 ( A)对象 ( B)继承 ( C)类 ( D)过程调用 8 关系表中的每一横行称为一个 _。 ( A)元组 ( B)字段 ( C)属性 ( D)码 9 已知 8个数据元素为 (34, 76, 45, 18, 26, 54, 92, 65),按照依次插入结点的方法生成一棵二叉排序树 后,最后 2层上的结点总数为 _。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 10 数据的存储结构是指 _。 ( A)数据所占的存储空间量 ( B)数据的逻辑结构在计算机中的表示 ( C)数据在计算机中的顺序存储方式 ( D)存储在外存中的数据 11 可以在 C语言程序中用做用户标识符的一组标识符是
4、 ( )。 ( A) void ( B) aa 123 abc BBN cas ( C) as+b3 ( D) 6f -123 Do If SIG 12 下面程序的运行结果是 ( )。 #include“stdio h” main() int i; for(i=1; i main() int c; while(c=getchar()!=n) switch(c-2) case O: case1: putchar(c+4); case 2:putchar(c+4); braeak; case3: putchar(c+3); default:putchar(c+2);break; 从第一列开始输入以
5、下数据, 代表一 个回车符。 2473 程序的输出结果是 _。 ( A) 668977 ( B) 668966 ( C) 66778777 ( D) 6688766 41 若函数调用时,参数为基本数据类型的变量,下列叙述中正确的是 ( )。 ( A)实参与其对应的形参共占存储单元 ( B)只有当实参与其对应的形参同名时才共占存储单元 ( C)实参与其对应的形参分别占用不同的存储单元 ( D)实参将数据传递给形参后,立即释放原先占用的存储单元 42 在关系模型中,二维表的行称为 _。 43 某二叉树中度为 2的结点有 n个 ,则该二叉树中有【 】个叶子结点。 44 软件测试方法中,黑盒测试法和白
6、盒测试法是常用的方法,其中黑盒测试法主要是用于测试【 】。 45 在深度为 5的完全二叉树中,度为 2的结点数最多为【 】。 46 结构化设计主要分为系统设计和模块设计,【 】的任务是决定系统的模块结构。 47 有以下程序: #include #include main() char a=a, b, c, d, e, g, h, 0; int ij; i=sizeof(a); j=strlen(a); printf(“ d, d”, i, j); 程序运行后的输出结果是 _。 48 已知字符 A的 ASCII码值为 65,以下语句的输出结果是【 】。 char ch=B; printf(“%c
7、%dn“ch,ch); 48 已有定义: char c= ; int a=1, b; (此处 c的初值为空格字符 ),执行b=!c for(; i =0;i-) t*=i; printf(“%dn“,t); 执行后输出结果是【 】。 53 下面程序 main() int x,y,m,n; x=5;y=8; m=+x,x; n=y+y+; printf(“%d,%d,%d,%d“,x,y,m,n); 运行后, x, y, m, n的值是 _。 54 以下程序的输出结果是 【 】 。 void fun() static int a=0; a+=2; printf(“%d“, A) ; main()
8、 int cc; for(cc=1; cc 4; cc+)fun(); printf(“n“); 55 设 x为 int型变量,请写出一个关系表达式【 】,用以判断 x同时为 3和 7的倍数时,关系表达式的值为真。 国家二级( C语言)笔试模拟试卷 224 答案与解析 1 【正确答案】 C 【试题解析】 “选课 SC”表是 “学生 5”表和 “课程 C”表的映射表,主键是两个表主键的组合。 2 【正确答案】 C 【试题解析】 在对程序进行了成功的测试之后将进入稃序调试,程序调试的任务是诊断和改正程序中的错误。 3 【正确答案】 D 【试题解析】 逻辑结构是反映了元素之间的逻辑关系的数据结构,存
9、储结构是逻辑结构在计算机中的存放形式,它们都具有线性结构和非线性 结构。逻辑结构有顺序、链接、索引等存储结构,采用不同的存储结构,数据处理的效率不同。 4 【正确答案】 C 【试题解析】 软件工程的基本概念。软件工程概念的出现源自于软件危机。为了消除软件危机 ,通过认真研究解决软件危机的方法 ,认识到软件工程是使计算机软件走向工程科学的途径 ,逐步形成了软件工程的概念。 5 【正确答案】 A 【试题解析】 模块的独立性是指每个模块保证完成系统要求的独立功能,并且与其他模块的联系少且接口简单。衡量软件的模块独立性有内聚性和祸台性两个定性度量标准。耦合性是模块间 互相连接紧密程度的度量。一般较优秀
10、的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,以利于提高模块的独立性。 6 【正确答案】 A 【试题解析】 数据结构作为计算机的一门学科 ,主要研究和讨论以下三个方面的问题 : 数据集合中各数据元素之间所固有的逻辑关系 ,即数据的逻辑结构 ; 在对数据进行处理时 ,各数据元素在计算机中的存储关系 ,即数据的存储结构 ; 对各种数据结构进行的运算。 7 【正确答案】 D 【试题解析】 面向对象方法是一种运用对象、类、封装、继承、多态和 消息等概念来构造、测试、重构软件的方法。面向对象方法从对象出发,发展出对象、类、消息、继承等概念。 8 【正确答案】 A 【试
11、题解析】 在关系数据库中,关系模型采用二维表来表示,简称 “表 ”。二维表是由表框架及表元组组成。在表框架中,按行可以存放数据,每行数据称为元组。 9 【正确答案】 B 10 【正确答案】 B 【试题解析】 数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构。 11 【正确答案】 B 【试题解析】 C语言规定,标识符是由字母、数字或下划线组成 ,并且它的第一个字符必须是字母或者下划线。 12 【正确答案】 A 【试题解析】 return 语句主要用于返回函数的值。在一个自定义函数中,可以根据不同的情况设置多条 return语句返回函数的值,也可以不包含 return语句。 13 【正
12、确答案】 B 【试题解析】 函数 fun 的功能是求两个数之和,其形参数据类型为 int型,函数的返回值类型是 float型。 fun(int)fun(a+c, b), a-c)中有两层函数调用,其中内层调用是 fun(a+c, b),因 a+c+b=2+8+5=15,而 返回类型是 float 型,所以fun(a+c, b)的值为 15.0,将该值强制变换为 int型后作为外层函数调用的参数,即fun(15, a-c)=15+a-c=15+2-8=9.0。因 printf语句的输出格式为 “%3.0f“,即小数点后 0位小数,故程序的输出为 9。 14 【正确答案】 B 【试题解析】 选项
13、A和选项 D都不是 C语言中的输入方法,选项 C中的变量名前面缺少取地址符 “getc()与 getchar()语句不能用于字符串的读入。 23 【正确答案】 B 【试题解析】 在 while(E)中,表达式 E可以是 C语言中任意合法的条件表达式,但不能为空,由它来控制循环体是否执行。在选项 B)中表达式 E 0E 0是一个逻辑表达式。 24 【正确答案】 B 【试题解析】 本题考查函数调用时的参数传递。在函数调用时,实参和其所对应的形参分别占用不同的存储单元,彼此之间只是实参将值传递给形参。 25 【正确答案】 B 【试题解析】 本题考查对文件的操作。文件打开后才可以对文件进行操作,使用结
14、束后要关闭 文件。对文件的操作都是顺序读写,即从文件的第一个数据开始,依次进行读写。 26 【正确答案】 C 【试题解析】 本题考查按位异或运算,异或就是相同为 0,不同为 1(化为二进制00001101), 017的二进制为 000001111,两者异或结果为 00000010。 27 【正确答案】 A 【试题解析】 在 C语言中,动态存储区域中存放的变量在使用时才分配内存空间,函数调用时返回的地址和自动类局部变量等存放在动态存储区域中。 auto变量和 register变量都属于自动类局部变量,因此选项 A正确。 static说明的变量为静态变量,静态变量在内存的静态存储中占据着永久的存储
15、单元,直至程序运行结束。 extern 说明的变量为外部变量,属于全局变量,全局变量在整个程序运行期间都占用内存空间。 28 【正确答案】 D 29 【正确答案】 C 30 【正确答案】 D 【试题解析】 程序中 if 子句后面有 2条语句 b=1; c=2;需要用 括起来,成为一条复合语句,否则 else找不到与之配对的 if,所以编译出错。 31 【正确答案】 D 【试题解析】 带参数的宏定义如下: #define宏名 (参数 )字符串。本题中,宏定义的作用是指定用标识符 PI 来代替 “3.1415926”这个字符串,但宏定义不是 C语句,行末不加分号。 32 【正确答案】 C 【试题解
16、析】 本题中,程序先执行语句 x=1.2;根据赋值运算的类型转换规则,先将常量 1.2转换为整型,取整数 1,并将其赋给变量 x,然后执行语句y=(x+3.8)/5.0。根据运算符的优先级,先计算小括号内的 x+3.8,其运算过程是:先将整型变量 x的值 1转换为 double型 1.0,然后与 3.8做加法运算,得到中间结果 4.8,接着进行除法运算 4.8/5.0,其结果小于 1.0,接着进行赋值运算,赋值号左边的变量 y的类型为整型,于是对这个小于 1.0的中间结果进行取整,结果为 0。于是变量 y的值为 0, d*y的值也为 0。 33 【正确答案】 C 【试题解析】 题目首先申请了一
17、个整型数组 a,并让一个指针变量 p 指向数组的元素 arl)。然后使用一个 for循环,循环变量 x从 1递增到 2,即循环两次在循环体中每次让 y累加 px的值,而 px)写成指针形式就是 *(p+x)。所以两次 y加的值分别是 a2和 a3的值,故最终输出 6+8=14。应该选择 C。 34 【正确答案】 D 【试题解析】 在 C语言中,函数参数的默认传递方式是传值,即函数内部的形参只是调用时的实参的一个拷贝,改变形参,实参不会被改变如果想要实现传址调用只能使用传递指针的方式来实现利用指针作函数的参数时,无论形参指针还是实参指针所指的都是同一个内存地址,所以形参如果改变了这个地址中的内容
18、,也就是改变了实参所指的地址内容本题程序开头定义了一个函数 f(),在函数中用一个临时变量 t交换了两个指针参数所指的地址内容,所以该函数的作用就是交换两个参数所指的内容。在主函数中,首先定义了一个 int型数组 a,并定义了两个 int型指针 p、 q 分别指向数组 a的第一个元素和最后一个元素。然后使用一个 while循环调用函数 f()不断交换两个指针所指的内容,每次交换后 p 往后移动一个元素, q往前移动一个元素,直到 q不再大于 p,即直到两个指针在数组a的中间相遇为止。所以,程序最终运行的结果是数组 a中的所有元素全被反序排列一次。故应该选择选项 D。 35 【正确答案】 A 【
19、试题解析】 本题考查的是函数的综合应用程序开头定义了两个函数 f1()、f2(),每个函数都只有一条语句,在 f1()中是 “如果 x y则返回 x否则返回广,即返回两个参数中较大的那一个, C()则正好相反, 返回较小的 主函数的语句 e=f2(f1(a,b), f1(c, d);是使用两次调用 n()函数的返回值作为 f2()函数的参数,并将 n()的返回值赋给变量 e a、 b中较大的数是 a为 4, c d中较大的数是 c为5, 4和 5中较小的数是 4,所以结果 e=4同理可以推出 f=3,那么 g=a+b+c+d-e-f=4+3+5+2-4-3=7。所以, 4个选项中选项 A符合题
20、意。 36 【正确答案】 B 【试题解析】 C语言中字符串是以 0字符结束的,且 strlen()函数计算的是 0字符前的所有字符的个数。本题中 strlen(st)应为 5。数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。 sizeof()函数是计算变量或数组的所分配到的内存空间的大小。所以本题的 sizeof(st)为 20。 37 【正确答案】 C 38 【正确答案】 D 【试题解析】 本题主要通过 while循环对满足条件的元素进行交换。 39 【正确答案】 B 【试题解析】 p=&a 表达式的含义是将变量 a的地址赋给指针变量 p; a=*p+b表达式的含义是指针
21、变量 p 所存地址对应的值与 b 的和赋给 a。 40 【正确答案】 A 【试题解析】 getchar()函数是从键盘接受一个字符输入;当用户键入的字符不是回车符时,会进入一个多分支选择语句,根据 C-2的值进行分支选择; putchar()是在屏幕上打印一个字符,最后的结果应当为 668977。 41 【正确答案】 C 【试题解析】 本题考查函数调用时的参数传递。函数的形参是函数定义时由用户定义的形式上的变量,实参是函数调用时,主调函数为被调函数提供的原始数据。在函数 调用时,实参和其所对应的形参分别占用不同的存储单元,彼此之间不影响。 42 【正确答案】 元组 【试题解析】 在关系型数据库
22、中,用二维表来表示关系,二维的表名即关系名,二维表的行称为关系的元组,二维表的列,称为关系的属性。 43 【正确答案】 n+1 【试题解析】 在任意一棵二叉树中 ,度为 O多结点 (即叶子结点 )总是比度为 2多结点多一个。 44 【正确答案】 软件外部功能 45 【正确答案】 15 【试题解析】 在深度为 5的完全二叉树中,度为 2的结点数最多的是深度为 5的满二 叉树。在深度为 5的满二叉树中,前 4层中所有结点的度为 2。即在深度为 5的完全二叉树中,度为 2的结点数最多相当于深度为 4的满二叉树中的结点数。深度为 4的满二叉树中的结点数为 24(上标 )-1=15。 46 【正确答案】
23、 系统设计 【试题解析】 结构化设计主要分为系统设计和模块设计。系统设计决定系统的模块结构,模块设计具体考虑每个模块内部的算法、模块输入、输出及模块功能。 47 【正确答案】 9, 8 【试题解析】 sizeof(a)是统计字符所占的字节数,字符串结束标志 0也占一个字节,也要 算进去,所以 i=9。而 strlen(a)是计算字符串的长度,不包括字符串结束标志 0,所以 j=8。 48 【正确答案】 B66 【试题解析】 B的 ASCII值是 66。 char型字符以 “d%”格式输出时,输出该字符的 ASCII码值。 48 【试题解析】 字符空格的 ASCII码不为 0,所以本题中表达式
24、!c的值为 0,b=0&1的结果显然为 0。 48 【试题解析】 本题中,代码定义 3行 2列的二维数组 a,定义指向两个元素的一维数组指针 p,并让 p指向两维数组 a的首行,则代码 *(*(p+2)+1)中的 p+2指向两维数组 a的第三行 a2, *(p+2)指向 a20, *(p+2)+1指向 a21, *(*(p+2)+1)是引用 a21,其值是 60。 49 【正确答案】 白盒 【试题解析】 白盒测试的基本原则是:保证所测模块中每一独立路径至少执行一次;保证所测模块所有判断的每一分支至少执行一次;保证所测模块每一循环都在边界条件下至少执行一次;验证所有内部数据结构的有效性。 50
25、【正确答案】 数据库系统。 【试题解析】 数据库系统技术的发展过程分为人工管理、文件 系统以及数据系统3个阶段,文件系统提供了简单的数据共享与数据管理能力,但是它无法提供完整的、统一的、管理和数据共享的能力。数据独立性是数据与程序间的互不依赖性,即数据的逻辑结构、存储结构与存取方式的改变不会影响应用程序。所以数据独立最高的阶段是数据库系统。 51 【正确答案】 x+=1 【试题解析】 本题考查 “+”, “-”运算符。 “+”、 “-”只能作用于变量,不能用于表达式或常量;前缀形式是在使用变量之前先将其值增 1或减 1,后缀形式是先使用变量原来的值,使用完后再使其增 1或减 1。 52 【正确
26、答案】 0 【试题解析】 本题中的 for循环共执行了 6次,每执行一次将相应 i的值相乘,最后当 i=-1时停止循环。该 for循环执行完后 t的值为 5*4*3*2*1*0=0,故最后输出 t的值为 0。 53 【正确答案】 6,9,6,16。 【试题解析】 赋值语句 m=+x, x;是将逗号表达式的值赋给 m, x和 m的值都是 6,赋值语句 n=y+y+;是将 y+y的值 16赋给 n,再执行 y 的自加运算, y的值变为 9。 54 【正确答案】 246 【试题解析】 循环 for(cc=1; cc 4; cc+)被执行了 3次。在函数 fun 中,由于a是 static型变量,所以函数第 1次调用后, a=2;第 2次调用后, a=4:第 3次调用后, a=6。 55 【正确答案】 (x%3=0)&(x%7=0)