全国计算机二级C语言笔试模拟442.docx

上传人:b****0 文档编号:17302921 上传时间:2023-07-23 格式:DOCX 页数:33 大小:55.81KB
下载 相关 举报
全国计算机二级C语言笔试模拟442.docx_第1页
第1页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第2页
第2页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第3页
第3页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第4页
第4页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第5页
第5页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第6页
第6页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第7页
第7页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第8页
第8页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第9页
第9页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第10页
第10页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第11页
第11页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第12页
第12页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第13页
第13页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第14页
第14页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第15页
第15页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第16页
第16页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第17页
第17页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第18页
第18页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第19页
第19页 / 共33页
全国计算机二级C语言笔试模拟442.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

全国计算机二级C语言笔试模拟442.docx

《全国计算机二级C语言笔试模拟442.docx》由会员分享,可在线阅读,更多相关《全国计算机二级C语言笔试模拟442.docx(33页珍藏版)》请在冰点文库上搜索。

全国计算机二级C语言笔试模拟442.docx

全国计算机二级C语言笔试模拟442

二级C语言笔试模拟442

一、选择题

1.以下程序运行后的输出结果是

#include<stdio.h>

main()

{intc=0,k;

 for(k=1;k<3;k++)

  switch(k)

  { default:

c+=k;

    case2:

c++;break;case4:

c+=2;break;

  }

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

}

A.3

B.5

C.7

D.9

答案:

A

[解答]for循环2次:

当循环变量k=1时,从default入口,执行c+=k;,再顺序执行c++;,break跳出switch结构,此时c的值为2;当循环变量k=2时,从case2入口,执行c++;,break跳出switch结构,此时c的值为3;退出循环结构,输出c值3。

2.有以下计算公式:

若程序前面已在命令行中包括math.h文件,不能够正确计算上述公式的程序是______。

A.if(x>=0)y=sqrt(x);

elsey=sqrt(-x);

B.y=sqrt(x);

if(x<0)y=sqrt(-x);

C.if(x>=0)y=sqrt(x);

D.y=sqrt(x>=0?

x:

-x);

答案:

C

[解答]本题考查的重点是分段数学公式的求解。

选项D是正确的,它是用问号表达式“exp1?

exp2:

exp3”来代替ifelse语句,其运算过程是:

先对exp1求值,如果exp1值为真时,对exp2求值并将所求结果作为整个问号表达式的值。

若exp1的值为假时,对exp3求值并将结果作为整个问号表达式的值。

因而程序“y=sqrt(x>=0:

-x)”是先判断x>=0,若为真,则计算结果为sqrt(X),否则计算结果为sqrt(-X),且该函数包含于math.h头文件中。

选项A和B也是对的,只有选项C不能正确计算上述功能。

3.与“for(i=0;i<10;i++)putchar('a'+i);”功能不同的语句是______。

A.for(i=0;i<10;)putchar('a'+(++i));

B.for(i=0;i<10;)putchar('a'+(i++));

C.for(i=0;i<10;putchar('a'+i),i++);

D.for(i=0;i<=9;i++)putchar('a'+i);

答案:

A

4.在顺序表(3,6,8,10,12,15,16,18,21,25,30)中,用二分法查找关键码值11,所需的关键码比铰次数为______。

A.2

B.3

C.4

D.5

答案:

C

[解答]二分法查找是用关键码与线性表的中间元素比较,然后根据比较结果来判断是结束查找,还是在左边或者右边子表按相同的方法继续查找。

本题中,与11比较的关键码分别为15,8,10,12四个。

5.下面程序的输出是。

main()

{intt=1;fun(fun(t));}

fun(inth)

{staticinta[3]={1,2,3};

intk;

for(k=0;k<3;k++)a[k]+=a[k]-h;

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

printf("\n");

return(a[h]);}

A.1,2,3,

1,5,9,

B.1,3,5,

1,3,5,

C.1,3,5,

0,4,8,

D.1,3,5,

-1,3,7,

答案:

D

[解答]本题考查双重函数调用及for循环使用,fun函数中第一个for循环语句的作用是给数组a赋值。

当第一次调用fun函数时,把实参1传给形参,输出a数组的元素为1,3,5;第二次调用fun函数时,由于数组a为静态局部变量,故输出a数组的元素为-1,3,7。

6.若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元,则应填入()

  int*p 

  p=_______malloc(sizeof(int));

A.int

B.int

C.(*int)

D.(into*)

答案:

D

7.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是。

A.a,point,*&a

B.&*a,&a,*point

C.*&point,*point,&a

D.&a,&*point,point

答案:

D

[解答]“&”是求地址运算符,“*”是指针变量说明符,本题只有选项D)中的各项均代表地址,其中&*point等价于point。

8.C语言库函数fgets(str,n,fp)的功能是______。

A.从fp指向的文件中读取长度n的字符串存入str旨向的内存

B.从fp指向的文件中读取长度不超过n-1的字符串存入str指向的内存

C.从fb指向的文件中读取n个字符串存入str指向的内存

D.从str读取至多n个字符到文fp

答案:

B

[解答]fgets函数的作用是从指定的文件读入—个字符串。

fgets(str,n,fp);中的n为要求得到的字符的个数,但只从中指向的文件输入n-1个字符,然后在最后加—个'\0'字符,因此得到的字符串共有n个字符。

9.若有定义int*p[3];,则以下叙述中正确的是______。

A.定义了一个基类型为int的指针变量p,该变量有三个指针

B.定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针

C.定义了一个名为*p的整型数组,该数组含有三个int类型元素

D.定义了一个可指向二维数组的指针变量p,所指一维数组应具有三个int类型元素

答案:

B

[解答]由于运算符[]优先级比*高,int*p[3];相当于int*(p[3]);,表示数组p的三个元素都是指针变量,且每个元素都是基类型为int的指针。

10.下列叙述中错误的是______。

A.一个C语言程序只能实现一种算法

B.C程序可以由多个程序文件组成

C.C程序可以由一个或多个函数组成

D.一个C函数可以单独作为一个C程序文件存在

答案:

A

[解答]一个C语言程序可以实现多种算法。

C程序可包含一个或多个函数,并可由多个程序文件组成。

11.在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是()。

A.概要设计

B.详细设计

C.可行性分析

D.需求分析

答案:

D

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

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

软件生命周期的主要活动阶段为:

①可行性研究和计划制定。

确定待开发软件系统的开发目标和总的要求,给出它的功能、性能、可靠性以及接口等方面的可能方案,制定完成开发任务的实施计划。

②需求分析。

对待开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能。

编写软件规格说明书及初步的用户手册,提交评审。

③软件设计。

系统设计人员和程序设计人员应该在反复理解软件需求的基础上,给出软件的结构、模块的划分、功能的分配以及处理流程。

④软件实现。

把软件设计转换成计算机可以接受的程序代码。

即完成源程序的编码,编写用户手册、操作手册等面向用户的文档,编写单元测试计划。

⑤软件测试。

在设计测试用例的基础上,检验软件的各个组成部分。

编写测试分析报告。

⑥运行和维护。

将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。

12.请读程序:

#include<stdio.h>

main()

{

inta;floatb,c;

scanf("%2d%3f%4f",&a,&b,&c);

printf("\na=%d,b=%f,c=%f\n",a,b,c);

}

若运行时从键盘上输入9876543210,↓,则上面程序的输出络果是_______。

A.a=98,b=765,c=4321

B.a=10,b=432,c=8765

C.a=98,b=765.000000,c=4321.000000

D.a=98,b=765.0,c=4321.0

答案:

C

[解答]scanf()把用户从键盘录入的数字第1、2位存入整型变量a;把第3、4、5位存入单精度实型变量b,把第6、7、8、9位存入单精度实型变量c,用户录入的第10位被scanf()遗弃。

这时变量a、b、c的值分别为:

98、765.000000、4321.0000000。

13.有以下程序

main()

{inta=0,i;

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

{switch(i)

{case0

case3:

a+=2;

case1;

case2;a+=3;

default,a+=5;

}

}

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

}

A.31

B.13

C.10

D.20

答案:

A

14.定义如下变量和数组:

inti;

intx[3][3]={1,2,3,4,5,6,7,8,9};

则下面语句的输出结果是

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

printf("%d",x[2-1][1]);

A.951

B.741

C.753

D.963

答案:

C

[解答]本题考查二维数组元素的引用方法。

本题通过二维数组的行、列下标来定位元素的位置,从而实现元素的引用。

15.将E-R图转换到关系模式时,实体与联系都可以表示成()。

A.属性

B.关系

C.键

D.域

答案:

B

[解答]把概念模型转换成关系数据模型就是把E-R图转换成一组关系模式,每一个实体型转换为一个关系模式,每个联系分别转换为关系模式。

16.将E-R图转换到关系模式时,实体与联系都可以表示成______。

A.属性

B.关系

C.键

D.域

答案:

B

[解答]关系是由若干个不同的元组所组成,因此关系可视为元组的集合,将E-R图转换到关系模式时,实体与联系都可以表示成关系。

17.若有定义:

inta[2][3];,以下选项中对a数组元素正确引用的是。

A.a[2][1]

B.a[2][3]

C.a[0][3]

D.a[1>2][!

1]

答案:

D

[解答]C语言中数组下标是从0开始的,所以二维数组a[2][3]的第一维下标取值为0、1;第二维的下标取值为0、1、2,因而选项A)、B)、C)都是错误的,选项D)表示数组元素a[0][0]。

18.阅读下列程序,则执行后的结果为

#include"stdio.h"

main()

{intc[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56};

printf("%x,%x\n",c[2][2],*(*(c+1)+1));}

A.3e,6

B.62,5

C.56,5

D.3E,6

答案:

A

[解答]数组c[][4]表示一个4行4列数组,c[2][2]表示第3行第3列上的元素62,*(*(c+1)+1))表示第2行第2列上的元素6,通过十六进制输出为3e,6。

19.下列说法不正确的是。

A.C语言程序是以函数为基本单位的,整个程序由函数组成

B.C语言程序的一条语句可以写在不同的行上

C.C语言程序的注释行对程序的运行功能不起任何作用,所以注释应该尽可能少写

D.C语言程序的每个语句都以分号结束

答案:

C

[解答]本题涉及C语言的3个基本知识点:

①C语言的源程序是由函数构成的,函数是其基本单位,每一个函数完成相对独立的功能,其中只能包括一个主函数;②C语言规定每个语句以分号结束,其书写格式是自由的,一条语句可以写在不同的行上,或者一行也可以写多条语句;⑨注释行虽然对程序的运行不起作用,但是它可以方便程序员阅读,提高程序的可读性和可移植性,所以书写注释行还是很有必要的。

20.开发软件时对提高开发人员工作效率至关重要的是

A.操作系统的资源管理功能

B.先进的软件开发工具和环境

C.程序人员的数量

D.计算机的并行处理能力

答案:

B

[解答]软件工程鼓励研制和采用各种先进的软件开发方法、工具和环境。

工具和环境的使用又进一步提高了软件的开发效率、维护效率和软件质量。

21.有以下程序}

  structs

  {intx,y;} data[2]={10,100,20,200};}

  main( )}

  {structs*p=data;}

   printf("%d\n",++(p->x));}

 程序运行后的输出结果是

A)10

B)11

C)20

D)21

答案:

B

[解答]data数组中共有两个元素,指针变量p所指的单元为数组的第一个存储单元,该单元中存储了数组中的第一个元素。

故p->x值为10,++(p->x)值为11。

22.先用以下语句定义字符型变量:

charc;

然后要将字符a赋给变量c,则下列语句中正确的是______。

A.c='a';

B.c="a";

C.c="97";

D.c='97';

答案:

A

23.以下选项中非法的表达式是。

A.0<=x<100

B.i=j==0

C.(char)(65+3)

D.x+1=x+1

答案:

D

[解答]选项A)在C语言中是一个合法的关系表达式,但它并不代表数学式o<=x<100。

计算0<=x<100时,从左到右结合,先计算0<=x,其结果只能是0或1,然后再比较0<100或1<100。

根据运算符的优先级,选项B)先判断j==0是否成立,其结果只能是0或1,然后再将0或1赋给i。

选项C)中,(char)(65+3)为类型强制转换,将整数型数据转换为字符型。

选项D)是将一个数据赋给一个表达式,等号左边不合要求,所以错误。

24.若有运算符:

>、*=、<<、%、sizeof,则它们按优先级(由低至高)的正确排列次序为。

A.*=<<>%sizeof

B.<<*=>%sizeof

C.%=><<sizeof%

D.*=><<%sizeof

答案:

D

[解答]本题主要考查算术运算的优先级。

顺序如下;

*=、>、<<、%、sizeof的优先级依次递增。

25.为了避免嵌套的if-else的二义性,C语言规定:

else与______配对。

A.缩排位置相同的if

B.其之前最近的if

C.其之后最近的if

D.同一行上的if

答案:

B

[解答]在if语句中又包含一个或多个if语句称为if语句的嵌套。

应当注意if与else的配对关系,在C语言中,从最内层开始,else总是与它上面最近的(未曾配对的)if配对。

26.有以下程序

main()

{charch[]="uvwxyz",*pc;

pc=ch;printf("%c\n",*(pc+5));

}

程序运行后的输出结果是

A.z

B.0

C.元素ch[5]的地址

D.字符y的地址

答案:

A

[解答]将字符串的地址赋值给字符指针变量后,指针就指向了该字符串的第一个字符,即“*p='u'”,所以*(p+5)指向的字符是‘z’。

27.若指针p已正确定义,要使p指向两个连续的整型动态存储单元,则正确的语句是()。

A.p=2*(int*)malloc(sixeof(int))

B.p=(int*)calloc(2*sixeof(int))

C.p=(int*)malloc(2*sizeof(int))

D.p=2*(int*)calloc(sizeof(int))

答案:

C

[解答]malloc函数的调用形式:

malloc(size)。

malloc函数用来分配size个字节的存储区,返回一个指向存储区首地址基类型为void的地址,可以利用强制类型转换将其换成所需的类型,这里需转换为整型(int*)。

若不能确定数据类型所占的字节数,可使用sizeof运算符来求得,这里要求两个连续的整型动态存储单元即2*sizeof(int)。

4个选项中只有C符合题意。

28.若输入12345、abc,程序的输出结果为______。

main()

{inta;

charch;

scanf("%3d,%3c",&a,&ch);

printf("%d,%c",a,ch);

}

A.123,abc

B.123,4

C.123,a

D.12345,abc

答案:

B

[解答]指定输入数据所占列数之后,系统自动按它截取所需数据,无须分界符。

程序中指定整型变量a占3列,输入12345、abc后,系统自动将数据前3列123赋给变量a,而剩余的数据则根据具体情况赋给其他变量或作为多余数据处理。

因程序中还需对字符变量ch输入数据,虽然指定输入3列字符,但字符型数据只能有一个字符,因此把剩余的“45、abc”中第1个数据4赋给变量ch,故正确答案为选项B。

29.有以下程序:

#include<stdio.h>

main()

{

FILE*fp;

inti,k,n;

fp=fopen("data.dar","w+");

for(i=1;i<6;i++)

{

fprintf(fp,"%d",i);

if(i%3==0)

fprintf(fp,"\n");

}

rewind(fp);

fscanf(fp,"%d%d",&k,&n);printf("%d%d\n",k,n);

fclose(fp);

}

程序运行后的输出结果是()。

A.00

B.12345

C.14

D.12

答案:

D

[解答]程序首先定义了一个文件指针fp,并使用fopen()函数以“w+”方式新建一个可读写文件“data.dat”。

然后使用一个for循环,循环变量i从1递增到5,在循环体中每次写入循环变量i的值和4个空格,当i能被3整除的时候写入一个换行符。

所以循环结束时,文件中的内容应该为:

123

45

接下来程序使用rewind()函数,将文件的读写指针调回起始位置。

并调用fscanf()函数从文件中读取两个整数到变量k和n。

所以最终输出应该为:

12。

故本题选D。

30.下面是对宏定义的描述,不正确的是______。

A.宏不存在类型问题,宏名无类型,它的参数也无类型

B.宏替换不占用运行时间

C.宏替换时先求出实参表达式的值,然后代入形参运算求值

D.宏替换只不过是字符替代而已

答案:

C

[解答]宏替换实质上就是字符替代,它不可能进行计算,故C错误。

带参数的宏与函数相比,宏在程序编译之前已经将代码替换到程序内,执行时不会产生类似于函数调用的问题,可以说不占用运行时间。

31.有以下程序:

main()

{intc=35;printf("%d\n",c&c);}

程序运行后的输出结果是()。

A.0

B.70

C.35

D.1

答案:

C

[解答]本题考查的是对位与运算符&的理解。

位与运算是将两个运算分量看做两个二进制数,然后对两个二进制数的相应位进行与运算,若同时为1则结果相应位为1,否则结果相应位为0。

因此,当两个运算分量相同时,它们的相应位肯定也相同,即不同为1就同为0。

所以得到的结果和运算分量也相同。

所以,4个选项中选项C)符合题意。

32.若有定义语句:

intx=10;则表达式x-=x+x的值为

A.-20

B.-10

C.0

D.10

答案:

B

[解答]x-=x+x可化为:

x=x-(x+x),由于x初始值为10,所以计算后,x=10-20=-10,因此选B)。

33.设有intx=11:

表达式(x++*1/3)的值是()。

A.3

B.4

C.11

D.12

答案:

A

[解答]自增运算的优先级高于其他双目算术运算符,同级算术运算符结合性为自左向右。

所以表达式(x++*1/3)等价于(x++)*1/3=11*1/3=3。

34.若有以下程序:

#include<stdio.h>

inta[]={2,4,6,8};

main()

{inti;

int*p=a;

for(i=0;i<4;i++)a[i]=*p;

printf("%d\n",a[2]);

}

上面程序的输出结果是。

A.6

B.8

C.4

D.2

答案:

D

[解答]在C语言中,数组元素的下标是从0开始的。

for循环语句中,指针变量p始终指向数组a的首地址,因而执行循环赋值语句后数组各元素的值均变为2。

35.当a=1、b=2、c=3、d=4时,执行下面程序段后,x的值是。

if(a<b)

if(c<d)x=1;

else

if(a<c)

if(b<d)x=2:

elsex=3:

elsex=6:

elsex=7:

A.1

B.6

C.3

D.2

答案:

A

[解答]本题考查的是if-else语句。

第一个if语句,先判断条件,发现a<b条件成立,执行下面的语句。

第二个if语句,先判断条件,发现c<d条件成立,执行下面的语句x=1。

36.采用链接方式存储线性表的优点是______。

A.便于随机存取

B.花费的存储空间较顺序存储少

C.便于插入和删除操作

D.数据元素的物理顺序和逻辑顺序相同

答案:

C

37.现有如下定义语句

int*p,s[20],i;

p=s;

表示数组元素s[i]的表达式不正确的是

A.*(s+i)

B.*(p+i)

C.*(s=s+i)

D.*(p=p+i)

答案:

C

[解答]当p指向s数组的首地址时,表示数组元素s[i]的表达式应当有:

①s[i],②,(s+i),③*(p+i),④p[i]四种形式。

选项C)错误的原因是,数组的地址是不可变的,指针的地址是可以变的。

38.有以下程序

#in

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2