全国计算机等级考试二级C语言真题库之选择题.docx

上传人:b****5 文档编号:7943223 上传时间:2023-01-27 格式:DOCX 页数:20 大小:28.83KB
下载 相关 举报
全国计算机等级考试二级C语言真题库之选择题.docx_第1页
第1页 / 共20页
全国计算机等级考试二级C语言真题库之选择题.docx_第2页
第2页 / 共20页
全国计算机等级考试二级C语言真题库之选择题.docx_第3页
第3页 / 共20页
全国计算机等级考试二级C语言真题库之选择题.docx_第4页
第4页 / 共20页
全国计算机等级考试二级C语言真题库之选择题.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

全国计算机等级考试二级C语言真题库之选择题.docx

《全国计算机等级考试二级C语言真题库之选择题.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试二级C语言真题库之选择题.docx(20页珍藏版)》请在冰豆网上搜索。

全国计算机等级考试二级C语言真题库之选择题.docx

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

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

1.下列叙述中正确的是(  )。

A)线性表的链式存储结构与顺序存储结构所需要的存储空间是相同的

B)线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构

C)线性表的链式存储结构所需要的存储空间一般要少于顺序存储结构

D)线性表的链式存储结构与顺序存储结构在存储空间的需求上没有可比性

参考答案:

B

【解析】线性链式存储结构中每个结点都由数据域与指针域两部分组成,增加了存储空间,所以一般要多于顺序存储结构。

2.下列叙述中正确的是(  )。

A)栈是一种先进先出的线性表

B)队列是一种后进先出的线性表

C)栈与队列都是非线性结构

D)以上三种说法都不对

参考答案:

D

【解析】栈是一种先进后出的线性表,队列是一种先进先出的线性表,栈与队列都是线性结构。

3.软件测试的目的是(  )。

A)评估软件可靠性

B)发现并改正程序中的错误

C)改正程序中的错误

D)发现程序中的错误

参考答案:

D

【解析】软件测试是为了发现错误而执行程序的过程,测试要以查找错误为中心,而不是为了演示软件的正确功能。

不是为了评估软件或改正错误。

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

A)软件集成测试计划

B)软件详细设计说明书

C)用户手册

D)软件需求规格说明书

参考答案:

D

【解析】需求分析阶段的工作可以概括为:

需求获取、需求分析、编写需求规格说明书、需求评审四个方面。

所以选择D)。

5.软件生命周期是指(  )。

A)软件产品从提出、实现、使用维护到停止使用退役的过程

B)软件从需求分析、设计、实现到测试完成的过程

C)软件的开发过程

D)软件的运行维护过程

参考答案:

A

【解析】通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。

也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期

6.面向对象方法中,继承是指(  )。

A)一组对象所具有的相似性质

B)一个对象具有另一个对象的性质

C)各对象之间的共同性质

D)类之间共享属性和操作的机制

参考答案:

D

【解析】继承是面向对象的方法的一个主要特征,是使用已有的类的定义作为基础建立新类的定义技术。

广义的说,继承是指能够直接获得已有的性质和特征,而不必重复定义它们,所以说继承是指类之间共享属性和操作的机制。

7.层次型、网状型和关系型数据库划分原则是(  )。

A)记录长度

B)文件的大小

C)联系的复杂程度

D)数据之间的联系方式

参考答案:

D

【解析】层次模型的基本结构是树形结构,网状模型是一个不加任何条件限制的无向图,关系模型采用二维表来表示,所以三种数据库的划分原则是数据之间的联系方式。

8.一个工作人员可以使用多台计算机,而一台计算机可被多个人使用,则实体工作人员与实体计算机之间的联系是(  )。

A)一对一

B)一对多

C)多对多

D)多对一

参考答案:

C

【解析】因为一个人可以操作多个计算机,而一台计算机又可以被多个人使用,所以两个实体之间是多对多的关系。

9.数据库设计中反映用户对数据要求的模式是(  )。

A)内模式

B)概念模式

C)外模式

D)设计模式

参考答案:

C

【解析】数据库系统的三级模式是概念模式、外模式和内模式。

概念模式是数据库系统中全局数据逻辑结构的描述,是全体用户公共数据视图。

外模式也称子模式或用户模式,它是用户的数据视图,给出了每个用户的局部数据描述,所以选择C)。

内模式又称物理模式,它给出了数据库物理存储结构与物理存取方法。

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

则由关系R和S得到关系T的操作是(  )。

 

A)自然连接

B)差

C)交

D)并

参考答案:

B

【解析】关系T中的元组是R关系中有而S关系中没有的元组的集合,所以进行的是差的运算。

11.计算机能直接执行的程序是

A)源程序

B)目标程序

C)汇编程序

D)可执行程序

参考答案:

D

【解析】计算机能直接执行的程序是二进制的可执行程序,扩展名为.exe。所以选择D选项。

12.以下叙述中正确的是

A)C语言规定必须用main作为主函数名,程序将从此开始执行

B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行

C)C语言程序将从源程序中第一个函数开始执行

D)main的各种大小写拼写形式都可以作为主函数名,如:

MAIN,Main等

参考答案:

A

【解析】C语言中的主函数唯一为main()函数不能任意指定,所以B选项错误。C语言从主函数main()开始,到主函数main()结束,所以C选项错误。主函数必须写成小写的main,不能混淆大小写,所以D选项错误。

13.以下选项中可用作C程序合法实数的是

A)3.0e0.2

B).1e0

C)E9

D)9.12E

参考答案:

B

【解析】A选项中E后面的指数必须为整数。C语言规定,E之前必须要有数字,所以C选项错误。E后面必须要有数字,且必须为整数,所以D选项错误。

14.下列定义变量的语句中错误的是

A)int_int;

B)doubleint_;

C)charFor;

D)floatUS$;

参考答案:

D

【解析】C语言规定,变量命名必须符合标识符的命名规则。D选项中包含了非法字符"$",所以错误。标识符由字母、数字或下划线组成,且第一个字符必须是大小写英文字母或者下划线,而不能是数字。大写字符与小写字符被认为是两个不同的字符,所以For不是关键字for。

15.表达式:

(int)((double)9/2)-9%2的值是

A)0

B)3

C)4

D)5

参考答案:

B

【解析】先将整型数据9强制转换成double型,然后除以2得到的结果与double型保持一致,即为4.5,然后将4.5强制转换成整型数据4,然后计算9%2的值为1,最后计算4-1的值为3,所以选择B选项。

16.设变量均已正确定义,若要通过

scanf("%d%c%d%c",&a1,&c1,&a2,&c2);

语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。

以下所示的输入形式中正确的是(注:

□代表空格字符)

A)10□X<回车>

20□Y<回车>

B)10□X20□Y<回车>

C)10X<回车>

20Y<回车>

D)10□X□20□Y<回车>

参考答案:

C

【解析】输入数据的格式必须与scanf()的格式控制串完全匹配,如果A、B、C选项中在数字10后面均输入了空格,则会将空格赋给变量c1,而不是把X赋给c1,所以选择C选项。

17.以下选项中不能作为C语言合法常量的是

A)0.1e+6

B)'cd'

C)"\a"

D)'\011'

参考答案:

B

【解析】要想表示字符串常量应该用双引号表示,即"cd",单引号用于表示字符常量,所以B选项中的表示方法错误。

18.if语句的基本形式是:

if(表达式)语句,以下关于"表达式"值的叙述中正确的是

A)必须是逻辑值

B)必须是整数值

C)必须是正数

D)可以是任意合法的数值

参考答案:

D

【解析】if语句中的表达式可以是任意合法的数值,如常量,变量表达式。所以D选项正确。

19.有如下嵌套的if语句

if(a

if(a

elsek=c;

else

if(b

elsek=c;

以下选项中与上述if语句等价的语句是

A)k=(a

((b

a:

b):

((b>c)?

b:

c);

B)k=(a

((a

a:

c):

((b

b:

c);

C)k=(a

a:

b;k=(b

b:

c;

D)k=(a

a:

b;k=(a

a:

c;

参考答案:

B

【解析】题目中嵌套语句的含义是当a

20.有以下程序

#include

main()

{intk=5;

while(--k)printf("%d",k-=3);

printf("\n");

}

执行后的输出结果是

A)1

B)2

C)4

D)死循环

参考答案:

A

【解析】--k先自减在使用,所以第一次判断条件即为while(4),条件为真执行打印k的值k=4-3,结果为1,第二次判断条件即为while(0),条件为假,结束循环,打印回车换行符。所以选择A选项。

21.有以下程序

#include

main()

{inti,j;

for(i=3;i>=1;i--)

{for(j=1;j<=2;j++)printf("%d",i+j);

printf("\n");

}

}

程序的运行结果是

A)

43

25

43

B)

45

34

23

C)

23

34

45

D)

23

34

23

参考答案:

B

【解析】第一次执行外循环,i的值为3,第一次执行内循环j的值为1,j<=2条件成立,打印i+j的值,即4;第二次执行内循环j的值为2,j<=2条件成立,打印i+j的值,即5;再判断条件不成立,打印回车换行符,跳出内循环。第二次执行外循环,i的值为2,内循环的执行同第一次一样,所以打印3和4,打印回车换行,结束内循环。第三次执行外循环i的值为1,同理内循环中打印2和3,打印回车换行符,结束内循环。

22.有以下程序

#include

main()

{intk=5,n=0;

do

{switch(k)

{case1:

case3:

n+=1;k--;break;

default:

n=0;k--;

case2:

case4:

n+=2;k--;break;

}

printf("%d",n);

}while(k>0&&n<5);

}

程序运行后的输出结果是

A)02356

B)0235

C)235

D)2356

参考答案:

C

【解析】k的值为5,逐个对case语句进行匹配,均不匹配,执行default下的语句n=0;k--;在执行case2:

后面的空语句,与case4:

后面的n+=2;k--;执行break语句跳出switch判断,打印n的值,即2。经过第一次循环后,k的值为3,然后进行k>0&&n<5条件判断为真,第二次执行循环体,执行case3:

后面的n+=1;k--;再执行break语句跳出循环,此时打印n的值3,此时k的值为2。第三次执行循环体k的值为2,满足条件,执行case2:

case4:

后面的语句n+=2,k--,跳出循环体。打印n的值5。此时n不小于5了条件k>0&&n<5不成立了,所以结束循环。整个程序的打印结果为235。

23.以下关于return语句的叙述中正确的是

A)一个自定义函数中必须有一条return语句

B)一个自定义函数中可以根据不同情况设置多条return语句

C)定义成void类型的函数中可以有带返回值的return语句

D)没有return语句的自定义函数在执行结束时不能返回到调用处

参考答案:

B

【解析】在函数中允许有多个return语句,但每次调用只能有一个return语句被执行,因此只能返回一个函数值,A选项描述错误。

定义成void类型的函数,不允许从该函数取得返回值,也不允许使用return语句,C选项描述错误。

没有return语句的函数在执行到函数的最后一条语句后会自动返回到调用处,D选项描述错误。

因此B选项正确。

24.已定义以下函数

intfun(int*p)

{return*p;}

fun函数返回值是

A)一个整数

B)不确定的值

C)形参p中存放的值

D)形参p的地址值

参考答案:

A

【解析】返回值为指针变量指向的数据,该数据已被定义为整型。

因此A选项正确。

25.以下程序段完全正确的是

A)int*p;scanf("%d",&p);

B)int*p;scanf("%d",p);

C)intk,*p=&k;scanf("%d",p);

D)intk,*p;*p=&k;scanf("%d",p);

参考答案:

C

【解析】A选项中错在没有对指针进行初始化,无效指针,并且在scanf("%d",&p)中无需再进行取地址操作;B选项中没有对指针进行初始化,无效指针;D选项中语句*p=&k;的左端*p是指针所指内存空间的值,&k是地址,应为p=&k。

因此C选项正确。

26.设有定义

doublea[10],*s=a;

以下能够代表数组元素a[3]的是

A)(*s)[3]

B)*(s+3)

C)*s[3]

D)*s+3

参考答案:

B

【解析】指针的赋值首先基类型必须一致,s二维数组名,是二维数组的首地址,其基类型是一个具有10个元素的字符数组。

p是一个字符指针变量,其基类型是一个字符,k是一个行指针,其基类型是具有3个元素的字符型数组。

所以A、C、D中两项的基类型不一致。

而B选项,s[0]是二维数组s的第一个元素,其代表第一行元素构成的数组的首地址,其相当于一维数组的数组名,其基类型是一个字符类型,和p基类型一致。

因此B选项正确。

27.有以下程序

#include

voidf(int*q)

{inti=0;

for(;i<5;i++)(*q)++;

}

main()

{inta[5]={1,2,3,4,5},i;

f(a);

for(i=0;i<5;i++)printf("%d,",a[i]);

}

程序运行后的输出结果是

A)6,2,3,4,5,

B)2,2,3,4,5,

C)1,2,3,4,5,

D)2,3,4,5,6,

参考答案:

A

【解析】本题考查的是函数的地址调用,将数组名作为数组首地址进行传递,然后取数据元素值进行加1运算。

因此A选项正确。

28.有以下程序

#include

intfun(int(*s)[4],intn,intk)

{intm,i;

m=s[0][k];

for(i=1;i

if(s[i][k]>m)

m=s[i][k];

returnm;

}

main()

{inta[4][4]={{1,2,3,4},

{11,12,13,14},

{21,22,23,24},

{31,32,33,34}};

printf("%d\n",fun(a,4,0));

}

程序的运行结果是

A)4

B)34

C)31

D)32

参考答案:

C

【解析】本题重点考察二维数组名作为实参进行参数传递,在主函数中调用了fun函数,实参为二维数组名a和两个整数4、0,这样对应定义fun函数首部也有三种形式,这里采用了第一种形式,也就是行指针,这样在fun函数对s[i][j]进行操作实际上就是对主函数中的a[i][j]进行操作,再分析fun函数的作用便可知,是求二维数组第0列中最大的那个元素。

因此C选项正确。

29.以下选项中正确的语句组是

A)char*s;s={"BOOK!

"};

B)char*s;s="BOOK!

";

C)chars[10];s="BOOK!

";

D)chars[];s="BOOK!

";

参考答案:

B

【解析】A选项去掉大括号就正确了;C选项和D选项应在定义时赋初值。

因此B选项正确。

30.若有定义语句:

char*s1="OK",*s2="ok";

以下选项中,能够输出"OK"的语句是

A)if(strcmp(s1,s2)!

=0)puts(s2);

B)if(strcmp(s1,s2)!

=0)puts(s1);

C)if(strcmp(s1,s2)==1)puts(s1);

D)if(strcmp(s1,s2)==0)puts(s1);

参考答案:

B

【解析】strcmp(s1,s2)是字符串比较函数,比较规则是两个字符串自左向右逐个字符相比(按照ASCII码值大小),以第一个不相同的字符的大小作为比较结果。

因为'OK'<'ok',所以strcmp(s1,s2)为负值,只有B选项正确。

31.有以下程序

#include

voidfun(char**p)

{

++p;

printf("%s\n",*p);

}

main()

{

char*a[]={"Morning","Afternoon","Evening","Night"};

fun(a);

}

程序的运行结果是

A)Afternoon

B)fternoon

C)Morning

D)orning

参考答案:

A

【解析】本题主函数中定义了一个指针数组a,可以将它看成一个以字符指针为元素的一维数组。

和-般的一维数组名能赋给同类型指针变量一样,该字符指针数组也可以赋给指向字符指针的指针,所以数组名a可以用作函数fun()的实参。

在fun()函数中,++p操作使形参p往后移动一个字符指针的位置,即指针a[1]的位置。

故最后通过printf()函数输出的字符串为"Afternoon"。

因此A选项正确。

32.有以下程序,程序中库函数islower(ch)用以判断ch中的字母是否为小写字母

#include

#include

voidfun(char*p)

{

inti=0;

while(p[i])

{

if(p[i]==''&&islower(p[i-1]))

p[i-1]=p[i-1]-'a'+'A';

i++;

}

}

main()

{

chars1[100]="abcdEFG!

";

fun(s1);

printf("%s\n",s1);

 

}

程序运行后的输出结果是

A)abcdEFg!

B)AbCdEFg!

C)abcdEFG!

D)aBcDEFG!

参考答案:

D

【解析】调用fun函数后,实参数组名s1传给形参指针p,p也指向数组s1。

fun函数的功能是遍历字符数组中的所有字符,如果某一个字符是空格并且前一个字符是小写字母的话,就把前一个字符转换为大写。

程序中语句p[i-1]=p[i-1]-'a'+'A';即p[i-1]=p[i-1]-32,意思是将p[i-1]中的字符转换为大写。

因此D选项正确。

33.有以下程序

#include

intf(intx)

{

inty;

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

y=x*x-f(x-2);

returny;

}

main()

{

intz;

z=f(3);

printf("%d\n",z);

}

程序的运行结果是

 

A)0

B)9

C)6

D)8

参考答案:

C

【解析】主函数中调用f函数,同时将数值3传递给变量x,执行条件与if(x==0||x==1);此时条件不成立,跳过return(3);,直接执行语句y=x*x-f(x-2);这里f(x-2)为函数的递归调用,再次调用f函数,此时x=1,条件语句条件成立,返回3给f

(1),y=3*3-3=6,最后将6返回主函数,并进行输出。

因此C选项正确。

34.有以下程序

#include

intfun(intx[],intn)

{

staticintsum=0,i;

for(i=0;i

returnsum;

}

main()

{

inta[]={1,2,3,4,5},b[]={6,7,8,9},s=0;

s=fun(a,5)+fun(b,4);

printf("%d\n",s);

 

}

程序执行后的输出结果是

A)55

B)50

C)45

D)60

参考答案:

D

【解析】内部静态变量是始终存在的,当函数被调用退出后,内部静态变量会保存数据,再次调用该函数时,以前调用时的数值仍然保留着。

fun(a,5)的值是15,再次调用后sum=15,所以fun(b,4)=45,s=45+15=60。

因此D选项正确。

35.有以下结构体说明、变量定义和赋值语句

structSTD

{charname[10];

intage;

charsex;

}s[5],*ps;

ps=&s[0];

则以下scanf函数调用语句有错误的是

 

A)scanf("%s",s[0].name);

B)scanf("%d",&s[0].age);

C)scanf("%c",&(ps->sex));

D)scanf("%d",ps->age);

参考答案:

D

【解析】本题考查结构体的相关知识,题目中需要输入一个变量,scanf要求参数为指针,而D选项中ps->age为一个变量,不是指针,所以错误。

36.若有以下语句

typedefstructS

{intg;charh;}T;

以下叙述中正确的是

 

A)可用S定义结构体变量

B)可用T定义结构体变量

C)S是struct类型的变量

D)T是structS类型的变量

参考答案:

B

【解析】本题考查typedef重新声明一种结构体类型,那么T为结构体类型,而不是结构体变量,所以B选项正确。

37.有以下程序

#include

#include

structA

{

inta;

charb[10];

doublec;

};

structAf(structAt);

main()

{

structAa={1001,"ZhangDa",1098.0};

a=f(a);

printf("%d,%s,%6.1f\n",a.a,a.b,a.c);

}

structAf(structAt)

{

t.a=1002;

strcpy(t.b,"ChangRong");

t.c=1202.0;

returnt;

}

程序运行后的输出结果是

A)1002,Zhan

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1