1、2010 年 3月国家二级( C语言)笔试真题试卷及答案与解析 1 下列叙述中,正确的是 ( A)对长度为 n的有序链表进行查找,最坏情况下需要的比较次数为 n ( B)对长度为 n的有序链表进行对分查找,最坏情况下需要的比较次数为( n2) ( C)对长度为 n的有序链表进行对分查找,最坏情况下需要的比较次数为( log2n) ( D)对长度为 n的有序链表进行对分查找,最坏情况下需要的比较次数为( nlog2n) 2 算法的时间复杂度是指 ( A)算法的执行时间 ( B)算法所处理的数据量 ( C)算法程序中的语句 或指令条数 ( D)算法在执行过程中所需要的基本运算次数 3 软件按功能可
2、以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是 ( A)编辑软件 ( B)操作系统 ( C)教务管理系统 ( D)浏览器 4 软件(程序)调试的任务是 ( A)诊断和改正程序中的错误 ( B)尽可能多地发现程序中的错误 ( C)发现并改正程序中的所有错误 ( D)确定程序中错误的性质 5 数据流程图( DFD图)是 ( A)软件概要设计的工具 ( B)软件详细设计的工具 ( C)结构化方法的需求分析 工具 ( D)面向对象方法的需求分析工具 6 软件生命周期可分为定义阶段,开发阶段和维护阶段。详细设计属于 ( A)定义阶段 ( B)开发阶段 ( C)维护阶段 ( D)
3、上述三个阶段 7 数据库管理系统中负责数据模式定义的语言是 ( A)数据定义语言 ( B)数据管理语言 ( C)数据操纵语言 ( D)数据控制语言 8 在学生管理的关系数据库中,存取一个学生信息的数据单位是 ( A)文件 ( B)数据库 ( C)字段 ( D)记录 9 数据库设计中,用 E R图来描述信息结构但不涉及信息在计算 机中的表示,它属于数据库设计的 ( A)需求分析阶段 ( B)逻辑设计阶段 ( C)概念设计阶段 ( D)物理设计阶段 10 有两个关系 R和 T如下: 则由关系 R得到关系 T的操作是 ( A)选择 ( B)投影 ( C)交 ( D)并 11 以下叙述正确的是 ( A
4、) C语言程序是由过程和函数组成的 ( B) C语言函数可以嵌套调用,例如: Fun( Fun( x) ( C) C语言函数不可以单独编译 ( D) C语言中除了 main函数,其他函数不可作为单独文件形式存在 12 以下关于 C语言的叙述中正确的是 ( A) C语言中的注释不可以夹在变量名或关键字的中间 ( B) C语言中的变量可以在使用之前的任何位置进行定义 ( C)在 C语言算术表达式的书写中,运算符两侧的运算数类型必须一致 ( D) C语言的数值常量中夹带空格不影响常量值的正确表示 13 以下 C语言用户标识符中,不合法的是 ( A) _1 ( B) AaBc ( C) a_B ( D
5、) a B 14 若有定义: DouBlea 22; inti 0, k 18;,则不符合 C语言规定的赋值语句是 ( A) a a, i; ( B) i( a k)( i k); ( C) i a 11; ( D) i !a; 15 有以下程序 #include Main() char a,B,c,d; ScanF(“%c%c, C=getchar();d=getchar(); PrintF(“%c%c%c%cn”,a,B,c,d); 当执行程序时,按下列方式输入数据(从第 1列开始, CR代表回车,注意:回车也是 一个字符) 12 CR 34 CR 则输出结果是 ( A) 1234 ( B
6、) 12 ( C) 12 3 ( D) 12 34 16 以下关于 C语言数据类型使用的叙述中错误的是 ( A)若要准确无误差的表示自然数,应使用整数类型 ( B)若要保存带有多位小数的数据,应使用双精度类型 ( C)若要处理如 “人员信息 ”等含有不同类型的相关数据,应自定义结构体类型 ( D)若只处理 “真 ”和 “假 ”两种逻辑值,应使用逻辑类型 17 若 a是数值类型,则逻辑表达式( a I)( a! 1)的值是 ( A) 1 ( B) 0 ( C) 2 ( D)不知道 a的值,不能确定 18 以下选项中与 iF( a 1) a B; elsea;语句功能不同的 sWish语句是 (
7、A) sWitch( a) case1: a B; Break; deFault: a; ( B) sWitch( a 1) case0: a B; Break; case1: a; ( C) sWitch( a) DeFault: a; Break; case1: a B; ( D) sWitch( a 1) case1: a B; Break; case0: a; 19 有如下嵌套的 iF语句 iF(a Main() int i,j,m=1; Fori=i;i0;j-) iF(i+j3)Break; m*=i*j; PrintF(“m=%dn”,m) 程序运行后的输出结果是 ( A) m
8、6 ( B) m 2 ( C) m 4 ( D) m 5 21 有以下程序 #inculde Main() int a=1,B=2; For( ;a Main() int k=011; PrintFF(“%dn”,k+); 程序运行后的输出结果是 ( A) 12 ( B) 11 ( C) 10 ( D) 9 23 下列语句组中,正确的是 ( A) ; s Olympic; ( B) char s 7; s Olympic; ( C) ; s Olympic; ( D) char s 7; s Olympic; 24 以下关于 RetuRn语句的叙述中正确的是 ( A)一个自定义函数中必须有一条
9、 RetuRn语句 ( B)一个自定义函数中可以根据不同情况设置多条 RetuRn语句 ( C)定义成 void类型的函数中可以有带返回值的 RetuRn语句 ( D)没有 RetuRn语句的自定义函数在执行结束时不能返同到调用处 25 下列选项中,能正确定义数组的语句是 ( A) intnum 0 2008; ( B) intnum; ( C) intN 2008; intnum N ; ( D) DeFineN2008 intnum N; 26 有以下程序 #include Void Fun(char*c,int d) *c=*c+1;d=d+1; PrintF(“%c,%c,”,*c,d
10、); Main() char B+a,a=A; Fun(printF(“%c,%cn”,B,a); 程序运行后的输出结果是 ( A) B, B, B, A ( B) B, B, B, A ( C) a, B, B, a ( D) a, B, a, B 27 若有定义 int( *pt) 3;,则下列说法正确的是 ( A)定义了基类型为 int的三个指针变量 ( B)定义了基类型为 int的具有三个元素的指针数组 pt ( C)定义了一个名为 *pt、具有三个元素的整型数组 ( D)定义了一个名为 pt的指针变量,它可以指向每行有三个整数元素的二维数组 28 设有定义 DouBlea 10, *
11、s a;,以下能够代表数组元索 a 3的是 ( A)( *s) 3 ( B) *( s 3) ( C) *s 3 ( D) *s 3 29 有以下程序 #inculde Main() int a5=1,2,3,4,5,B5=0,2,1,3,0,I,s=0; For(i=0;1 Main() int B33=0,1,2, 0,1,2,0,1,2,i,j,t+1; For (i=0;i #deFine N8 void Fun(int * x,int i) main() int aN=1,2,3,4,5,6,7,8,i; Fun(a,2); For(i=0;i int F(int t,int n);
12、 main() int a4=(1,2,3,4),s; s =F(a,4);printF(“%dn”,s); int F(int t,int n) iF(n0) return tn-1+F(t,n-1); Else return 0; 程序运行后的输出结果是 ( A) 4 ( B) 10 ( C) 14 ( D) 6 34 有以下程序 #inculde int Fun() ststic int x=1; x*=2;return x; main () int i,s=1; For(i=1;I #deFine SUB(a) (a) (a) main() int a=2,B=3,c=5,d; d=S
13、UB(a+B)*c; printF(”%dn”,d); 程序运行后的输山结 果是 ( A) 0 ( B) -12 ( C) -20 ( D) 10 36 设有定义: struct complex int real,unreal; datal=1,8,data2; 则以下赋值语句中错误的是 ( A) Data2 Data1; ( B) Data2( 2, 6); ( C) Data2 Rea1 Data1 Real; ( D) Data2 Real Datal unRea 37 有以下程序 #inculde #inculde strtict A int a;char B10;douBle c;
14、void F (struct A t); main() struct A a =1001,”zhangDa”,1098.0; F(a);printF(“%d,%s,%6.1Fn”,a.,a.B,a.c); void F(struct A t) t.a=1002;strcpy(t.B,”ChangRong”);t.c=1202.0; 程序运行后的输出结果是 ( A) 1001, zhan Da, 1098 0 ( B) 1002, Chan Ron, 1202 0 ( C) 1001, Chan Ron, 10980 ( D) 1002, zhan Da, 1202 0 38 有以下定义和语句
15、Struct Workers int num;char name20;char c; struct int day;int month;int year;s; ; Struct Workers W,*pe; PW= 能给 W中 yeaR成员赋 1980的语句是 ( A) *pW yeaR 1980; ( B) W yeaR 1980; ( C) pW yeaR 1980; ( D) W s yeaR 1980; 39 有以下程序 #inculde main() int a=2,B=2,c=2; PrintF(“%dn”,a/B 程序运行后的输出结果是 ( A) 0 ( B) 1 ( C) 2
16、( D) 3 40 有以下程序 #inculde main() FILE*Fp;char str10; Fp=Fopen(“myFile.dat”,”W”); Fputs(“aBc”,Fp);Fclose(Fp); Fp=Fopen(“myFile.dat”,”a+”); FprintFF(Fp,”%d”,28); reWind(Fp); FscanF(Fp,”%s”,str);puts(str); Fclose(Fp); 程序运行后的输出结果是 ( A) aBc ( B) 28c ( C) aBc28 ( D)因类型不一致而出错 41 一个队列的初始状态为空。现将元素 A, B, C, D,
17、 E, F, 5, 4, 3, 2, 1依次入队,然后再依次退队,则元素退队的顺序为【 】。 42 设某循环队列的容量为 50,如果头指针 Front 45(指向队头元素的前一位置),尾指针 rear 10(指向队尾元素),则该循环队列中共有【 】个元素。 43 设二叉树如下: 对该二叉树进行后序遍历的结果为【 】。 44 软件是【 】、数据和文档的集合。 45 有一个学生选课的关系,其中学生的关系模式为:学生(学号,姓名,班级,年龄),课程的关系模式为:课程(课号,课程名,学时),其中两个关系模式的键分别是学号和课号,则关系模 式选课可定义为:选课(学号,【 】,成绩)。 46 设 x为 i
18、nt型变量,请写出一个关系表达式【 】,用以判断 x同时为 3和 7的倍数时,关系表达式的值为真。 47 有以下程序 #inculde main() int a=1,B=2,c=3,d=0; iF(a=1) iF(B!=2) iF(c=3) d=1; else d=2; else iF(c!=3) d=3; else d=4; else d=5; printF(“%dn”,d); 程序远行后的输出结果是【 】。 48 有以下程序 #inculde main() int m,n; scanF(“%d%d”, While(m!=n) While(mn)m=m-n; While(m main() i
19、nt i,ja=1,2,3,4,5,6,7,8,9; For(i=0;1 main() int a=1,2,3,4,5,6,*k3,i=0 While(i main() int a33=(1,2,3),(4,5,6),(7,8,9); int B3=0,i; For(i=0;i #inculde void Fun(char*str) char temp;int n,I; n=strlen(str); temp=strn-1; For(i=n-1;i0;i-) stri=stri-1; str0=temp; main() char s50; ScanF(“%s”,s);Fun(s);printF
20、(“%sn”,s); 程序运行后输入: aBcDeF回车,则输出结果是【 】 53 以下程序的功能是:将值为三位正整数的变量 x中的数值按照个位、十位、百位的顺序拆分并输出。请填空。 #inculde main() int x=256; PrintF(“%d-%d-%dn”,【 】 ,x/10%10,x/100); 54 以下程序用以删除字符串中所有的空格,请填空。 #inculde main() char s100=(“our teacher teach c language!”);int I,j; For(i=j=0;si!=) iF(si;si!=0) sj=si;j + sj=【 】
21、printF(“index=%dn”,s-a); 55 以下程序的功能是:借助指针变量找出数组元素中的最大值及其元素的下标值。请填空。 #inculde main() int a10,*p,*s; For(p=a;p-a*s)s=【 】; printF(“index=%dn”,s-a); 2010 年 3月国家二级( C语言)笔试真题试卷答案与解析 1 【正确答案】 A 【试题解析】 对长度为 n 的有序链表进行查找,最坏情况是从最小值开始查找最大值(或从最大值开始查找最小值),这个过程需要比较的次数为 n,故选项 A正确。对分查找只能针对随机存取的有序表进行,而有序链表只能进行顺序存取,不能
22、 进行随机存取,在有序链表上不能进行对分查找,故 B、 C、 D选项都错误。 2 【正确答案】 D 【试题解析】 算法的时间复杂度是指算法需要消耗的时间资源,是独立于机器的,选项 D正确;相同的算法在不同的机器上运行时间可能不同,选项 A错误;算法所处理的数据量与算法无关,选项 B错误;程序的长短与程序执行时需要消耗的时间资源没有必然的关系,比如一个条件语句可以很长,但只需判断一次,而一个循环语句可能只有几行,但可以执行很多次,故选项 C错误。 3 【正确答案】 B 【试题解析】 编辑软件、教务管理软件 属于应用软件,操作系统属于系统软件,浏览器属于支撑软件,故本题答案选 B。 4 【正确答案
23、】 A 【试题解析】 软件调试的任务是诊断和改正程序中的错误,本题正确答案为 A。其他三项描述不正确,选项 B描述不全面,选项 C描述太绝对,选项 D描述不符合定义。 5 【正确答案】 C 【试题解析】 数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程。软件结构图是软件概要设计的工具,而详细设计是对概要设计的每个模块进行细化, UML 是面向对象的需求分析的工具。 6 【正 确答案】 B 【试题解析】 软件定义阶段的基本任务是确定软件系统的工程需要,分为软件系统的可行性研究和项目需求分析。软件开发阶段包括概要设计、详细设计、实现、组装测试和确认测试 5个阶段
24、。维护阶段主要是软件的使用、系统维护和系统更新换代。 7 【正确答案】 A 【试题解析】 数据定义语言用于定义数据库的所有特性和属性,如行布局、列定义、文件位置和存储策略等。 8 【正确答案】 D 【试题解析】 在关系数据表中,行称为元组,对应存储文件中的记录,列称为属性,对应存储文件中的字段,所以本 题答案为 D。 9 【正确答案】 C 【试题解析】 E-R图即实体 -联系图 (Entity-Relation Diagram),用来建立数据模型 ,在数据库系统概论中属于概念设计阶段。 10 【正确答案】 A 【试题解析】 关系 T中的两行和关系 R中的最后两行一致,通过选择运算即可由 R得到
25、 T。 11 【正确答案】 B 【试题解析】 C语言中只有函数没有过程,故选项 A错误; C语言可以嵌套调用,故选项 B 正确; C语言函数可以单独编译成 .dll文件,故选项 C错误; C语言中除 main 函数以外, 其他函数可作为单独文件形式存在,故选项 D也错误。 12 【正确答案】 B 【试题解析】 C语言中注释可以放在任何位置,选项 A错误; C语言中的变量只要在使用之前定义即可,位置可以是使用前的任何位置,故选项 B 正确; C语言中两侧数据类型可以不一致,系统可进行强制类型转换,选项 C错误; C语言数值常量中不允许存在空格,选项 D错误。 13 【正确答案】 D 【试题解析】
26、 标识符由字母、下划线、数字三个方面组成,开头必须是字母或下划线。 14 【正确答案】 C 【试题解析】 C语言中取余运算 符两侧的操作数只能是整型 (若为 char型,则会自动转换成整型 )。 15 【正确答案】 C 【试题解析】 程序根据用户输入分别给字符型变量 a、 b、 c、 d 赋值为 1、 2、 3,因此输出到屏幕得到选项 C中的格式。 16 【正确答案】 D 【试题解析】 C语言中没有逻辑类型,若只处理 “真 “或 “假 “两种逻辑值,可以使用整型数 “1“或 “0“表示,故选 D。 17 【正确答案】 A 【试题解析】 当 A=1时,( A=1) |( A!=1)为真;当 A!
27、=1时,( A=1) |( A!=1)也为真,故正确答案为 A。 18 【正确答案】 B 【试题解析】 switch(a=1)语句中,若 a等于 1,则 a=1为 “真 “,则应该进行a=b 的操作,故选项 B错误。 19 【正确答案】 C 【试题解析】 嵌套的 if 语句功能是将 k赋值为 a、 b、 c中的最小值,选项 A中没有比较 a、 c的大小,选项 B 中语句 “(bc)?b:c)“错误,选项 D中没有比较 b、 c大小。 20 【正确答案】 A 【试题解析】 第一次循环 i=1, j=3和 j=2时都能执行 m*=i*j,此时得到 m的值为 6;然后进行第二次循环 i=2,j=3时
28、会执行 break 语句,内部循环直接结束,此时 i再加 1,也会导致退出外部循环,所以最终结果 m的值为 6。 21 【正确答案】 D 【试题解析】 初始值 a=1, b=2,第一次循环: b=b+a=2+1=3, a=a+2=1+2=3,a=a+1=3+1=4;第二次循环: b=b+a=3+4=7, a=a+2=4+2=6, a=a+1=6+1=7;第三次循环: b=b+a=7+7=14, a=a+2=7+2=9, a=a+1=9+1=10,故本题答案选 D。 22 【正确答案】 D 【试题解析】 011转换成十进制为 9,并且 k+表示先使用 k的值,再使 k 的值加 1,所以输出值为
29、9。 23 【正确答案】 A 【试题解析】 若 s被定义为指针,选项 A表示将指针 s指向一个字符串,选项 C表示为指针 s赋一个字符串的值,显然选项 A正确,选项 C错误;若 s被定义为数组,且要为该数组直接赋值,则必须在定义时进行,因此选项 B 和选项 D都错误。 24 【正确答案】 B 【试题解析】 一个自定义函数中可以没有返回值。如果函数不返回值,则应定义为 void 型,程序执 行结束后自动返回到调用处。故选项 A、 C、 D错误。一个自定义函数可以根据不同的情况设置多条 return语句,但函数的返回值必须只有一个,故选项 B 正确。 25 【正确答案】 D 【试题解析】 选项 A
30、不符合 C语言的语法要求;选项 B中没有指定数组的大小;选项 C中数组大小不能用变量来指定。 26 【正确答案】 A 【试题解析】 函数 fun 的第一个参数传指针,可以将更改后的值传回调用函数,第二个参数传值,不能将更改后的值传回调用函数,故选 A。 27 【正确答案】 D 【试题解析】 定义了一 个指向一维数组的指针,该一维数组具有三个 int型元素,按照 C语言中二维数组的定义知,二维数组先按照行排列,再按照列排列,故选 D。 28 【正确答案】 B 【试题解析】 s 指向数组首元素, s+3 表示指针 s向后移动 3 个位置,即数组的第4个元素 a 3,故选 B。 29 【正确答案】
31、C 【试题解析】 当 i=0时 a b 0 =1;当 i=1时 a b 1 =3;当 i=2时 a b 2 =2;当 i=3时 a b 3 =4;当 i=4时 a b 4 =1。将以上各数值相加得 11,故选 C。 30 【正确答案】 C 【试题解析】 当 i=0, j=0时能进行相加操作, b 0 b 0 0 =0;当i=1, j=1时能进行相加操作, b 1 b 1 1 =1;当 i=2, j=2时能进行相加操作, b 2 b 2 2 =2。将以上各数值相加再加 1,得 4,故选 C。 31 【正确答案】 A 【试题解析】 计算字符串长度是从第一个字符开始到 0前的一个字符结束。第一个字符
32、串长度为 5,分别为 a、 b、 c、 d、 !第二个字符串的长度也为 5,分别为 n,1,2,3,,其中 n和 均表示一个字符。 32 【正确答案】 C 【试题解析】 fun 函数的功能是把数组下标为 i的值赋值给 a 0,所以执行fun(a,2)后,数组前 4个数字为 3、 2、 3、 4,故选择 C。 33 【正确答案】 B 【试题解析】 函数的功能是求数组所有元素的和。递归表示为 a 3 +a 2 +a 1 +a 0 +f(t,0)=10。 34 【正确答案】 C 【试题解析】 x被声明为静态变量,第一次调用 fun()后, x值为 2,第二次调用时直接执行 x*=2,值为 4。 35
33、 【正确答案】 C 【试题解析】 在此处需要直接替换整个式子, SUB(a+b)*c即为 (a+b)-(a+b)*c,代入 a,b,c的值可得结果为 -20。 36 【正确答案】 B 【试题解析】 选项 B需要强制转换数据类型,应该为 (struct complex)2,6;。 37 【正确答案】 A 【试题解析】 该函数的调用为传值调用,故不会改变任何值。 38 【正确答案】 D 【试题解析】 结构体 structure workers 中的成员 s是结构体类型,给 w中成员year赋值的语句是 w.s.year=1980,故选 D。 39 【正确答案】 A 【试题解析】 对于 a/b&c,
34、先求 a/b,得到 1,然后求 1&c(即按位与操作),显然得 0。 40 【正确答案】 C 【试题解析】 首先打开文件写入字符串 “abc“,然后关闭文件,再打开时文件指针定位到了最后,写入 “28“,然后重定位位置指针到开始,读取字符串为“abc28“。 41 【正确答案】 A,B,C,D,E,F,5,4,3,2,1 【试题解析】 队列是先进先出的数据结构,所以出队列 的顺序与进度列的顺序一致。 42 【正确答案】 15 【试题解析】 计算队列中元素个数的公式为: (read-front+MAXQSIZE)%MAXQSIZE,其中 MAXQSIZE 为队列的容量,所以该队列中的元素为 (1
35、0-45+50)%50=15。 43 【正确答案】 EDBGHFCA 【试题解析】 后序遍历二叉树的定义为:若二叉树为空,则空操作;否则,后序遍历左子树,后序遍历右子树,访问根结点。根据该规则,遍历结果应为EDBGHFCA。 44 【正确答案】 程序 【试题解析】 本题考查软件的定义,软件是程序、数据和文档的集合。 45 【正确答案】 课号 【试题解析】 选课关系是学生和课程之间的关系,应该由学号、课号和成绩组成。 46 【正确答案】 (x%3=0)&(x%7=0) 【试题解析】 x%3=0 能保证 x是 3的倍数, x%7=0能保证 x是 7的倍数,( x%3=0) &( x%7=0)能保证
36、 x是 3的倍数并且 x是 7的倍数。 47 【正确答案】 4 【试题解析】 a=1为真, b!=2为假, c!=3为假,所以 d=4。 48 【正确答案】 7 【试题解析】 执行 while(mn)的循环,得到 m=7,n=7。此时所有循环结束, m=7。 49 【正确答案】 123569 【试题解析】 当 i=0时, j=0、 1、 2时满足条件,则打印 a 0 0、 a 0 1、 a 0 2;当 i=1时, j=1、 2时满足条件,则打印 a 1 1、 a 1 2;当 i=2时, j=2时满足条件,则打印 a 2 2,所以打印结果为123569。 50 【正确答案】 135 【试题 解析
37、】 当 i=0时, k 0 =&a 0;当 i=1时, k 1 =&a 2;当 i=2时, k 2 =&a 4,则打印结果为 135。 51 【正确答案】 101418 【试题解析】 当 i=0时, b 0 =a 0 2 +a 2 0 =3+7=10;当 i=1时, b 1 =a 1 2 +a 2 1 =6+8=14;当 i=2时, b 2 =a 2 2+a 2 2 =9+9=18,则打印结果为 101418。 52 【正确答案】 fabcde 【试题解析】 在函数 fun中,先求出字符串 str的长度,并将最后一个字符暂存到 temp 中,然后使用循环语句将所有字符向右移动一个位置,最后将 temp 中的字符放到字符串的第 1个位置,所以结果为 fabcde。 53 【正确答案】 x%10 【试题解析】 x=256, x%10=6。 54 【正确答案】 0 【试题解析】 程序使用变量 i遍历字符数组 s中的所有字符,使用变量 j存放非空格字符。当将所有的非空格字符重新存放到字符数组 s中后,应添加字符串结束标志 0。 55 【正确答案】 p 【试题解析】 s 指向当前最大的元素 ,当 *p*s时,表示当前 p所指向的那个元素比 s指向的元素大,则 s应该记录当前最大的元素的地址。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1