计算机等级考试二级C语言考前模拟密卷及答案8Word文档格式.docx
《计算机等级考试二级C语言考前模拟密卷及答案8Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机等级考试二级C语言考前模拟密卷及答案8Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
B)计算机只能处理由0和1的代码构成的二进制指令或数据
C)C语言源程序经过C语言编译程序编译之后生成一个后缀为.EXE的二进制文件
D)每一种高级语言都有它对应的编译程序
(12)算法是指为解决某个特定问题而采取的确定且有限的步骤,下面不属于算法的五个特性的是
A)有零个输入或多个输入
B)高效性
C)有穷性
D)确定性
(13)已知inta=6;
则执行a+=a-=a*a;
语句后,a的值为
A)36
B)0
C)-24
D)-60
(14)下面各选项中,均是C语言标识符的选项组是
A)forchinato
B)long_123short56_do
C)voidunion_342
D)text.txt_023_3ew
(15)下列表达式中,结果为5的是
A)6*5%6
B)5*-2+15
C)5+75_
D)6+-2/3
(16)下列常量中,为不合法的实型常量表示的是
A).0032
B)0.0
C)0.3242E8
D).E3
(17)关于C语言的主函数描述正确的是
A)C程序可以有多个main函数
B)C程序必有一个而且只能有一个main函数
C)C程序可以没有main函数
D)C程序的执行不一定在main函数开始执行
(18)已知inta=1,b=-1;
则语句printf("
%d\n"
(a--,++b));
的输出结果是
A)-1
C)1
D)语句错误
(19)已知inta,b;
doublec;
则以下语句中错误的函数调用是
A)scanf("
%d,%x,%lf"
&
a,&
b,&
c);
B)scanf("
%d,%d,%le"
C)scanf("
%o,%x,%o"
b);
D)scanf("
%d,%o,%e"
(20)已知x,y,z均为整型变量,且值均为1,则执行语句++x||++y&
&
++z;
后,表达式x+y的值为
A)1
B)2
C)3
D)4
(21)若intk=8;
则执行下列程序后,变量k的正确结果是
main()
{intk=8;
switch(k)
{case9:
k+=1;
case10:
case11:
break;
default:
}
printf("
k);
A)12
B)11
C)10
D)9
(22)若inti,j;
,则for(i=j=0;
i<
10&
j<
8;
i++,j+=3)控制的循环体执行的次数是
A)9
B)8
D)2
(23)下列程序的输出结果是
#include"
stdio.h"
{inti=6;
while(i--)
%d"
--i);
\n"
);
A)531
B)420
C)654321
D)死循环
(24)阅读下列程序,则执行结果是
{inta=0,b=0,c=0,i;
for(i=0;
4;
i++)
switch(i)
{case0:
a=i++;
case1:
b=i++;
case2:
c=i++;
case3:
i++;
%d,%d,%d,%d\n"
a,b,c,i);
A)0,1,3,4
B)1,2,3,4
C)0,1,2,5
D)0,2,3,4
(25)下面程序的运行结果是
{intj,i,k=0;
for(j=50;
=60;
j++)
{if(!
(k_))printf("
for(i=2;
i if(i>
=j-1){printf("
j);
k++;
}}}
A)5359
B)5953
C)3595
D)9535
(26)已知charch=′C′;
则以下表达式的值是
ch=(ch>
=′A′&
ch<
=′Z′)?
(ch+32):
ch;
A)A
B)a
C)Z
D)c
(27)以下描述错误的是
A)C程序中,函数可以直接或间接的调用自己
B)函数调用时,函数名必须与所调用的函数名字完全一致
C)函数说明语句中的类型必须与函数返回值的类型一致
D)实参数可以与形参个数不一致
(28)阅读下面程序,则执行后的结果为
{fun3(fun1(),fun2());
fun1()
{intk=20;
returnk;
fun2()
{inta=15;
returna;
fun3(inta,intb)
{intk;
k=(a-b)*(a+b);
A)0
B)184
C)175
D)编译不通过
(29)阅读下面程序,则执行后的输出结果为
fun(inta,intb)
{ints;
s=a*b/2;
s);
{inta=10,b=16;
fun(a,b);
A)10
B)16
C)160
D)80
(30)阅读下面程序,则程序执行后的结果为
{inta=4,b=6,c=7;
doubled,fun(int,int,int);
d=fun(a,b,c);
%lf\n"
d);
doublefun(inta,intb,intc)
{doubles;
s=a%b*c;
returns;
A)27
B)27.000000
C)28
D)28.000000
(31)下列不合法的指针变量的定义是
A)int*_k;
B)char*_245;
C)int*p;
D)double*5_is
(32)下列关于指针变量赋空值的说法错误的是
A)当赋空值的时候,变量指向地址为0的存储单元
B)赋值语句可以表达为变量名=′\0′;
C)赋值语句可以表达为变量名=0;
D)一个指针变量可以被赋空值
(33)阅读下面程序,则执行后输出的结果为
voidfun(int*a,int*b)
{intm;
m=(*a+*b)*(*a+*b);
m+=(*a-*b)*(*a-*b);
m);
{inta=5,b=6,*x=&
a,*y=&
b;
fun(x,y);
A)120
B)121
C)122
D)123
(34)阅读下面程序,则输出结果是
{intc=20,d=25;
*a=c/3;
*b=d/5;
{inta=3,b=5;
fun(&
%d,%d\n"
a,b);
A)6,5
B)5,6
C)20,25
D)3,5
(35)以下对一维数组c进行正确的定义初始化的语句是
A)intc[10]=0;
B)intc[10]={0}*10;
C)intc[1]={0,0,0,0,0,0,0};
D)intc[10]={0};
(36)以下二维数组c的定义形式是
A)intc[3][]
B)floatc[3,4]
C)doublec[3][4]
D)floatc(3)(4)
(37)阅读下列程序,则执行后输出的结果是
intk=1;
{fun(k);
fun(intk)
{k++;
k=k*6;
C)6
D)12
(38)已知#defineM2;
的宏定义,执行语句k=M*5;
后,k的值是
B)5
C)2
D)以上答案都不对
(39)已知:
intc[3][4];
则对数组元素引用正确的是
A)c[1][4]
B)c[1.5][0]
C)c[1+0][0]
D)以上表达都错误
(40)现有如下程序段
voidfun(int*a,int*b,int*c)
{*c=*a+*b;
{inta[2]={12,23},c;
fun(a,a+1,&
c);
则程序的输出结果为
A)23
B)12
C)0
D)35
(41)若有以下语句,则正确的描述是
chara[]="
toyou"
;
charb[]={′t′,′o′,′y′,′o′,′u′};
A)a数组和b数组的长度相同
B)a数组长度小于b数组长度
C)a数组长度大于b数组长度
D)a数组等价于b数组
(42)已知:
chara[15],b[15]={"
Ilovechina"
};
则在程序中能将字符串Ilovechina赋给数组a的正确语句是
A)a="
B)strcpy(b,a);
C)a=b;
D)strcpy(a,b);
(44)阅读下面程序,则执行后的结果为
{
char*str="
abcdefghijklmnopq"
while(*str++!
=′e′);
printf("
%c\n"
*str);
A)f
C)e
D)q
(45)现有如下程序段
intfun(intk,int*m)
{if(k%3)*m=k*k;
else*m=k/3;
{int(*p)(int,int*),m;
p=fun;
(*p)(78,&
m);
则程序段的输出结果为
A)24
B)25
C)26
D)27
(46)阅读下列程序,则执行后的输出结果为
fun(intx)
{if(x/2>
0)fun(x/2);
x%2);
{fun(20);
putchar(′\n′);
A)11100
B)10100
C)10101
D)10110
(47)阅读如下程序段,则执行后程序的输出结果是
#include
{structa{intx;
inty;
}num[2]={{20,5},{6,7}};
num[0].x/num[0].y*num[1].y);
B)28
C)20
D)5
(48)阅读程序段,则执行后的输出结果为
typedefunion{longx[2];
inty[4];
charz[8];
}atx;
typedefstructaa{longx[2];
}stx;
{printf("
union=%d,structaa=%d\n"
sizeof(atx),sizeof(stx));
A)union=8,structaa=8
B)union=8,structaa=24
C)union=24,structaa=8
D)union=24,structaa=24
(49)阅读下列程序段
typedefstructaa
{inta;
structaa*next;
}M;
voidset(M*k,inti,int*b)
{intj,d=0;
for(j=1;
j {
k[j-1].next=&
k[j];
k[j-1].a=b[d++];
}
k[j].a=b[d];
{Mk[5],*p;
intd[5]={23,34,45,56,67};
set(k,5,d);
p=k+1;
table);
则下面的表达式在table处,能使程序执行后,打印输出数据45的是
A)p->
next->
a
B)++p->
C)(*p).a++
D)p++->
(50)阅读下面程序,程序实现的功能是(a123.txt在当前盘符下已经存在)
voidmain()
{FILE*fp;
inta[10],*p=a;
fp=fopen("
a123.txt"
"
w"
while(strlen(gets(p))>
0)
{fputs(a,fp);
fputs("
fp);
fclose(fp);
A)从键盘输入若干行字符,按行号倒序写入文本文件a123.txt中
B)从键盘输入若干行字符,取前2行写入文本文件a123.txt中
C)从键盘输入若干行字符,第一行写入文本文件a123.txt中
D)从键盘输入若干行字符,依次写入文本文件a123.txt中
二、填空题
(1)排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、【1】和选择排序等。
【命题目的】需要考生记住常见的排序方法。
【解题要点】常见的排序方法有插入排序(包括简单插入排序法和希尔排序法等)、交换排序(包括冒泡排序和快速排序法等)和选择排序(包括简单选择排序和堆排序等)。
【考点链接】常见的排序方法及其作用机制和区别。
(2)当循环队列非空且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算。
这种情况称为【2】。
【命题目的】本题考查了队列的基本性质。
【解题要点】入队运算是指在循环队列的队尾加入一个新元素。
这个运算有两个基本操作:
首先将队尾指针进一(即rear=rear+1),并当rear=m+1时置rear=1;
然后将新元素插入队尾指针指向的位置。
当循环队列非空(s=1)时且队尾指针等于队头指针时,说明循环队列已满,不能进行入队运算,这种情况称为“上溢”。
(3)【3】是一种信息隐蔽技术,目的在于将对象的使用者和对象的设计者分开。
【命题目的】本题考查了面向对象技术中的一些基本概念。
【解题要点】面向对象技术中包括以下几个基本概念,即对象、类、方法、消息、继承和封装,其中封装是一种信息隐蔽技术,目的在于将对象的使用者对象的和设计者分开。
(4)为了便于对照检查,测试用例应由输入数据和预期的【4】两部分组成。
【命题目的】本题主要考查测试的步骤。
【考点链接】测试的基本方法和步骤。
(5)【5】是从二维表列的方向进行的运算。
【命题目的】本题考查了关系运算的基本知识。
【解题要点】在关系模型的数据语言中,一般除了运用常规的集合运算,(并、交、差、笛卡尔积等)外,还定义了一些专门的关系运算,如投影、选择、连接等。
前者是将关系(即二维表)看成是元组的集合,这些运算主要是从二维表的行的方向来进行的;
后者主要是从二维表的列的方向来进行的运算。
两者统称为关系代数。
(6)定义inta=5,b=20;
若执行语句printf("
++a*--b/5_);
后,输出的结果为【6】。
解析:
++和--做前缀使用的时候,先对变量进行增1或减1,之后进行其他的运算,之后按照同级运算符自左向右依次运算。
(7)执行程序时的输入为123456789,则程序的运行结果为【7】。
#include"
main()
{
inta,b;
scanf("
-%*2d_"
printf("
a-b);
按照函数scanf中的格式控制符的描述:
"
-"
控制前2个数字赋给变量a,变量a的值为12,"
_"
控制将随后的1个数字作为输入数据存入变量b中,变量b的值为5,所以随后的输出为7。
注意:
在%和格式控制符号之间加*号,表示的是跳过相对应的输入数据。
(8)阅读下面程序,则在执行时候的输出为【8】。
{intx=1,y=2,z=0;
if(x=2)z=x,x=y,y=z;
x,y);
if语句的执行过程为:
首先计算紧跟在if后面一对圆括号中的表达式,如果表达式的值为非零,则执行其后的if子句,然后去执行if语句后的下一个语句,如果表达式为零,则跳过if子句直接执行if语句后的下一个语句,if(x=2)的值为真,即x的值为2。
(9)语句printf("
′H′-′0′+64);
的执行结果为【9】。
在C程序中的字符量可参与任何整数运算,在运算的时候都是以ASCII值进行的。
(10)阅读下面程序,则程序的执行结果为【10】。
{inta=10;
fun(a);
a);
fun(intx)
{x=50;
函数调用的时候,函数名字必须与所调用的函数名完全一致,形参与实参类型要一致,在没有给出函数返回值类型的情况下,默认为整形,当返回值为整型放到主函数后面时,可以不需要事先说明就调用这个函数。
(11)以下程序的输出结果是【11】。
intfun(intx,inty,int*p,int*q)
{*p=x*y;
*q=x/y;
{inta,b,c,d;
a=4;
b=3;
fun(a,b,&
c,&
d);
c,d);
通过地址传递可以在被调函数中对调用函数中的变量进行引用,通过地址的传递,在经过函数调用以后,改变了c,d变量的值。
(12)下面程序是求出数组arr的两条对角线上元素之和,请填空。
{intarr[3][3]={2,3,4,8,3,2,7,9,8},a=0,b=0,i,j;
for(i=0;
3;
for(j=0;
if(【12】)a=a+arr[i][j];
for(【13】;
j>
=0;
j--)
if(【14】)
b=b+arr[i][j];
由于是求对角线元素的和,所以【12】是判断是否为对角线元素的,填i==j这个判断条件;
对于次对角线的求和,初始化的时候应该是从数组的列最大开始,由于判断条件是j>
=0,所以初始化时候应该为最大值减1,即j=2,所以【13】应填j=2;
【14】是对次对角线的判断,所以填i+j==2。
(13)下面程序的功能是:
对字符串从小到大进行排序并输出,请填空。
string.h"
sort(char*a[],intn)
{inti,j;
char*p;
for(j=1;
=n-1;
【15】;
if(【16】>
0)
{p=a[i];
a[i]=a[i+1];
a[i+1]=p;
}}
{inti;
char*book[]={"
itisme"
itisyou"
howareyou"
fine"
goodnight"
goodbye"
sort(【17】);