计算机二级C语言笔试322.docx
《计算机二级C语言笔试322.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言笔试322.docx(26页珍藏版)》请在冰豆网上搜索。
计算机二级C语言笔试322
[模拟]计算机二级C语言笔试322
一、选择题下列各题[A]、[B]、[C]、[D]四个选项中,只有一个选项是正确的。
第1题:
算法是指
A.计算机程序
B.解决问题的计算方法
C.排序算法
D.解决问题的有限运算序列
参考答案:
D
算法是指对解决方案准确而完整的描述。
第2题:
下列叙述中正确的是
A.循环链表是非线性结构
B.双向链表是非线性结构
C.只有一个根结点的数据结构不一定是线性结构
D.有一个以上根结点的数据结构不一定是非线性结构
参考答案:
C
线性结构指的是数据元素之间存在着“一对一”线性关系的数据结构,这样的结构中只有一个根结点,如循环链表和双向链表;非线性结构指的是数据元素之间存在着“一对多”非线性关系的数据结构,这样的结构中可能有一个根结点,如树形结构,也可能有多个根结点,如网状结构。
第3题:
下列对于线性链表的描述中正确的是
A.存储空间不一定连续,且各元素的存储顺序是任意的
B.存储空间不一定连续,且前件元素一定存储在后件元素的前面
C.存储空间必须连续,且前件元素一定存储在后件元素的前面
D.存储空间必须连续,且各元素的存储顺序是任意的
参考答案:
A
线性链表是链式存储结构。
在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致。
第4题:
面向对象方法中,不属于对象基本特点的是
A.标识唯一性
B.分类性
C.封装性
D.一致性
参考答案:
D
对象的基本特点有:
标识唯一性、分类性、多态性、封装性和模块独立性。
第5题:
在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是
A.概要设计
B.详细设计
C.可行性分析
D.需求分析
参考答案:
D
通常,将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。
软件生命周期的主要活动阶段如下。
①可行性研究与计划制定:
确定待开发软件系统的开发目标和总的要求,给出它的功能、性能、可靠性以及接口等方面的可能方案,制订完成开发任务的实施计划。
②需求分析:
对待开发软件提出的需求进行分析并给出详细定义。
编写软件规格说明书及初步的用户手册,提交评审。
③软件设计:
系统设计人员和程序设计人员应该在反复理解软件需求的基础上给出软件的结构、模块的划分、功能的分配以及处理流程。
④软件实现:
把软件设计转换成计算机可以接受的程序代码。
即完成源程序的编码,编写用户手册、操作手册等面向用户的文档,编写单元测试计划。
⑤软件测试:
在设计测试用例的基础上,检验软件的各个组成部分,编写测试分析报告。
⑥运行和维护:
将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。
第6题:
数据流图中方框表示的是
A.数据流
B.存储文件
C.控制流
D.源,潭
参考答案:
D
数据流图是描述数据处理过程的工具,它从数据传递和加工的角度,来刻画数据流从输入到输出的变化过程。
数据流图中的主要图形元素有:
圆形表示加工,箭头表示数据流,双杠表示存储文件,方框表示源、潭。
第7题:
下列对于软件测试的描述中正确的是
A.软件测试的主要目的是发现程序中的错误
B.软件测试的目的是证明程序是否正确
C.软件测试的目的是使程序运行结果正确
D.软件测试是为了证明软件中没有错误
参考答案:
A
软件测试的目标是发现软件中的错误。
第8题:
数据库、数据库系统和数据库管理系统之间的关系是
A.数据库包括数据库系统和数据库管理系统
B.数据库系统包括数据库和数据库管理系统
C.数据库管理系统包括数据库和数据库系统
D.三者没有明显的包含关系
参考答案:
B
数据库系统有数据库、数据库管理系统、数据库管理员、硬件平台、软件平台5部分构成。
第9题:
设有图书(图书编号,书名,第一作者,出版社)、读者(借书证号,姓名,单位,职称)和借阅(借书证号,图书编号,借书日期,还书日期)三张表,则表借阅的关键字(键或码)为
A.借书证号,图书编号
B.图书编号,借书日期
C.借书日期,还书日期
D.借书证号,借书日期
参考答案:
A
在二维表中凡能唯一标识元组的最小属性集称为关键字,关键字具有标识元组、建立元组间联系等重要作用。
此题中,借书证号,图书编号是表借阅的主键,借书证号、图书编号分别是外键,借书证号是读者表的主关键字,图书编号是图书表的主关键字。
第10题:
有三个关系R、S和T如下:
由关系R和S通过运算得到关系T,则所使用的运算为
A.并
B.自然连接
C.笛卡儿积
D.交
参考答案:
D
在关系运算中,交的定义如下:
设R1和R2为参加运算的两个关系,它们具有相同的度n,且相对应的属性值取自同一个域,则为交运算,结果仍为度等于n的关系,其中,交运算的结果既属于R1,又属于R2。
第11题:
下列叙述中正确的是
A.每个C语言程序文件中都必须要有一个main()函数
B.在C语言程序中main()函数的位置是固定的
C.C语言程序中所有函数之间都可以相互调用,与函数所在位置无关
D.在C语言程序的函数中不能定义另一个函数
参考答案:
A
main函数是C语言程序的主函数,可以出现在程序中的任何位置。
函数是C语言程序的基本模块,函数内部可以再定义其他函数。
但函数间可相互调用,被调用的既可以是C语言提供的库函数,也可以是用户自定义的函数。
第12题:
以下合法的十六进制数是
A.0x
B.0x4de
C.0x1h
D.0x77
参考答案:
B
考查十六进制数的表示方法。
十六进制数以0x开头,后面跟着若干位0~9和a~f的数,所以正确答案为B)。
第13题:
已知大写字母A的ASCII码的值是65,小写字母a的ASCII码的值是97,以下不能将变量c中的大写字母转换为对应小写字母的语句是
A.c=(c-´A´)%26+´a´
B.c=c+32
C.c=c-´A´+´a´
D.c=(´A´+c)%26-´a´
参考答案:
D
无论大小写,字母间的间隔都相等,所以´C´-´A´=´c´-´a´,因此´c´=´C´-´A´+´a´,选项A)、C)正确。
从题述可知,´a´-´A´=97-65=32,所以´c´=´C´+32,选项B)正确。
第14题:
若变量已正确定义并赋值,以下符合C语言语法的表达式是
A.a:
=b+1
B.a=b=c+2
C.int18.5%3
D.a=a+7=c+b
参考答案:
B
选项A)中包含一个不合法的运算符“:
=”;选项C)应改为(int)18.5%3;选项D)可理解为两个表达式:
a+7=c+b和a=a+7,其中第一个是错的,因为C语言规定赋值号的左边只能是单个变量,不能是表达式或常量等。
因此,正确答案是选项B),它实际上相当于a=(b=c+2),进而可分解为两个表达式:
b=c+2和a=b。
第15题:
设变量a是int型,f是float型,i是double型,则表达式10+´a´+i*f值的数据类型为
A.int
B.float
C.double
D.不确定
参考答案:
C
根据混合运算规则,如果有一个数据是float型或double型,则其他数据类型先转化为double型,运算的结果最终也是double型。
第16题:
有以下程序:
#include〈stdio.h〉
main()
{
chalc1=´1´,c2=´2´;
c1=getchar();c2=getchar();putchar(c1);putchar(c2);
}
当运行时输入:
a〈回车〉后,以下叙述正确的是
A.变量c1被赋予字符a,c2被赋予回车符
B.程序将等待用户输入第2个字符
C.变量c1被赋予字符a,c2中仍是原有字符2
D.变量c1被赋予字符a,c2中将无确定值
参考答案:
A
本题考查的是输入输出函数。
函数getchar()的作用是从终端(或系统隐含指定的输入设备)输入一个字符,且只能接受一个字符(回车符也算是一个字符)。
故本题中变量c1被赋予字符a,c2被赋予回车符。
第17题:
下列程序的输出结果是
#include"stdio.h"
main()
{inti,a=0,b=0;
for(i=1;i〈10;i++)
{if(i%2==0)
{a++;
continue;
}
b++;
}
printf("a=%d,b=%d",a,b);
}
A.a=4,b=4
B.a=4,b=5
C.a=5,b=4
D.a=5,b=5
参考答案:
B
continue语句的作用是跳过本次循环体中余下尚未执行的语句,接着再一次进行循环条件的判定。
当能被2整除时,a就会增加1,之后执行continue语句,直接执行到for循环体的结尾,进行i++,判断循环条件。
第18题:
设变量a、b、c、d和y都已正确定义并赋值。
若有以下if语句:
if(a〈b)
if(c==d)y=0;
elsey=1;
该语句所表示的含义是
A.
B.
C.
D.
参考答案:
C
本题考查if语句的使用。
整个语句都是以a〈b为假设的,在a〈b的情况下,如果c=d,则y=0;否则y=1。
所以答案为选项C)。
第19题:
若a是数值类型,则逻辑表达式(a==1)||(a!
=1)的值是
A.0
B.1
C.2
D.不知道a的值,不能确定
参考答案:
B
当a=1时,(a==1)||(a!
=1)为真;当a!
=1时,(a==1)||(a!
=1)也为真,故正确答案为B)。
第20题:
有以下程序:
#include〈stdio.h〉
main()
{ints;
scaIlf("%d",&s);
while(s〉0)
{switch(s)
{case1:
printf("%d",s+5);
case2:
printf("%d",s+4).break;
case3:
printf("%d",s+3);
default:
printf("%d",s+1)Ibreak;
}
scanf("%d",&s);
}
}
运行时,若输入123450〈回车〉,则输出结果是
A.6566456
B.66656
C.66666
D.6666656
参考答案:
A
switch语句执行完一个case后面的语句后,流程控制转移到下一个case语句继续执行,遇到break会跳出本次循环。
本题中输入1时会输出65,输入2时会输出6,输入3时会输出64,输入4时会输出5,输入5时会输出6,在输入0时不满足循环条件,程序执行结束。
第21题:
有如下程序:
inta[10]={11,12,13,14,15,16,17,18,19,20};
int*p=&a[3],b;b=p[5];
则b的值是
A.15
B.16
C.18
D.19
参考答案:
D
p=&a[3]将指针指向数组a的第4个元素,p[5]指向数组a的第9个元素,而a[8]=19,所以b=19。
第22题:
以下程序的输出结果是
Fun(intx,inty)
{return(x+y);}
main()
{inta=1,b=2,c=3,sum;
sum=Fun((a++,b++,a+b),c++);
printf("%d",sum);
}
A.9
B.8
C.7
D.6
参考答案:
B
逗号表达式a++,b++,a+b先计算a++,a=2;再计算b++,b=3;表达式的值就是a+b的值,为5。
表达式c++的值是c递增前的值,为3。
所以fun((a++,b++,a+b),c++)等价于fun(5,3),返回值为5+3=8。
第23题:
有以下程序:
#include〈stdio.h〉
main()
{inti=5;
do
{if(i%3==1)
if(i%5==2)
{printf("%%d",i);break;}
i++;
}while(i!
=0);
printf("\n");
}
程序的运行结果是
A.*7
B.*3*5
C.*5
D.*2*6
参考答案:
A
整个程序中只有对i增加的语句而没有对i减少的语句,所以2、3都不可能出现,选项B)和D)错误。
而1=5时第一个if语句的表达式为假,所以选项C)也错误。
第24题:
以下函数按每行8个输出数组中的数据:
voidfun(int*w,intn)
{inti;
for(i=0;i〈n;i++)
{______
printf("%d",w[i]);
}
printf("\n");
}
下划线处应填入的语句是
A.if(i/8==0)printf("\n");
B.if(i/8==0)continue;
C.if(i%8==O)printf("\n");
D.if(i%8==0)continue;
参考答案:
C
在C语言循环语句中,continue用来跳出当次循环,因此B)项和D)项不正确。
if(i/8==0)是指当i除以8的得数等于0,即i的值小于8时,打印换行,因此A)项也不正确。
if(i%8==0)是指当i除以8的余数等于0,即当间隔8个数时,打印换行,因此选项C)正确。
第25题:
以下数组定义中错误的是
A.intx[][3]={0};
B.intx[2][3]={{1,2},{3,4},{5,6}};
C.intx[][3]={{1,2,3},{4,5,6}};
D.intx[2][3]={1,2,3,4,5,6};
参考答案:
B
二维数组的初始化有以下几种形式:
①分行进行初始化;②不分行进行初始化;③部分数组元素进行初始化;④省略第一维的定义,不省略第二维的定义。
选项B)等号右边分了3行,大于等号左边数组的行数2。
第26题:
有以下程序:
#include〈string.h〉
main()
{charp[]={´a´,´b´,´c´},q[10]={´a´,´b´,´c´};
printf("%d%d\n",strlen(p),strlen(q));
}
以下叙述中正确的是
A.在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3
B.由于p数组中没有字符串结束符,长度不能确定;但q数组中字符长度为3
C.由于q数组中没有字符串结束符,长度不能确定;但p数组中字符长度为3
D.由于p和q数组中没有字符串结束符,故长度都不能确定
参考答案:
B
本题考查的是库函数的调用。
strlen()是计算以"\0"结束的字符串的长度函数,函数的值为字符串的实际长度,不包括"\0"。
题中"q[10]={´a´,´b´,´c´}"虽然给出了数组大小,即数组实际分配的存储空间,但此字符串只占用前3个存储单元,其余存储单元系统自动加上"\0",故数组q的长度为3;由于p数组中没有字符串结束符,故字符串的长度不能确定。
第27题:
若有以下程序:
#include〈stdio.h〉
inta[]={1,3,5,7};
main()
{inti;
int*p=a;
for(i=0;i〈4;i++)a[i]=*p;
printf("%d\n",a[2]);
}
上面程序的输出结果是
A.5
B.7
C.l
D.3
参考答案:
C
在C语言中,数组元素下标是从0开始的;指针变量p指向数组的首地址。
for循环语句中,指针变量p始终指向数组的首地址,因而执行循环赋值语句后数组各元素的值均变为1。
第28题:
若有定义语句:
intm[]={5,4,3,2,1},i=4;,则下面对m数组元素的引用中错误的是
A.m[--i]
B.m[2*2]
C.m[m[0]]
D.m[m[i]]
参考答案:
C
数组m下标从0~4计算,共5个元素,选项C)中m[0]=5,则m[m[0]]为m[5]中,超出了数组m的下标范围。
因此正确答案为C)。
第29题:
设有以下说明语句:
typedefstruct
{intn;
charch[8];
}PER;
则下面叙述中正确的是
A.PER是结构体变量名
B.PER是结构体类型名
C.typedefstruct是结构体类型
D.struct是结构体类型名
参考答案:
B
本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用PER来定义变量。
第30题:
有以下程序:
intfun(intn)
{if(n==1)return1;
else
return(n+fun(n-1));
}
main()
{intx;
scanf("%d",&x);x=fun(x);printf("%d\n",x)
}
执行程序时,给变量x输入10,程序的输出结果是
A.54
B.55
C.65
D.45
参考答案:
B
本题考查的是函数的递归调用,在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用,执行结果为1+2+3+4+5+6+7+8+9+10=55。
第31题:
以下程序的输出结果是
#include〈stdio.h〉
sub(int*s,inty)
{staticintt=3;
y=s[t];t--;
}
main()
{inta[]={1,2,3,4},i,x=0;
for(i=0;i〈4;i++){
sub(a,x);printf("%d",x);}
printf("\n");
}
A.1234
B.4321
C.OOOO
D.4444
参考答案:
C
本题的考查点是函数的形参和实参的关系。
x作为函数sub()的实参时,函数对x值的改变没有返回主函数,并没能使得x的值变化,所以在打印时,x的值始终是0。
第32题:
有以下程序:
#include〈stdio.h〉
#defineF(x,y)(x)*(y)
main()
{
inta=3,b=4;
printf("%d\n",F(a++,b++));
}
程序运行后的输出结果是
A.12
B.15
C.16
D.20
参考答案:
A
本题的考查点是带参数的宏定义。
本题的程序中就定义了一个带参数的宏,对F(a++,b++)进行展开后,宏的返回值为12,注意a++,b++都是先使用变量值,再自增。
第33题:
以下程序运行时,若从键盘输入102030〈回车〉,输出的结果是
main()
{inti=0,j=0,k=0;
scanf("%d%*d%d",&i,&j,&k);
printf("%d%d%d\n",i,j,k);
}
A.10200
B.102030
C.10300
D.10030
参考答案:
C
根据scanf()函数附加的格式说明字符,可知%后的“*”是附加说明符,用来表示跳过它相应的数据,所以本题中忽略第2个数据的输入,则i=10,j=30,k的值不变,还是0,所以输出结果是10300。
第34题:
有以下程序:
#include〈stdio.h〉
main()
{char*a[]={"abcd","ef","gh","ijk"};inti;
for(i=0;i〈4;i++)printf("%c",*a[i]);
}
程序运行后的输出结果是
A.aegi
B.dfhk
C.abcd
D.abcdefghijk
参考答案:
A
a为一个指针数组,其中的每个元素都是一个指针。
该程序的功能是分别打印4个字符串的首字母,因此本题答案为A)。
第35题:
以下程序执行后的输出结果是
fun(intx,inty)
{staticintm=0,i=2;
i+=m+1;m=i+x+y;returnm;
}
main()
{intj=1,m=1,k;
k=fun(j,m);printf("%d,",k);
k=fun(j,m);printf("%d\n",k);
}
A.5,5
B.5,11
C.11,11
D.11,5
参考答案:
B
maln函数中的局部变量m与fun函数中的静态局部变量m同名,因此main访问的是其局部变量m,所以main中的两次函数调用,实际上都是调用fun(1,1)。
第一次调用时,i=i+(m+1)=2+(0+1)=3,m=i+x+y=3+1+1=5。
第二次调用时,i=i+(m+1)=3+(5+1)=9,m=i+x+y=9+1+1=11。
所以程序输出5,11。
第36题:
阅读下面程序,则执行后的结果是
#include"stdio,h"
main()
{charstr[]="tomeetme",*p;
for(p=str;p〈str+7;p+=2)putchar(*p);
printf("\n");
}
A.tomeetme
B.tmem
C.oete
D.tome
参考答案:
B
存放字符串的字符数组的名字就是这个字符串的首地址。
本题的功能是对字符串“tomeetme”进行选择式输出,从第一个字母开始,每输出一个字符即跳过一个。
第37题:
有以下程序:
main()
{charch[]="uvwxyz",*pc;
pc=ch;printf("%c\n",*(pc+5));
}
程序运行后的输出结果是
A.z
B.0
C.元素ch[5]的地址
D.字符y的地址
参考答案:
A
本题考查的是指向数组的指针。
本题中定义了一个字符串数组和指针,并将指针pc指向该数组的首地址,执行输出语句“printf("%c\n",%(pc+5));”。
语句中的*(pc+5)指的就是pc[5]的值,所以最后输出的结果为z。
第38题:
设有定义:
structcomplex
{intreal,unreal;}data1={1,8},data2;
则以下赋值语句中错误的是
A.data2=da