[计算机类试卷]2007年4月国家二级(C语言)笔试真题试卷及答案与解析.doc

上传人:dealItalian200 文档编号:492623 上传时间:2018-11-30 格式:DOC 页数:33 大小:90KB
下载 相关 举报
[计算机类试卷]2007年4月国家二级(C语言)笔试真题试卷及答案与解析.doc_第1页
第1页 / 共33页
[计算机类试卷]2007年4月国家二级(C语言)笔试真题试卷及答案与解析.doc_第2页
第2页 / 共33页
[计算机类试卷]2007年4月国家二级(C语言)笔试真题试卷及答案与解析.doc_第3页
第3页 / 共33页
[计算机类试卷]2007年4月国家二级(C语言)笔试真题试卷及答案与解析.doc_第4页
第4页 / 共33页
[计算机类试卷]2007年4月国家二级(C语言)笔试真题试卷及答案与解析.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、2007 年 4月国家二级( C语言)笔试真题试卷及答案与解析 1 下列叙述中正确的是 ( A)算法的效率只与问题的规模有关,而与数据的存储结构无关 ( B)算法的时间复杂度是指执行算法所需要的计算工作量 ( C)数据的逻辑结构与存储结构是一一对应的 ( D)算法的时间复杂度与空间复杂度一定相关 2 在结构化程序设计中,模块划分的原则是 ( A)各模块应包括尽量多的功能 ( B)各模块的规模应尽量大 ( C)各模块之间的联系应尽量紧密 ( D)模块内具有高内聚度、模块间具有低耦合度 3 下列叙述中正确 的是 ( A)软件测试的主要目的是发现程序中的错误 ( B)软件测试的主要目的是确定程序中错

2、误的位置 ( C)为了提高软件测试的效率,最好由程序编制者自己来完成软件测试的工作 ( D)软件测试是证明软件没有错误 4 下面选项中不属于面向对象程序设计特征的是 ( A)继承性 ( B)多态性 ( C)类比性 ( D)封装性 5 下列对队列的叙述正确的是 ( A)队列属于非线性表 ( B)队列按 “先进后出 ”原则组织数据 ( C)队列在队尾删除数据 ( D)队列按 “先进先出 ”原则组织数据 6 对下列二叉树 进行前序遍历的结果为 ( A) DYBEAFCZX ( B) YDEBFZXCA ( C) ABDYECFXZ ( D) ABCDEFXYZ 7 某二叉树中有 n个度为 2的结点,

3、则该二叉树中的叶子结点数为 ( A) n+l ( B) n-1 ( C) 2n ( D) n/2 8 在下列关系运算中,不改变关系表中的属性个数但能减少元组个数的是 ( A)并 ( B)交 ( C)投影 ( D)笛卡儿乘积 9 在 E-R图中,用来表示实体之间联系的图形是 ( A)矩形 ( B)椭圆形 ( C)菱形 ( D)平行四边形 10 下列叙述中错误的是 ( A)在数据库系统中,数据的物理结构必须与逻辑结构一致 ( B)数据库技术的根本目标是要解决数据的共享问题 ( C)数据库设计是指在已有数据库管理系统的基础上建立数据库 ( D)数据库系统需要操作系统的支持 11 算法中,对需要执行的

4、每一步操作,必须给出清楚、严格的规定。这属于算法的 ( A)正当性 ( B)可行性 ( C)确定性 ( D)有穷性 12 以下叙述中错误的是 ( A)计算机不能直接执行用 C语言编写的源程序 ( B) C程序经 C编译程序编译后,生成后缀为 .obj的文件是一个二进制文件 ( C)后缀为 .obj的文件,经连接程序生成后缀为 .exe的文件是一个二进制文件 ( D)后缀为 .obj和 .exe的二进制文件都可以直接运行 13 按照 C语言规定的用户标识符命名规则,不能出现在标识符中的是 ( A)大写字母 ( B)连接符 ( C)数字字符 ( D)下划线 14 以下叙述中错误的是 ( A) C语

5、言是一种结构化程序设计语言 ( B)结构化程序由顺序、分支、循环三种基本结构组成 ( C)使用三种基本结构构成的程序只能解决简单问题 ( D)结构化程序设计提倡模块 化的设计方法 15 对于一个正常运行的 C程序,以下叙述中正确的是 ( A)程序的执行总是从 main函数开始,在 main函数结束 ( B)程序的执行总是从程序的第一个函数开始,在 main函数结束 ( C)程序的执行总是从 main函数开始,在程序的最后一个函数中结束 ( D)程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束 16 设变量均已正确定义,若要通过 scanf(“%d%c%d%c“, for(i=

6、1; i 4;i+) for(j=i; j 4; j+)printf(“%d*%d=%d “, i, j, i*j); printf(“n“); 程序运行后的输出结果是 ( A) 1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 3*1=3 ( B) 1*1=1 1*2=2 1*3=3 2*2=4 2*3=6 3*3=9 ( C) 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 ( D) 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 25 以下合法的字符型常量是 ( A) x13 ( B) 081 ( C) 65 ( D) n 26

7、在 C语言中,函数返回值的类型最终取决于 ( A)函数定义时在函数首部所说明的函数类型 ( B) return语句中表达式值的类型 ( C)调用函数时主调函数所传递的实参类型 ( D)函数定义时形参的类型 27 已知大写字母 A的 ASCII码是 65,小写字母 a的 ASCII码是 97。以下不能将变量 c中的大写字母转换为对应小 写字母的语句是 ( A) c=(c-A)%26+a ( B) c=c+32 ( C) c=c-A+a ( D) c=(A+c)%26-a 28 有以下函数 int fun(char *s) char *t=s; while(*t+); return(t-s); 该

8、函数的功能是 ( A)比较两个字符串的大小 ( B)计算 s所指字符串占用内存字节的个数 ( C)计算 s所指字符串的长度 ( D)将 s所指字符串复制到字符串 t中 29 设已有定义: float x;,则以下对指针变量 p进行定义且赋初值的语句中正确的是 ( A) float *p=1024; ( B) int *p=(float)x; ( C) float p= for(i=0; i n-1; i+) for(j=i+1; jn; j+) if(flag?bi bj: bi bj)t=bi; bi=bj;bj=t; main() int a10=5, 4, 3, 2, 1, 6,7, 8

9、, 9, 10, i; f( f(a); for(i=0;i 10, i+)printf(“%d, “, ai); 程序运行后的输出结果是 ( A) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ( B) 1, 2, 6, 8, 10, 12, 7, 8, 9, 10, ( C) 1, 2, 3, 4, 10, 12, 14, 16, 9, 10, ( D) 1, 2, 6, 8, 10, 12, 14, 16, 9, 10, 33 有以下程序 typedef structint b, p; A; void f(A c)/* 注意: c是结构变量名 */ int j; c.b+

10、=1;c.p+=2; main() int i; A a=1,2; f(a); printf(“%d, %dn“, a.b, a.p); 程序运行后的输出结果是 ( A) 2, 3 ( B) 2, 4 ( C) 1, 4 ( D) 1, 2 34 有以下程序 main() int a44=1,4, 3, 2, 8, 6, 5,7, 3, 7, 2, 5, 4, 8, 6, 1, i, j, k, t; for(i=0; 4: i+) for(j=0; j 3; j+) for(k=j+1; k 4; k+) if(aji akit=aji; aji=aki=aki=t; /*按列排序 */ f

11、or(i=0; i 4; i+)printf(“%d, “, aii); 程序运行后的输出结果是 ( A) 1, 6, 5, 7, ( B) 8, 7, 3, 1, ( C) 4, 7, 5, 2, ( D) 1, 6, 2, 1, 35 有以下程序 main() int a44=1, 4, 3, 2, 8, 6,5, 7, 3, 7, 2, 5, 4, 8, 6, 1, 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, “,

12、a0i); 程序运行后的输出结果是 ( A) 6, 2, 1, 1, ( B) 6, 4, 3, 2, ( C) 1, 1, 2, 6, ( D) 2, 3, 4, 6, 36 有以下程序 void f(int *q) int i=0; for(; i 5; i+) (*q)+; main() int a5=1,2, 3, 4, 5, i; f(a); for(i=0; i 5;i+)printf(“%d, “, ai); 程序运行后的输出结果是 ( A) 2, 2, 3, 4, 5, ( B) 6, 2, 3, 4, 5, ( C) 1, 2, 3, 4, 5, ( D) 2, 3, 4,

13、5, 6, 37 有以下程序 #include string.h main() char p20=a, b, c, d, q=“abc“, r=“abcde“; strcpy(p+strlen(q),r); strcat(p, q); printf(“%d%dn“, sizeof(p), strlen(p); 程序运行后的输出结果是 ( A) 20 9 ( B) 9 9 ( C) 20 11 ( D) 11 11 38 有以下程序 #include string.h main() char p20=a, b, c, d, q=“abc“, r=“abcde“; strcat(p, r);str

14、cpy(p+strlen(q), q); printf(“%dn“, strlen(p); 程序运行后的输出结果是 ( A) 9 ( B) 6 ( C) 11 ( D) 7 39 有以下程序 #include string.h void f(char p10, int n)/*字符串从小到大排序 */ char t10; int i, j; for(i=0;i n-1; i+) for(j=i+1; j n; j+) if(strcmp(pi, pj) 0) strcpy(t, pi); strcpy(pi, pj); strcpy(pj,t); main() char p510=“abc“,

15、 “aabdfg:,“abbd“, “dcdbe“, “cd“; f(p, 5); printf(“%dn“,strlen(p0); 程序运行后的输出结果是 ( A) 2 ( B) 4 ( C) 6 ( D) 3 40 有以下程序 void f(int n, int *r) int r1=0; if(n%3=0) r1=n/3; else if(n%5=0) r1=n/5; else f(-n, for(i=1; i argc; i+) n=n*10+ *argvi 0; printf(“%dn“,n); 编译连接后生成可执行文件 tt.exe。若运行时输入以下命令行 tt 12 345 67

16、8 程序运行后的输出结果是 ( A) 12 ( B) 12345 ( C) 12345678 ( D) 136 42 有以下程序 int a=4; int f(int n) int t=0;static int a=5; if(n%2) int a=6; t+=a+; else int a=7; t+=a+; return t+a+; main() int s=a, i=0; for(; i 2; i+)s+=f(i); printf(“%dn“, s); 程序运行后的输出结果是 ( A) 24 ( B) 28 ( C) 32 ( D) 36 43 有一个名为 init.txt的文件,内容如下

17、: #define HDY(A, B) A/B #define PRINT(Y) printf(“y=%dn“, Y) 有以下程序 #include“init.txt“ main() int a=1, b=2, c=3, d=4, k; k=HDY(a+c, b+d); PRINT(k); 下面针对该程序的叙述正确的是 ( A)编译出错 ( B)运行出错 ( C)运行结果为 y=0 ( D)运行结果为 y=6 44 有以下程序 main() char ch=“uvwxyz“, *pc; pc=ch; printf(“%cn“, *(pc+5); 程序运行后的输出结果是 ( A) z ( B)

18、0 ( C)元素 ch5的地址 ( D)字符 y的地址 45 有以下程序 struct S int n; int a20; ; voidf(struct S*p) int i, j, t; for(i=0; i p- n-1; i+) for(j=i+1; j p- n; j+) if(p- ai p- aj)t=p- ai;p- ai=p- aj; p- aj=t; main() int i; struct S s=10, 2, 3, l, 6, 8, 7, 5, 4, 10, 9; f(else语句 2; ”这种形式的 if语句中,在每一个 else前面有一个分号,整个语句结束处有一分号。

19、在本题的 C)选项中, else前面少了一个分号,这样程序在编译时,会出现语法错 误。 21 【正确答案】 D 【试题解析】 因为 x的值为大于 1的奇数,所以 x除以 2的余数等于 1,因此,选项 A)、 C)中表达式的结果为真,不为 0;对于选项 B)来说, x除以 2的商不会等于 0;选项 D)中表达式的结果为假,即等于 0。 22 【正确答案】 C 【试题解析】 break 语句的功能是跳出正在执行的条件语句或循环语句。它可以出现在 switch 语句中,也可以出现在循环语句中。 continue语句只是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判断。

20、 23 【正确答案】 A 【试题解析】 因为变量的初始值分别为 “k=5, n =0”,所以程序第一次进入循环时,执行 default 语句,这时 k=4,执行 “case 4: ”这个分支,结果是 “n=2,k= 3”,打印出 2;程序然后进行第二次循环,这时 “n=2, k =3”,执行 “case 3: ”这个分支,结果是 “n=3, k=2”,打印出 3;程序进行第三次循环,这时“n=3, k=2”,执行 “case 2: case 4: ”这两个分支,结果是 “n=5, k=1”,打印出 5,这时因为 n=5 不满足 n 5的循环条件,因此退出循 环,程序运行结束。因此输出结果是 2

21、35。 24 【正确答案】 B 【试题解析】 本题主要考查了 for循环的嵌套。外层 for循环的自变量 i从 1开始,每次循环后增 l,至到 i等于 3结束。内层循环的自变量 j每次从 i开始,每次循环后增 1,至到 j等于 3结束。在每次外循环开始后,内层循环在一行上先打印“i*j=两个乘数的积 ”,然后换行,下次循环从下一行开始打印。 25 【正确答案】 A 【试题解析】 C语言的字符常量是用单引号 (即撇号 )括起来的一个字符。除此之外,在 C语言中还允许用以一个 “”开头的字 符序列来表示字符常量。其中,形式“ddd”表示 1到 3位 8进制数所代表的字符;形式 “xhh”表示 1到

22、 2位 16进制数所代表的字符。在本题中 x13表示回车符,是一个字符常量; 081用 8进制数所代表的字符,但形式不正确,因为 8进制数所表示的字符中不会出现数字 “8”;65不是一个字符,而是一个 +进制数字; “n”是用双引号括起来的一个字符,表示一个字符串,而不是字符常量。 26 【正确答案】 A 【试题解析】 在 C语言中,应当在定义函数时指定函数值的类型,凡不加类型说明的函数,一律自动 按整型处理。在定义函数时对函数值说明的类型一般应该和 return语句中的表达式类型一致。如果函数值的类型和 return 语句中的表达式类型不一致,则以函数类型为主。即函数类型决定返回值的类型。

23、27 【正确答案】 D 【试题解析】 C语言中,字符数据参加运算时,实际上是其 ASCII码参与计算。大写字母的 ASCII码比其对应的小写字母的 ASCII码小 31。因此要将大写字母转化为小写字母只需将其加上 32即可。所以选项 B)、 C)都符合条件,因为变量C中存储的是大写字母,所以 “c-A”的值一定小于 26,故选项 A)与选项 C)的含义相同。故本题答案为 D)。 28 【正确答案】 B 【试题解析】 循环语句 while(*t+);执行完时,指针变量 t就指向了字符中结束符 o之后的位置,所以语句 return(t-s);返回的就是字符串 s 所用内存的字节个数。 29 【正确

24、答案】 D 【试题解析】 指针变量只能存储地址,选项 A)错误。只有浮点型指针才能指向浮点型数据,选项 B)错误。在定义指针变量时必须加上星号 “*”,选项 C)错误。故本题答案为 D)。 30 【正确答案】 A 【试题解析 】 指针变量在定义时需要加星号,而在赋值时则不用,故选项 B)错误。本题中, scanf()函数和 printf()函数都是要对指针变量 p 指向的地址处的数据进行访问,不是变量本身。选项 C)中多了取地址运算符,选项 D)中少了指针运算符。 31 【正确答案】 B 【试题解析】 在 main()中, “f(&a2, 5, 0); ”语句的功能是对数组 a10中从a2到

25、a6的数宇 (即 3, 2, 1, 6,7)进行从大到小排序,这时数组 a10中的数字序列变为 5, 4, 7, 6, 3, 2, 1, 8, 9, 10。 “f(a,5, 1); ”语句的功能是对数字序列 5, 4, 7, 6, 3, 2, 1, 8, 9, 10中的 5, 4,7, 6, 3进行从小到大的排序,所以数组 a10中的数字序列最终变为 3, 4, 5, 6, 7, 2, 1, 8, 9, 10。 32 【正确答案】 B 【试题解析】 在 main()中, f(a)语句的作用是对数组 a10中从 a2到 a5的各个数字乘以 2,所以数组 a10中的数字就变成了 1, 2, 6,

26、8, 10, 12, 7, 8, 9, 10,最后在屏幕上输出。 33 【正确答案】 D 【试题解析】 本题 考查的是函数调用时的数据传递问题。因为在调用函数 f()时只是进行的值传递,即单向传递,函数的调用及对形参的处理过程并不会引起实参数值的变化。故本题答案为 D)。 34 【正确答案】 A 【试题解析】 本题利用多重 for循环的嵌套来实现对二维数组元素的按列排序。利用最外层循环来实现对列的控制。内部循环利用选择法对数组元素按照从小到大的顺序进行排列。最后输出对角线上的元素值。故本题答案为 A)。 35 【正确答案】 B 【试题解析】 本题使用选择法对二维数组对角线上的元素按从大到小的顺

27、序进行排列 。最后输出数组第一行的数据。故本题答案为 B)。 36 【正确答案】 B 【试题解析】 调用函数 f()时,将数组 a的地址传递给了指针 q,此时 q指向的就是数组 a的第一个元素 a0。在 5次循环过程中, q 始终指向 a0,因此 a 0的值增加了 5。最后的输出结果为 “6, 2, 3, 4, 5”。 37 【正确答案】 C 【试题解析】 函数 strlen()返回的是数组的实际长度,而 sizeof 返回的是数组定义的总长度。因为字符数组 p20定义为 20字节长度,所以 sizeof(p)的值为 20。“strcpy(p+strlen(q), r); ”语句的功能把字符数

28、组 r拷贝到字符数组 p 从 p3开始到 p7的位置中,这时字符数组 p的有效字符长度为 8。然后再执行 “strcat (p, q); ”语句 (字符串连接 ),即把字符数组 q 连接到字符数组 p后面,这时字符数组 p的有效长度为 11。 38 【正确答案】 B 【试题解析】 strcpy()函数的功能是将字符串 q 复制到从 p3位置开始的存储单元,同时复制字符串结束标志 0到 p6中。函数 strlen()返回的是字符串中不包括0在内的实际长度, 故本题答案为 B)。 39 【正确答案】 C 【试题解析】 本题中函数 f()利用选择法对字符串数组 p中的字符中按从小到大排序,字符串比较

29、的方法是:依次对 S1和 S2所指字符串对应位置上的字符两两进行比较,当出现第一对不相同的字符时,即由这两个字符 (ASCII 码值 )决定所在串的大小,因此最后在 p0中存储的是最小的字符串是 “aabdfg”。最后用 strlen()函数求得该字符串的长度为 6。 40 【正确答案】 A 【试题解析】 本题考查了函数的递归调用。在 f 函数中,当 m=7时,程序执行“f(-n, &r1); ”语句,递归调用 f(6, &r1),程序执行 “r1=n/3; ”语句,即 r1= 6/3=2,然后执行 “*r=r1; ”语句,所以输出结果为 2。 41 【正确答案】 D 【试题解析】 运行时输入

30、该命令后,参数 argc的值为 4,字符串数组 argv1、argv2、 argv3分别为 “12”、 “345”、 “678”,然后取这 3个参数的第一个字符,将其转化成原来的数字并组合成一个新的三位数。 42 【正确答案】 B 【试题解析】 本题考查的是变量的作用域问题。程序中定义了 多个变量 a,全局变量、静态变量和局部变量分别在自己的作用域中参与运算。在 main()函数中首先执行 “s+=f(0); ”语句,而 f(0)返回值为 12,所以第一次循环结束 s的值等于4+12=16;第二次开始时,当执行 f(1)时,在 f(1)中执行 “if(n%2)int a=6; t+=a+; ”

31、和 “return t+a+; ”这两条语句,所以 f (1)的返回值等于 12。再在主函数中执行 “s+=f (1); ”语句,也就是 16+12=28。 43 【正确答案】 D 【试题解析】 本题考查的是带参数的宏定 义。不仅要进行简单的字符替换,还要进行参数替换。根据宏替换的规则,本题在进行替换宏 HDY时,没有像所希望的那样将 HDY(a+c, b+d)替换成 (a+c)/(b+ d),而是替换成了 “a+c/b+d”,因此结果k 为 6。 44 【正确答案】 A 【试题解析】 将字符串的地址赋值给字符指针变量后,指针就指向了该字符串的第一个字符,即 “*p =u”,所以 *(p+5)

32、指向的字符是 z。 45 【正确答案】 A 【试题解析】 本题中,在调用函数 f()时,实参是结构体变量 s的地址,所以在函数中对 形参的改变会影响到实参的数值。函数 f()实现的功能是把结构体的成员数组中的值按从小到大顺序进行排列。 46 【正确答案】 A 【试题解析】 本题中,在调用函数时将结构体变量的两个成员作为实参,其中的成员数组 a实际向函数 f()传递的是该数组的地址,因此在函数 f()中所对应的形参发生改变时,该数组内的数据也会发生改变。函数 f()实现的功能是将成员数组中的前 9个元素分别加上该元素的下标,作为新的元素。 47 【正确答案】 C 【试题解析】 在 C语言中, t

33、ypedef 用于说明一种新的类型名,本题 中的 node被定义为一种结构体类型名, NODE被定义为指向这种结构体变量的指针,我们可以用它来定义一个指向该类型结构体变量的指针。 48 【正确答案】 B 【试题解析】 本题考查的内容是按位与和按位或运算符的使用,由运算规则可知, d的最终结果为 4。 49 【正确答案】 D 【试题解析】 将有 6个元素的整型数组分两行输出到一个文件中,因为输出的都是数字并且每行都没有分隔符,所以当再对其进行读取操作时,每一行都会被认为是一个完整的数,而换行符则作为它们的分隔符。故本题答案为 D)。 50 【正确答案】 A 【试题解析】 首先利用 fwrite函

34、数将数组 a中的数据写到文件中,接着 fseek 函数的功能是读文件的位置,指针从文件头向后移动 3个 int型数据,这时文件位置指针指向的是文件中的第 4个 int数据 “4”。然后 fread 函数将文件 fp 中的后 3个数据 4, 5, 6读到数组 a中,这样就覆盖了数组中原来的前 3项数据。最后数组中的数据就成了 4, 5, 6, 4, 5, 6,故本题答案为 A)。 51 【正确答案】 63 【试题解析】 根据二叉树的性质,一棵深度为 k的满二叉树有 2k-1个结点,所以深度 为 7的满二叉树有 27-1=127个节点;又因为在任意一棵二叉树中,若终端结点的个数为 n0,度为 2的

35、结点数为 n2,则 n0= n2+1,即所以总节点数为n0+n2=2n2+1=127,所以 n2=63,即度为 2的结点个数为 63,所以 1应填入63。 52 【正确答案】 黑箱或黑盒 【试题解析】 黑箱测试是根据程序规格说明所规定的功能来设计测试用例,它不考虑程序的内部结构和处理过程。常用的黑箱测试技术分为等价类划分、边界分析、错误猜测以及因果图等。 53 【正确答案】 数据库管理系统 (DBMS) 【试题解析】 数据库管理系统 (Database Management System)简称 DBMS,对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。它是数据库系统的核心软件。 54 【正确答案】 开发 【试题解析】 软件生命周期 (SDLC,软件生存周期 )是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,其中的编码和测试属于开发阶段。 55 【正确答案】 数据字典 【试题解析】 数据字典 (Data Dictionary,简称 DD)就是用来定义数据流图中的各个成分的具体含义。数据字典的任务是对于数据流图中出现的所有被命名的图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1