admin 管理员组

文章数量: 887032


2023年12月22日发(作者:compareandset)

全国计算机等级考试等级考试试题库之选择题〔13〕

1.程序流程图中带有箭头的线段表示的是( )。

A) 图元关系

B) 数据流

C) 操纵流

D) 调用关系

参考答案:C

【解析】在数据流图中,用标有名字的箭头表示数据流。在程序流程图中,用标有名字的箭头表示操纵流。所以选择C)。

2.结构化程序设计的根本原则不包含( )。

A) 多态性

B) 自顶向下

C) 模块化

D) 逐渐求精

参考答案:A

【解析】结构化程序设计的思想包含:自顶向下、逐渐求精、模块化、限制使用goto语句,所以选择A)。

3.软件设计中模块划分应遵循的准则是( )。

A) 低内聚低耦合

B) 高内聚低耦合

C) 低内聚高耦合

D) 高内聚高耦合

参考答案:B

【解析】软件设计中模块划分应遵循的准则是高内聚低偶合、模块大小规模适当、模块的依赖关系适当等。模块的划分应遵循肯定的要求,以保证模块划分合理,并进一步保证以此为依据开发出的软件系统可靠性强,易于理解和维护。模块之间的耦合应尽可能的低,模块的内聚度应尽可能的高。

4.在软件开发中,需求分析阶段产生的主要文档是( )。

A) 可行性分析汇报

B) 软件需求规格说明书

C) 概要设计说明书

D) 集成测试方案

参考答案:B

【解析】A)错误,可行性分析阶段产生可行性分析汇报。C)错误,概要设计说明书是总体设计阶段产生的文档。D)错误,集成测试方案是在概要设计阶段编写的文档。B)正确,需求规格说明书是后续工作如设计、编码等需要的重要参考文档。

5.算法的有穷性是指( )。

A) 算法程序的运行时间是有限的

B) 算法程序所处理的数据量是有限的

C) 算法程序的长度是有限的

D) 算法只能被有限的用户使用

参考答案:A

【解析】算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。有

穷性是指算法程序的运行时间是有限的。

6.对长度为n的线性表排序,在最坏情况下,比拟次数不是n(n-1)/2的排序方法是( )。

A) 快速排序

B) 冒泡排序

C) 直接插入排序

D) 堆排序

参考答案:D

【解析】除了堆排序算法的比拟次数是,其他的都是n(n-1)/2。

7.以下关于栈的表达正确的选项是( )。

A) 栈按"先进先出"组织数据

B) 栈按"先进后出"组织数据

C) 只能在栈底插入数据

D) 不能删除数据

参考答案:B

【解析】栈是按"先进后出"的原则组织数据的,数据的插入和删除都在栈顶进行操作。

8.在数据库设计中,将E-R图转换成关系数据模型的过程属于( )。

A) 需求分析阶段

B) 概念设计阶段

C) 逻辑设计阶段

D) 物理设计阶段

参考答案:C

【解析】E-R图转换成关系模型数据则是把图形分析出来的联系反映到数据库中,即设计出表,所以属于逻辑设计阶段。

9.有三个关系R、S和T如下:

由关系R和S通过运算得到关系T,则所使用的运算为( )。

A) 并

B) 自然连接

C) 笛卡尔积

D) 交

参考答案:D

【解析】自然连接是一种特别的等值连接,它要求两个关系中进行比拟的重量必须是相同的属性组,并且在结果中把重复的属性列去掉,所以B)错误。笛卡尔积是用R集合中元素为第一元素,S集合中元素为第二元素构成的有序对,所以C)错误。依据关系T可以很明显的看出是从关系R与关系S中取得相同的关系组所以取得是交运算,选择D)。

10.设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,你的证件号),课程C(课号,课名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为( )。

A) 课号,成绩

B) 学号,成绩

C) 学号,课号

D) 学号,姓名,成绩

参考答案:C

【解析】学号是学生表S的主键,课号是课程表C的主键,所以选课表SC的关键字就应

该是与前两个表能够直接联系且能唯肯定义的学号和课号,所以选择C)。

11.C言语程序的模块化通过以下哪个选项来完成

A) 变量

B) 函数

C) 程序行

D) 语句

参考答案:B

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

12.以下选项中不属于C言语标识符的是

A) 常量

B) 用户标识符

C) 关键字

D) 预定义标识符

参考答案:A

【解析】常量是指在程序运行过程中其值不能被改变的量,如5、1.0、字符'a'等。C言语的标识符分为3类:关键字、预定义标识符和用户标识符。常量不属于标识符,所以选择A。

13.以下选项中不属于C言语程序运算符的是

A) sizeof

B) <>

C) ( )

D) &&

参考答案:B

【解析】C言语中的不等于符号用"!="表示,没有符号"< >"。所以选择B。

14.假设变量已正确定义并赋值,以下不能构成C语句的选项是

A) B++;

B) A=a+b;

C) a=a+b

D) A?a:b;

参考答案:C

【解析】C言语规定,C语句必须以分号";"结束。C选项中没有结束符号,所以错误。

15.假设有以下程序段

double x=5.16894;

printf("%fn", (int)(x*1000+0.5)/(double)1000 );

则程序段的输出结果是

A) 5.170000

B) 5.175000

C) 5.169000

D) 5.168000

参考答案:C

【解析】%f的输出格式是以带小数点的数学形式输出浮点数。首先计算x*1000,结果为5168.94然后+0.5,结果为5169.44,然后进行强制类型转换,转换成整型为5169,然后除以双精度数据1000,结果也为双精度数据5.169,输出时按照%f的格式输出,所以输出结果为5.169000。

16.设有定义:

double a,b,c;

假设要求通过输入分别给a、b、c输入1、2、3,输入形式如下〔注:此处□代表一个空格)

□□1.0□□2.0□□3.0<回车>

则能进行正确输入的语句是

A) scanf("%lf%lf%lf",a,b,c);

B) scanf("%lf%lf%lf",&a,&b,&c);

C) scanf("%f%f%f",&a,&b,&c);

D) scanf("%5.1lf%5.1lf%5.1lf",&a,&b,&c);

参考答案:B

【解析】scanf函数的一般形式为scanf(格式操纵,变量1地址,变量2地址,…),其中,格式字符串要与数据类型保持一致,所以格式字符串中应为%lf,后面应该为变量地址,所以需要加上符号"&",所以选择B。

17.假设有定义语句

char c='101';

则变量c在内存中占

A) 1个字节

B) 2个字节

C) 3个字节

D) 4个字节

参考答案:A

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

18.假设有以下程序

#include

main()

{ char c1, c2;

c1='C'+'8'-'3'; c2='9'-'0';

printf("%c %dn", c1, c2);

}

则程序的输出结果是

A) H '9'

B) H 9

C) F '9'

D) 表达式不合法输出无定值

参考答案:B

【解析】此题考察字符变量以及printf〔〕函数相关知识,字符变量c1被赋值为'C'+'8'-'3',即ASSCII码的运算,67+54-49=72,即H;字符变量c2被赋值为'9'-'0',但输出时,需要注意的是c1以字符变量输出,而c2是以十进制整型变量输出。因此B选项正确。

19.表示关系式x≤y≤z的C言语表达式的是

A) (x<=y)&&(y<=x)

B) (x<=y)||(y<=x)

C) (x<=y<=z)

D) x<=y)!(y<=x)

参考答案:A

【解析】此题考察关系表达式和逻辑表达式,y大于等于x同时y小于等于z,因此x<=y和y<=z

是逻辑与的关系。因此A选项正确。

20.有以下程序

#include

main()

{ int x=1, y=0,a=0,b=0;

switch( x )

{ case 1: switch ( y )

{ case 0: a++; break;

case 1: b++; break;

}

case 2: a++; b++; break;

}

printf("a=%d,b=%dn",a,b );

}

程序运行后的输出结果是

A) a=1,b=0

B) a=1,b=1

C) a=2,b=1

D) a=2,b=2

参考答案:C

【解析】此题重点考察switch语句,switch语句中case分支后面如果没有break,那么就会顺序执行下面的case,直到遇到break跳出。由于变量a和变量b均赋初值为0,当程序执行完语句case 0: a++; break;后,a的值为1,继续执行语句case 2: a++; b++; break;a的值为2,b的值为1。因此C选项正确。

21.有以下程序

#include

main()

{ int k, j, s;

for( k=2; k<6; k++,k++ )

{ s=1;

for (j=k; j<6; j++ ) s+=j;

}

printf("%dn" , s );

}

程序运行后的输出结果是

A) 6

B) 10

C) 24

D) 40

参考答案:B

【解析】此题重点考察for语句循环嵌套,首先k=2,进行一次循环后,k自增两次,变成4,这时s为1。即当k=4的时候,s=1,j=4,执行内层循环,s=1+4,j自增1后等于5,s=5+5, j再自增1后即为6,跳出内层循环。k自增两次后等于6,不成立,跳出外层循环。最后输出s的值,即为10。因此B选项正确。

22.由以下while构成的循环,循环体执行的次数是

int k=0;

while ( k=1 ) k++;

A) 有语法错,不能执行

B) 一次也不执行

C) 执行一次

D) 无限次

参考答案:D

【解析】此题考察while语句,while语句的语义是:计算表达式的值,当值为真(非0)时, 执行循环体语句。k=1为赋值语句,即k 的值等于1。while(k=1) = while(1) ,是死循环,执行无限次。因此A选项正确。

23.有以下程序

#include

int fun( int a, intB)

{ return a+b; }

main()

{ int x=6, y=7, z=8, r ;

r = fun ( fun(x,y), z-- );

printf (" %dn" , r );

}

程序运行后的输出结果是

A) 21

B) 15

C) 20

D) 31

参考答案:A

【解析】函数fun的功能是返回两个形参的和。调用函数fun(x,y)时,将变量x=6和y=7 的值分别传送变量a和b,并且通过语句return a+b;将13返回给主函数。继续调用函数fun(13,z--),这里z--指将z的值参与运算后,再将z的值减1操作;将13和8分别传送变量a和b,且通过语句return a+b;将21返回给主函数。因此A选项正确。

24.以下选项中函数形参不是指针的是

A) fun( int *a ){…}

B) fun( int a[10] ){…}

C) fun( int &p ){…}

D) fun( int p [ ] ){…}

参考答案:C

【解析】B选项和D选项是将数组作为函数参数;A选项是将指针作为函数参数;因此C选项正确。

25.有以下程序

#include

main()

{ int y=1,x,a[]={2,4,6,8,10},*p;

p=&a[1];

for( x=0; x<3; x++ ) y=y+*( p+x );

printf( "%dn", y );

}

程序运行后的输出结果是

A) 17

B) 19

C) 18

D) 20

参考答案:B

【解析】此题通过语句"p=&a[1]将指针变量p指向了存储单元a[1],即使得p[0]的值为4。然后通过3次for循环,x=0时,*(p+x)=*p=a[1]=4所以y=1+4=5;x=1时,*(p+x)=*(p+1)=a[2]=6,所以y=5+6=11;x=2时,*(p+x)=*(p+2)=a[3]=8,所以y=11+8=19。因此B选项正确。

26.以下程序调用fun函数求数组中最大值所在元素的下标。

#include

void fun( int *s,int n, int *k )

{ int i;

for( i=0 ,*k=i; i

if( s[i] > s[*k] ) __________ ;

}

main()

{ int a[5]={1,6,2,8,0}, k;

fun( a, 5, &k );

printf("%d %dn", k, a[k] );

}

在横线处应填入的内容是

A) *k=i

B) k=i

C) *k=i-s

D) k=i-s

参考答案:A

【解析】fun函数的功能是求数组中最大值所在元素的下标。通过for循环语句,每次将最大的数给*k,即*k=i。因此A选项正确。

27.有以下程序

#include

main()

{ int a[3][4]={ 1,3,5,7,9,11,13,15,17,19,21,23}, (*p)[4]=a,i,j,k=0;

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

for( j=0; j<2; j++ ) k=k+*(*(p+i)+j);

printf("%dn", k );

}

程序运行后的输出结果是

A) 108

B) 68

C) 99

D) 60

参考答案:D

【解析】该题首先给二维数组赋值a[3][4]={{1,3,5,7}{9,11,13,15}{17,19,21,23}};(*p)[4]=a指针p指向二维数组a的首地址,接下来执行for循环,首先 i=0,j=0时k=k+*〔*〔p+0〕+0〕=1〔a[0][0]〕;然后 i=0,j=1时k=k+*〔*〔p+0〕+1〕=4〔a[0][1]〕;然后j=2时,跳出j的循环,执行i的循环i=1,j=0 时k=k+*〔*〔p+1〕+0〕=13(a[1][0]);依次类推一直到i=3时跳出全部循环。循环语句在这里的功能是累加二维数组第1列和第2列的元素,累加结果为60。

28.有以下程序

#include

int funa( int a, intB){ return a+b; }

int funb( int a, intB){ return a-b; }

int sss( int (*t)(), int x, int y ) { return( (*t)(x,y) ); }

main()

{ int x;

x=sss( funa, 9,3 ); x+=sss(funb,8,3 ); printf("%dn", x );

}

程序运行后的输出结果是

A) 24

B) 23

C) 17

D) 22

参考答案:C

【解析】由x=sss( funa, 9,3 ); 可得到x=9+3=12,而后直接传入函数funb,x=x+8-3=12+5=17。因此C选项正确。

29.有以下程序

#include

int fun( int x )

{ int p;

if (x==0 || x==1) return(3);

p= x - fun( x-2 );

return (p);

}

main()

{ printf ("%dn", fun( 9 ) ); }

程序运行后的输出结果是

A) 4

B) 5

C) 9

D) 7

参考答案:D

【解析】此题考查函数的递归调用,执行f(9)后,f(9)=9-(7-(5-(3-f(1)))) =7,所以答案为D选项。

30.以下选项中,能正确进行字符串赋值的是

A) char *s = "ABCDE" ;

B) char s[5] = { 'A', 'B', 'C', 'D', 'E' };

C) char s[4][5] = { "ABCDE" };

D) char *s ; gets( s );

参考答案:A

【解析】此题考查字符数组的初始化,B选项中赋值号右侧是赋值给一个字符串数组,而左边是一个字符数组,所以错误。C选项中字符串包含6个字符,所以不能赋值在左边只能放5个字符的字符串数组中。D选项gets函数中参数需要指定长度。所以选项A正确。

31.有以下程序

#include

void fun( char **p )

{ int i;

for(i=0; i<4; i++ ) printf("%s",p[i]);

}

main()

{ char *s[6]={ "ABCD","EFGH","IJKL","MNOP","QRST","UVWX" } ;

fun(s); printf("n" );

}

程序运行后的输出结果是

A) ABCDEFGHIJKL

B) ABCD

C) AEIM

D) ABCDEFGHIJKLMNOP

参考答案:D

【解析】此题考查字符串数组,s表示指向字符数组的指针,s指向了第一个字符串,s++指向了第二个字符串,所以最后输出结果为D选项。

32.以下fun函数的功能是将形参s所指字符串内容颠倒过来

void fun( char *s )

{ int i, j, k;

for( i=0, j=strlen(s) __________ ; i

{ k=s[i]; s[i]=s[j]; s[j]=k; }

}

在横线处应填入的内容是

A) +1

B) -1

C) +0

D) ,k=0

参考答案:B

【解析】此题考查字符串处理函数strlen,strlen计算一个字符串的长度,包含结尾符,所以此题中j的初始化应该是从最后一个字符开始,所以应该将得到的字符串长度减1,选项B正确。

33.有以下程序

#include

void fun( char *p, int n )

{ char b[6]="abcde"; int i;

for( i=0,p=b; i

}

main()

{ char a[6]="ABCDE";

fun(a, 5); printf("%sn",a);

}

程序运行后的输出结果是

A) abcde

B) ABCDE

C) edcba

D) EDCBA

参考答案:B

【解析】此题考查数组名作为函数参数,执行f函数时,传进去的a指针被重新指向了b,所以原本a数组的地址内容不变,所以输出结果为ABCDE,答案为B选项。

34.有以下程序

#include

fun( int a, int b )

{

int static m=0, i=2;

i=i+m+1;

m=i+a+b;

return m;

}

main()

{

int k=4, m=1, p;

p=fun( k, m);

printf("%d,",p);

p=fun( k, m);

printf("%dn",p);

}

程序运行后的输出结果是

A) 8,17

B) 7,16

C) 8,8

D) 7,17

参考答案:A

【解析】此题考查静态局部变量,此题中先执行fun(4,1)得到返回值为8,此时静态局部变量m为8,i为3,那么再次执行fun(4,1)得到的值为17,所以选项A正确。

35.为了建立如下图的存储结构〔即每个结点含两个域,data是数据域,next是指向结点的指针域〕,则在【 】 处应填入的选项是

Struct link{ char data; 【 】 } node;

A) link next;

B) struct link *next;

C) link *next;

D) struct link next;

参考答案:B

【解析】此题主要考查链表中节点的概念,属于根底知识,其中指针域应该是指向下个节点,所以答案为B。

36.以下结构体说明和变量定义中,正确的选项是

A) typedef struct abc{ int n;double m; }ABC;

ABC x,y;

B) struct abc{ int n;double m };

struct abc x, y;

C) struct ABC{ int n;double m; }

struct ABC x, y;

D) struct abc{ int n;double m; };

abc x, y;

参考答案:A

【解析】此题考查typedef的使用方法,typedef对已存在的类型使用一个新的名字,选项A中ABC为新的类型别名,定义正确。

37.有以下程序

#include

#include

void fun(int *p1,int *p2,int *s )

{ s=( int * )malloc( sizeof(int) );

*s = *p1 + *(p2++);

}

main()

{ int a[2]={1,2 }, b[2]={10,20}, *s=a;

fun( a,b,s ); printf("%dn", *s );

}

程序运行后的输出结果是

A) 11

B) 10

C) 1

D) 2

参考答案:C

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

38.以下程序依次把从终端输入的字符存放到f文件中,用#作为结束输入的标志, 则在横线处应填入的选项是

#include

main()

{ FILE *fp; char ch;

fp=fopen( "fname", "w" );

while( ( ch=getchar()) !='#' ) fputc( __________ );

fclose(fp);

}

A) ch, "fname"

B) fp, ch

C) ch

D) ch, fp

参考答案:D

【解析】此题考查fputc函数,该函数将字符ch写到文件指针fp所指向的文件的当前写指针的位置。函数格式:int fputc (int n, File *fp)答案为D选项。

39.有以下程序

#include

#define N 2

#define M N+1

#define NUM (M+1) * M/2

main()

{ printf("%dn",NUM ); }

程序运行后的输出结果是

A) 4

B) 8

C) 9

D) 6

参考答案:B

【解析】此题考查宏定义,宏定义只是做个简单的替换,执行NUM=(N+1+1)*N+1/2=8,选项B正确。

40.有以下程序

#include

main()

{ int i=0;

i = ~ i;

printf("%dn",i);

}

程序运行后的输出结果是

A) 8

B) 0

C) 1

D) -1

参考答案:D

【解析】此题考查位运算中按位取反,0按位取反就是-1,所以选项D正确。


本文标签: 输出 函数 选项 变量 语句