1、国家二级( C语言)笔试模拟试卷 123及答案与解析 1 在数据结构中,从逻辑可以把数据结构分为 _。 ( A)动态结构和静态结构 ( B)紧凑结构和非紧凑结构 ( C)线性结构和非线性结构 ( D)内部结构和外部结构 2 若进栈序列为 1, 2, 3, 4,进栈过程中可以出栈,则下列不可能的 个出栈序列是 _。 ( A) 1, 4, 3, 2 ( B) 2, 3, 4, 1 ( C) 3, 1, 4, 2 ( D) 3, 4, 2, 1 3 排序方法中,将整个无序序列分割成若干小的子序列并分别进行插入排序的方法,称为 _。 ( A)希尔排序 ( B)冒泡排序 ( C)插入排序 ( D)选择排
2、序 4 在顺序表 (3, 6, 8, 10, 12, 15, 16, 18, 21, 25, 30)中,用二分法查找关键码值 11,所需的关键码比较次数为 _。 ( A) 2 ( B) 3 ( C) 4 ( D) 5 5 对于 n个结点的单向链表 (无表头结点 ),需要指针单元的个数至少为 _。 ( A) n-1 ( B) n ( C) n+1 ( D) 2n 6 在软件开发过程中,软件结构设计是描述 _。 ( A)数据存储结构 ( B) 软件体系结构 ( C)软件结构测试 ( D)软件控制过程 7 模块本身的内聚是模块独立性的重要性度量因素之 。在 7类内聚中,具有最强内聚的 项是 _。 (
3、 A)顺序性内聚 ( B)过程性内聚 ( C)逻辑性内聚 ( D)功能性内聚 8 数据存储和数据流都是 _,仅仅是所处的状态不同。 ( A)分析结果 ( B)事件 ( C)动作 ( D)数据 9 数据的完整性是指数的正确性、有效性和 _。 ( A)可维护性 ( B)独立性 ( C)安全性 ( D)相容性 10 关系代 数运算是以 _为基础的运算。 ( A)关系运算 ( B)谓词运算 ( C)集合运算 ( D)代数运算 11 有以下程序: main() int a=101, 2, 3, 4, 5, 6, 7, 8, 9, 10, *p= printf(“% dn“, *p+*q); 程序运行后的
4、输出结果是 _。 ( A) 16 ( B) 10 ( C) 8 ( D) 6 12 结构化程序有 3种基本结构组成, 3种基本结构组成的算法 _。 ( A)可以完成任何复杂的任务 ( B)只能完成部分复杂的任务 ( C)只能完成符合结构化的任务 ( D)只能完成一些简单的任务 13 以下不能定义为用户标识符的是 _。 ( A) scanf ( B) Void ( C) _3com ( D) int 14 下到叙述中正确的是 _。 ( A) C语言中既有逻辑类型也有集合类型 ( B) C语言中没有逻辑类型但有集合类型 ( C) C语言中有逻辑类型但没有集合类型 ( D) C语言中既没有逻辑类型也
5、没有集合类型 15 有以下程序: float fun(int x, int y) return(x+y); main() int a=2, b=5, c=8; printf(“% 3.0fn“, fun (int)fun(a+c, b) , a-c) ); 程序运行后的输出结果是_。 ( A)编译错误 ( B) 9 ( C) 21 ( D) 9 16 有以下程序: void sott(int a, int n) int i, j, t; for(i=0; i n-1; i+) for(j=i+1; j n; j+) if(ai aj)t=ai;ai=aj;aj=t;) main() int a
6、a10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, I; sort(aa+2, 5); for (i=0; i 10; i+)printf(“% d“, aai); printf(“n“); 程序运行后的输出结果是 _。 ( A) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ( B) 1, 2, 7, 6, 3, 4, 5, 8, 9, 10, ( C) 1, 2, 7, 6, 5, 4, 3, 8, 9, 10, ( D) 1, 2, 9, 8, 7, 6, 5, 4, 3, 10, 17 以下程序的输出结果是 _。 char cchar(char ch)
7、 if(ch =A return ch; main() char s=“ABC+abc=defDEF“,*p=s; while(* p) * p=cchar(* p); p+; printf(“% sn“, s); ( A) abe+ABC=DEFdef ( B) abc+abe=defdef ( C) abcaABCDEFdef ( D) abcabcdefdef 18 有以下程序: main() int a, b, d=25; a=d/10%9; b=a printf(“% d, % dn“, a, b) ; 程序运行后的输出结果是 _。 ( A) 6, 1 ( B) 2, 1 ( C)
8、6, 0 ( ( D) 2, 0 19 以下程序中函数 reverse的功能是对 a所指数组中的内容进行逆置。 void reverse(int a, int n) int i, t; for(i=0; i n/2; i+) t=ai; ai=an-1-1; an-1-i=t; main() int b10=1, 2, 3, 4, 5, 6, 7, 8, 9, 10; int i, s=0; reverse(b, 8); for(i=6; i 10; i+) s+=bi; printf(“% dn“, s); 程序运行后的输出结果是 _。 ( A) 22 ( B) 10 ( C) 34 ( D
9、) 30 20 若以下选项中的变量已正确定义,则正确的赋值语句是 _。 ( A) x1=26.8%3; ( B) 1+2=x2; ( C) x3=0x12; ( D) x4=1+2=3; 21 以下函数值的类型是 _。 fun(float x) float y; y=3*x-4 return y; ( A) int ( B)不确定 ( C) void ( D) float 22 以下程序的输出结果是 _。 #include stdio.h main() int a=200; #define a 100 printf(“%d“,a); #undef a printf(“%d“,a); ( A)
10、200 100 ( B) 100 100 ( C) 100 200 ( D) 200 200 23 若有说明 int i,j=2,*p=,则能完成 i=j赋值功能的语句是 _。 ( A) i=*p ( B) *P=* for(i=9;i=0;i-)ai=1O-i; printf(“%d%d%d“,a2,a5,a8); ( A) 258 ( B) 741 ( C) 852 ( D) 369 25 以下数组定义中不正确的是 _。 ( A) inta23; ( B) int b3=0,1,2 ( C) int c100100=0; ( D) int d3=1,2,1,2,3,1,2,3,4; 26
11、以下程序的输出结果是 _。 main() int a44=1,3,5,2,4,6,3,5,7 printf(“%d%d%d%dn“,a03,a12,a21,a30); ( A) 650 ( B) 1470 ( C) 5430 ( D)输出值不定 27 以理程序的输出结果 _。 main() char st20=“he11Ot“; printf(“%d%dn“,str1en (st),sizeof(st); ( A) 99 ( B) 520 ( C) 1320 ( D) 2020 28 以下程序运行后的输出结果是 _。 int d=1; fun(int p) static int d=5;d+=
12、p printf(“%d,d“);retum d; main() int a=3;printf(“%dn“,fun(a+fun(d) ); ( A) 699 ( B) 9 ( C) 61515 ( D) 6615 29 以下程序输出正确的是 _。 amovep(int *pint(*a) 3int n) int i,j; for(i=0;i n;i+) for(j=0;j n;j+) *p=aij;p+; main() int *p,a33=1,3,5,2,4,6; p=(int*)malloc (100); amovep(p,a,3); printf(“%d%dn“,p2p5;free(p)
13、; ( A) 56 ( B) 25 ( C) 34 ( D)程序错误 30 以下程序的输出结果是 _。 structHAR int x,y;structHAR*p; main() h0.x=1;h 0.y=2; h1.x=3;h1.y=4; h0.p= printf(“%d%dn“,(h0.p- y); ( A) 12 ( B) 23 ( C) 14 ( D) 32 31 以下程序的结果是 _。 int a,b; void fun() a=100;b=200; main() int a=5,b=7; fun(); printf(“%d%dn“,a,b); ( A) 100200 ( B) 57
14、 ( C) 200100 ( D) 75 32 以下程序的输出结果是 _。 #define M(x,y,z)x*y+z main() int a=1,b=2,c=3; printf(“%dn“,M(a+b,b+c,c+a); ( A) 19 ( B) 17 ( C) 15 ( D) 12 33 若有以下说明和语句: struct stint n;char*ch; struct st a3=5,“abc“7,“def“,9“,ghk“),*p=a; 则值为 6的表达式是 _。 ( A) p+- n ( B) p- n+ ( C) (*p).n+ ( D) #NAME? 34 整型变量 X和 Y的
15、值相等,且为非 0值,则以下选项中结果为 0的表达式是_。 ( A) X|Y ( B) X|Y ( C) Xint i; myf=fopen(fname,“w“) for(i=0;i strlen(st);i+)fputc(stimyf); fdose(myf); main() fun(“test.t“new word“);fun(“test.t,“hello,“); ( A) hello, ( B) new wor1dhello ( C) new world ( D) hello,rld 36 在说明语句 int*f()中,标识符 f代表的是 _。 ( A) 个用于指向整型数据的指针变量 (
16、 B) 个用于指向一维数组的行指针 ( C) 个用于指向函数的指针变量 ( D)一个返回值为指针型的函数名 37 下面程序的输出结果为 _。 #include string.h main() charP17=“abc“=“ABC“.STR50=“xyz“; strcpy(str,strcat(p1,p2); printf(%s,str); ( A) xyzabcABC ( B) abcABC ( C) xyzabc ( D) xyzABC 38 假定 int类型变量占用两个字节,若有定义: int x100,2,4;,则数组 x在内存中所占字节数是 _。 ( A) 3 ( B) 6 ( C)
17、10 ( D) 20 39 执行以下的程序段后, m的值是 _。 int a23=1,2,3,4,5,6; int m,*p; P= ( A) 4 ( B) 5 ( C) 3 ( D)不确定 40 以下选项中,非法的字符常量是 _。 ( A) t ( B) 17 ( C) n ( D) xaa 41 算法的复杂度主要包括时间复杂度和 _复杂度。 42 按照逻辑结构分类,结构可以分为线性结构和非线性结构,栈属于 _。 43 树中度为零的结点称为 _。 44 在面向对象方法中,类之间共享属性和方法的机制称为 _。 45 软件是程序、数据和 _的集合。 46 若 a的值为 1,则表达式 !a+a的值
18、是 _。 47 若 a是 int型变量,且 a的初值为 4,则计算 a+=a-=a*a表达式后 a的值为_。 48 下列程序的输出结果是 _。 #include stdio.h main() int a=2,b=- 1,c=2; if(a b) if(b 0) c=0; else c+; printf(“%dn“,c); 49 下列程序的循环次数是 _。 x=2; do x=x*x; while(!x); 50 下列程序段的运行结果是 _。 int x=0,y=0; while(x 15) y+,x+=+y; printf(“%d,%d“,y,x); 51 下列程序的运行结果是 _。 main
19、() int s=0,i=1; while(s =10) s=s+i*i; i+; printf(“%d“,-i); 52 下列程序的输出结果是 _。 long fun5(int n) long s; if(n=1)(n=2) s=2; else s=n+fun5(n-1); return(s); main() long x; x=fun5(4); printff“%1dn“,x); 53 下列程序的输出结果是 _。 main() int a=2,b=4,e=6; int*p1= *(p= printf(“%dn“,c); 54 下列程序运行后的输出结果是 _。 #include stdio.
20、h main() char s20; scanf(“%s“,s); printf(“%s“,s); 运行程序,输入 HOW ARE YOU。 55 下列程序的运行结果是 _。 #define POW(r)(r)*(r) main() int x=3,y=2,t; t=POW(x+y); printf(“%dn“,t); 56 下述函数用于 统计 行字符中的单词个数,单词之间用空格分隔。 word_num(str) char str; int,num=O,word=O; for(i=0;stri!=【 】 ;i+) if(【 】 “)wprd=0 else if(word O) word=1:
21、【 】 ; return(num); 国家二级( C语言)笔试模拟试卷 123答案与解析 1 【正确答案】 C 【试题解析】 逻辑结构反映数据元素之间的逻辑关系,线性结构表示数据元素之间 对 的关系,非线性结构表示数据元素之间 对多或多对 的关系。 2 【正确答案】 C 【试题解析】 栈是 种后进先出表,选项 C中,先出栈的是 3,说明此时栈内必然有 1, 2,由于 1先于 2进栈,所以 1不可能在 2之前出栈,故选项 C这种出栈序 列是不可能的。 3 【正确答案】 A 【试题解析】 希尔排序法的基本思想是:将整个无序序列分割成若干小的子序列分别进行插入排序。 4 【正确答案】 C 【试题解析
22、】 二分法查找是用关键码与线性表的中间元素比较,然后根据比较结果来判断是结束查找,还是在左边或右边子表按相同的方法继续查找。本题中,与 11比较的关键码分别为 15, 8, 10, 12四个。 5 【正确答案】 C 【试题解析】 在 n个结点的单向链表 (无表头结点 )中,每个结点都有 个指针单元 (即指针域 ),加上头指针,至少需要 n+1个指针单元。 6 【正确答案】 B 【试题解析】 从工程管理角度来看,软件设计分两步完成:概要设计和详细设计。概要设计 (又称结构设计 )将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式。 7 【正确答案】 D 【试题解析】 内聚性是
23、 个模块内部各元素间彼此结合的紧密程度的度量。内聚共有 7类,它们之间的内聚性由弱到强排列顺序为:偶然内聚、逻辑内聚,时间内聚、过程内聚、通信内聚、顺序内聚和功能内聚。 8 【正确答案】 D 【试题解析】 数据流图有 4种成分:源 点或终点、处理、数据存储和数据流。数据存储是处于静止状态的数据,数据流是处于运动中的数据。 9 【正确答案】 D 【试题解析】 数据模型的完整性规则是始定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态及其状态的变化,以保证数据的正确性、有效性和相容性。 10 【正确答案】 C 【试题解析】 关系代数运算是以关系代数作为运算对象的 组
24、高级运算的集合。它的基本操作是并、交、差、笛卡尔积,另外还包括垂直分割 (投影 )、水平分割(选择 )、关系的结合 (连接 )等。 11 【正确答案】 B 【试题解析】 p指向了 a3的地址,且 *p=a3=4,又有 *q=p-2;则 q指向了 a5的地址,且 *q=a5=6,最后输出为 10。 12 【正确答案】 A 【试题解析】 结构化程序的 3种基本结构是顺序、循环、选择,任何复杂的任务都可以通过这 3种结构来实现。 13 【正确答案】 D 【试题解析】 本题选项 D中 int为 C语言的保留字,是错误的。注意: C语言的标识符是区分大小写的, void是 C语言的保留字,而 Void不
25、是 C语言的保留字,故 Void也可 定义为用户标识符。 14 【正确答案】 D 【试题解析】 本题考查 C语言中数据类型的种类, C语言中没有逻辑类型和集合类型。 C语言的数据类型有:整型、字符型、实型、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。各种数据类型变量的定义和常量的表示形式见各个考点的理论链接。 15 【正确答案】 B 【试题解析】 函数 fun的功能是求两个数之和,其形参数据类型为 int型,函数的返回值类型是 float型。 fun(int)fun(a+c, b), a-c)中有两层函数调用,其中内层调用 是 fun(a+c, b),因 a+c+b=2+8+
26、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。 16 【正确答案】 C 【试题解析】 aa+2=aa2,因此 sort(aa+2, 5)是从 aa2开始,依次与后面的元素进行比较,将当前值小于其后一项的值进行互换,循环 5次。 17 【正确答案】 B 【试题解析】 字符数组元素作函数参数是单向的值传递。函数 cchar的功能是将大写字母转换为小写字母。主
27、函数中 while循环语句的条件是判断指针 p当前指向的字符是否为空,若不为空,则调用函数 cchar,即主函数中通过循环语句将字符串 “ABC+abc=defDEF“中的大写字母全部转换为小写字母,因此 printf的输出结果为选项 B。 18 【正确答案】 B 【试题解析】 “/”除, “%”取余, “ 其中, f是函数名,调用它以后能得到 个指向整型数据的指针(地址), x,y是函数 f的形参。在 f的两侧为别为 *运算符和()运算符,而()优先级高于 *,因此 f先与()结合,显然是函数形式。这个函数前面有一个 *,表示此函数是指针型函数 (函数值是指针 )。前面的 int表示返回的指
28、针指向整型变量。 37 【正确答案】 B 【试题解析】 strcpy(strl, s1):作用是将字符串 s1拷贝到字符数组 strl中去。strcat(字符数组 1,字符数组 2):把字符串 2接到字符串 1的后面,结果放在字符数组 1中,函数调用后返回字符数组 1的地址。本题定义了三个字符数组pl,p2,str, strcat(pl,p2)函数的作用是将 字符串数组 p2接到字符串 p1的后面,结果放在字符数组 p1中,再通过 strcpy()函数将该字符串拷贝到 str数组中,原 str数组中的字符串 xyz被覆盖,因此打印输出字符串 str即可得到 abcABC。 38 【正确答案】
29、D 【试题解析】 当数组定义后,系统就为其分配内存空间,而不论其中有没有内容。因此,本题中数组 x10不论是否为其元素初始化,它所分配的存储空间仍为2*10=20个字节。 39 【正确答案】 B 【试题解析】 程序中定义了一个指向整型变量的指针变量,并对其赋值为二维整型 数组 a的首元素的地址。 p4等价于 *(p+4),即二维数组 a中第四个元素的值,而 a是一个 2*3的二维数组,其第四个元素为 a11,即 5。 40 【正确答案】 C 【试题解析】 C语言中字符常量是以单引号括起来的单个字符,或以 “”与三位八进制数值或两位十六进制数值代替单个字符。 41 【正确答案】 空间 【试题解析
30、】 衡量一个算法的复杂度有两个指标:时间复杂度和空间复杂度。前者用来衡量执行算法时所需要的计算工作量,而后者用来衡量执行算法所需要的存储空间。 42 【正确答案】 线性结构 【试题解析】 数据的逻辑结构是指数据元素之间的逻辑关系,分为线性结构和非线性结构。常见的线性结构有线性表、栈和队列等,常见的非线性结构有树、二叉树等。 43 【正确答案】 叶子结点 【试题解析】 树中度为零的结点,也就是没有后件的结点,称为叶子结点。 44 【正确答案】 继承 【试题解析】 在面向对象的程序设计方法中,某些属性和方法是可以共享的,由于类从父类中继承而来,这样提高了软件的可重用性。 45 【正确答案】 相关文
31、档 【试题解析】 计算机软件是计算机系统 中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。 46 【正确答案】 1 【试题解析】 逻辑运算中,非 1即 0,非 0即 1, !a=0, +a为逻辑 1,所以 0和1相或结果为 1。 47 【正确答案】 -24 【试题解析】 本题考查赋值运算符 a+=b等价于 a=a+b; a-=a*a等价于 a=a-a*a=4-4*4=-12; a+=a,即 a=a+a=-24。 48 【正确答案】 2 【试题解析】 分析程序, a=2, b=-1, c=2时, if语句的表达式 a b不成立,不再往下判断 ,直接退出 if语句,执行后面的输出
32、语句,程序结束。在这个程序中a、 b、 c的值没做任何改变。 49 【正确答案】 1 【试题解析】 dowhile 语句的功能是:首先执行循环体语句,然后检测循环控制条件表达式的值,若为真,则重复执行循环体语句,否则退出循环; dowhile语句的特点是先执行后判断,因此循环体至少执行 1次。本程序中 x=2不符合循环条件,所以只循环 1次。 50 【正确答案】 8,20 【试题解析】 本题考查 while循环和 +运算符的运用。 x=0符合条件 x 15,则执行 y+, x+=+y后, y=1, x=0+2=2后 y=2,符合条件继续循环, y=3,x=x+4=6后 y=4,再循环 y=5,
33、 x=x+6=6+6=12后, y=6,继续循环 y=7,x=x+8=12+8-20,此时 y=8。 51 【正确答案】 3 【试题解析】 分析程序运行过程,第 1次循环: s=s+i*i=0+1*1=1, i=2;第 2次循环: s=s+i*i=1+2*2=5, i=3;第 3次循环: s=s+i*i=5+3*3=14, i=4;循环条件不成立输出 i, -i使 i的值减 1,输出结果为 3。 52 【正确答案 】 9 【试题解析】 考查 if else语句, n=4不满足条件,所以 fun5(4)=4+fun5(3),n=3也不满足条件, fun5(3)=3+funS(2), n=2满足条
34、件 fun5(2)=2,故x=4+3+2=9。 53 【正确答案】 8 【试题解析】 本程序定义了 3个指针变量 p1、 p2、 p,并且将 a、 b的地址分别赋给 p1、 p2,则 *p1=a=2, *p2=b=4,所以表达式 *p1*(*p2)的值是 8。在赋值语句的左边是 *(p=&c),即使指针 p指向了变量 c,因而 *(P)代表了 c的存储 单元,赋值语句 “*(p=&c)=*p1*(*p2); ”是把整数 8赋给了变量 c。 54 【正确答案】 HOW 【试题解析】 在 scanf()函数中,使用空格作为分隔符,如果输入含有空格的字符中,则不能使用 scanf()数,所以本题中输
35、入空格就返回了 0, s数组也就确定了,后面的输入就不再读入数组 s中。 55 【正确答案】 29 【试题解析】 本题考查带参数的宏的定义及相关运算。运算过程为:t=POW(x+y)=(2+3)*(2+3)=25。 56 【正确答案】 0 或 0 或 NULL stri num+ 或 num=num+1 或 mum+=l 【试题解析】 观察题目要求,可以知道以下几点: for循环的结束条件应当是: stri已是字符串的最后一个字符; stri代表字符串 str中的第 i+1个字符; 整型变量 num的值是要记录的单词的个数。 C语言中规定字和会串的最后一个字和会是一个隐含的字符串结束符 “0”,所以在题中第一个空中应填写 “0”;题中第二个空应填写 “stri”,以判断当前位置的字符是否为空格;题中第三个空中应当填写 “num+”,通地变量 num的加 1累加到字符串中的单词个数。