C++语言程序设计.docx
《C++语言程序设计.docx》由会员分享,可在线阅读,更多相关《C++语言程序设计.docx(14页珍藏版)》请在冰豆网上搜索。
![C++语言程序设计.docx](https://file1.bdocx.com/fileroot1/2023-1/23/0e98ce48-63d8-4c34-a01e-71ef0ebc1dde/0e98ce48-63d8-4c34-a01e-71ef0ebc1dde1.gif)
C++语言程序设计
一、填空(每空2分,共20分)
1.C++目标程序经_______连接____后生成扩展名为exe的可执行程序文件。
2.16位计算机中整型占____2___个字节存储空间。
3.要在屏幕上显示"Hello,world!
"应执行语句cout<<"\"Hello,world!
\""。
4.表达式8&3的结果是___0_______。
5.作为语句的函数调用是通过__函数的副作用_____来体现的。
6.执行if(x>=0||x<=0)cout<<"abcd";elsecout<<"wxyz";屏幕上显示的是______abcd_________。
7.设一维整型数组data已进行了初始化,则其元素个数可由操作符sizeof通过表达式________sizeof(data/data[0])__________________计算出来。
8.若一全局变量只允许本程序文件中的函数使用,则定义它时应加上修饰符______static_________。
9.设有intw[3][4];,pw是与数组名w等价的数组指针,则pw应初始化为int(*pw)[4]=w;。
10.要使引用pr代表变量char*p;,则pr应初始化为___char*&pr=p;。
二、单项选择题(每空2分,共20分)
1.下列变量名中,(A)是合法的。
ACHINABbyte-sizeCdoubleDA+a
2.下列各种函数中,(C)不是类的成员函数。
A构造函数B析构函数C友元函数D拷贝构造函数
3.下列(A)是正确的语句。
A;Ba=17Cx+yDcout<<"\n"
4.循环while(inti=0)i--;执行次数是(A)。
A0B1C5D无限
5.设intf(int);和intg(int);是函数f和g的原形,以下将f作为语句调用的是(B
)。
Ag(f(3));Bf(g(3));Cg(f(3)+2);Dp=f(g(3)+1);
6.设int*p2=&x,*p1=a;p2=*b;则a和b的类型分别是(B)。
Aint*和intBint*和int**
Cint和int*Dint*和int*
7.设intx;,则经过(C)后,语句*px=0;可将x值置为0。
Aint*px;Bintconst*px=&x;
Cint*constpx=&x;Dconstint*px=&x;
8.设voidf1(int*m,long&n);inta;longb;则以下调用合法的是(B)。
Af1(a,b);Bf1(&a,b);
Cf1(a,&b);Df1(&a,&b);
9.以下结构类型可用来构造链表的是(B)。
Astructaa{inta;int*b;};Bstructbb{inta;bb*b;};
Cstructcc{int*a;ccb;};Dstructdd{int*a;aab;};
10.使用操作符setw对数据进行格式输出时,需要包含(C)文件。
Aiostream.hBfstream.hCiomanip.hDstdlib.h
三、回答问题(每题4分,共20分)
1.设int*p;,判断下列表达式的正确性(用T表正确,用F表错误)。
--++p(T)++(p--)(F)p----(F)(++p)--(T)
2.请初始化一维指针数组color,其初值表初值为"red","blue","white"和"black"。
char*color[]={"red","blue","white","black"};
3.设intx[]={99,98,97},&y=x[1];,
写出语句cout<cout<98,194
4.设intfp(chara,intb=0,doublec=100.0);,判断下列重载函数的正确性。
(用T表正确,用F表错误)。
intfp();(T)voidfp(char);(F)
intfp(char,int);(F)voidfp(char,int,int);(T)
5.要使语句p1=newlong*;p2=newfloat*[15];能正常执行,写出p1和p2的定义。
long**p1;float**p2;
四、(每题10分,共20分)
1.写出下列程序的执行结果。
#include
voidfun(int,int,int*);
voidmain()
{
intx,y,z;
fun(2,3,&x);
fun(4,x,&y);
fun(x,y,&z);
cout<}
voidfun(inta,intb,int*c)
{b*=a;*c=b-a;}
4,12,44
2.下列程序向a盘上的文本文件aaa.dat输出0至100间的整数,请将程序补充完全。
#include
#include
voidmain(void)
{
ofstreamf1("a:
aaa.dat");
if(!
f1(或f1.fail())){
cerr<<"a:
aaa.datfilenotopen!
"<exit
(1);
}
for(inti=0;i<=100;i++)f1<
f1.close();
}
五、(每题10分,共20分)
1.编程求数列1,
,
,
,
,……的所有大于等于0.000001的数据项之和并输出结果。
1、#include
voidmain()
{
intn=1,d=1;
doubles=0.0,s0;
while((s0=double(n)/d)>=0.000001)
{
s+=s0;
d++;
}
cout<
}
2.用递归方法设计函数intArrayMin(intd[],intsize);,其中d为数组,size为数组元素个数;ArrayMin返回d中的最小元素。
intArrayMin(intd[],intsize)
{
intk=d[size-1];
if(size==1)returnk;
if(k<=ArrayMin(d,size-1))returnk;
elsereturnArrayMin(d,size-1);
}
一、单项选择题
1.下列表达式中正确的是 。
(B)
A. (k++)++ B. k---j
C. k--/=5 D. (k+3)=5
2.已知 int f(int); 和 int g(int); 分别是函数f和g的原型。
下列语句中,将函数f作为语句调用的有 。
(D)
A. f(3)+g(3); B. p/=f(3); C. g(f(3)); D. f(g(3));
3.下面四个程序段中,输出23个*号的程序段是 。
(C)
A. for (int i=1; i<23; i++) cout <<’*’;
B. for (int i=23; i>=0; i--) cout <<’*’;
C. int i=23; while (i>0) { cout <<’*’; i--; }
D. int i=0; while (0<=23) { cout <<’*’; i++; }
4.要定义一个int型二维数组a,并使其各元素具有初值:
(B)
2 3 0 0
4 0 5 0
0 0 0 0
则正确的定义语句是 。
A.int a[][]={2,3,0,0,4,0,5,0,0,0,0,0};
B.int a[][4]= {2,3,0,0,4,0,5,0,0,0,0,0};
C.int a[3][4]= {{2,3},{4,,5}};
D.int a[][]={{2,3,0,0},{4,0,5,0},{0,0,0,0}};
5.设有数组定义
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
则表达式 *(*(a+2)+1) 的值是 。
(B)
A. 5 B. 6 C. 9 D. 10
6关于析构函数的说法错误的是(C)
A析构函数只有一个
B析构函数无任何函数类型
C析构函数与构造函数一样可以有形参
D析构函数在对象被撤销是自动执行
7下列说法正确的是(C)
A使用new建立动态对象的语法和建立动态变量的情况完全不同
Bnew和构造函数不能一同使用
C使用new建立一个动态对象时,自动调用构造函数
D使用new建立的动态对象在不用时必须调用析构函数删除
8在使用不同类型的对象对一个对象赋值时,完成类型转换的事(A)
A构造函数 B析构函数 C友元函数 D外部函数
9已知类myClass中的一个成员函数说明如下:
void SetMyClass(myClass& myData)
其中,myClass& myData 的含义是(D)
A指向类myClass的指针为myData
B将myData的地址赋给SetMyClass
C变量myClass与myData按位相与作为SetMyClass的参数
DmyData是类myClass的对象引用,用来作为函数SetMyClass的形参。
10设置虚基类的主要目的是(B)
A简化程序 B消除两义性 C提高运行效率 D减少目标代码
二.多项选择题
1有关析构函数说法正确的是(AD)
A析构函数在对象生存期结束时被自动调用
B析构函数名与类名相同
C定义析构函数时,可以指定返回类行为void
D析构函数不能指定参数
2一下类定义形式中正确的是(AB)
class MyClass1{}
class MyClass2{}
class Myclass3{int cc=’a’;}
class MyClass4{int cc;}
3下面程序段完全正确的是(ABD)
A struct myStruct{ B struct myStruct { C class myClass{ D class myClass{
int num; int num; private:
private:
float f1 ; float f1; int i; int i;
}; }; myClass member; myClass * p;
int i=num; int i=num; }; };
4下列说法正确的是:
(ABC)
Amain函数内声明的局部对象的构造函数在对象声明时自动调用
Bmain函数内声明的局部对象的构造函数在main函数结束时自动调用
C全局对象和静态对象的构造函数在main函数执行之前被调用
D全局对象和静态对象的构造函数在main函数结束之后被调用
5下面说法正确的是(AB)
A构造函数可以进行类型转换
B构造函数用于确保编译器检出对象初始化方面的错误
C初始化和赋值是等价的
D程序必须用于定义的初始化和赋值进行操作
6对于下面的程序,有两义性的语句是(AD)
classA{public:
void f1( );};
classB{public:
void f1( ); void f2 ( );};
classC:
public A,private B{ public:
void f2( ); void f3( );};
C data
A data .f1( ); B data.A:
:
f1( ); C data.f2( ); D void C:
:
f3( ){ f1( ); }
7关于多重继承两义性的描述中正确的是(ABD)
A一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现两义性
B解决两义性的最常用的方法是对成员名的限定法
C基类和派生类是派生类中同时出现的同名函数,也存在两义性问题
D一个派生类是从两个基类派生来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时,也可能出现两义性
8抽象类应含有(CD)
A.至少一个虚函数 B.至多一个虚函数是纯虚函数
C.至多一个虚函数 D.至少一个虚函数是纯虚函数
二、填空题
1.表达式x=x+1表示成增量表达式为 。
(++x )
2.关系表达式x+y>5的相反表达式为 (x+y<=5)
3.执行语句 i=10; do { cout <<’*’; i--; } while (i+3); 后,将显示出 个*号(14 )
4.设有下面的定义
int s[10]={1,2,3,4,5,6,7,8,9,10};
int sum=0;
请完善下面的语句实现求数组s的所有元素之和,并保存在变量sum中:
for ( int ; ; j++ ) ;(j=0 j<10 sum+=s[j] )
5.假定a是一个二维数组,则a[i][j]的指针访问方式为 。
(*(*(a+i)+j) 或 *(a[i]+j) )
三、下列程序运行后的输出结果
1. # include
int a=5;
void main() {
int a=10,b=20;
cout < { int a=0,b=0;
for (int i=1; i<6; i++) {
a+=i; b+=a;
}
cout <:
a< }
cout <}(10 20
15 35 5
10 20)
2. # include
int LB(int *a,int n) {
int s=1;
for (int i=0; i s*=*a++;
return s;
}
void main() {
int a[]={1,2,3,4,5,6,7,8};
int b=LB(a,5)+LB(&a[3],3);
cout <<"b="<
}(10 12)
3. # include
# include
void main() {
char *a[5]={"student","worker","cadre","soldier","peasant"};
char *p1,*p2;
p1=p2=a[0];
for (int i=0; i<5; i++) {
if (strcmp(a[i],p1)>0) p1=a[i];
if (strcmp(a[i],p2)<0) p2=a[i];
}
cout <
template
class FF {
TT a1,a2,a3;
public :
FF(TT b1,TT b2,TT b3) {
a1=b1; a2=b2; a3=b3;
}
TT Sum() { return a1+a2+a3; }
};
void main()
{
FF x(2,3,4),y(5,7,9);
cout <}(9 2)
四、写出下列每个函数的功能
1. # include
int SA(int a,int b) {
if (a>b) return 1;
else if (a==b) return 0;
else return -1;
}(比较两个整数a和b的大小,若a>b则返回1,若a= =b则返回0,若a
)
2.double SF(double x,int n) {
// n为大于等于0的整数
double p=1,s=1;
for (int i=1; i<=n; i++) {
p*=x;
s+=p/(i+1);
}
return s;
}(计算 1+X/2+X2/3+…+Xn/(n+1)的值并返回)
3. float FH() {
float x,y=0,n=0;
cin >>x;
while (x!
=-1) {
n++; y+=x;
cin >>x;
}
if (n==0) return y; else return y/n;
}(求出从键盘上输入的一批常数的平均值,以-1作为结束输入的标志)
4. template
void WE(Type a[],Type b[],int n) {
for (int i=0; i b[n-i-1]=a[i];
}(模板函数,把数组a的每个元素按逆序放入数组b中)
五、编写程序
1.从键盘输入10个正整数据并累加求和。
# include
void main()
{
int x,s=0;
cout <<"输入10个正整数:
";
for (int i=1; i<=10; i++)
{
do{ // 该循环控制输入的是正整数
cin >>x;
}while (x<=0);
s += x;
}
cout <
}
2.一维数组元素求和。
# include
void main()
{
int a[10];
int i,s=0;
cout <<"输入10个整数:
"< for (i=0; i<10; i++)
cin >>a[i];
for (i=0; i<10; i++)
s += a[i];
cout <
}
3.在一维数组中查找给定的数据。
# include
void main()
{
int a[10];
int i;
cout <<"输入10个整数:
"< for (i=0; i<10; i++)
cin >>a[i];
int num;
cout <<"输入查找的数:
";
cin >>num;
for (i=0; i<10; i++)
if (a[i]==num) break;
if (i<10)
cout <<"找到!
"< else
cout <<"没有找到!
"<}
4.从键盘上输入一行字符串,然后将所有小写字母改写成大写字母,最后输出该字符串。
# include
# include
void main()
{
char s[80];
c