1、国家二级( C语言)笔试模拟试卷 35及答案与解析 1 算法一般都可以用 _控制结构组合而成。 ( A)循环、分支、递归 ( B)顺序、循环、嵌套 ( C)循环、递归、选择 ( D)顺序、选择、循环 2 数据的存储结构是指 _。 ( A)数据所占的存储空间量 ( B)数据的逻辑结构在计算机中的表示 ( C)数据在计算机中的顺序存储方式 ( D)存储在外存中的数据 3 设有下列二叉树: 对此二叉树中序遍历的结果为_。 ( A) ABCDEF ( B) DBEAFC ( C) ABDECF ( D) DEBFCA 4 在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送 _。 ( A)调
2、用语句 ( B)命令 ( C)口令 ( D)消息 5 检查软件产品是否符合需求定义的过程称为 _。 ( A)确认测试 ( B)集成测试 ( C)验证测试 ( D)验收测试 6 下列工具中为需求分析常用工具的是 _。 ( A) PAD ( B) PFD ( C) N-S ( D) DFD 7 下面不属于软件设计原则的是 _。 ( A)抽象 ( B)模块化 ( C)自底向上 ( D)信息隐蔽 8 索引属于 _。 ( A)模式 ( B)内模式 ( C)外模式 ( D)概念模式 9 在关系数据库中,用来表示实体之间联系的是 _。 ( A)树结构 ( B)网结构 ( C)线性表 ( D)二维表 10 将
3、 E-R图转换到关系模式时,实体与联系都可以表示成 _。 ( A)属性 ( B)关系 ( C)键 ( D)域 11 以下叙述中正确的是 ( )。 ( A)构成 C程序的基本单位是函数 ( B)可以在一个函数中定义另一个函数 ( C) main()函数必须放在其他函数之前 ( D)所有被调用的函数一定要在调用之前进行定义 12 可在 C程序中用作用户标识符的一组标识符是 ( )。 ( A) and _2007 ( B) Date y-m-d ( C) Hi Dr Tom ( D) case Bigl 13 以下不能定义为用户标识符的是 ( )。 ( A) scanf ( B) Void ( C)
4、 _3com_ ( D) int 14 若变量 x、 y已正确定义并赋值,以下符合 C语言语法的表达式是 ( )。 ( A) +x, y=x- ( B) x+1=y ( C) x=x+10=x+y ( D) double(x)/10 15 以下选项中非法的表达式是 ( )。 ( A) 0 =x 100 ( B) i=j=0 ( C) (char)(65+3) ( D) x+1=x+1 16 以下数组定义中错误的是 ( )。 ( A) int x3=0; ( B) int x23=1,2,3,4,5,6; ( C) int x3=1,2,3,4,5,6; ( D) int x23=(1,2,3,
5、4,5,6; 17 有定义语句: “int x,y;”,若要通过 “scanf(“%d,%d“,”语句使变量 x得到数值 11,变量 y得到数值 12,下面四组输入形式中,错误的是 ( )。 ( A) 11 12回车 ( B) 11, 12回车 ( C) 11,12回车 ( D) 11,回车 12回车 18 有定义语句: int b;char c10;,则正确的输入语句是 ( )。 ( A) scanf(“%d%s“, ( B) scanf(“%d%s“, ( C) scanf(“%d%s“,b,c); ( D) scanf(“%d%s“,b, 19 以下不能正确计算代数式 sin2()值的
6、C语言表达式是 ( )。 ( A) 1/3*sin(1/2)*sin(1/2) ( B) sin(0.5)*sin(0.5)/3 ( C) pow(sin(0.5),2)/3 ( D) 1/3.0*pow(sin(1.0/2),2) 20 有以下计算公式: 若程序前面已在命令行中包含 math.h文件,不能够正确计算上述 公式的程序段是 ( )。 ( A) if(x =0) y=sqrt(x); else y=sqrt(-x); ( B) y=sqrt(x); if(x 0) y=sqrt(-x); ( C) if(x =0) y=sqrt(x); if(x 0) =sqdrt(-x); (
7、D) y=sqrt(x =0?x:-x); 21 定义 int*swap()指的是 _。 ( A)一个返回整型值的函数 swap() ( B)一个返回指向整型值指针的函数 swap() ( C)一个指向函数 swap()的指 针,函数返回一个整型值 ( D)以上说法均错 22 以下程序段的输出结果是 _ 。 main() char s110,s210,s310; scanf(“%s“,s1);gets(s2);gets(s3); puts(s1);puts(s2);puts(s3); 输入数据如下: (此处 CR代表回车符 ) aaa CR bbb CR ( A) aaa bbb ( B) a
8、aa bbb ( C) aaa0bbb0 ( D) aaabbb 23 下述函数功能是 _。 int fun(char*x) char*y=x; while(*y+); return y-x-1; ( A)求字符串的长度 ( B)求字符串存放的位置 ( C)比较两个字符串的大小 ( D)将字符串 x连接到字符串 y后面 24 若有定义: int a410; ,则以下选项中对数组元素 aij引用错误的是 _。(0 =i 4,0 =j 10) ( A) *( ( B) strcpy(str2,“HELLO2“); ( C) strcpy(str3,“HELLO3“); ( D) strcpy(st
9、r4,“HELLO4“) 26 请读程序: #include stdio.h #include string.j main() char*s1=“AbCdEf“,*s2=“aB“; s1+;s2+; printf(“%dn“,strcmp(s1,s2); 上面程序的输出结果是 _。 ( A)正数 ( B)负数 ( C)零 ( D)不确定的值 27 以下程序输出的结果为 _。 main() char*dlpha6=“ABCD“,“EFGH“, “IJKL“, “MNOP“, “QRST“, “UVWX“; char*p; int i; p=alpha; for(i=0;i 4;iff) prin
10、tf(“%s“,pi) ( A) ABCDEFGHIJKL ( B) ABCD ( C) ABCDEFGHIJKLMNOP ( D) AEIM 28 以下程序的输出结果是 _。 #include stdio.h void prt(int*x,int*y,int*z) printf(“%d,%d,%dn“+*x,+*y,*(z+); int a=10, b=40,c=20 main() prt( prt( 5puts(s); 6strcpy(s,“hello“); 7printf(“%3sn“,s); ( A)没有错 ( B)第 1行有错 ( C)第 6行有错 ( D)第 7行有错 32 若有以
11、下结构体定义,则是正确的引用或定义。 Struct example int x; int y; V1; ( A) example.x=10 ( B) example V2.x=10 ( C) structv2;v2x=10 ( D) struct examplev2=10; 33 下列程序的执行结果是 _。 #include stdio.h union un int i; char c2; ; void main() union un x; x.c0=10; x.c1=1; printf(“n%d“,x.i); ( A) 266 ( B) 11 ( C) 265 ( D) 138 34 已知形
12、成链表的存储结构如下图所示,则下述类型描述中的空白处应填_。 struct link char data; _; node; ( A) Struct link next ( B) link*next ( C) struct next link ( D) Struct link*next 35 下述程序向文件输出的结果是 _。 #include stdio.h void main() FILE*fp=fopen(“TEST“,“wb“); fprintf(fp,“%d%5.0f%c%d“,58,76273.0, ,2278); fclose(fp); ( A) 58 76273-2278 ( B
13、) 5876273.000000-2278 ( C) 5876273-2278 ( D)因文件为二进制文件而不可读 36 在算法正确的前提下,评价一个算法好坏的 2个因素是时间复杂度和【 】复杂度。 37 在软件测试中,动态测试和静态测试手段只能发现程序中的错误,而不能证明程序中不存在错误,只有【 】证明才有可能证明程序的正确性。 38 输入字母 a时,下列程序的运行结果为【 】。 #include stdio.h main() char ch; ch=getchar(); (ch =a 39 下列程序的运行结果为 【 】。 #include stdio.h main() static cha
14、r str140; char str2140; strcpy(str2,“China“); strcat(str1,str2); strcat(str1,“ is a great country !“); printf(“%s %s “,str2,strl); printf(“%d %dn“,strlen(str2),strlen(str1); 40 下列程序的输出结果是【 】。 #include stdio.h int fun(int x, int y) static int m 0,i=2; i+=m+1; m=i+x+y; return m; main() int j=4,m=1,k;
15、k=fun(j,m); printf(“%d,“,k); k=fun(j,m); printf(“%dn“,k); 41 C语言中用 _表示逻辑值为 “真 ”,用数字 “0”表示逻辑值为 “假 ”。 42 语句: x+; +x; x=1+x;执行后都使变量 x中的值增 1,请写出一条同一功能的赋值语句 _。 43 下列程序的输出结果是 _。 main() int a=1,b=2,c=3,t=0; if(a B) t=a;a=b;b=t; if(a C) t=a;a=c;c=t; printf(“%d,%d,%dn“,a,b,C) ; 44 在 C语言中, while和 dowhile 循环的主
16、要区别是 _的循环至少被执行一次。 45 下列程序的输出结果是 _。 #include stdio.h main() int x=10,y=10,i; for(i=0;x 8;y=+i) printf(“%d %d“,x-,y); 46 若有定义 doublea 5;,则 a数组元素下标 的上限为 _。 47 执行下列语句段后, x的值是 _。 int *p, x; x = 100; p = x = *p+50; 48 设有下列宏定义: #define A 2 #define B (A+3) 则执行赋值语句 “k=B*20;”(k为 int型变量 )后, k的值是 _。 49 有下列程序; #
17、include stdio.h main() char c; while(c=getchar() !=,) putchar(+C) ; 程序运行时,如果从键盘输入: A,B, CR,则输出结果为 _。 50 下列程序执行输出的结果是 _。 #include stdio.h f(int A) int b=0; static c=7; a=c+;b+; return(A) ; main() int a=2,i,k; for(i=0;i 2;i+) k=f(a+); printf(“%dn“,k); 国家二级( C语言)笔试模拟试卷 35答案与解析 1 【正确答案】 D 【试题解析】 算法的控制结构
18、给出了算法的基本框架,不仅决定了算法中各操作的执行顺序,也直接反映了算法的设计是否符合结构化原则。一个算法一般都可以用顺序、选择、循环三种基本控制结构组合而成。 2 【正确答案】 B 【试题解析】 数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构。 3 【正确答案】 B 【试题解析】 中序遍历是指首先遍历左子树,然后访问根结点,最后遍历右子树;并且在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树的一种二叉树遍历算法。 4 【正确答案】 D 【试题解析】 面向对象的世界是通过对象与对象间彼此的相互合作来推动的,对象间的这种相互合作需要一个机制协助进行,这样的机制称
19、为消息。消息是一个实例与另一个实例之间传递的信息,它请求对象执行某一处理或回答某一要求的信息,它统一了数据流和控制流。 5 【正确答案】 A 【试题解析】 确认测试 的任务是验证软件的功能和性能及其他特性是否满足了需求规格说明中的确定的各种需求,以及软件配置是否完全、正确。 6 【正确答案】 D 【试题解析】 常见的需求分析方法有:结构化分析方法和面向刘京的分析方法。结构化分析的常用工具有:数据流图 (DFD)、数据字典 (DD)、判定树和判定表等。 7 【正确答案】 C 【试题解析】 在软件设计过程中,必须遵循软件工程的基本原则:这些原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完
20、备性和可靠性。 8 【正确答案】 B 【试题解析】 内模式 (Internal Schema)又称物理模式 (Physical Schema),它给出了数据库物理存储结构与物理存取方法,如数据存储的文件结构、索引、集簇及hash等存取方式与存取路径。 9 【正确答案】 D 【试题解析】 在关系数据库中,用二维表来表示实体之间联系。 10 【正确答案】 B 【试题解析】 关系是由若干个不同的元组所组成,因此关系可视为元组的集合,将 E-R图转换到关系模式时,实体与联系都可以表示成关系。 11 【正确答案】 A 【试题解析】 根据函数的定 义语法规定,在 C语言程序中,不能嵌套定义,即不能在函数中
21、再定义函数,故排除选项 B; main()函数在 C语言程序中是必须的,但函数可以放在程序中的任意位置,故排除选项 C;当在所有函数的外部、被调用之前说明函数时,在函数说明后面的任何位置上都可以对函数进行调用。函数说明也可以放在调用函数的说明部分,如在 main函数内部进行说明,则只能在 main函数内部才能识别函数,故选项 D被排除。选项 A符合题意。 12 【正确答案】 A 【试题解析】 选项 B中, y-m-d用了 “-”所以不是标识符;选项 C, Dr.Tom用了“.”也不是标识符;选项 D中, case是 C语言关键字,所以不能用作标识符。故本题应该选择 A。 13 【正确答案】 D
22、 【试题解析】 选项 D中 int为 C语言中的保留字,不能作为用户的标识符;选项A、 B、 C都为合法的标识符。所以, 4个选项中选项 D符合题意。 14 【正确答案】 A 【试题解析】 在 C语言的赋值表达式中,赋值对象必须是一个变量,而在选项 B中其子表达式 x+1代表的是一个临时常量,因此不能将 y赋给 x+1,选项 B错误。而选项 C中由于 “=”运算符是从右至左运算的,即原表达式相当于x=(x+10=x+y),所以也犯了对一个临时常量赋值的错误。选项 D中,将 x强制转换为 double类型的表达式应该为 (double)x,所以选项 D也不正确。故本题的正确答案为选项 A。 15
23、 【正确答案】 D 【试题解析】 选项 D中将表达式的值赋给表达式,在 C语言中是不允许给表达式赋值的,故选项 D是非法的表达式,所以, 4个选项中选项 D符合题意。 16 【正确答案】 B 【试题解析】 选项 B的第 1维长度为 2,而初始化列表外花括号中包含了 3个内花括号,所以该选项的定义错误,故应该选择 B。 17 【正确答案】 A 【试题解析】 本题中输入格式串为 %d%d其中 “,”为非格式字符,所以输入时必须原样输入。所以, 4个选项中选项 A符合题意。 18 【正确答案】 B 【试题解析】 本题中 4个选项的格式控制字符串都是 “%d%s”,其中包括两个格式控制符 %d和 %s
24、,它们分别表示输入一个十进制整数和输入一个字符串,其对应的参数应该分别为一个整型变量的地址和一个字符型数组的首地址。变量的地址可以通过对变量做取地址 (,其两个参数均为字符指针或字符数组,选项 C中的目的中指针 str3没有指向具体有效的存储单元,故是错误的调用。 26 【正确答案】 A 【试题解析】 函数 strcmp的功能是比较字符串 s1和 s2,如果 s1 s2,则返回个正数:如果 s1 s2,则返回负数,否则返回零。由于本题中小写字母 b的 ASCII码值大于大写字母 B,故 s1 s2,所 以函数的值为正数。 27 【正确答案】 C 【试题解析】 alpha0指向 “ABCD”的首
25、地址; alpha1指向 “EFGH”的首地址;alpha2指向 “IJKL”的首地址,依此类推。当执行 p=alpha后, p指向指针数组alpha的首地址。 for循环中输出了 4个字符串。 28 【正确答案】 B 【试题解析】 由于实参传送的是变量的地址,所以对形参指针所指向的单元内容的改变,即对实参内容的改变。 29 【正确答案】 C 【试题解析】 事实上,无论有无 static修饰, 外部变量都具有 A、 B和 C三种特性。作为一种修饰, static仅是限制此类型外部变量韵引用范围:只能在定义它的文件范围内使用。 30 【正确答案】 B 【试题解析】 本题宏替换中遇到形参 x以实参
26、 k+1代替,其他字符不变。SQR(k+1)展开后应为字符串 k+1*k+1。 31 【正确答案】 B 【试题解析】 字符串复制函数 strcpy包含在头文件 string.h中,因此,程序中的第 1行文件包含命令是错误的。 32 【正确答案】 D 【试题解析】 在定义结构体变量时,不能只用结构体名 example或关键字 struct进行定义,必需要用结构体类型名 struct example定义,在引用结构体成员变量时,需要用结构体变量名进行引用,所以选 D。 33 【正确答案】 A 【试题解析】 由于本题定义的是共用体,所以成员表列中的整型变量 x与字符数组 c共占用同一个存储单元,且此
27、存储单元为 2个字节,通常 c0位于低字节,c1位于高字节,所以 x.i的值为 266。 34 【正确答案】 D 【试题解析】 在单向链表中,由于每个结点需要存储下一个结点的地址,且下一个结点的数据类型 与前一个结点的数据类型完全相同,故应为 struct link *next。 35 【正确答案】 C 【试题解析】 fprintf函数工作时,多个数据间不会自动加分隔符,选项 A错误:浮点数的输出格式是 “%5.0f”表明其小数部分输出 0位,即没有输出,所以选项 B也是错误的。 36 【正确答案】 空间 37 【正确答案】 程序正确性 38 【正确答案】 A 39 【正确答案】 China,
28、China is a great country ! 5 25 40 【正确答案】 8,17 41 【正确答案】 非 0 【试题解析】 逻辑运算中,非 0表示逻辑 “真 ”,用。表示逻辑 “假 ”。 42 【正确答案】 x+=1 【试题解析】 本题考查 “+”, “-”运算符。 “+”、 “-”只能作用于变量,不能用于表达式或常量;前缀形式是在使用变量之前先将其值增 1或减 1,后缀形式是先使用变量原来的值,使用完后再使其增 1或减 1。 43 【正确答案】 3,1,2 【试题解析】 分析程序,第一个 if语句, a=1, b=2,控制条件 a b成立,则交换 a、 b的值,此时 a=2, b
29、=1。第二个 if语句, a=2, c=3,控制条件 a c成立,则交换 a、 c的值,此时 a=3, c=2。 44 【正确答案】 dowhile 【试题解析】 考查 while和 dowhile 循环的主要区别。 while循环的控制出现在循环体之前,只有当 while后面的表达式的值为非零时,才可能执行循环体;在dowhile 构成的循环体中,总是先执行一次循环体,然后再求表达式的值,因此无论表达式的值是否为零,循环体至少要被执行一次。 45 【正确答案】 10 10 9 1 【试题解析】 for(表达式 1;表达式 2:表达式 3)语句的功能是:首先计算表达式 1的值,然后检测表达式
30、2的值,若其值为真,则执行循环体语句,执行完毕后,再计算表达式 3的值。然后再检测表达式 2的值是否为真,若为真,继续执行循环体语句,若为假,则退出循环:第 1次循环 x 8成立,输出 x=10, y=10后, x的值减 1, i=1,执行 y=+i操作, y的值变为 1;判断条件还成立,输出x=9, y=1,然后 x的值减 1,循环条件不成立,则退出循环。 46 【正确答案】 4 【试题解析】 一维数组元素的定义形式为:数组名 N,则该数组中元素的下限是 0,上 限是 N-1。 47 【正确答案】 150 【试题解析】 本题先给变量 x赋初始值 100,然后将指针 p指向变量 x, *p是取
31、指针 p所指地址的内容,即 100,所以 x=100+50=150。 48 【正确答案】 100 【试题解析】 本题考查带参数的宏定义及相关运算。运算过程为:k=B*20=(A+3)*20=(2+3)*20=100。 49 【正确答案】 B 【试题解析】 因为 c是字符类型变量,它只能接收一个字符,所以 c=A,字符型变量在参与算术运算的时候是用其相应的 ASCII码参与运 算的,这样 +c得到字母 B的 ASCII码,用 putchar函数输出是输出其相应的字符,所以是 B。 50 【正确答案】 8 【试题解析】 第 1次 for循环, i=0,调用函数 f(2),然后将 a的值加 1,在 f()函数中,变量 c为 static类型,所以 c=8:第 2次 for循环, i=1,调用函数 f(3),然后将 a的值加 1,调用函数 f(3)时, a=c+=8,所以 k=8。