2016年秋江苏省计算机等级考试试题
C++语言程序设计(第二部分)
选择题(用答题卡答题,答案依次填在21~30答题号内)
21.对于for和do等while循环语句,以下描述正确的是(2).B.两个语句中的循环体可能都不执行
C.do等while语句中的循环体至少执行一次D.两个语句中的循环体至少执行一次
22.设有说明语句:inthh[4]等于{2,3,4},*p等于hh,则以下选项中存在语法错误的是(2).23.以下说明语句中,不存在语法错误的是(2).,B.int_s1等于25,-s2等于100,
C.intn,cin>,>,n,intarr[n],D.charstr[]等于{"Iamastudent"},
24.设有语句:inta等于10,b等于20,c等于30,则执行语句:cout<,<,(a,b,c),其输出结果是(2)B.20C.30D.10,20,30
25.以下关于运算符重载(2)C++已有的任何运算符都可以重载D.运算符重载时可改变其实现的功能
26.设有函数原型说明:float*f(int,float),则表示该函数f的返回值为(2)B.指向一个实数的指针C.该函数的地址D.指向一个函数的指针
27.下列有关构造函数的叙述中,不正确的是(2)A.可以定义没有构造函数的类B.任何一个类必定有构造函数
C.类的构造函数可以重载D.构造函数没有返回值
28.下列有关类成员的叙述中,不正确的是(2)A.当不指定类成员的访问权限时则为私有成员B.友元函数可访问类中的任一成员
C.指定为public的成员不允许在类外访问D.成员函数可访问类中的任一成员
29.以下关于类和对象的叙述中,不正确的是(2)A.不同的类可以产生相同类型的对象B.类是一种类型,它定义了数据和操作
C.对象是类的实例D.任一对象必属于某一个类
30.以下关于指针运算的叙述中,不正确的是()A.可以将NULL赋给任一指针变量
B.两个同类型的指针变量可进行相等或不等的运算
C.指针变量的值加上常数n,使该指针指向当前元素其后的第n个元素
D.指向同一数组的两个指针变量,在任何情况下,两指针变量相减是无意义的
填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)
●基本概念题,共5分
1.每一个类均有构造函数和析构函数,这两个函数中不可以定义为虚函数的是(1).
2.定义了宏:#defineF(x,y,z)x/y*z
执行语句:b等于F(3+4,2+2,4+4),其变量b的值为(2).
3.函数重载(3)实现的多态性属于静态多态性.定义的函数不返回任何值时,则在定义函数时在函数名前加保留字(关键字)(4).
5.C++关于存储类型的说明符一共有四种,分别是auto,static,extern和(5).
●阅读程序题,共13分
6.[程序](2分)
#include<,iostream.h>,
voidmain(void)
{
intc2,c3,c5,m等于20,
c2等于c3等于c5等于0,
for(inti等于1,i<,等于m,i++){
if(i等于等于15||i等于等于14)continue,
if(i%2等于等于0)c2++,
if(i%3等于等于0)c3++,
if(i%7等于等于0)c5++,
}
cout<,<,c2<,<,endl<,<,c3<,<,endl<,<,c5<,<,endl,
}
程序输出的第一行是(6),第三行是(7).
7.[程序](2分)
#include<,iostream.h>,
intf(inta,int&,b,int*c)
{
a+等于b,b+等于*c,*c+等于a,
return(a+b+*c),
}
voidmain(void)
{
intx等于5,y等于5,z等于6,sum,
for(inti等于0,i<,2,i++){
sum等于f(x,y,&,z),
cout<,<,x<,<,'\t'<,<,y<,<,'\t'<,<,z<,<,'\t'<,<,sum<,<,'\n',
}
}
程序输出的第一行是(8),第二行是(9).
8.[程序](2分)
#include<,iostream.h>,
voidf(ints[],int*y)
{
staticintt等于3,
*y等于s[t],
s[t]*等于2,
t--,
}
voidmain(void)
{
inta[]等于{1,2,3,4},i,
intx等于0,
for(i等于0,i<,4,i++){
f(a,&,x),
cout<,<,x<,<,endl,
}
for(i等于0,i<,4,i++)cout<,<,a[i]<,<,'\t',
cout<,<,'\n',
}
程序输出的第二行为(10),最后一行为(11).
9.[程序](3分)
#include<,iostream.h>,
voidf(intx,inty)
{
charres[10]等于{0},
inti等于0,rem,
do{
rem等于x%y,
x等于x/y,
if(rem<,10)res[i]等于'0'+rem,elseres[i]等于'A'+rem-10,
i++,
}while(x!等于0),
i--,
for(,i>,等于0,i--)cout<,<,res[i],
cout<,<,endl,
}
voidmain(void)
{
f(23,10),
f(45,8),
f(50,16),
}
程序输出的第一行是(12),第二行是(13),第三行是(14).
10.[程序](2分)
#include<,iostream.h>,
charst[]等于"Yourfriend!",
voidf2(int),
voidf1(inti)
{
cout<,<,(st+i)<,<,endl,
if(i<,3){
i+等于2,
f2(i),
}
}
voidf2(inti)
{
cout<,<,st[i]<,<,endl,
if(i<,3){
i+等于2,
f1(i),
}
}
voidmain(void)
{
inti等于0,
f1(i),
}
程序输出的第一行是(15),第二行是(16).
11.[程序](2分)
#include<,iostream.h>,
classA{
public:
A(char*s){cout<,<,s<,<,endl,}
A(){},
},
classB:publicA{//L1
public:
B(char*s1,char*s2):A(s1)
{cout<,<,s2<,<,endl,}
},
classC:publicA{//L2
public:
C(char*s1,char*s2):A(s1)
{cout<,<,s2<,<,endl,}
},
classD:publicB,publicC{
public:
D(char*s1,char*s2,char*s3,char*s4):B(s1,s2),C(s1,s3)
{cout<,<,s4<,<,endl,}
},
voidmain(void)
{
D*ptr等于newD("students","study","C++","hard"),
deleteptr,
}
程序共输出(17)行,将L1行改为:classB:virtualpublicA{//L1
将L2行改为:classC:virtualpublicA{//L2
程序共输出(18)行.
●完善程序题,共12分
12.以下程序的功能是:把从键盘上输入的一个大于等于3的整数分解为质因子的乘积.例如,输入50时,则输出:50等于2*5*5,输入45时,则输出:45等于3*3*5,输入37时,则输出:37等于37.
[程序](4分)
有关论文范文主题研究: | 关于函数的文章 | 大学生适用: | 学年论文、学位论文 |
---|---|---|---|
相关参考文献下载数量: | 18 | 写作解决问题: | 如何怎么撰写 |
毕业论文开题报告: | 论文模板、论文目录 | 职称论文适用: | 核心期刊、高级职称 |
所属大学生专业类别: | 如何怎么撰写 | 论文题目推荐度: | 优质选题 |
#include<,iostream.h>,
intprime(intx)//求大于x的最小质数(素数)
{
intflag等于1,
x++,
while((19)){
inti等于2,
while(i<,x){
if((20))break,
i++,
}
if(i<,x)x++,elseflag等于0,
}
returnx,
}
voidf(intn)//将n分解为若干个质数之积
{
intflag等于1,
inti等于2,//保证i为质数
do{
while((21)){
if(flag等于等于1){
cout<,<,i,
flag等于0,
}
elsecout<,<,'*'<,<,i,
n等于n/i,
}
(22),
}while(i<,n),
if(n!等于1)
if(flag等于等于1)cout<,<,n,elsecout<,<,'*'<,<,n,
}
voidmain(void)
{
intx,
do{
cout<,<,"请输入一个整数,若小于3则重输:",
cin>,>,x,
}while(x<,3),
cout<,<,x<,<,'等于',
f(x),
cout<,<,endl,
}
13.以下程序的功能是:实现两个字符串拼接,函数strcat(char*s1,char*s2)先将s1所指向的字符串拷贝到s所指向的动态申请的存储空间,接着将s2所指向的字符串拼接s所指向的字符后面,并返回拼接后的字符串.
[程序](4分)
#include<,iostream.h>,
char*strcat(char*s1,char*s2)
{
char*s,*p,*q,
intlen1等于0,len2等于0,
p等于s1,
while(*p!等于'\0'){
len1++,
p++,
}
p等于s2,
while(*p!等于'\0'){
len2++,
p++,
}
s等于q等于(23),
p等于s1,
for(inti等于0,i<,len1,i++)*q++等于*p++,
p等于s2,
while((24)),
(25),
}
voidmain(void)
{
chars1[]等于"visual",
chars2[]等于"isesay",
char*s,
s等于(26),
cout<,<,s<,<,endl,
delete[]s,
}
14.下面程序的功能是:将两个有序链表合并为一个有序链表.函数merge(node*h1,node*h2)将由h1和h2合并一个依然有序链表大小相同15,9,8,7,3
h2:15,12,10,7,3,2
合并后得到的新链表为:15,15,12,10,9,8,7,7,3,3,2
[程序](4分)#include<,iostream.h>,
structnode{
intdata,
node*next,
},
node*merge(node*h1,node*h2)
{
if(h1等于等于NULL)returnh2,
if(h2等于等于NULL)returnh1,
node*h等于NULL,
if((27)){
h等于h1,
h1等于h1->,next,
}
else{
h等于h2,
h2等于h2->,next,
}
node*p等于h,
while((28)){
if(h1->,data>,等于h2->,data){
p->,next等于h1,
p等于h1,
h1等于h1->,next,
}
else{
p->,next等于h2,
p等于h2,
h2等于h2->,next,
}
}
if(h1!等于NULL)(29),
else
if(h2!等于NULL)p->,next等于h2,
returnh,
}
voidmain(void)
{
nodea[5]等于{{15},{9},{8},{7},{3}},
nodeb[6]等于{{15},{12},{10},{7},{3},{2}},
node*h,*h1,*h2,*p,
inti,
h1等于a,
h2等于b,
for(i等于0,i<,4,i++)a[i].next等于&,a[i+1],//形成a链表
a[4].next等于NULL,
for(i等于0,i<,5,i++)b[i].next等于&,b[i+1],//形成b链表
b[5].next等于NULL,
(30),
p等于h,
while(p){
cout<,<,p->,data<,<,'\t',
p等于p->,next,
}
cout<,<,endl,
}
VC++2016年秋笔试卷的参:
21.C22.B23.D24.C25.D26.B27.A28.C29.A30.D
构造函数
17
运算符重载4.void
5.register
9
7.1
8.5111637
9.5273275
3
2468
12.23
13.55
14.32
15.Yourfriend!
16.u
17.5
18.3
19.flag
20.x%i等于等于0
21.n%i等于等于0
22.i等于prime(i)
newchar[len1+len2+1]
*q++等于*p++
returns
strcat(s1,s2)
27.h1->,data>,h2->,data
28.h1!等于NULL&,&,h2!等于NULL
29.p->,next等于h1
30.h等于merge(h1,h2)
1
第4页VC++