您的当前位置:首页正文

全国计算机等级考试二级C语言真题库之选择题(18)

2022-09-12 来源:汇意旅游网
 WORD

全国计算机等级考试等级考试真题库之选择题(18)

1.下列叙述中正确的是

A) 算法的效率只与问题的规模有关,而与数据的存储结构无关 B) 算法的时间复杂度是指执行算法所需要的计算工作量 C) 数据的逻辑结构与存储结构是一一对应的 D) 算法的时间复杂度与空间复杂度一定相关 参考答案:B

【解析】算法的效率与问题的规模和数据的存储结构都有关,A错误。算法的时间复杂度,是指执行算法所需要的计算工作量,B正确。由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此数据的逻辑结构和存储结构不是一一对应的,C错误。算法的时间复杂度和空间复杂度没有直接的联系,D错误。

2.下列叙述中正确的是

A) 线性表链式存储结构的存储空间一般要少于顺序存储结构 B) 线性表链式存储结构与顺序存储结构的存储空间都是连续的

C) 线性表链式存储结构的存储空间可以是连续的,也可以是不连续的 D) 以上说法均错误 参考答案:C

【解析】线性表的顺序存储结构具备如下两个基本特征:(1)线性表中的所有元素所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。用一组任意的存储单元来依次存放线性表的结点,这组存储单元既可以是连续的,也可以是不连续的,甚至是零散分布在存中的任意位置上的。因此C正确。

3.某二叉树共有12个结点,其中叶子结点只有1个。则该二叉树的深度为(根结点在第1层) A) 3 B) 6 C) 8 D) 12

参考答案:D

【解析】二叉树中,度为0的节点数等于度为2的节点数加1,即n2=n0-1,叶子节点即度为0,n0=1,则n2=0,总节点数为12=n0+n1+n2=1+n1+0,则度为1的节点数n1=11,故深度为12,选D。

4.对长度为n的线性表作快速排序,在最坏情况下,比较次数为 A) n B) n-1 C) n(n-1) D) n(n-1)/2 参考答案:D

【解析】快速排序最坏情况就是每次选的基准数都和其他数做过比较,共需比较(n-1)+(n-2)+…+1=n(n-1)/2,选D。

5.结构化程序设计中,下面对goto语句使用描述正确的是

专业资料

WORD

A) 禁止使用goto语句

B) 使用goto语句程序效率高 C) 应避免滥用goto语句 D) 以上说法均错误 参考答案:C

【解析】结构化程序设计中,要注意尽量避免goto语句的使用,故选C。

6.下面不属于软件测试实施步骤的是 A) 集成测试 B) 回归测试 C) 确认测试 D) 单元测试 参考答案:B

【解析】软件测试主要包括单元测试、集成测试、确认测试和系统测试。

7.下面不属于软件需求分析阶段主要工作的是 A) 需求变更申请 B) 需求分析 C) 需求评审 D) 需求获取 参考答案:A

【解析】需求分析阶段的工作可概括为4个方面:①需求获取。②需求分析。③编写需求规格说明书。④需求审评。

8.一般情况下,当对关系R和S进行自然连接时,要求R和S含有一个或者多个共有的 A) 记录 B) 行 C) 属性 D) 元组

参考答案:C

【解析】自然连接是一种特殊的等值连接,它满足下面的条件:①两关系间有公共域;②通过公共域的等值进行连接,选C。 9.

A) 选择 B) 差

专业资料

WORD

C) 交 D) 并

参考答案:B

【解析】关系T是关系R的一部分,并且是关系R去掉R和S相同的元素,符合差操作。

10.有表示公司和职员及工作的三表,职员可在多家公司兼职。其中公司C(公司号,公司名,地址,注册资本,法人代表,员工数),职员S(职员号,,性别,年龄,学历),工作W(公司号,职员号,工资),则表W的键(码)为 A) 公司号,职员号 B) 职员号,工资 C) 职员号

D) 公司号,职员号,工资 参考答案:A

【解析】由于职员可以再多加公司兼职,表W的键(码)应为公司关系和职员关系的主码,即公司号和职员号。

11.以下叙述中正确的是

A) 每个后缀为.C的C语言源程序都可以单独进行编译 B) 每个后缀为.C的C语言源程序都应该包含一个main函数 C) 在C语言程序中,main函数必须放在其他函数的最前面 D) 在C语言程序中,只有main函数才可单独进行编译 参考答案:A

【解析】一个普通的C函数可以单独作为一个C的程序文件存在被包含到其他程序中,每个后缀为.C的C语言源程序都可以单独进行编译,所以B、D错误。main函数可以放在程序的开始,中间,最后,所以C错误。

12.C语言中的标识符分为关键字、预定义标识符和用户标识符,以下叙述正确的是 A) 关键字可用作用户标识符,但失去原有含义

B) 预定义标识符可用作用户标识符,但失去原有含义 C) 在标识符写字母和小写字母被认为是相同的字符 D) 用户标识符可以由字母和数字任意顺序组成 参考答案:B 【解析】关键字不可用作C语言的标识符,所以A错误。在标识符写字母与小写字母作为不同字符处理,所以C错误。标识符由下划线、字母、数字组成,且必须以下划线和字母开始,所以D错误。

13.以下选项中合法的常量是 A) 9 9 9 B) 2.7e C) 0Xab D) 123E 0.2 参考答案:C

【解析】A选项中含有非法的空格,所以错误。C语言中十六进制常量以0x开头,所以C正确。实型常量中e的前后必须均有数据,且其后必须为整数,所以B和D错误。

专业资料

WORD

14.C语言主要是借助以下哪种手段来实现程序模块化 A) 定义函数

B) 定义常量和外部变量 C) 使用丰富的数据类型 D) 使用三种基本结构语句 参考答案:A

【解析】C语言程序的模块化通过函数来体现,所以选择A。

15.以下叙述中错误的是

A) 数值型常量有正值和负值的区分 B) 常量可以用一个符号名来代表

C) 定义符号常量必须用类型名来设定常量的类型 D) 常量是在程序运行过程中值不能被改变的量 参考答案:C 【解析】数值型常量有整型常量,实型常量,不论是整型常量还是实型常量都有正值和负值之分,所以A正确。在C语言的预编译处理中,可以用符号名代表一个常量,定义时不必指定常量类型,所以C错误,B正确。常量的定义就是常量是在程序运行过程中值不能被改变的量,所以D正确。

16.若有定义和语句: int a, b;

scanf(\"%d,%d,\

以下选项中的输入数据,不能把值3赋给变量a、5赋给变量b的是 A) 3,5,4 B) 3,5 C) 3,5, D) 3 ,5

参考答案:D

【解析】scanf()的格式控制串可以使用其他非空白字符,如本题中的逗号,但在输入时必须输入这些字符,以保证匹配。所以在3 和5之间必须输入逗号,不能有其他符号,才能保证a和b的正确赋值。所以选择D。

17.C语言中char类型数据占字节数为 A) 1 B) 2 C) 3 D) 4

参考答案:A

【解析】每个字符变量被分配一个字节的存空间。因此A选项正确。

18.下列关系表达式中,结果为\"假\"的是 A) 3 <= 4

专业资料

WORD

B) (3 < 4) == 1 C) (3 + 4) > 6 D) (3 != 4) > 2 参考答案: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, b, y均已正确定义并赋值,则语确的switch语句是 A) switch( a*a+b*b ) { default : break;

case 3 : y=a+b; break; 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;

}

参考答案:A

【解析】switch语句, 其一般形式为: switch(表达式){

case常量表达式1: 语句1; case常量表达式2: 语句2; …

case常量表达式n: 语句n; default : 语句n+1; }

B选项中,case1和case2有错误,; C选项中,case a和case b不正确,case后面应该跟常量表达式;D选项中,switch a*b,有误。因此A选项正确。

20.有以下程序

#include

专业资料

WORD

main()

{ int a = -2, b = 0; while (a++ && ++b) ;

printf(\"%d,%d\\n\ }

程序运行后输出结果是 A) 0,2 B) 0,3 C) 1,3 D) 1,2

参考答案:D

【解析】本题重点考察while语句,变量a和b分别赋初值为-2和1,while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。a++即a参与运算后,a的值再自增1。++b即b自增1后再参与其它运算。当表达式的值为0时,退出循环,最后输出a和b的值为1和2。因此D选项正确。

21.设有定义:

int x=0, *p;

紧接着的赋值语句正确的是 A) *p=NULL; B) p=NULL; C) p=x; D) *p=x;

参考答案:B

【解析】题目中定义指针变量p,指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误。不允许把一个数赋予指针变量,被赋值的指针变量前不能再加\"*\"说明符,因此B选项正确。

22.下列叙述中正确的是

A) 空字符串不占用存,其存空间大小是0

B) 两个连续的单引号('')是合法的字符常量 C) 可以对字符串进行关系运算

D) 两个连续的双引号(\"\")是合法的字符串常量 参考答案:D

【解析】字符串常量是由一对双引号括起的字符序列。A选项描述不正确。B选项描述的不够完善;字符常量占一个字节的存空间。D选项正确;字符常量是用单引号括起来的一个字符。C语言字符串比较不能直接用关系运算符进行正确比较。可以用字符串比较函数strcmp来实现,C选项是错误的;字符串常量占的存字节数等于字符串中字节数加1。因此D选项正确。

23.有以下程序

#include main()

专业资料

WORD

{ char a='H';

a = ( a>='A' && a<='Z' ) ? (a+32) : a; printf(\"%c\\n\ }

程序运行后的输出结果是 A) H B) h C) A D) a

参考答案:B

【解析】条件运算符构成的选择结构的一般形式为:表达式1? 表达式2: 表达式3。

其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。该题目中首先给字符变量a赋值为'H'。语句a=(a>='A'&& a<='Z')?(a+32):a;即将大写字母变为小写字母。因此B选项正确。

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

参考答案:C

【解析】在函数main()中,第一次执行for 循环时,b的值等于1,此时输出字母B;第二次执行for循环时,b的值等于3,此时输出字母D;第三次执行for循环时,b的值等于8,此时输出字母I。因此C选项正确。

25.设有定义: int x[2][3];

则以下关于二维数组x的叙述错误的是

A) 元素x[0]可看作是由3个整型元素组成的一维数组

专业资料

WORD

B) 数组x可以看作是由x[0]和x[1]两个元素组成的一维数组 C) 可以用x[0]=0;的形式为数组所有元素赋初值0 D) x[0]和x[1]是数组名,分别代表一个地址常量 参考答案:C

【解析】x[0]可看作是由3个整型元素组成的一维数组,不可以用语句x[0]=0;为数组所有元素赋初值0。因此C选项正确。

26.设p是指针变量,语句p = NULL;等价于 A) p = '0'; B) p = ''; C) p = \"\"; D) p = 0;

参考答案:D

【解析】p= NULL;等价p =0; 因此D选项正确。

27.有以下程序

#include main()

{ int a[ ]={ 10,20,30,40 }, *p=a, i ;

for( i=0; i<=3; i++ ) { a[i] = *p; p++; } printf(\"%d\\n\ }

程序运行后的输出结果是 A) 10 B) 20 C) 30 D) 40

参考答案:C

【解析】因为指针变量p的初始值指向数组a,所以执行for 循环语句后,数组a 中的元素的值不变。因此C选项正确。

28.有以下程序

#include #define N 3

void fun( int a[][N], int b[] ) { int i, j;

for( i=0; ifor( j=1; jif ( b[i] < a[i][j] ) b[i] = a[i][j]; } }

main()

专业资料

WORD

{ int x[N][N] = {1, 2, 3, 4, 5, 6, 7, 8, 9}, y[N] ,i; fun( x, y );

for ( i=0; i程序运行后的输出结果是 A) 3,5,7 B) 1,3,5, C) 2,4,8, D) 3,6,9,

参考答案:D

【解析】函数fun()的作用是求出二维数组a[][N]中每一行中的最大元素,所以在main()函数中执行完fun(x,y)后,数组y中的元素为二维数组x[N][N]每一行的最大元素。因此D选项正确。

29.有以下程序(strcpy为字符串复制函数,strcat为字符串连接函数) #include #include main()

{ char a[10] = \"abc\ strcpy( a+1, b+2 );

puts( strcat( a, c+1 ) ); }

程序运行后的输出结果是

A) a12xyz B) bc2yz C) a2yz D) 12yz

参考答案:C

【解析】本题考查字符串处理函数strcpy和strcat,执行完strcpy( a+1, b+2 );后,a变为a2,执行完strcat( a, c+1 )后,a变为a2yz,所以答案为C选项。

30.以下选项中,没有编译错误的是

A) char str3[] = {'d', 'e', 'b', 'u', 'g', '\\0'}; B) char str1[5] = \"pass\C) char name[10]; name = \"china\"; D) char str4[]; str4 = \"hello world\"; 参考答案:A

【解析】B选项中,不能直接将字符数组名直接赋值给另一个字符数组名。C选项赋值错误,不能将一个字符串常量赋值给一个字符指针。D选项定义str4时需要定义其长度。

专业资料

WORD

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=%d\\n\ }

程序运行后的输出结果是 A) k=5 a=15 B) k=4 a=12 C) k=6 a=11 D) k=3 a=14 参考答案:B

【解析】当k=0时,执行while一次,得到k=1,a为2;当k=1时,执行while一次,得到k=2,a为4;当k=2时,执行while一次,得到k=3,a为7;当k=3时,执行while一次,得到k=4,a为12;所以答案为B选项。

32.有以下程序

#include main() {

char a[5][10] = {\"one\ int i, j; char t;

for ( i=0; i<2; i++ )

for ( j=i+1; j<5; j++ )

if ( a[i][0] >a [j][0] ) {

t=a[i][0];

a[i][0]=a[j][0]; a[j][0]=t;

专业资料

WORD

} puts(a[1]); }

程序运行后的输出结果是 A) owo B) fwo C) two D) fix

参考答案:B

【解析】考查二维数组元素的引用。当i为0时,代码处理结果为第一个字符串的第一个字符与第四个字符串的第一个字符调换,当i为1时,代码处理结果为第而个字符串的第一个字符与第五个字符串的第一个字符调换,所以a[1]为fwo

33.有以下程序

#include int a=1, b=2;

void fun1( int a, int b ) { printf( \"%d %d \" ,a, b ); } void fun2()

{ a=3; b=4; } main()

{ fun1(5,6); fun2( ); printf( \"%d %d\\n\ }

程序运行后的输出结果是 A) 5 6 1 2 B) 3 4 5 6 C) 1 2 5 6 D) 5 6 3 4 参考答案:D

【解析】fun1函数中的a、b为局部变量,fun2函数中的a、b为全局变量。执行fun1函数后输出5,6 执行完fun2后a变为3,b变为4,所以结果为3,4 D选项正确。

34.有以下程序

#include void func( int n ) {

static int num = 1; num += n;

printf(\"%d \}

main()

专业资料

WORD

{

func(3); func(4); printf(\"\\n\"); }

程序运行后的输出是 A) 4 5 B) 4 8 C) 3 5 D) 3 4

参考答案:B

【解析】本题中num为静态局部变量,执行fun(3)后,输出4,执行fun(4)后输出8,所以选项B正确。

35.有以下程序

#include #include

void fun( int *p1, int *p2, int *s) { s=( int*)calloc(1,sizeof(int)); *s=*p1+*p2; free(s); }

main()

{ int a[2]={1,2}, b[2]={40,50},*q=a; fun(a,b,q);

printf(\"%d\\n\ }

程序运行后的输出结果是 A) 42 B) 41 C) 1 D) 0

参考答案:C

【解析】本题考查把数组名作为函数参数,执行fun函数后,s的值并没有发生变化,仍然是指向a,所以输出结果为1,选项C正确。

36.有以下程序

#include

struct STU{ char name[9]; char sex; int score[2]; } ; void f( struct STU a[] )

{ struct STU b = {\"Zhao\ a[1] = b;

专业资料

WORD

}

main()

{ struct STU c[2]={ {\"Qian\ f(c);

printf( \"%s,%c,%d,%d,\c[0].score[1] );

printf( \"%s,%c,%d,%d\\n\c[1].score[1] ); }

程序运行后输出结果是

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 参考答案:B 【解析】本题考查把数组名作为函数参数,执行f函数后,结构体数组c的第二个元素被改写,c[1].name为Zhao,选项B正确。

37.以下叙述中错误的是

A) 用typedef可以说明一种新的类型名

B) typedef的作用是用一个新的标识符来代表已存在的类型名 C) 可以用typedef说明的新类型名来定义变量

D) typedef说明的新类型名必须使用大写字母,否则会出编译错误 参考答案:D

【解析】本题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,新类型可以使用小写,所以D选项错误。

38.以下叙述中错误的是

A) 只要类型相同,结构体变量之间可以整体赋值

B) 函数的返回值类型不能是结构体类型,只能是简单类型 C) 可以通过指针变量来访问结构体变量的任何成员 D) 函数可以返回指向结构体变量的指针 参考答案:B

【解析】本题考查结构体相关知识,函数返回值可以是结构体,所以B选项错误。

39.若有定义语句 int b = 2;

则表达式 ( b<<2 ) / ( 3 || b )的值是 A) 0 B) 2 C) 4 D) 8

专业资料

WORD

参考答案:D

【解析】本题考查位运算<<、/,以及逻辑运算符||。b<<2为8,3 3 || b为1,所以结果为8,所以D选项正确。

40.有以下程序

#include main()

{ FILE *fp; int i, a[6] = {1,2,3,4,5,6}; fp = fopen( \"d2.dat\

for (i=0; i<6; i++) fprintf( fp, \"%d\\n\ rewind( fp );

for ( i=0; i<6; i++ ) fscanf( fp, \"%d\ fclose(fp);

for ( i=0; i<6; i++ ) printf( \"%d,\ }

程序运行后输出结果是 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, 参考答案:B

【解析】本题考查文件操作函数,fprintf和rewind函数, rewind函数将文件部的位置指针重新指向一个流(数据流/文件)的开头,程序首先是将数组a的六个数写入d2文件中,然后又将a数组从后往前覆盖到d2中的容,所以结果为6,5,4,3,2,1,选项B正确。

专业资料

因篇幅问题不能全部显示,请点此查看更多更全内容