1、国家二级( C语言)笔试模拟试卷 199及答案与解析 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 以下叙述错误的是 ( )。 ( A) C语言区分大小写 ( B) C程序中的一个变量,代表内存中一个相应的
4、存储单元,变量的值可以根据需要随时修改 ( C)整数和实数都能用 C语言准确无误地表示出来 ( D)在 C程序中,正整数可以用十进制、八进制和十六进制的形式来表示 12 以下不正确的转义字符是 ( )。 ( A) ( B) t ( C) n ( D) 088 13 可在 C程序中用作用户标识符的一组标识符是 ( )。 ( A) void define WORD ( B) as_b3 _123 If ( C) For -abe case ( D) 2c DO SIG 14 若变量已正确定义并赋值,则以下符合 C语言语法的表达式是 ( )。 ( A) a=a+7 ( B) a=7+b+c,a+ (
5、 C) int(12 3 4) ( D) a=a+7=c+b 15 有以下程序段 char ch; intk; ch=a: k=12; printf(“ c, d, ”, ch, ch, k); printf(“k= d n”,k1); 已知字符 a的 ASCII十进制代码为 97,则执行上述程序段后输出结果是 ( )。 ( A)因变量类型与格式描述符的类型不匹配输出无定值 ( B)输出项与格式描述符个数不符,输出为零值或不定值 ( C) a,97, 12k=12 ( D) a,97,k=12 16 下列叙述中错误的是 ( )。 ( A)计算机不能直接执 行用 C语言编写的源程序 ( B) C
6、程序经 C编译程序编译后,生成后缀为 obj的文件是一个二进制文件 ( C)后缀为 obi的文件,经连接程序生成后缀为 exe的文件是一个二进制文件 ( D)后缀为 obj和 exe的二进制文件都可以直接运行 17 有以下程序 #include void main() int a=1, b=0; printf(“ d, ”, b=(a+)+(a+); printf(“ dha”,a+b); 程序运行后的输出结果是 ( )。 ( A) 4,6 ( B) 2,5 ( C) 3,5 ( D) 2,6 18 若有代数式 (其中 e仅代表自然对数的底数,不是变量 ),则下列能够正确表示该代数式的 C语言
7、表达式是 ( )。 ( A) sqrt(abs(nx+ex) ( B) sqrt(fabs(pow(n,x)+pow(x,e) ( C) sqrt(fabs(pow(n,x)+exp(x) ( D) sqrt(fabs(pow(x,n)+exp(x) 19 设有定义: int k=0;,下列选项的 4个表达式中与其他 3个表达式的值不相同的是 ( )。 ( A) k+ ( B) k+=1 ( C) +k ( D) k+1 20 有下列程序,其中 u表示按无符号整数输出。 main() unsigned int x=0xFFFF; *x的初值为十六进制数 * printf(“ u n”, x);
8、 程序运行后的输出结果是 ( )。 ( A) -1 ( B) 65535 ( C) 32767 ( D) 0xFFFF 21 下面程序的 运行结果是 ( )。 for(i=3; i99) s=3: else if(num9) s=2: else s=1; i=num 100; j=(num-i*1 00)/1 0: k=(num-i*100-j*10); switch(s) case 3: printf(“ (i d d n”, k,j, i); break; case 2: printf(“ d d n”, k,j); case 1: printf(“ d n”, k); ( A) 123
9、( B) 1,2,3 ( C) 321 ( D) 3,2,1 24 有以下程序 #include #include StructA int a; char b10; double c; ; struct A f(struct A t); main() struct A a=1001,“ZhangDa”, 1098 0; a=f(a); printf(“ d, s, 6 1 f n”, a a, a b, a C; structAf(Struct A t) t a=1002; strcpy(t b, “WangPeng”); t c=1220 0; return t 程序运行后的输出结果是 (
10、)。 ( A) 1001, ZhangDa, 1098 0 ( B) 1002, ZhangDa, 1220 0 ( C) 1001, WangPeng, 1098 0 ( D) 1002, WangPeng, 1220 0 25 判断 char型变量 cl是否为小写字母的正确表达式为 ( )。 ( A) a=a)&(cl=cl (z=a)&(clm ( B) *p+)-m ( C) (*p) m ( D) *(+p)-m 29 下列程序的运行结果是 ( )。 #include void sub(int*S, int*y) static int m=4; *y=s0; m+: void mai
11、n() int a: 1, 2,3, 4, 5, k; intx: printf(“ n”); for(k=0; k int fun(int x, int y) if(x!=y)retum(y); else retum(x+y) 2); main() int a=4, b=5, c=6; printf(“ d n”,fun(2*a, fun(b, C); 程序运行后的输出结果是 ( )。 ( A) 3 ( B) 6 ( C) 8 ( D) 12 31 C语言中规定,程序中各函数之间 ( )。 ( A)既允许直接递归调用也允许间接递归调用 ( B)不允许直接递归调用也不允许间接递归调用 ( C)
12、允许直接递归调用不允许间接递归调用 ( D)不允许直接递归调用允许间接递归调用 32 以下程序的输出结果是 ( )。 #include main() int af33: 0, 1, 2,0, 1, 2, 0, 1, 2, i,j, s=1; for(i=0; i #define X 5+6 main() int a=2, c; c=X*2; printf(“ d”, C; 程序运行后的输出结果是 ( )。 ( A) 17 ( B) 22 ( C) 16 ( D) 11 34 当用 “#define F 37 5f”定义后,下列叙述正确的是 ( )。 ( A) F是 float型数 ( B) F
13、是 char型数 ( C) F无类型 ( D) F是字符串 35 在一个 C源程序文件中,要定义一个只允许本源文件中所有函数使用的全局变量,则该变鼍需要使用的存储类别是 ( )。 ( A) auto ( B) register ( C) extem ( D) static 36 以下说法正确的是 ( )。 ( A)宏定义是 C语句,要在行末加分号 ( B)可以使用群 undefine提前 结束宏名的使用 ( C)在进行宏定义时,宏定义不能嵌套 ( D)双引号中出现的宏名也要进行替换 37 下面程序的输出结果是 ( )。 typedefunionlong x1; int y4; char z10
14、; M; M t: main() printf“ d n”, sizeof(t); ( A) 32 ( B) 26 ( C) 10 ( D) 4 38 以下程序中函数 sort的功能是对 a数组中的数据进行由大到小的排序 void sort(int a, int n) int i,j, t; for(i=0; i main() int a; scanf(“ d”, &a); if(a20)printf(“ d”, a); if(al0)printf(“ d”, a); if(a5)printf(“ d”, a); 49 下面程序的功能是:计算 1 20之间的奇数之和与偶数之和,请填空使程序功能
15、完整。 #include main() int a=0, b=0, c=0, i; for(i=0; i0&a 2=0) printf(“ d n”, a); i+; if(i!=3) scanff“ d”, &a); ) while(_); 52 以下程序的输出结果是 _。 #include fun() int a=0; a+=3: printf(“ d”, a); main() int cc; for(cc=1; cc main() char s=“ABCabc”; s5= 0; printf(“ s n”, s); 54 下面程序的运行结果是 _。 #inelude #define SI
16、ZE 12 main() char sSlZE; int i; for(i=0; i #include voidfun(char s) int ij; for(i=0,j=0; si; i+) if(isalpha(si)sj+=si; sj= 0; main() char ss80=“good morning”; fun(ss); printf(“ s”, ss); 国家二级( C语言)笔试模拟试卷 199答案与解析 1 【正确答案】 A 【试题解析】 根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。如果一个非空的数据结构满足下列两个条件:
17、有且只有一个根结点; 每个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构,又称线性表。所以线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。 2 【正确答案】 A 【试 题解析】 随着计算机软件规模的扩大,软件本身的复杂性不断增加,研制周期显著变长,正确性难以保证,软件开发费用上涨,生产效率急剧下降,从而出现了人们难以控制软件发展的局面,即所谓的 “软件危机 ”。 3 【正确答案】 A 【试题解析】 耦合度是模块间互相连接的紧密程度的度量;内聚度是一个模块内部各个元素间彼此结合的紧密程度的度量。 4 【正确答案】 C 【试题解析】 线性表是一种线性结构,由 n(n0
18、)个元素组成,所以线性表可以是空表。但是在线性表中,第一个结点没有前件,最后一个结点没有后件, 其他结点有且只有一个前件和后件,所以选项 C是错误的。 5 【正确答案】 C 【试题解析】 T就是关系 R中有的,同时 S中也有的有序组 (4、 5、 6),即交运算 (n)。 6 【正确答案】 D 【试题解析】 线性表的顺序存储是用一片连续的空间来存放数据元素,其特点是逻辑上相邻的元素在物理位置上也相邻。数据元素之间逻辑上的先后关系自动隐含在物理位置的相邻元素之中,因此不需要另外开辟空间来保存元素之间的关系。 7 【正确答案】 A 【试题解析】 数据库管理系统在数据库的三级模式之间提供了两 层映像
19、,保证了数据库中数据的较高的逻辑独立性和物理独立性。 8 【正确答案】 C 【试题解析】 白盒测试方法也称为结构测试或逻辑测试,主要方法有逻辑覆盖测试、基本路径测试等。 9 【正确答案】 A 【试题解析】 此题考查 C语言的基本概念。变量的实质就是在内存中占据定的存储单元,存储单元里存放的是该变量的值,变量的值可以根据需要进行修改;整数在允许的范围内可以准确的表示出来,但不可能表示无限度的实数。 10 【正确答案】 C 【试题解析】 C基本数据类型包括:分为整型、实型、枚 举型、字符型四种,实型就是浮点型,实型数据只有十进制,没有 2 8 16进制表达,在 C语言中没有定义逻辑类型,而足一般用
20、 0代表假,用非零代表真。 11 【正确答案】 C 【试题解析】 本题涉及 C语言最基本的 3个概念: c语言是区分大小写的, q和 Q是两个不同的变量; 变量的实质就是在内存中占据一定的存储单元,存储单元里存放的是该变量的值,变量的值可以根据需要进行修改: 整数在允许的范围内可以准确的表示出来,但不可能表示无限度的实数。正整数可用二进制、十进制、八进制和十六进制表示。 12 【正确答案 】 D 【试题解析】 是反斜线转义字符; t是水平跳格转义字符; n是换行转义字符; C语言中没有规定 088是转义字符。 13 【正确答案】 B 【试题解析】 C语言规定,标识符是由字母、数字或下划线组成,
21、并且它的第一个字符必须是字母或下划线,关键字不能用作用户标识符。 14 【正确答案】 B 【试题解析】 选项 A是一个 C语句,不是表达式;选项 B是利用一个逗号表达式给 a赋值;选项 C中的 “ ”求余运算符要求两个运算对象都必须是整型;选项D中,不能用表达式给表达式赋值 ,但是变量可以给自身赋值,例如: a=a+1。 15 【正确答案】 D 【试题解析】 在用基本输出函数 printf时,格式说明与输出项的个数应该相同。如果格式说明的个数少于输出项的个数,多余的输出项不予输出;如果格式说明个数多于输出项个数,则对于多余的格式项输出不定值或 0。 16 【正确答案】 D 【试题解析】 c源程
22、序经过程序编译之后生成一个后缀为 “ obi”的二进制文件(称为目标文件 ),然后由称为 “连接稃序 ”的软件包文件与 C语言提供的各种库函数连接起来生成一个后缀为 “ exe”的可运行 文件。 17 【正确答案】 B 【试题解析】 在主函数中定义了两个整型变量 a和 b,并把它们的初值分别设置为 1和 0;在第二条语句中,首先计算 b=a十 a,然后 a自增两次,因此第二句结束时 b=2, a=3,然后第三句, a+b=5。 18 【正确答案】 C 【试题解析】 n和 e的 x幂次方,要分别调用 C语言的数学库函数 double pow(n, x)和 double exp(x),因为这两个函
23、数的返回值都为 doubIe型,对两者的和计算绝对值,调用库函数 doubleflabs(pow(n, x)+exp(x),求出和的绝对值,再调用开平方函数 doublesqrt(fbs(pow(n, x)+exp(x),这样计算出的结果就是题干中表达式的值。 19 【正确答案】 A 【试题解析】 因为题中有语句 “int k=0; ”,所以选项 B、 C、 D都是对 k的值加1,选项 A的语句 k+表示先利用 k的值进行运算,然后 k的值才加 1。 20 【正确答案】 B 【试题解析】 “ u”格式符表示以十进制形式输出无符号整形变量。本题中无符号整形变量 x=0xFFFF表示的是十六进制无
24、符号整型变量的最大值 65535,所以最后输出的结果为 65535。 21 【正确答案】 D 【试题解析】 本题考查 printf函数的输出格式和条件表达式 “?: ”的使用。 Drintf函数输出时 “* d n”和 “# d n”中的 “#”和 “*”都是直接输出。 条件表达式的基本格式为: “a?b: c”。它的运算规则为:当 a为非 0时,整个表达式的值取 b的值,当 a为 0时,整个表达式取 c的值。 22 【正确答案】 D 【试题解析】 在 C语言中,用分号表示一条语句的结束,用 把几条语句放在一块表示一个语句块,其整体表示一个功 能。因而在题目给出的四个选项中,选项A、 B、 C
25、均与题中所给不同,而选项 D相同。 23 【正确答案】 A 【试题解析】 本题考查 if-else语句和 switch语句。 scanf函数通过键盘读入 num的值。因为 num=32199,所以 s=3, i=3, j=2, k=1。因为 s=3,所以执行 case 3,输出 k, j, i的值,然后通过 break结束程序。 24 【正确答案】 D 【试题解析】 在主函数中定义结构体 A的变量 a,并对其赋初值,再调用函数f(a),在函数 f(a)中对结构体变量 a的各个成员 重新进行了赋值操作,并把其值返回在屏幕上输出。 25 【正确答案】 D 【试题解析】 C语言规定,字符常量在程序中
26、要用单引号括起来。首先判断 c1是否为小写字母的主要条件 c1=a和 c10;且都要是 2的倍数,即a 2=0,所以 if语句的条件为 ifa0&a 2=0),又因只能输入 3个数,因此循环限制条件应为 i3。 52 【正确答案】 3 3 3 3 【试题解析】 本题考查 for循环, for(cc=1; cc=4; cc+)表示循环 4次, a+=3表示每次 a的值增加 3,但是子函数中没有将变量 a定义为 static类型,所以每次调用完子函数之后,变量 a所做的改变都不能保存,这样在下一次调用子函数时, a的初值仍是 0,所以不管调用多少次,子函数输出始终是 3。 53 【正确答案】 AB
27、Cab 【试题解析】 本题中字符数组的初值是 ?ABCabc”, s5=c,然后通过 s5=0重新给 s5赋值,在 C语言中 0是字符串结束标志,执行 s5=0,其实是将s5的值去掉只保留前面的字 符。 54 【正确答案】 abcdelkjihgf 【试题解析】 本题先给字符型数组 s的 12个元素赋值 a到 1共 12个字母,函数sub(char*a,int t1, int t2)的功能是将数组 a的从第 t1+1个元素到 t2+1个元素进行逆置,在主函数中调用 sub(s,5,SlZE-1)函数,是将数组 s的第 6个元素到第 12个元素进行逆置,其他元素位置不变。 55 【正确答案】 goodmorning 【试题解析】 子函数 fun(char s)的作用是将字符数组 s中除去字母以外的所有其他字符 都去掉,然后将字母仍按原来的顺序存在数组 s中。 在主函数中调用 fun(ss),是将 “good morning”中所有的非字母去掉,在这里就是去掉空格,然后输出 ss。