1、国家二级 C语言机试(选择题)模拟试卷 31及答案与解析 一、选择题 1 下列叙述中正确的是 ( A)算法的效率只与问题的规模有关,而与数据的存储结构无关 ( B)算法的时间复杂度是指执行算法所需要的计算工作量 ( C)数据的逻辑结构与存储结构是一一对应的 ( D)算法的时间复杂度与空间复杂度一定相关 2 下列叙述中正确的是 ( A)线性表链式存储结构的存储空间一般要少于顺序存储结构 ( B)线性表链式存储结构与顺序存储结构的存储空间都是连续的 ( C) 线性表链式存储结构的存储空间可以是连续的,也可 以是不连续的 ( D)以上说法均错误 3 某二叉树共有 12个结点,其中叶子结点只有 1个。
2、则该二叉树的深度为(根结点在第 1层) ( A) 3 ( B) 6 ( C) 8 ( D) 12 4 对长度为 n的线性表作快速排序,在最坏情况下,比较次数为 ( A) n ( B) n-1 ( C) n(n-1) ( D) n(n-1)/2 5 结构化程序设计中,下面对 goto语句使用描述正确的是 ( A)禁止使用 goto语句 ( B)使用 goto语句程序效率高 ( C)应避免滥用 goto语句 ( D)以上说法均错误 6 下面不属于软件测试实施步骤的是 ( A)集成测试 ( B)回归测试 ( C)确认测试 ( D)单元测试 7 下面不属于软件需求分析阶段主要工作的是 ( A)需求变更
3、申请 ( B)需求分析 ( C)需求评审 ( D)需求获取 8 一般情况下,当对关系 R和 S进行自然连接时,要求 R和 S含有一个或者多个共有的 ( A)记录 ( B)行 ( C)属性 ( D)元组 9 有三个关系 R、 S和 T如下: 则由关系 R和 S得到关系 T的操作是 ( A)选择 ( B)差 ( C)交 ( D)并 10 有表示公司和职员及 工作的三张表,职员可在多家公司兼职。其中公司 C(公司号,公司名,地址,注册资本,法人代表,员工数),职员 S(职员号,姓名,性别,年龄,学历),工作 W(公司号,职员号,工资),则表 W的键(码)为 ( A)公司号,职员号 ( B)职员号,工
4、资 ( C)职员号 ( D)公司号,职员号,工资 11 以下叙述中正确的是 ( A)每个后缀为 .C的 C语言源程序都可以单独进行编译 ( B)每个后缀为 .C的 C语言源程序都应该包含一个 main函数 ( C)在 C语言程序中, main函数必须放在其他函数的最前面 ( D)在 C语 言程序中,只有 main函数才可单独进行编译 12 C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是 ( A)关键字可用作用户标识符,但失去原有含义 ( B)预定义标识符可用作用户标识符,但失去原有含义 ( C)在标识符中大写字母和小写字母被认为是相同的字符 ( D)用户标识符可以由字母
5、和数字任意顺序组成 13 以下选项中合法的常量是 ( A) 9 9 9 ( B) 2.7e ( C) 0Xab ( D) 123E 0.2 14 C语言主要是借助以下哪种手段来实现程序模块化 ( A) 定义函数 ( B)定义常量和外部变量 ( C)使用丰富的数据类型 ( D)使用三种基本结构语句 15 以下叙述中错误的是 ( A)数值型常量有正值和负值的区分 ( B)常量可以用一个符号名来代表 ( C)定义符号常量必须用类型名来设定常量的类型 ( D)常量是在程序运行过程中值不能被改变的量 16 若有定义和语句: int a, b; scanf(“%d,%d,“, 以下选项中的输入数据,不能把
6、值 3赋给变量 a、 5赋给变量 b的是 ( A) 3,5,4 ( B) 3,4,5 ( C) 3,5, ( D) 3 ,5 17 C语言中 char类型数据占字节数为 ( A) 1 ( B) 2 ( C) 3 ( D) 4 18 下列关系表达式中,结果为 “假 “的是 ( A) 3 = 4 ( B) (3 4) = 1 ( C) (3 + 4) 6 ( D) (3 != 4) 2 19 若以下选项中的变量 a, b, y均已正确定义并赋值,则语法正确的 switch语句是 ( A) switch( a*a+b*b ) default : break; case 3 : y=a+b; brea
7、k; case 2 : y=a-b; break; ( B) switch( a+b ) case1 : case3 : y=a+b; break; case0 : case4 : y=a-b; ( C) switch (a+9) case a : y=a-b; case b : y=a+b; ( D) switch a*b case 10 : y=a+b; default : y=a-b; 20 有以下程序 #include main() int a = -2, b = 0; while (a+ printf(“%d,%dn“, a, b ); 程序运行后输出结果是 ( A) 0,2 ( B
8、) 0,3 ( C) 1,3 ( D) 1,2 21 设有定义: int x=0, *p; 紧接着的赋值语句正确的是 ( A) *p=NULL; ( B) p=NULL; ( C) p=x; ( D) *p=x; 22 下列叙述中正确的是 ( A)空字符串不占用内存,其内存空间大小是 0 ( B)两个连续的单引号( )是合法的字符常量 ( C)可以对字符串进行关系运算 ( D)两个连续的双引号( “)是合法的字符串常量 23 有以下程序 #include main() char a=H; a = ( a =A printf(“%cn“, a ); 程序运行后的输出结果是 ( A) H ( B)
9、 h ( C) A ( D) a 24 有以下程序 #include int f( int x ); main() int a, b=0; for ( a=0; a 3; a+=1 ) b += f (A); putchar(A+b); int f( int x ) return x*x+1; 程序运行后输出结果是 ( A) ABE ( B) BCD ( C) BDI ( D) BCF 25 设有定义: int x23; 则以下关于二维数组 x的叙述错误的是 ( A)元素 x0可看作是由 3个整型元素组成的一维数组 ( B)数组 x可以看作是由 x0和 x1两个元素组成的一维数组 ( C)可以
10、用 x0=0;的形式为数组所有元素赋初值 0 ( D) x0和 x1是数组名,分别代表一个地址常量 26 设 p是指针变量,语句 p = NULL;等价于 ( A) p = 0; ( B) p = ; ( C) p = “; ( D) p = 0; 27 有以下程序 #include main() int a = 10,20,30,40 , *p=a, i ; for( i=0; i =3; i+ ) ai = *p; p+; printf(“%dn“, a2 ); 程序运行后的输出结果是 ( A) 10 ( B) 20 ( C) 30 ( D) 40 28 有以下程序 #include #d
11、efine N3 void fun( int aN, int b ) int i, j; for( i=0; i N; i+ ) bi = ai0; for( j=1; j N; j+ ) if ( bi aij ) bi = aij; main() int xNN = 1, 2, 3, 4, 5, 6, 7, 8, 9, yN ,i; fun( x, y ); for ( i=0; i N; i+ )printf( “%d,“, yi ); printf( “n“ ); 程序运行后的输出结果是 ( A) 3,5,7 ( B) 1,3,5, ( C) 2,4,8, ( D) 3,6,9, 29
12、 有以下程序( strcpy为字符串复制函数, strcat为字符串连接函数 ) #include #include main() char a10 = “abc“, b10 = “012“, c10 = “xyz“; strcpy( a+1, b+2 ); puts( strcat( a, c+1 ) ); 程序运行后的输出结果是 ( A) a12xyz ( B) bc2yz ( C) a2yz ( D) 12yz 30 以下选项中,没有编译错误的是 ( A) char str3 = d, e, b, u, g, 0; ( B) char str15 = “pass“, str26; str
13、2 = str1; ( C) char name10; name = “china“; ( D) char str4; str4 = “hello world“; 31 有以下程序 #include main() char *s=“12134“; int k=0, a=0 ; while( s k +1 ) k+; if ( k % 2 =0 ) a = a + ( s k - 0 +1 ) ; continue; a = a + ( s k - 0 ); printf (“ k=%d a=%dn“, k, a ); 程序运行后的输出结果是 ( A) k=5 a=15 ( B) k=4 a=1
14、2 ( C) k=6 a=11 ( D) k=3 a=14 32 有以下程序 #include main() char a510 = “one“, “two“, “three“, “four“, “five“ ; int i, j; char t; for ( i=0; i 2; i+ ) for ( j=i+1; j 5; j+ ) if ( ai0 a j0 ) t=ai0; ai0=aj0; aj0=t; puts(a1); 程序运行后的输出结果是 ( A) owo ( B) fwo ( C) two ( D) fix 33 有以下程序 #include int a=1, b=2; vo
15、id fun1( int a, int b ) printf( “%d %d “ ,a, b ); void fun2() a=3; b=4; main() fun1(5,6); fun2( ); printf( “%d %dn“,a, b ); 程序运行后的输出结果是 ( A) 5 6 1 2 ( B) 3 4 5 6 ( C) 1 2 5 6 ( D) 5 6 3 4 34 有以下程序 #include void func( int n ) static int num = 1; num += n; printf(“%d “, num); main() func(3); func(4);
16、printf(“n“); 程序运行后的输出是 ( A) 4 5 ( B) 4 8 ( C) 3 5 ( D) 3 4 35 有以下程序 #include #include void fun( int *p1, int *p2, int *s) s=( int*)calloc(1,sizeof(int); *s=*p1+*p2; free(s); main() int a2=1,2, b2=40,50,*q=a; fun(a,b,q); printf(“%dn“, *q); 程序运行后的输出结果是 ( A) 42 ( B) 41 ( C) 1 ( D) 0 36 有以下程序 #include s
17、truct STU char name9; char sex; int score2; ; void f( struct STU a ) struct STU b = “Zhao“, m, 85, 90; a1 = b; main() struct STU c2= “Qian“, f, 95, 92, “Sun“, m, 98, 99 ; f(c); printf( “%s,%c,%d,%d,“, c0.name, c0.sex, c0.score0, c0.score1 ); printf( “%s,%c,%d,%dn“, c1.name, c1.sex, c1.score0, c1.sco
18、re1 ); 程序运行后输出结果是 ( A) Qian,f,95,92,Sun,m,98,99 ( B) Qian,f,95,92,Zhao,m,85,90 ( C) Zhao,m,85,90,Sun,m,98,99 ( D) Zhao,m,85,90,Qian,f,95,92 37 以下叙述中错误的是 ( A)用 typedef可以说明一种新的类型名 ( B) typedef的作用是用一个新的标识符来代表已存在的类型名 ( C)可以用 typedef说明的新类型名来定义变量 ( D) typedef说明的新类型名必须使用大写字母, 否则会出编译错误 38 以下叙述中错误的是 ( A)只要类型
19、相同,结构体变量之间可以整体赋值 ( B)函数的返回值类型不能是结构体类型,只能是简单类型 ( C)可以通过指针变量来访问结构体变量的任何成员 ( D)函数可以返回指向结构体变量的指针 39 若有定义语句 int b = 2; 则表达式 ( b 2 ) / ( 3 | b )的值是 ( A) 0 ( B) 2 ( C) 4 ( D) 8 40 有以下程序 #include main() FILE *fp;int i, a6 = 1,2,3,4,5,6; fp = fopen( “d2.dat“, “w+“ ); for (i=0; i 6; i+)fprintf( fp, “%dn“, ai
20、); rewind( fp ); for ( i=0; i 6; i+ ) fscanf( fp, “%d“, fclose(fp); for ( i=0; i 6; i+ ) printf( “%d,“, ai ); 程序运行后输出结果是 ( A) 1,2,3,4,5,6, ( B) 6,5,4,3,2,1, ( C) 4,5,6,1,2,3, ( D) 1,2,3,3,2,1, 国家二级 C语言机试(选择题)模拟试卷 31答案与解析 一、选择题 1 【正确答案】 B 【试题解析】 算法的效率与问题的规模和数据的存储结构都有关, A错误。算法的时间复杂度,是指执行算法所需要的计算工作量, B
21、正确。由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此数据的逻辑结构和存储结构不是一一对应的, C错误。算法的时间复杂度和空间复杂度没有直接的联系, D错误。 2 【正确答案】 C 【试题解析】 线性表的顺序存储结构具备如下两个基本特征: ( 1)线性表中的所有元素所占的存储空间是连续的; ( 2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。用一组任意的存储单元来依次存放线性表的结点,这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置上的。因此 C正确。 3 【正确答案】 D 【试题解析】 二叉树中,度为 0的节点数等于度为 2的节点数加
22、1,即 n2=n0-1,叶子节点即度为 0, n0=1,则 n2=0,总节点数为 12=n0+n1+n2=1+n1+0,则度为 1的节点数 n1=11,故深度为 12,选 D。 4 【正确答案】 D 【试题解析】 快速排序最坏情况就是每次选的基准数都和其他数做过比较,共需比较 (n-1)+(n-2)+1=n(n -1)/2,选 D。 5 【正确答案】 C 【试题解析】 结构化程序设计中,要注意尽量避免 goto语句的使用,故选 C。 6 【正确答案】 B 【试题解析】 软件测试主要包括单元测试、集成测试、确认测试和系统测试。 7 【正确答案】 A 【试题解析】 需求分析阶段的工作可概括为 4个
23、方面: 需求获取。 需求分析。 编写需求规格说明书。 需求审评。 8 【正确答案】 C 【试题解析】 自然连接是一种特殊的等值连接,它满足下面的条件: 两关系间有公共域; 通过公共域的等值进行连接,选 C。 9 【正确答案】 B 【试题解析】 关系 T是关系 R的一部分,并且是关系 R去掉 R和 S相同的元素,符合差操作。 10 【正确答案】 A 【试题解析】 由于职员可以再多加公司兼职,表 W的键(码)应为公司关系和职员 关系的主码,即公司号和职员号。 11 【正确答案】 A 【试题解析】 一个普通的 C函数可以单独作为一个 C的程序文件存在被包含到其他程序中 ,每个后缀为 .C的 C语言源
24、程序都可以单独进行编译 ,所以 B, D错误,main函数可以放在程序的开始 ,中间 ,最后 ,所以 C错误。 12 【正确答案】 B 【试题解析】 关键字不可用作 C语言的标识符 ,所以 A错误,在标识符中大写字母与小写字母作为不同字符处理 ,所以 C错误 ?标识符由下划线,字母,数字组成 ,且必须以下划线和字母开始 ,所以 D错误。 13 【正确答案】 C 【试题解析】 A选项中含有非法的空格 ,所以错误, C语言中十六进制常量以 0x开头 ,所以 C正确 ?实型常量中 e的前后必须均有数据 ,且其后必须为整数 ,所以 B和D错误。 14 【正确答案】 A 【试题解析】 C语言程序的模块化
25、通过函数来体现 ,所以选择 A。 15 【正确答案】 C 【试题解析】 数值型常量有整型常量 ,实型常量 ,不论是整型常量还是实型常量都有正值和负值之分 ,所以 A正确,在 C语言的预编译处理中 ,可以用符号名代表一个常量 ,定义时不必指定常量类型 ,所以 C错误 ,B正确 ?常量的定义就 是常量是在程序运行过程中值不能被改变的量 ,所以 D正确。 16 【正确答案】 D 【试题解析】 scanf()的格式控制串可以使用其他非空白字符 ,如本题中的逗号 ,但在输入时必须输入这些字符 ,以保证匹配 ?所以在 3 和 5之间必须输入逗号 ,不能有其他符号 ,才能保证 a和 b的正确赋值 ?所以选择
26、 D。 17 【正确答案】 A 【试题解析】 每个字符变量被分配一个字节的内存空间。因此 A选项正确。 18 【正确答案】 D 【试题解析】 B选项中,关系表达式 (3 4)=1即 1=1,结果为真; C选项中,(3+4) 6即 7 6,结果为真; A选项中, 3 =4结果为真。 D选项中, (3!=4) 2即1 2,结果为假。因此 D选项正确。 19 【正确答案】 A 【试题解析】 switch语句, 其一般形式为: switch(表达式 ) case常量表达式 1: 语句 1; case常量表达式 2: 语句 2; case常量表达式 n: 语句 n; default : 语句 n+1;
27、B选项中, case1和 case2有错误,; C选项中, case a和 case b不正确, case后面应该跟常量表达式; D选项中, switch a*b,有误。 因此 A选项正确。 20 【正确答案】 D 【试题解析】 本题重点考察 while语句,变量 a和 b分别赋初值为 -2和 1, while语句的语义是:计算表达式的值,当值为真 (非 0)时, 执行循环体语句。 a+即 a参与运算后, a的值再自增 1。 +b即 b自增 1后再参与其它运算。当表达式的值为 0时,退出循环,最后输出 a和 b的值为 1和 2。因此 D选项正确 。 21 【正确答案】 B 【试题解析】 题目中
28、定义指针变量 p,指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误。不允许把一个数赋予指针变量,被赋值的指针变量前不能再加 “*“说明符,因此 B选项正确。 22 【正确答案】 D 【试题解析】 字符串常量是由一对双引号括起的字符序列。 A选项描述不正确。B选项描述的不够完善;字符常量占一个字节的内存空间。 D选项正确;字符常量是用单引号括起来的一个字符。 C语言字符串比较不能直接用关系运算符进行正确比较。可以用字符串比较函数 strcmp来实现, C选项是错误的;字符串常量占的内存字节数等于字符串中字节数加 1。因此 D选项正确。 23 【正确答案】 B 【试题解析】 条件
29、运算符构成的选择结构的一般形式为: 表达式 1。 表达式 2。 表达式 3。 其求值规则为:如果表达式 1的值为真,则以表达式 2 的值作为条件表达式的值,否则以表达式 2的值作为整个条件表达式的值。 该题目中首先给字符变量 a赋值为 H。语句 a=(a=A即将大写字母变为小写字母。因此 B选项正确。 24 【正确答案】 C 【试题解析】 在函数 main()中,第一次执行 for 循环时, b的值等于 1,此时输出字母 B;第二次执行 for循环时, b的值等于 3,此时输出字母 D;第三次执行for循环时, b的值等于 8,此时输出字母 I。因此 C选项正确。 25 【正确答案】 C 【试
30、题解析】 x0可看作是由 3个整型元素组成的一维数组,不可以用语句x0=0;为数组所有元素赋初值 0。因此 C选项正确。 26 【正确答案】 D 【试题解析】 p= NULL;等价 p =0; 因此 D选项正确。 27 【正确答案】 C 【试题解析】 因为指针变量 p的初始值指向数组 a,所以执行 for 循环语句后,数组 a 中的元素的值不变。因此 C选项正确。 28 【正确答案】 D 【试题解析】 函数 fun()的作用是求出二维数组 aN中每一行中的最大元素,所以在 main()函数中执行完 fun(x,y)后,数组 y中的元素为二维数组 xNN每一行的最大元素。因此 D选项正确。 29
31、 【正确答案】 C 【试题解析】 本题考查字符串处理函数 strcpy和 strcat,执行完 strcpy( a+1, b+2 );后 , a变为 a2,执行完 strcat( a, c+1 )后, a变为 a2yz,所以答案为 C选项。 30 【正确答案】 A 【试题解析】 B选项中,不能直接将字符数组名直接赋值给另一个字符数组名。C选项赋值错误,不能将一个字符串常量赋值给一个字符指针。 D选项定义 str4时需要定义其长度。 31 【正确答案】 B 【试题解析】 当 k=0时,执行 while一次,得到 k=1, a为 2;当 k=1时,执行while一次,得到 k=2, a为 4;当
32、k=2时,执行 while一次,得到 k=3, a为 7;当 k=3时,执行 while一次,得到 k=4, a为 12;所以答案为 B选项。 32 【正确答案】 B 【试题解析】 考查二维数组元素的引用。当 i为 0时,代码处理结果为第一个字符串的第一个字符与第四个字符串的第一个字符调换,当 i为 1时,代码处理结果为第而个字符串的第一个字符与第五个字符串的第一个字符调换,所以 a1为fwo。 33 【正确答案】 D 【试题解析】 fun1函数中的 a、 b为局部变量, fun2函数中的 a、 b为全局变量。执行 fun1函数后输出 5,6 执行完 fun2后 a变为 3, b变为 4,所以
33、结果为 3,4 D选项正确。 34 【正确答案】 B 【试题解析】 本题中 num为静态局部变量,执行 fun(3)后,输出 4,执行 fun(4)后输出 8,所以选项 B正确。 35 【正确答案】 C 【试题解析】 本题考查把数组名作为函数参数,执行 fun函数后, s的值并没有发生变化,仍然是指向 a,所以输出结果为 1,选项 C正确。 36 【正确答案】 B 【试题解析】 本题考查把数组名作为函数参数,执行 f函数后,结构体数组 c的第二个元素被改写, c1.name为 Zhao,选项 B正确。 37 【正确答案】 D 【试题解析】 本题考查 typedef的使用方法, typedef对
34、已存在的类型使用一个新的名字,新类型可以使用小写,所以 D选项错误。 38 【正确答案】 B 【试题解析】 本题考查结构体相关知识,函数返回值可以是结构体,所以 B选项错误。 39 【正确答案】 D 【试题解析】 本题考查位运算 、 /,以及逻辑运算符 |。 b2为 8,3 3 | b为 1,所以结果为 8,所以 D选项正确。 40 【正确答案】 B 【试题解析】 本题考查文件操作函数, fprintf和 rewind函数, rewind函数将文件内部的位置指针重新指向一个流(数据流 /文件)的开头,程序首先是将数组 a的六个数写入 d2文件中,然后又将 a数组从后往前覆盖到 d2中的内容,所以结果为 6,5,4,3,2,1,选项 B正确。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1