2018年计算机二级C语言模拟题1_第1页
2018年计算机二级C语言模拟题1_第2页
2018年计算机二级C语言模拟题1_第3页
2018年计算机二级C语言模拟题1_第4页
2018年计算机二级C语言模拟题1_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2018年计算机二级C语言模拟题1

(总分:100.00,做题时间:120分钟)

一、选择题

(每题1分,共40分)

(总题数:40,分数:40.00)

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

(分数;1.00)

A.图元关系

B.数据流

C.控制流J

D.调用关系

解析:【解析】在数据流图中,用标有名字的带箭头线段表示数据流。在程序流程图中,用标有名字的带

箭头线段表示控制流,因此本题答案为C).

2.结构化程序设计的基本原则不包括().

(分数:1.00)

A.多态性V

B.自顶向下

C.模块化

D.逐步求精

解析:结构化程序设计的思想包括:自顶向下、逐步求精、模块化、限制使用goto语句,多态性是面向

对象的程序设计的思想,因此本题答案为A)o

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

(分数:1.00)

A.低内聚低耦合

B.高内聚低耦合J

C.低内聚高耦合

D.高内聚高耦合

解析:软件设计中,模块划分应遵循的准则是高内聚低耦合、模块大小规模适当、模块的依赖关系适当

等。模块的划分应遵循一定的准则,以保证模块划分合理,并进•步保证以此为依据开发出的软件系统可

靠性高,易于理解和维护。模块之间的耦合应尽可能地低,模块的内聚应尽可能地高,因此本题答案为

B).

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

(分数:1.00)

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

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

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

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

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

程序的运行时间是有限的,因此本题答案为A)。

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

(分数:1.00)

A.可行性分析报告

B.软件需求规格说明书J

C.概要设计说明书

D.集成测试计划

解析:A)错误,可行性分析阶段产生可行性分析报告。C)错误,总体设计阶段产生概要设计说明书。D)

错误,集成测试计划是在概要设计阶段编写的文档。B)正确,需求规格说明书是需求分析阶段产生的主要

文档,是后续工作如设计、编码等需要的重要参考文档。

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

(分数:1.00)

A.快速排序

B.冒泡排序

C.直接插入排序

D.堆排序V

解析:快速排序、冒泡排序和直接插入排序在最坏情况下,比较次数都是n(n-l)/2,堆排序在最坏情况下

的比较次数最少,是O(logJ),因此本题答案为D)。

7.下列关于栈的叙述正确的是()。

(分数:1.00)

A.栈按“先进先出”组织数据

B.栈按“先进后出”组织数据V

C.只能在栈底插人数据

D.不能删除数据

解析:栈是只允许在同一端进行插入和删除运算的线性表,按“先进后出”组织数据,因此本题答案为

B).

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

(分数:1.00)

A.需求分析阶段

B.概念设计阶段

C.逻辑设计阶段V

D.物理设计阶段

解析:将E-R图转换成关系数据模型是把图形分析出来的联系反映到数据库中,即设计出表,因此属于逻

辑设计阶段,答案为C)。

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

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

(分数:1.00)

A.并

B.自然连接

C.笛卡儿积

D.交J

解析:自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在

结果中把重复的属性列去掉,因此B)错误。笛卡儿积是用R集合中的元素为第一元素,S集合中的元素为

第二元素构成的有序对,因此C)错误。根据关系T可以很明显地看出是从关系R与关系S中取得相同的

关系组,所以使用的是交运算,选择D)。

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

(分数:1.00)

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

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

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

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

解析:一个C程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个C语言程序可以实现

多种算法。

11.设有表示学生选课的三张表,学生S(学号,姓名,性别,年龄,身份证号),课程C(课号,课

名),选课SC(学号,课号,成绩),则表SC的关键字(键或码)为()。

(分数:1.00)

A.课号,成绩

B.学号,成绩

C.学号,课号V

D.学号,姓名,成绩

解析:学号是学生表S的主键,课号是课程表C的主键,因此选课表SC的关键字就应该是与前两个表能

够直接联系且能唯一定义的学号和课号,故本题答案为0。

12.以下选项中,能用作数据常量的是()。

(分数:1.00)

A.115LJ

B.0118

C.1.5el.5

D.0115

解析:选项中U5L表示115是长整型数据,合法。B)选项是八进制常量的表示方法,但是在八进制中不

能含有数字8,因此B)选项错误.C)选项中e后面应该是整数,不能是小数(1.5),因此。选项错误。D)

选项中八进制常量应该是以数字“0”开始,而不是以字母飞”开始。故本题答案为A)。

13.按照C语言规定的用户标识符命名规则,不能出现在标识符中的是()。

(分数:1.00)

A.下画线

B.大写字母

C.数字字符

D.连接符V

解析:C语言中标识符由字母、下画线或数字组成,且开头必须是字母或下画线。因此D)选项中的连接符

不合法。

14.设变量已正确定义并赋值,以下正确的表达式是()。

(分数:1.00)

A.x=y+z+5,++yJ

B.int(15.8%5)

C.x=y*5=x+z

D.x=25%5.0

解析:B)与D)选项中取模运算符%的左右两个操作数均应为整数,因此B)、D)选项错误。C)选项中不能

将x+z的值赋给表达式y*5,因此C)选项错误。故本题答案为A)。

15.设有定义“intx=2;",以下表达式中,值不为6的是()。

(分数:1.00)

A.x++,2*x

B.2*x,x+=2J

C.x*=(l+x)

D.x*=x+l

解析:选项B)中,2**对乂的值没有影响,x仍为2,"x+=2”执行后,表达式值为4。故本题答案为B)。

16.有以下程序

#include

main()

{intx,y,z;

x=y=l;

z=x++,y++,++y;

printf("%d,%d,%d\n”,x,y,z);

)

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

(分数:1.00)

A.2,3,1V

B.2,3,2

C.2,3,3

D.2,2,1

解析:对于表达式“Z=x++,y++,++y;",因为赋值运算符的优先级高于逗号运算符的优先级,所以可以

将上式改成“(z=x++),(y++),(++y)”。然后从左向右先计算表达式z=x++,因为x++先使用后自增,所

以z的值为1,x的值为2。再计算逗号表达式第二个表达式y++,此时y的值为1,y++的值为2。最后计

算第三个表达式++y,y的值为3,故本题答案为A)。

17.有以下程序^include

main()

{charcl,c2;

cl=,A,+'8,4,;

c2='A'+'8'5';

printf(*%c,%d\n*,cl,c2);

}

已知字母A的ASCII码为65,程序运行后的输出结果是()。

(分数:1.00)

A.E,D

B.D,69

C.E,68J

D.输出无定值

解析:本题中字符变量cl是字符'A'的ASCH码加上4,即69所对应的字符'E'。字符变量c2是字符‘A'

的ASCII码加上3,即68所对应的字符'D、但是打印输出时,口以%<:的格式输出,因此是E,c2以版1

的格式输出,因此是68。故本题答案为C)。

18.有以下程序

Sinclude

main()

{intx=l,y=0;

if(!x)y++;

elseif(x==0)

if(x)y+=2;

elsey+=3;

printf(“%d\n",y);

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

(分数:1.00)

A.3

B.2

C.1

D.OJ

解析:在ifelse语句中else总是与离它最近的if配对。本题目中x为1,因此“!x”为0,所以执行

elseif语句中的内容,判断“x==0”是否成立,因为x为1,所以条件不成立,因此elseif内部的

“if...else”语句不再执行,所以y的值还是初始值0。

19.若有定义“intx,y;”并已正确给变量赋值,则以下选项中与表达式“(x-y)?(x++):(y++)”中的

条件表达式(x-y)等价的是()。

(分数:1.00)

A.(x-yO)V

B.(x-y<0)

C.(x-y>0)

D.(x-y==O)

解析:条件表达式“x二表达式1?表达式2:表达式3”的含义是:先求解表达式1,若其值为非0(真),则

求解表达式2,将表达式2的值赋给x;若表达式1的值为0(假),则求解表达式3,将表达式3的值赋给

X。在本题中与表达式(x-y)等价的是“(x-y〈O||x-y>0)”,A)选项正确。

20.有以下程序

#include<stdio.h>

main()

{inty=9;

for(;y>0;y­)

if(y%3==0)printf("%d",-y);

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

(分数:LOO)

A.852J

B.963

C.741

D.875421

解析:第一次执行for循环,y的值为9,y%3的值为0,满足条件打印,所以执行“一y”语句,即先减1

后打印,因此打印8;第二次执行for循环,y的值为7,y%3的值为1,不执行打印语句;第三次执行for

循环,y的值为6,巡3的值为0,满足条件打印,所以执行“一y”语句,即先减1后打印,因此打印5;第

四次执行for循环,y的值为4,不满足if条件,不执行打印语句;第五次执行for循环,y的值为3,满

足if条件,打印输出2;第六次执行for循环,y的值为1,不满足条件,不执行打印语句。故本题答案

为A)。

21.若有定义“floatx=l.5;inta=l,b=3,c=2;w,则正确的switch语句是()。

(分数:1.00)

A.

B.

C.

D.

解析:B)选项的"switch((int)x);”语句中不应该有最后的分号。"switch(exprl)”中的exprl不能用

浮点类型或long类型,也不能是一个字符串,因此C)错误。case后面只能是常量表达式,因此D)错

误。

22.有以下程序

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

(分数:1.00)

A.m=4

B.m=2

C.m=6J

D.m=5

解析:第一次外循环i的值为1,第一次内循环j的值为3,不满足条件,则执行〃m*二i*j〃,即m的值为3;

第二次j的值为2,不满足条件,则执行m*二i*j,即m的值为6;第三次j的值为1,不满足条件,则执行

即m的值仍为6。第二次外循环i的值为2,j的值为3,满足条件,执行break语句,跳出循环。

故本题答案为Oo

23.有以下程序

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

(分数:1.00)

A.6J

B.3

C.8

D.12

解析:本题中第一次调用为“fun(8,fun(5,6))”,因为“fun(5,6)”返回值为5,所以第二次调用为

“fun(8,5)=6”,因此选择A)。

24.有以下程序

则以下函数调用语句错误的是()。

(分数:1.00)

A.k=f(a,b);

B.k=add(a,b);

C.k=(*f)(a,b);

D.k=*f(a,b);J

解析:D)选项中“*f(a,b)”表示调用后返回一个指向整型数据的地址指针,即该函数的返回值为指针类

型,因此不能将其赋值给整型变量匕

25.有以下程序

该程序试图通过指针P为变量n读入数据并输出,但程序有多处错误,以下语句正确的是()。

(分数:1.00)

A.intn,*p=NULL;J

B.*p=&n;

C.scanf(w%dw,&p)

D.printf("%d\n",p);

解析:选项B)的正确写法应为“P4n;",选项C)的正确写法应为“scanf(〃%d〃,p);",选项D)的正确

写法应为“print为〃%d\n",*p);"。故本题答案为A)。

26.下列定义数组的语句中,正确的是()。

(分数:1.00)

D.intx[];

解析:数组说明的一般形式为:类型说明符数组名[常量表达式]。A)中N是变量,不能用变量定义数组长

度。C)选项中数组长度是非法的一串数字,定义数组时必须为其指明长度。D)选项中数组长度为空,因此

非法。故本题答案为B)。

27.以下语句中存在语法错误的是()。

(分数:1.00)

A.charss[6][20];ss[l]="right?”;V

B.charss[][20]={"right?”};

C.char*ss[6];ss[1]="right?”;

D.char*ss[]={"right?”};

解析:数组定义后,不能对数组整体赋值,SS是二维数组,因为ss[l]是一维字符数组,即字符串,字符

串赋值可以使用“StrcP可SS使]「right");”的形式,而选项A)中对二维数组中的第“1”维(相当于一

个一维数组)赋值,是不可以的。选项B)和D)是在定义时对数组同时进行初始化,这是可以的。选项C)

中,将字符串在内存中的首地址赋给指针数组的一个元素,这是可以的。故本题答案为A)。

28.有以下程序

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

(分数:1.00)

A.3040J

B.2050

C.3344

D.0304

解析:第一次循环i为0,i%2为0,执行“switch(a[0]%2)”中的case。语句后内容即a[0]++,a[0]的值

变成3;第二次循环i的值为1,i%2为1,执行"easel:a[i]=0;,>后a[l]的值变成0;第三次循环i的值为

2,设2为0,执行“switch(a[2]%2)”中的“easel:a[2]一;"a[2]的值变成4;第四次循环i的值为3,i%2

为1,执行“casel:a[i]=0;",因此a[3]的值变成0。故本题答案为A)。

29.有以下程序

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

(分数:1.00)

A.3

B.4J

C.1

D.9

解析:每次内循环只循环一次就结束,第一次外循环时“t=t+b[0][b[0][0]]=l+b[0][0]=l+0=l;",第二

次外循环时“t=t+b[l]b[l][l]]=l+b[l][11=1+1=2;",第三次外循环时

“l=t+b[2][b[2][2]]=2+b[2][2]=2+2=4”。故本题答案为B)。

30.以下不能将s所指字符串正确复制到t所指存储空间的是()。

(分数:1.00)

A.while(*t=*s){t++;s++;}

B.for(i=0;t[i]=s[i];i++);

C.do{*t++=*s++;}while(*s);-J

D.for(i=0,j=0;t[i++]=s[j++];);

解析:"do{*t++=*s++;}while(*s);”语句中,因为当"*s='\0'"时,"while(*s)”跳出循环,这样字

符串结束标志‘\。'没有复制给*t,造成了*t不完整。注意,*t++=*s++是先执行t=*s,然后才进行

t=t+l,s=s+l。而选项B)、A)、D)都能将'\0',复制过去。

31.有以下程序

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

(分数:1.00)

A.Ibc,a23J

B.abc,123

C.123,abc

D.321,cba

解析:字符串是一个特殊的数组,按照数组的规则,si应该指向的是数组的首地址,即“abc”的第一个

字符的地址。S2指向的是“123”的第一个字符的地址。调用swap函数之后交换的是两个字符串的第一

个字符'a'和'1'的内容,因此打印输出为A)。

32.有以下函数

函数的功能是()。

(分数:1.00)

A.统计x和y所指字符串中最前面连续相同的字符个数4

B.查找x和y所指字符串中是否有‘\0'

C.将y所指字符串赋给x所指存储空间

D.统计x和y所指字符串中相同的字符个数

解析:本题中由循环条件可知,当遇到'\0'或"x与y所指的字符的值不相等”中的一个条件时就结束

循环,因此本题函数的功能是统计x和y所指字符串中最前面连续相同的字符个数。

33.有以下程序

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

(分数:1.00)

A.30

B.10

C.0

D.64,

解析:本题口中静态局部变量X,在静态存储区内分配存储单元,在程序整个运行期间都不释放。因此第

一次循环s的值为2;第二次循环中,返回的x的值为4,因此S的值为8;第三次循环,返回的x的值为8,

因此S的值为64。

34.在一个C源程序文件中所定义的全局变量,其作用域为()。

(分数:1.00)

A.所在文件的全部范围

B.所在程序的全部范围

C.所在函数的全部范围

D.由具体定义位置和extern说明来决定范围V

解析:全局变量的作用域是从声明处到文件的结束,因此选择D)。

35.有以下程序

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

(分数;1.00)

A.21V

B.11

C.20

D.10

解析:声明data是结构S的数组。初始化时

Mdata[0].a=10;data[0].b=100;data[l].a=20;data[l].b=200w.主函数中p=data[l],即

**p.a=data[l].a;p.b=data[l].b;">执行语句“printf(*%d\n”>++(p.A));"打印输出时P.a先增1

再打印。即p.a=data[l],a=20,先增1等于21,因此程序运行结果是21。

36.以下叙述中错误的是()。

(分数:1.00)

A.用typedef定义新的类型名后,原有类型名仍有效

B.可以用typedef将己存在的类型用一个新的名字来代表

C.可以通过typedef增加新的类型J

D.用typedef可以为各种类型起别名,但不能为变量起别名

解析:关键字typedef的作用只是将C语言中已有的数据类型作置换,并不是增加新的类型,因此C)错

误。

37.有以下程序

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

(分数:1.00)

A.31.5

B.程序有错无输出结果J

C.7.5

D.14.0

解析:宏定义不是C语句,末尾不需要有分号。因此语句“printf魏4.lf\n",S(a+b));”展开后为

“printf("4.3.5;*a+b*a+b;);",所以程序会出现语法错误。

38.有以下程序

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

(分数:1.00)

A.4J

B.3

C.5

D.6

解析:“&”按位与,如果两个相应的二进制位都为1,则该位的结果值为1,否则为0。“I”按位或,

即两个相应的二进制位中只要有一个为1,该位的结果值为1。2的二进制为00000010,4的二进制为

00000100,因此做或运算结果为00000110,该数与5即00000101做与运算,结果为00000100,即4,选项

A)正确。

39.有以下程序

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

(分数:1.00)

A.1,1,3

B.2,2,3

C.1,2,3

D.3,3,3J

解析:malloc函数动态分配一个整型的内存空间,然后把函数返回的地址用(int*)强制类型转换为整型

指针,再把它赋给a,b,c,即让指针变量a,b,c都指向刚申请的内存空间。因此只有最后一个赋值语

句*c=3的值保留在了该空间内,因为a,b,c三个指针变量均指向该空间,所以打印该空间内的数值均

为3,选项D)正确。

40.以下叙述中正确的是()。

(分数:1.00)

A.当对文件的读(写)操作完成之后,必须将它关闭,否则可能导致数据丢失,

B.打开一个已存在的文件并进行了写操作后,原有文件中的全部数据必定被覆盖

C.在一个程序中当对文件进行了写操作后,必须先关闭该文件然后再打开,才能读到第1个数据

D.C语言中的文件是流式文件,因此只能顺序存取数据

解析:B)选项中打开一个已存在的文件并进行了写操作后,原有文件中的全部数据不一定被覆盖,也可以

对源文件进行追加操作等。C)选项中在一个程序中当对文件进行了写操作后,不用先关闭该文件然后再打

开,才能读到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论