1、国家二级( C语言)笔试模拟试卷 192及答案与解析 1 在结构化方法中,用数据流程图 (DFd)作为描述工具的软件开发阶段是 ( )。 ( A)逻辑设计 ( B)需求分析 ( C)详细设计 ( D)物理设计 2 对序线性表 (23, 29, 34, 55, 60, 70, 78)用二分法查找值为 60的元素时,需要比较次数为 ( )。 ( A) 1 ( B) 2 ( C) 3 ( D) 4 3 下列描述中,正确的是 ( )。 ( A)线性链表是线性表的链式存储结构 ( B)栈与队列是非线性结构 ( C)双向链表 是非线性结构 ( D)只有根结点的二叉树是线性结构 4 开发大型软件时,产生困难
2、的根本原因是 ( )。 ( A)大型系统的复杂性 ( B)人员知识不足 ( C)客观世界千变万化 ( D)时间紧、任务重 5 两个或两个以上的模块之间关联的紧密程度称为 ( )。 ( A)耦合度 ( B)内聚度 ( C)复杂度 ( D)连接度 6 下列关于线性表的叙述中,不正确的是 ( )。 ( A)线性表可以是空表 ( B)线性表是一种线性结构 ( C)线性表的所有结点有且仅有一个前件和后件 ( D)线 性表是由 n个元素组成的一个有限序列 7 设有如下关系表: 则下列操作正确的是 ( )。 ( A) T=R/S ( B) T=RS ( C) T=RS ( D) T=R S 8 以下描述中,
3、不是线性表顺序存储结构特征的是 ( )。 ( A)可随机访问 ( B)需要连续的存储空间 ( C)不便于插入和删除 ( D)逻辑相邻的数据物理位置上不相邻 9 在三级模式之间引入两层映像,其主要功能之一是 ( )。 ( A)使数据与程序具有较高的独立性 ( B)使系统具有较高的通道能力 ( C)保持数据与程序 的一致性 ( D)提高存储空间的利用率 10 下列方法中,属于白盒法设计测试用例的方法的是 ( )。 ( A)错误推测 ( B)因果图 ( C)基本路径测试 ( D)边界值分析 11 C语言源程序名的后缀是 ( )。 ( A) .exe ( B) .C ( C) .obj ( D) .c
4、p 12 若函数中有定义语句: int a;,则 ( )。 ( A)系统将自动给 a赋初值 0 ( B)这时 a中的值是和随机数 ( C)系统将自动给 a赋初值 -1 ( D)这 a中无任何值 13 以下选项中,合法的 一组 C语苦数值常量是 ( )。 ( A) 28.5e-3 -0xf ( B) 12 OXa23 4.5 ( C) 177 4c1.5 Oabc ( D) 0x8A 10,000 3.e5 14 下列语句组中,不正确的是 ( )。 ( A) char *s;s=“Olympic“; ( B) char s=“Olympic“; ( C) char *s;s=“Olympic“;
5、 ( D) char s=“Olympic“; 15 若在定义语句: int a,b,c,*p=之后,接着执行以下选项中的语句,则能正确执行的语句是 ( )。 ( A) scanf(“%d“,a,b,C); ( B) scanf(“%d%d%d“,a,b,C); ( C) scanf(“%d“,p); ( D) scanf(“%d“, 16 有以下程序,其中 %u表示按无符号整数输出 ( )。 main() unsigned int x=0xFFFF; /*x的初值为十六进制数 */ printf(“%un“,x); 程序运行后的输出结果是 ( )。 ( A) -1 ( B) 65535 (
6、C) 32767 ( D) 0xFFFF 17 设变量 x和 y均已正确定义并赋值,以下 if语句中,在编译时将产生错误信息的是 ( )。 ( A) if(x+); ( B) if(x y ( C) if(x y)x-else y+; ( D) if(y 0) ; else x+; 18 以下选项中,当 x为大于 1的奇数时,值为 0的表达式为 ( )。 ( A) x%2=1 ( B) x/2 ( C) x%2!=0 ( D) x%2=0 19 若 x,i,j和 k都是 int型变量,则计算表达式 x=(i=4,j=16,k=32)后, x的值为( )。 ( A) 4 ( B) 16 ( C)
7、 32 ( D) 52 20 在下列选项中,没有构成死循环的是 ( )。 ( A) int i=100; while(1) i=i0+1; if(i 100) break; ( B) for(;); ( C) int k=10000; dok+;while(k 10000); ( D) int s=36; while (s) -s; 21 在 printf的格式字符中, e格式字符的作用是 ( )。 ( A)以十六进制无符号形式输出整数 ( B)以带符号的十进制形式输出整数 ( C)以指数形式输出实数 ( D)以字符形式输出,且只输出一个字符 22 以下选项中正确的语句组是 ( )。 ( A)
8、 char s; s=“HELLO!“; ( B) char *s; s=“HELLO!“; ( C) char s10; s=“HELLO!“; ( D) char *s; s=“HELLO!“; 23 字符串 “%“ABCDEF“的长度是 ( )。 ( A) 11 ( B) 10 ( C) 5 ( D) 3 24 下列说法正确的是 ( A) int(*def)10;-def指向一个指针,该指针指向 10个整型变量构成的数组 ( B) int*(*gh10);-gh指向一个指针,该指针指向 10个整型变量构成的数组 ( C) int*(*gh10);-gh是一个指针,指向由 10个指向整 型
9、变量的指针构成的数组 ( D) A, C均正确 25 若函数调用时的实参为变量,以下关于函数形参和实参的叙述中正确的是( )。 ( A)函数的实参和其对应的形参共占同一存储单元 ( B)形参只是形式上的存在,不占用具体存储单元 ( C)同名的实参和形参占同一存储单元 ( D)函数的彤参和实参分别占用不同的存储单元 26 设有如下定义: struct sk int m; float x; data,*q; 若要使 q指向 data中的 m域,正确的赋值语句是 ( )。 ( A) q= ( B) *q=data.m; ( C) q=(struct sk*) ( D) q=(struct sk*)d
10、ata.m; 27 有以下程序: int f1(doubleA)return a*a; int f2(int x,int y) double a,b; a=f1(x); b=f1(y); return a+b; main() double w; w=f2(2.1,4.0); 程序执行后,变量 w的值是 ( )。 ( A) 20.21 ( B) 20 ( C) 20.0 ( D) 0.0 28 若语句 “t=fun(fun(x,y,A),(a+b,a+C),x+y+z);”对 fun函数的调用正确,则 fun函数的形参个数为 ( )。 ( A) 3 ( B) 4 ( C) 5 ( D) 6 29
11、 设 x为整型变量, n=14, n的地址为 4000; m=6, m的地址为 2000;执行语句x=,则对数组元素mij(其中 0 =i 3, 0 =j 4)值的正确引用为 ( )。 ( A) (q+i)j ( B) *qij ( C) *(*qi+j) ( D) *(*(q+i)+j) 31 有以下程序: void ss(char *s,char t) while(*s) if(*s=t)*s=t-a+A; s+; main() char str1100=“abcddfefdbd“,c=d; ss(str1,C);printf(“%sn“,str1); 程序运行后的输出结果是 ( )。 (
12、 A) ABCDDEFEDBD ( B) abcDDfefDbD ( C) abcAAfefAbA ( D) Abcddfefdbd 32 下述语句中,在字符串 s1和 s2相等时显示 “they are Equal“的是 ( )。 ( A) if(*s1=*s2) puts(“they are Equal“); ( B) if(!strcmp(s1,s2) puts(“they are Equal“); ( C) if(s1=s2) puts(“they are Equal“); ( D) if(strcmp(s1,s2) puts(“they are Equal“); 33 设有说明 in
13、t(*ptr)M;其中的标识符 ptr是 ( )。 ( A) M个指向整型变量的指针 ( B)指向 M个整型变量的函数指针 ( C)一个指向具有 M个整型元素的 一维数组的指针 ( D)具有 M个指针元素的一维指针数组,每个元素都只能指向整型变量 34 在 C语言中,变量的隐含存储类别是 ( )。 ( A) auto ( B) static ( C) extern ( D)无存储类别 35 有以下程序: #include stdio.h struct tt int x;struct tt *y; *p; struct tt a4=20,a+1,15,a+2,30,a+3,17,a; main(
14、) int i; p=a; for(i=1;i =2;i+) printf(“%d,“,p- x);p=p- y; 程序的运行结果是 ( )。 ( A) 20,30, ( B) 30,17 ( C) 15,30, ( D) 20,15, 36 有以下程序: #include stdio.h main() FILE *fp;int a10=1,2,3,0,0,i; fp=fopen(“d2.dat“,“wb“); fwrite(a,sizeof(int),5,fp); fwrite(a,sizeof(int),5,fp); fclose(fp); fp=fopen(“d2.dat“,“rb“);
15、 fread(a,sizeof(int),10,fp); fclose(fp); for(i=0;i 10;i+)printf(“%d,“,ai); 程序的运行结果是 ( )。 ( A) 1,2,3,0,0,0,0,0,0,0, ( B) 1,2,3,1,2,3,0,0,0,0, ( C) 123,0,0,0,0,123,0,0,0,0, ( D) 1,2,3,0,0,1,2,3,0,0, 37 定义结构体数组 struct stu int num; char name20; x5=1,“ZHAO“,2,“QIAN“,3,“SUN“,4,“LEE“,5,“ZHOU“; for(i=1;i5;i
16、+) printf(“%d%c“,xi.num,xi.name2); 程序执行后的输出结果是 ( )。 ( A) 2A3N4E5O ( B) 1H2I3U4E ( C) 1A2N3E4O ( D) 1A2N3E4O 38 union dt int a;char b;double c; data; 以下叙述中错误的是 ( )。 ( A) data的每个成员起始地址都相同 ( B)变量 data所占内存字节数与成员 c所占字节数相等 ( C)程序段: data.a=5;printf(“%fn“,data. C);输出结果为 5.0 ( D) data可以作为函数的实参 39 设 x=021,y=0
17、12,则 z=x|y的值是 ( )。 ( A) 1 ( B) 0 ( C) 11011 ( D) 1.1e+007 40 fgets(str,n,fp)函数从文件中读入一个字符串,以下错误的叙述是 ( )。 ( A)字符串读入后会自动加入 0 ( B) fp是指向该文件的文件型指针 ( C) fgets函数将从文件中最多读入 n个字符 ( D) fgets函数将从文件中最多读入 n-1个字符 41 若有定义: int a=6, b=8, c=14;接着顺序执行下列语句后,变量 c中的值是( )。 c=(b-=(a-5); a=(c%3)+(a=8); 42 下面程序的功能是:输出 100以内能
18、被 3整除且个位数为 9的所有整数,清填空。 main() int i, j; for(i=0; ( ); i+) j=i*10+9; if(j%3!=0)continue; printf(“%d“, j); 43 以下程序的运行结果是 ( )。 #define S(x)x*x main() int k=1; while(k=4) printf(“%d, “, S(k); k+; 44 以下程序调用函数 swap将指针 s和 t所指单元 (a和 B)中的内容交换,请填空。 main() int a=10, b=20, *s, *t; s=&a; t=&b; ( ) printf(“%d%d“,
19、 a,B); swap(int*ss, int*tt) int te; te=*ss; *ss=*tt; *tt=te; 45 下面程序输出的 结果是 ( )。 int m=17; int fun(int x, int y) int m=3; return(x*y-m); main() int a=5, b=7; printf(“%dn”, fun(a, B)/m); 46 以下程序的输出结果是 ( )。 #define PR(ar)printf(“ar=%d”, ar) main() int j, a=1, 8, 3, 7, 6, 13, 17, 15, *p=a+5; for(j=3; j
20、; j-) switch(j) case 1: case 2:PR(*p+); break; case 3:PR(*(-p); 47 以下程序的运行结果是 ( )。 #define A 4 #define B(x)A*x/2 main() float c, a=8.0; c=B(A; printf(“%fn“,C); 48 有以下程序: #include stdio.h #include string.h main() char a=a, b, c, d, e, f, h, 0; int i, j; i=sizeof(A); j=strlen(A); printf(“%d, %d“, i, j
21、); 程序运行后的输出结果是 ( )。 49 本程序用冒泡法对数组 a的元素从大到小排序,请在程序空白处填空。 void bubble(int a, int n) int i,j, max, temp; max=n-1; doj=0; for(i=0; imax; i+) if(ai ai+1) temp=ai; ai=ai+1; ai+1=temp; j=i; max=j; while( ); 国家二级( C语言)笔试模拟试卷 192答案与解析 1 【正确答案】 B 【试题解析】 软件开发阶段包括需求分析、总体设计、详细设计、编码和测试五个阶段。其中需求分析阶段常用的工具是数据流图和数据字典
22、。 2 【正确答案】 C 【试题解析】 根 据二分法查找法需要两次: 首先将 60与表中间的元素 55进行比较,由于 60大于 55,所以在线性表的后半部分查找。 第二次比较的元素是后半部分的中间元素,将 60与表中间的元素 70进行比较,由于 60小于 70,所以在线性表的前半部分查找。 第三次比较的元素是前半部分的中间元素,即 60,这时两者相等。即查找成功。 3 【正确答案】 A 【试题解析】 根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。如果一个非空的数据结构满足下列两个条件: 有且只有一个根结点; 每个结点最多有一个前件,也最多有一
23、个后件。则称该数据结构为线性结构,又称线性表。所以线性表、栈与队列、线性链表都是线性结构,而二叉树足非线性结构。 4 【正确答案】 A 【试题解析】 随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周期显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了人们难以控制软件发展的局面,即所谓的 “软件危机 ”。 5 【正确答案】 A 【试题解析】 耦合度是模块间互相连接的紧密程度的度量;内聚度是一个模块内部各个元素问彼此结合的紧密程 度的度量。 6 【正确答案】 C 【试题解析】 线性表是一种线性结构,由 n(n0)个元素组成,所以线性表可以是空表。但是在线性表中,第一
24、个结点没有前件,最后一个结点没有后件,其他结点有且只有一个前件和后件。所以选项 C是错误的。 7 【正确答案】 C 【试题解析】 T就是关系 R中有的,同时 S中也有的有序组 (4、 5、 6),即交运算 ()。 8 【正确答案】 D 【试题解析】 线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻辑上相邻的元素在物理位置上也相邻。数据元素之间 逻辑上的先后关系自动隐含在物理位置的相邻元素之中,因此不需要另外开辟空间来保存元素之间的关系。 9 【正确答案】 A 【试题解析】 数据库管理系统在数据库的三级模式之间提供了两层映像,保证了数据库中数据的较高的逻辑独立性和物理独立性。 10
25、【正确答案】 C 【试题解析】 白盒测试方法也称为结构测试或逻辑测试,主要方法有逻辑覆盖测试、基本路径测试等。 11 【正确答案】 B 12 【正确答案】 B 13 【正确答案】 B 14 【正确答案】 C 15 【正确答案】 C 16 【正确答案】 B 17 【正确答案】 C 18 【正确答案】 D 19 【正确答案】 C 20 【正确答案】 D 21 【正确答案】 C 22 【正确答案】 D 23 【正确答案】 B 24 【正确答案】 D 25 【正确答案】 D 26 【正确答案】 C 27 【正确答案】 C 28 【正确答案】 A 29 【正确答案】 D 【试题解析】 &是取地址运算符,
26、表达式 x=&a是表示将 a的地址赋给变量 x。 30 【正确答案】 D 【 试题解析】 *(q+i)指向第 i行首地址, *(*(q+i)+j)代表第 i行第 j个元素。 31 【正确答案】 B 【试题解析】 函数 ss(char *s,char t)的功能是将指针 s所指向的字符串中存在的字符 “t”均改写成大写字母;所以 main函数中引用函数 ss后使得数组 str1中的小写字母 “d”均变成了大写字母 “D”,然后输出数组 str1,结果为: abcDDfefDbD。 32 【正确答案】 B 33 【正确答案】 C 【试题解析】 根据 C语言的语法规则可知, int(*ptr)M中的
27、标识符 ptr是一个指向具有 M个整型元素的一维数组指针。 34 【正确答案】 A 【试题解析】 C语言中,变量的隐含存储类型为 auto。 35 【正确答案】 D 【试题解析】 本题考查的是指针和结构的应用。首先定义的数组 tt中有两个成员,一个整型变量,一个结构指针。当 i=1时, P指针指向结构数组的第一个元素,并输出此元素的第一个成员 x,即 20;当 i=2时, P指针指向结构数组的第二个元素的第一个成员,所以输出 15。 36 【正确答案】 D 37 【正确答案】 A 38 【正 确答案】 C 39 【正确答案】 C 【试题解析】 本题主要考查按位或运算。按位或是对两个运算对象相应
28、的位进行逻辑或运算,其运算规则和逻辑或相同,两个运算对象只要有一个是 1,则结果为1。 40 【正确答案】 C 【试题解析】 字符串输入函数 fgets()的调用形式为: fgets(s,n,fp)。 s可以是一个字符数组名,或是指向字符串的指针; n为要读取的最多的字符个数: fp是指向该文件的文件型指针。字符串输入函数的功能是:从 fp所指向的文件中读取长度不超过 n-1个字符的字符串,并将该字符串 存放到字符数组 s中。 41 【正确答案】 7 【试题解析】 本题考查基本赋值运算符和赋值表达式。 c=(b-=a-5)等价于 c=b-(a-5)b=7。 c%3=1, a=(c%3)+a=8
29、)=9,但 c的值在第二条语句只能够并没有被改变,因此 c的值还是 7。 42 【正确答案】 i 10 【试题解析】 分析程序,当 (i=0, 1, 2, ) 时, “j=i*10+9”语句的运行结果是(9, 39, 69, 99)个位数为 9的所有整数;题中要求是 100以内的整数,所以 i10; “if(j%3!=0)continue; ”语句的功能是当条件不能被 3整除时,继续循环不执行操作,直到能被 3整除时输出该数,即输出的数满足条件 100以内能被 3整除且个位数为 9。 43 【正确答案】 1, 4, 9, 16, 【试题解析】 分析程序执行过程,第 1次循环, k=1时,此时
30、s(1)=1*1=1,然后k的值加 1;第 2次循环, k=2时, s(2)=2*2=4,然后 k的值加 1;第 3次循环,k=3时, s(3)=3*3=9,然后 k的值加 1;第 4次循环, k=4时, s(4)=4*4=16,然后k的值加 1;当 k=5时,条件不满足,退出循环。 44 【正确答案】 swap(s, t); 【试题解析】 本题要在主函数中调用 swap函数交换 a、 b的值,实现数据交换需要进行地址传递,所以函数的形参都应该是需要交换的数据的地址,程序中通过 “s= a; t=&b; ”将指针变量 s和 t指向变量 a、 b的地址,因此,引用时直接引用指针变量 s和 t即可
31、。 45 【正确答案】 1 【试题解析】 本题考查局部变量和全局变量的区别:局部变量是指作甩域在函数级和块级的变量,全局变量是指作用域在程序级和文件级的变量。 46 【正确答案】 ar=6 ar=6 ar=13 【试题解析】 通过 *p=a+5将指针 P指向 a5,第 1次循环, i=3时, switch(3),执行 case 3, *(-p)-a4=6,所以输出 ar=6;第 2次循环, j=2时, switch(2),执行case 2, (*p+)是先引用 a4的值 6,输出 ar=6,再将指针 P移位指向 a5;第 3次循环, j=1时, switch(1),执行 case 1, case 1后没有 break语句,接着执行case 2, (*p+)是先引用 a5的值 13,输出 ar=13,再将指针 P移位指向 a6。 47 【正确答案】 16.0 48 【正确答案】 9, 8 49 【正确答案】 max 0 【试题解析】 本题是典型的冒泡排序题,每一次 for循环将从数组 a中找出剩下数中的最大的值放在这些数的最前端,若数组 a中有 n个数,则完成数组排序共需 n-1次循环。令 max=n-1,每次循环后 i值增 1, i max条件不足,即 n-1次循环后,此时 i=j=max=0,循环结束。