1、国家二级( C语言)笔试模拟试卷 132及答案与解析 1 软件是指 ( A)程序 ( B)程序和文档 ( C)算法加数据结构 ( D)程序、数据与相关文档的完整集合 2 为了提高测试的效率,应该 ( A)随机选取测试数据 ( B)取一切可能的输入数据作为测试数据 ( C)在完成编码以后制定软件的测试计划 ( D)集中对付那些错误群集的程序 3 以下不属于对象的基本特点的是 ( A)分类性 ( B)多态性 ( C)继承性 ( D)封装性 4 下列叙述中,不符合良好程序设计风格要求的是 ( A)程序 的效率第一,清晰第二 ( B)程序的可读性好 ( C)程序中要有必要的注释 ( D)输入数据前要有
2、提示信息 5 下列叙述中正确的是 ( A)程序执行的效率与数据的存储结构密切相关 ( B)程序执行的效率只取决于程序的控制结构 ( C)程序执行的效率只取决于所处理的数据量 ( D)以上三种说法都不对 6 数据处理的最小单位是 ( A)数据 ( B)数据元素 ( C)数据项 ( D)数据结构 7 线性表的顺序存储结构和线性表的链式存储结构分别是 ( A)顺序存取的存储结构、顺序存取的存储结构 ( B)随机存取的存储结构、顺序存取的存储结构 ( C)随机存取的存储结构、随机存取的存储结构 ( D)任意存取的存储结构、任意存取的存储结构 8 在深度为 5的满二叉树中,叶子结点的个数为 ( A) 3
3、2 ( B) 31 ( C) 16 ( D) 15 9 下列有关数据库的描述,正确的是 ( A)数据库是一个 DBF文件 ( B)数据库是一个关系 ( C)数据库是一个结构化的数据集合 ( D)数据库是一组文件 10 一个关系中属性个数为 1时,称此关系为 ( A)对应关系 ( B)单一关系 ( C)一元关系 ( D)二元关系 11 下列叙述中正确的是 ( )。 ( A) C程序由函数组成 ( B) C程序由主函数构成 ( C) C程序由函数和过程构成 ( D)在 C程序中无论是整数还是实数,都可以正确无误的表示出来 12 设有定义下列: int a=1,b=2,c=3,d=4,m=2,n=2
4、; 则表达式 (m=a b) int a,b,c; a=(-x=y+)?x:+y; b=+x; c=y; ( A) a=5, b=5, c=5 ( B) a=4, b=5, c=5 ( C) a=5, b=6, c=5 ( D) a=1, b=5, c=6 14 下列程序的输出结果是 ( )。 main() int a=1,b=2; printf(“%d,%dn“,-a,+b); ( A) 1, 2 ( B) 1, 3 ( C) 0, 2 ( D) 0, 3 15 下列变量声明合法的是 ( )。 ( A) short a=1.4e-1; ( B) double b=1+3e2.8; ( C)
5、long do=0xfdaL; ( D) float2_aaa=1e-3; 16 在函数 scanf的格式控制中,格式说明的类型与输入项的类型应该对应匹配。如果类型不匹配,系统将 ( )。 ( A)不予接收 ( B)并不给出出错信息,但不能得到正确的数据 ( C)能接收到正确输入 ( D)给出出错信息,不予接收输入 17 若 有下列定义 (设 int类型变量占 2个字节 ): float x=123.4567; 则下列语句: printf(“x=%5.2f“, x); 输出的结果是 ( )。 ( A) x=123.46 ( B) 123.4567 ( C) x=123.4567 ( D) 12
6、3.46 18 下列程序的输出结果是 ( )。 #include stdio.h main() int i; for(i=1;i =10;i+) if(i*i =20) printf(“%dn“,i*i); ( A) 49 ( B) 36 ( C) 25 ( D) 64 19 若执行下列的程序时,从键盘上输入 1和 2,则输出结果是 ( )。 #include stdio.h main() int a,b,s; scanf(“%d%d“, s=a; if(a b) s=b; s=s*s; printf(“%dn“,s); ( A) 1 ( B) 4 ( C) 2 ( D) 9 20 有下列程序
7、: main() int t, a=1, b=5, c=-2; while(a b c) t=a; a=b; b=t; c+; printf(“%d, %d, %d“, a, b, c); ( A) 1, 5, 0 ( B) 1, 5, -2 ( C) 5, 1, -1 ( D) 5, 1, -2 21 下列程序执行后的输出结果是 main() int a33, *p, i; p= printf(“%dn“, a12); ( A) 3 ( B) 6 ( C) 9 ( D)随机数 22 已知 #int t=0; while(t=1) 则以下叙述正确的是 ( A)循环控制表达式的值为 0 ( B)
8、循环控制表达式的值为 1 ( C)循环控制表达式不合法 ( D)以上说法都不对 23 下面程序段的运行结果是 char*s=“abcde“; s+=2; printf(“%d“, s); ( A) cde ( B)字符 c ( C)字符 c的地址 ( D)无确定的输出结果 24 以下错误的定义语句是 ( A) int x3=0, 1, 1, 2, 3; ( B) int x43=1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3; ( C) int x4=1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3; ( D) int x3=1, 2, 3, 4; 2
9、5 下面判断正确的是 ( A) char*a=“china“;等价于 char*a; *a=“china“; ( B) char str5=“china“;等价于 char str=“china“; ( C) char *s=“china“;等价于 char *s; s=“china“; ( D) char c4=“abc“, d4=“abc“;等价于 char c4=d4=“abc“; 26 有如下程序 main() char ch25=“6937“, “8254“, *p2; int i, j,s=0; for(i=0; i 2; i+)pi=chi; for(i=0; i 2; i+)
10、for(j=0; pij 0; j+=2) s=10*s+pij-0; printf(“%dn“, s); 该程序的输出结果是 ( A) 69825 ( B) 63825 ( C) 6385 ( D) 693825 27 有定义语句: char s10;,若要从终端给 s输入 5个字符,错误的输入语句是 ( A) gets( q= r=p; p=q; q=r; printf(“%d,%d,%d,%dn“, *p,*q,a,b); 程序运行后的输出结果是【 】。 42 有以下程序: # include string.h main(int argc,char *argv) int i,len=0;
11、 for(i=1;i argc;i+=2) len+= strlen(argvi); printf(“%dn“,len); 经编译连接后生成的可执行文件是 ex.exe,若运行时输入以下带参数的命令行: ex abcd efg h3 k44 执行后的输出结果是【 】。 43 有以下程序: main() int a33,*p,i; p=i 9;i+)pi=i+1; printf(“%dn“,a12); 程序运行后的输出结果是【 】。 44 有以下程序: void f(int a,int i,int j) int t; if(i j) t=ai;ai=aj;aj=t; f(a,i+1,j-1);
12、main() int i,aa5=1,2,3,4,5; f(aa,0,4); for(i=0;i 5;i+) printf(“%d,“,aai);printf(“n“); 执行后的输出结果是【 】。 45 目前实际存在和使用的广域网基本上都是采用 _拓扑结构类型。 有以下程序: # include string.h struct STU int num; float TotalScore; ; void f(struct STU p) struct STU s2=20041,703,20045,537; p.num=s1.num; p.TotalScore=s1.TotalScore; mai
13、n() struct STU s2=20041,703,20042,580; f(s0); printf(“%d %3.0fn“,s0.num,s0,TotalScore); 程序运行后的输出结果是【 】。 46 若有以下程序: int f(int x,int y) return (y-x)*x; main() int a=3,b=4,c=5,d; d=f(f(3,4),f(3,5); printf(“%dn“,d); 执行后的输出结果是【 】。 47 有以下程序: void swap 1(int c) int t; t=c0;c0=c1;c1=t; void swap2(int c0,int
14、 c1) int t; t=c0; c0=c1; c1=t; main() int a2=3,5,b2=3,5; swaplA);swap2(b0,b1); printf(“%d, %d, %d, %dn“, a0,a1,b0,b1); 其输出结果是【 】。 48 有以下程序; int a=2; int f(int *A) return(*A) +; main() int s=0; int a=5; s+=f( b=p5; b中的值是【 】。 50 以下程序的运行结果是【 】。 # include string.h char *ss(char *s) return s+strlen(s)/2;
15、 main() char *p,*str=“abcdefgh“; p=ss(str);printf(“%sn“,p); 51 有如下程序段: main(int argc, char *argv) int n,i=0; while(argv1i!=0) n=fun();i+; printf(“%dn“,n*argc); int fun() static int s=0; s+=1; return s; 假设程序经编译、连接后生成可执行文件 exam, exe,若键入如下命令行: exam l23回车 则运行结果为【 】。 52 以下程序运行后的输出结果是【 】。 # define S(x) 4*
16、x*x+1 main() int i=6,j=8; printf(“%dn“, S(i+j); 53 以下程序运行后的输出结果是【 】。 # include string.h void fun(char *s,int p,int k) int i; for(i=p;i k-1;i+)si=si+2; main() char s=“abcdefg“; fun(s,3,strlen(s);puts(s); 54 若有以下程序: main() int a44=1,2,-3,-4,0,-12,-13,14,-21,23,0,-24,-31,32,-33,0; int i,j,s=0; for(i=0;
17、i 4;i+) for(j=0;j 4;j+) if (aij 0) continue; if(aij=0) break; s+=aij; printf(“%dn“,s); 执行后的输出结果是【 】。 55 若有以下程序: main() char a; a=H-A+0; printf(“%cn“,a); 执行后的输出结果是【 】。 国 家二级( C语言)笔试模拟试卷 132答案与解析 1 【正确答案】 D 【试题解析】 软件是程序、数据与相关文档的集合,相对于计算机硬件而言,软件是逻辑产品而不是物理产品,是计算机的无形部分。 2 【正确答案】 D 【试题解析】 测试的目的是发现软件中的错误;经
18、验表明,程序中存在错误的概率与该程序中已发现的错误成正比。这一现象说明,为了提高测试效率,测试人员应该集中对待那些错误群集的程序。 3 【正确答案】 C 【试题解析】 对象的基本特点:标志唯一性、分类性、多态性、封装性和模块独立性。 4 【正确答案】 A 【试题解析】 当今主导的程序设计风格是 “清晰第一,效率第二 ”的观点。结构化程序设计思想提出之前,在程序设计中曾强调程序的效率,而在实际应用中,人们更注重程序的可理解性。 5 【正确答案】 A 【试题解析】 程序执行的效率与很多因素有关,如数据的存储结构、程序所处理的数据量、程序所采用的算法等。顺序存储结构在数据插入和删除操作上的效率比链式
19、存储结构的效率低。 6 【正确答案】 C 【试题解析】 数据处理的最小单位是数据项;由若干数据项组成数据元素;数 据是指能够被计算机识别、存储和加工处理的信息载体;数据结构是指数据之间的相互关系和数据运算。 7 【正确答案】 B 【试题解析】 顺序存储结构中,数据元素存放在一组地址连续的存储单元中,每个数据元素地址可通过公式 LOC (ai) LOC(a1)+(i-1)L计算得到,从而实现了随机存取。对于链式存储结构,要对某结点进行存取,都得从链的头指针指向的结点开始,这是一种顺序存取的存储结构。 8 【正确答案】 C 【试题解析】 满二叉树是指除最后一层外,每一层上的所有结点都有两个叶子结点
20、。在满二 叉树中,层上的结点数都达到最大值,即在满二叉树的第 k层上有 2k-1个结点且深度为 m的满二叉树有 2m-1个结点。 9 【正确答案】 C 【试题解析】 数据库 (DataBase,简称 DB) 是数据的集合,它具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,可被各个应用程序所共享。数据库中的数据具有 “集成 ”、 “共享 ”的特点。 10 【正确答案】 C 【试题解析】 在关系模型数据库中,基本结构是二维表,这种二维表称为关系。关系的列称为属性,一个具有 N个属性的关系称为 N元关系。 11 【正确答案】 A 【试题解析】 本题涉及 C语言最基本的两个知识点:
21、C程序是由函数构成的,有且仅有一个主函数,也可以有其他的函数; 整数在允许的范围内可以准确无误的表示出来,但计算机的存储能力有限,不能表示无限精度的实数。 12 【正确答案】 C 【试题解析】 在逻辑与 &运算中,如果第一个操作数为假,则结果是假后面的操作数不参与运算,本题中因为第一个操作数 (m=a b)为假,所以第二个操作数 (n=c d)不参加运算,因此 n的值不变。 13 【正确答案】 B 【试题解析 】 本题考查自加 (+)、自减 (-)运算符的使用。 “+i, -i”,在使用 i之前,先使 i的值加 1或者减 1,再使用此时的表达式的值参与运算: “i+, i-”,先使用此时的 i
22、的值参与运算,在使用 i之后,再使 i的值加 1或者减 1。对于第 1个表达式 -x=4, y+=4。两者相等, -x=y+为真,所以 a=x=4,执行完此语句后y的值是 5。第 2个表达式 b=+x, x的值先加 1,然后赋给 b,即 b=x+1=5;第一个表达式 c=y=5。 14 【正确答案】 D 【试题解析】 本题主要考查自加 (+)、自减 (-)运算符的使用。 “+i, -i”在使用 i之前,先使 i的值加 1或者减 1,然后再使用 i此时的值参与运算; “i+, i-”是在使用 i参与表达式运算之后,再使 i的值加 1或者减 1本题中 -a和 +b是先执行a减 1和 b加 1操作,
23、再输出表达式的值。 15 【正确答案】 A 【试题解析】 解答本题需了解 3个知识点: 标识符是由字母、数字或下画线组成,并且它的第一个字符必须是字母或者下画线; do是 C语言中的一个关键字,不能再用做变量名和函数名; C语言规定指数形式的实型常量 e或 E后面的指数必须是整数 。 16 【正确答案】 B 【试题解析】 在 scanf函数的格式控制中,格式说明的类型与输入项的类型必须一一对应匹配,如不匹配将导致数据输入出现错误,但是系统并不报错。 17 【正确答案】 A 【试题解析】 本题考查 printf函数的格式。 “%5.2f”格式符中的 “f”表示以带小数点的形式输出单精度或者双精度
24、数; “5”表示指定数据输出宽度为 5; “.2”表示指定输出数据小数位占 2位数,并对截去的第一位小数做四舍五入处理。 18 【正确答案】 C 【试题解析】 本题考查 if语句当 执行到第一个满足 (i*i =20)&(i*i =100)这个条件的 i出现时,通过 break语句跳出循环,执行下列的 printf语句。 19 【正确答案】 B 【试题解析】 本题考查 if语句。 scanf函数通过键盘读入 a、 b的值, a=1,b=2。第一个 if语句,先判断条件,发现 a b条件成立,则 s=b=2, s=s*s=4。 20 【正确答案】 A 【试题解析】 本题考查 while循环。先判
25、断 while循环的控制表达式是否成立,发现 a b c不成立,所以不执行循环。直接输出 a、 b、 c的 值。 21 【正确答案】 B 【试题解析】 本题中, a12是二维数组中的第 6个元素,对应 for循环中 i的值为 5, p5 5+1。 22 【正确答案】 B 【试题解析】 t 1是将 t赋值为 1,所以循环控制表达式的值为 1。判断 t是否等于 1时,应用 t 1,注意 “ ”与 “ ”的用法。 23 【正确答案】 C 【试题解析】 对于字符串指针,其保留的是整个串的首地址,即第一个字符的起始地址;当该指针做算术运算时,就是该指针根据其类型向后移动相应的存储空间。 24 【正确答
26、案】 C 【试题解析】 本题考查的是二维数组的定义和初始化方法。 C语言中,在定义并初始化二维数组时,可以省略数组第一维的长度,但是不能省略第二维的长度。故选项 C) 错误。 25 【正确答案】 C 【试题解析】 选项 A) char *a; *a “china”应改为 a china;,选项 B) 应该是char str6; D) 项表述方法有错误。 26 【正确答案】 C 【试题解析】 该题稍微难一点。主要要搞清楚以下几点: 定义了一个指针数组char *p2后,程序中第一个循环 for(i=0; i 2; i+)pi ch i;的作用,是使指针数组的 p0元素 (它本身是一个指针 )指向
27、了二维数组 ch的第一行字符串,并使指针数组的 p1元素指向二维数组 ch的第二行字符串。这样,就使指针数组 p和二维数组 ch建立起了一种对应关系,以后对二维数组 ch的某个元素的引用就有两种等价的形式: chij或 pij。 对二维数组 ch的初始化,使其第一行 ch0中存入了字符串 “6937”,第二行 ch1中的内容为字符串 “8254”。 程序中第二个循环中的循环体 s s*10+pi j-0;的功能是这样的,每执行一次,将 s中的值乘以 10(也即将 s中的数值整体向左移动一位,并在空出来的个位上添一个 0),再将当前 pii中的字符量转换为相应的数字,然后把这个数字加到 s的个位
28、上。 注意到内启循环的循环条件 pij 0是指 pij中的字符只要不是字符串结束标志 0就继续循环。语句 j+ 2;是使下标 j每次增加 2,也即一个隔一个地从 pi所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从 p0所指向的字符串 “6937”中一个隔一个地取出字 符,分别是 “6”和 “3”,然后从 p1)所指向的字符串 “8254”中一个隔一个地取出字符,分别是 “8”和 “5”,同时经过转换和相加运算后,结果 s中的值应该是 6385。 27 【正确答案】 D 【试题解析】 在格式输入中,要求给出的是编译的地址,而 D) 答案中给出的 s1是一个值的表达式。 28 【
29、正确答案】 D 【试题解析】 C语言中的预处理命令以符号 #开头,这些命令是在程序编译之前进行处理的,选项 D) 的描述错误。 29 【正确答案】 D 【试题解析】 选项 A) ,共用体的 每个成员的起始地址都相同;选项 B) ,共用体变量所占的内存长度等于最长的成员的长度;选项 C) 因为每个成员的起始地址相同,所以整型数 5以浮点型输出时为 5.000000;选项 D) C语言规定,不能把共用体变量作为函数的参数。 30 【正确答案】 B 【试题解析】 getchar函数的作用是从终端读入一个字符。 31 【正确答案】 D 【试题解析】 通常,引用一个数组元素可以用下标法,如 ap-a形式
30、,或指针法,如 *(&ai)的形式。本题中 a9 9, a10显然超出了数组范围, 注意,数组的下标是从 0开始的。 32 【正确答案】 A 【试题解析】 在给 p和 q数组赋初值时,系统会自动添加字符串结束符,从题目中可以看出数组 p和 q都有 3个字符,所以长度均为 3。 33 【正确答案】 A 【试题解析】 本题题意要求删除所有空格,即除了空格以外的其他所有字符都要留下。由于 C语言中没有直接删除字符的操作,所以我们对于删除字符的操作都是采用 “留下 ”字符的算法,以前的题目亦是如此。用 stri从串头到串尾逐一走动,每走到一个字符都判断其是否为空格,若不是空格 (注意在 if()的单
31、引号之间有一个空格 ),则将其保存 strj中。注意 j的下标变化、初值及最后加串结束符“0”。 34 【正确答案】 C 【试题解析】 函数 int f(int x)是一个递归函数调用,当 x的值等于 0或 1时,函数值等于 3,其他情况下 y=x2-f(x -2),所以在主函数中执行语句 z f(3)时, y3*3-f(3-2) 9-f(1) 9-3 6。 35 【正确答案】 C 【试题解析】 本题中,格式符 0表示的是八进制无符号形式输出整型数 (不带前导 0),字符常量在内存中占一个字节,存放的是 ACSII码代码值。 C语言规定,所有字符常量都作为整型量来处理,在计算机内部,其对应的整
32、数值就是 ACSII字符集中该字符的序号,即 &*s中有几个字符就输出几个 *。 36 【正确答案】 D 【试题解析】 本题考查链表的数据结构,必须利用指针变量才能实现,即一个结点中应包含一个指针变量,用它存放下一结点的地址。 37 【正确答案】 C 【试题解析】 这是一道考查 fread函数的题。 buf是一个指针, fread是读入数据的存放地址; fwrite是输出数据的地址 (以上指的是起始地址 )。 38 【正确答案】 A 【试题解析】 本题考查的是位运算的知识,对于任何二进制数,和 1进行异或运算会让其取反,而和 0进行异或运算不会产生任何变化。 39 【正确答案】 A 【试题解析
33、】 在 C语言中只有自动变量和寄存器变量在使用时才占用内存单元。 40 【正确答案】 A 【试题解析】 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针型。它的作用是将一个变量的地址传递到另一个函数中。当数组名作参数时,如果形参数组中的各元素的值发生变化,实参数组元素的值也将随之发生变化。 41 【正确答案】 8,7,7,8 【试题解析】 本题中执行语句 p=&a和 q=&b后, *p=7, *q=8;执行完语句r=p,p=q,q=r后, *p=8,*q=7,故答案为 8,7,7,8。 42 【正确答案】 6 【试题解析】 本题中命令行输入 5个符号串,所以 argc=5, argv
34、0指向符号串“ex“, argv1指向符号串 “abcd“,argv2指向符号串 “efg“, argv3指向符号串“h3“, argv4指向符号串 “k44“, for循环的作用是计算 strlen(argv1),strlen(argv 3)=4+2=6。 43 【正确答案】 6 【试题解析】 本题定义了二维数组 a和指针变量 p,p指向数组的首地址, for循环语句的功能是给数组元素赋值,结果为 a00=1、 a01=2、 a0 2=3、a10=4、 a11=5、 a12=6、 a20=7、 a21=8、 a22=9,故 printf函数的输出结果为 6。 44 【正确答案】 1,5,4,
35、3,2 【试题解析】 第一次调用函数 f后 aa0=5、 aa4=1;第二次调用函数 f后aa1=4、 aa4=2;第三次调用函数 f后 aa3 3。正确答案为 1,5,4,3,2。 45 【正确答案】 20041 703 【试题解析】 由于参数传递只是将实参的值复制到形参中,形参与实参拥有各自的存储空间,因此形参的改变并不影响实参,所以并不改变 s的情况。 46 【正确答案】 9 【试题解析】 f(3,4)=(4-3)3=3,f(3,5)=(5-3)3=6,所以 d=f(f(3,4),f(3,5)=f(3,6)=(6-3)3=9。 47 【正确答案】 53 3 5 【试题解析】 函数 swa
36、p1的形参是数组,故形参的改变能够影响实参,所以执行完 swap1(a)后, a0=5、 a1=3;函数 swap2的形参是简单变量,故形参的改变不能够影响实参,所以执行完 swap2(b)后, b0=3、 b1=5;正确答案为 53 3 5。 48 【正确答案】 7 【试题解析】 如果局部变量与全局变量重名,在局部变量的作用域,全局变量不起作用。所以在 main函数中第一次调整函数 f时 a=5得 s=5,第二次调用函数 f时 a=2得 s=5+2=7。函数 f在执行语句 return(*A) +时首先返回 *A,然后将 *A的值加 1。 49 【正确答案】 9 【试题解析】 p是一个指针变
37、量,指向数组 a的元素 a3,所以b=p5=a5+3=a8=9。 50 【正确答案】 efgh 【试题解析】 函数 ss返回形参 s所指向的符号串的后半部分,故 p=“efgh“。 51 【正确答案】 6 【试题解析】 本题中命令行输入 2个符号串,所以 argc=2, argv0指向符号串“exam“, argv1指向符号 串 “123“, while循环的作用是计算 argv1所指向的字符串的长度,执行完 while循环后 n=3,所以 n*argc=32=6。 52 【正确答案】 81 【试题解析】 将 S(i+j)展开来有: S(i+j)=S(6+8)=46+86+8 1=81。 53
38、 【正确答案】 abcfg 【试题解析】 strlen(s)=7,调用 fun时, p=3, k=7,执行 for循环以后就使13=s5, s4=s6, s5=s7=0。此时循环结束, s=“abcfg“。 54 【正确答案】 58 【试题解析】 for循环语句中 continue语句的作用是当数组元素值小于 0时,结束本次 j循环, break语句的作用是当数组元素值等于 0时,结束 j循环,所以 for循环语句的功能是计算数组元素 a00、 a01、 a21和 a31之和,即 s=1 +2+23+32=58。 55 【正确答案】 7 【试题解析】 本题考查英文字母 ASCII码值的概念。字符参与运算的值是其对应的 ASCII码,字符 H的 ASCII码为 72, A的 ASCII码为 65, 0的 ASCII码为48,所以 a 72-65+48 55, ASCII码值为 55的字符是 7。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1