江苏省计算机二级c++考试试题集.docx
《江苏省计算机二级c++考试试题集.docx》由会员分享,可在线阅读,更多相关《江苏省计算机二级c++考试试题集.docx(61页珍藏版)》请在冰豆网上搜索。
江苏省计算机二级c++考试试题集
2006年(秋)笔试试卷
第二部分VisualC++程序设计
一、选择题(用答题卡答题,答案依次填在(21)~(30)答题号内)
21.下列叙述中,不正确的是(21)。
A.一个函数中可以有多个return语句B.函数可通过return语句返回数据
C.必须用一个独立的语句来调用函数D.函数main也可以带有参数
22.下列定义变量和常量的语句中语法正确的是(22)。
A.floati,j,intk;B.constinti;
C.intconstk=1;D.#definePI=3.14159
23.下列对于构造函数和析构函数的叙述中正确的是(23)。
A.构造函数可以重载,析构函数不能重载
B.构造函数不能重载,析构函数可以重载
C.构造函数可以重载,析构函数也可以重载
D.构造函数不能重载,析构函数也不能重载
24.执行以下程序时,循环的次数是(24)。
for(intx=0,y=0;!
x&&y<=5;y++);
A.无数次B.0C.5D.6
25.已定义类A,该类构造函数的参数都没有缺省值。
执行语句:
Aa1
(2),a2(1,2),*p=newA[3];
则自动调用该类的缺省构造函数的次数为(25)。
A.1B.2C.3D.5
26.下列关于派生类的叙述中不正确的是(26)。
A.派生类可以作为基类派生出新的派生类
B.一个派生类可以有多个基类
C.派生类继承了基类的所有成员
D.派生类只能继承基类中的非私有成员
27.设有说明语句:
inti=2,*p=&i;chars[20]=”Hello”,*q=s;
以下选项中存在语法错误的是(27)。
A.cin>>p;B.cout<
>q;D.cout<28.下列关于赋值兼容规则的描述中不正确的是(28)。
A.派生类的对象可以赋值给基类的对象
B.基类的对象可以赋值给派生类的对象
C.派生类的对象可以初始化其基类的引用
D.可以将派生类对象的地址赋值给其基类的指针变量
29.下列关于变量的叙述中不正确的是(29)。
A.C++语言中将变量分为auto、static、extern和register四种存储类型
B.自动变量和外部变量的作用域为整个程序文件
C.函数内定义的静态变量的作用域为定义它的函数体
D.外部静态变量的作用域为定义它的文件内
30.设有说明语句:
chara[]=”string!
”,*p=a;
以下选项中正确的是(30)。
A.sizeof(a)的值与strlen(a)的值相等B.strlen(a)的值与strlen(p)的值相等
C.sizeof(a)的值与sizeof(p)的值相等D.sizeof(a)的值与sizeof(*p)的值相等
二、填空题(请将答案填写在答题纸的相应答题号内)
●基本概念题(共5分)
1.当一个类的非静态成员函数被调用时,该成员函数的
(1)指向调用它的对象。
2.C++语言中的友元函数提供了在类外访问类中私有成员和保护成员的功能,但破坏了类的
(2)。
3.使用成员函数对双目运算符进行重载时,其左操作数是(3)。
4.设有宏定义和变量说明:
#defineT(x,y)x+y
inta=T(3,4)*T(3,5)
则变量a的初值为(4)。
5.设有说明语句:
inta[][4]={{1,2},{2,3,4,5}},*p=(int*)a;
则*(p+5)的值为(5)。
●阅读程序题(共13分)
6.【程序】(3分)
#include
#include
intisvowel(charc)
{return(c==’a’||c==’e’||c==’i’||c==’o’||c==’u’);}
voidpluralize(char*s)
{intlen=strlen(s);
char*p=s+len-1;
char*q=s+len-2;
if(*p==’h’&&(*q==’c’||*q==’s’))strcat(p,“es”);
elseif(*p==’s’)strcat(p,“es”);
elseif(*p==’y’)
if(isvowel(*q))strcat(p,“s”);
elsestrcpy(p,“ies”);
elseif(*p==’z’)
if(isvowel(*q))strcat(p,“zes”);
elsestrcat(p,“es”);
elsestrcat(p,“s”);
}
voidmain(void)
{
charword[6][20]={“wish”,“bus”,“toy”,“navy”,“quiz”,“computer”};
for(inti=0;i<6;i++){
pluralize(word[i]);cout<if((i+1)%2==0)cout<<’\n’;
}
}
程序输出的第一行是(6),第二行是(7),第三行是(8)。
7.【程序】(3分)
#include
voidf(intj)
{if(!
j){cout<if(j%2){f(j/10);cout<else{cout<}
voidmain(void)
{f(0);cout<<’\n’;
f(1357);cout<<’\n’;
f(2468);cout<<’\n’;
}
程序输出的第一行是(9),第二行是(10),第三行是(11)。
8.【程序】(3分)
#include
intx=2,y=x+30;
classA{
inty;
staticintx;
public:
operatorint()
{returnx+y;}
Aoperator++(int)
{returnA(x++,y++);}
A(intx=2,inty=3)
{A:
:
x=:
:
x+x;A:
:
y=:
:
y+y;}
voidprint()
{cout<<”x=”<};
intA:
:
x=23;
voidmain(void)
{Aa(54,3),b(65),c;
a.print();
inti=a+b;cout<<”i=”<
c++;c.print();
}
程序输出的第一行是(12),第二行是(13),第三行是(14)。
9.【程序】(2分)
#include
char*f(char*s,charch)
{char*p=s,*q=s;
while(*q=*p++)if(*q!
=ch)q++;
returns;
}
voidmain(void)
{chars1[]=”HelloHowareyou”,s2[]=”110010111”;
cout<}
程序输出的第一行是(15),第二行是(16)。
10.【程序】(2分)
#include
classA{
intx,y;
public:
A(inti,intj){x=i;y=j;}
operator++(int)
{cout<<++x<<‘’<<++y<<‘’<<”重载1”<<’\n’;}
friendAopertor++(A);
};
Aopertor++(Aop)
{cout<<++op.x<<‘’<<++op.y<<‘’<<”重载2”<<’\n’;}
voidmain(void)
{Aa(1,2);++a;a++;}
程序输出的第一行是(17),第二行是(18)。
●完善程序题(共12分)
11.下面程序的功能是:
先输入一行字符串,并从输入的字符串中找到最小的字符(其ASCII值最小),用min保存该字符。
然后将该字符前的所有字符顺序往后移动一个字符位置。
最后,将保存的字符放在该字符串的第0个位置上。
例如,设输入的字符串为“bcdfae”,其中字母a为最小字符,经移动处理后,输出的字符串为“abcdfe”。
【程序】(4分)
#include
voidfun(char*str)
{charmin,*q,*p;
(19);
min=*p++;
while(*p!
=’\0’){
if((20)){min=*p;q=p;}
p++;
}
p=q;
while((21)){*p=*(p-1);(22);}
*p=min;
}
voidmain(void)
{charstr[80];
cin.getline(str,80);
fun(str);cout<}
12.用程序模拟两个大整数(为简化程序,设整数为正数)的加法运算。
假定一个整数最多N位,用一个一维数组存放其各位数字。
在数组下标为0的元素中存放该整数的个位数字,在下标为1的元素中存放该整数的十位数字,依此类推。
例如,大整数a的值为88099005798957,大整数b的值为776988213577,则两个整数相加的结果为88875994012534。
以下是程序输出的结果:
Integera:
88099005798957
Integerb:
776988213577
Sum:
88875994012534
【程序】(4分)
#include
#defineN20//整数的位数
voidadd(intsum[],inta[],intb[]);//sum=a+b
voidwrt((23));
voidmain(void)
{inta[N]={7,5,9,8,9,7,5,0,0,9,9,0,8,8};
intb[N]={7,7,5,3,1,2,8,8,9,6,7,7};
intsum[N];
add(sum,a,b);
wrt(“Intrge