C++练习题3

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、单项选择题
1.下列字符串中,不可以作为C++标识符的是(D )。

A)Return B)score_1C)_0_D)0Name
2.下面有关类的说法中不正确的是(C)
A)不可以在类的声明中给数据成员赋初值
B)一个类可定义多个构造函数
C)析构函数可以有一个或多个参数
D)在一个类中可以用另一个类的对象作为数据成员
3.下列代码的输出结果为(A )。

int a=2, b=4, c=6;
if( a>b)
a=b;
c=a;
if(c!=a)
c=b;
cout << a << "," << b << "," << c <<endl;
A)2,4,2B)2,4,4
C)2,4,6 D)程序中有语法错误
4.在"int b[ ][3]={{1},{3,2},{4,5,6},{0}};"中,b[1][1]的值为(A)。

A)2B)3C)1D)0
5.派生类有三种继承基类的方式,三种继承方式的共同特点是(A )。

A)基类的私有成员在派生类中不可直接访问
B)基类的私有成员在派生类中仍然是私有成员
C)基类的公有成员在派生类中仍然是公有成员
D)基类的保护成员在派生类中仍然是保护成员
6.设x,y和z都是int型变量,且x=3,y=6,z=4,则下面表达式的值为0的是(D )
A)'x' && 'y'B)x<=y C)x || y+z && y-z D)!((x<y) && !z || 1)
7.下面程序段运行后的输出结果是(C )。

int x=5;
if(x--<5)
cout<<x;
else
cout<<++x;
A)3B)4C)5D)6
8.下列do…while循环的次数是( B )
int x= -1;
do
{
x = x*x ;
}while(!x) ;
A)无限次B)1次C)2次D)0 次
9.下面程序段的输出结果是(B )
char c[5]={'a', 'b', '\\', '\0' , 'c' };
cout << c;
A)ab\\B)ab\C)ab\c D)ab\\ c
10.下面程序的输出结果是(B)
int n=24680, d;
while ( n!=0 )
{
d = n%10;
n /= 10;
cout<<d;
}
A)24680 B)08642C)8642D)2
11.执行下面程序,输出结果为(B)
#include<iostream>
using namespace std;
void main()
{int i=2,j=3;
cout<<i<<",";
i += 2 * j ;
{int i=0;
i++;
cout<<i<<","<<j<<",";
}
cout<<i<<","<<j<<endl;
}
A)2,1,3,1,3B)2,1,3,8,3C)2,9,3,9,3D)变量i重复定义错误
12.下面程序的输出结果为(A )
#include <iostream>
using namespace std;
void main()
{ int x=1,a=0,b=0;
switch(x)
{
case 0:b++;
case 1:a++;
case 2:a++,b++;
}
cout<<"a="<<a<<",b="<<b;
}
A)a=2,b=1B)a=1,b=1C)a=1,b=0D)a=2,b=2
13.有如下定义:
char x[ ]="abcdefg";
char y[ ]={'a','b','c','d','e','f','g'};
关于x、y两个数组的正确描述为( C )。

A)数组x的字节数小于数组y的字节数;
B)数组x的字节数和数组y的字节数相同;
C)数组x的字节数大于数组y的字节数;
D)数组x和数组y完全等价。

14.已知一个函数的原型是:int fun(int x, double y=0.0); 则下列函数中可以对fun进行函数重
载的是(D )
A)int fun(int x);B)float fun(int y);
C)float fun(int y,double x); D)int fun(int x,int y);
15.执行下列代码后,屏幕输出显示为(A)
#include<iostream>
using namespace std;
class CBase {
public:
CBase() { cout << "CBase(): Constructor" << endl; }
~CBase() { cout << "CBase(): Destructor" << endl; }
};
class CDerive :public CBase {
public:
CDerive() { cout << "CDerive(): Constructor" << endl; }
~CDerive() { cout << "CDerive(): Destructor" << endl; }
};
void main(){ CDerive obj; }
16. 下面选项中数组定义等价的是(D )
A )int a[2][3]={3,4,5}; 与int a[][3]={3,4,5};
B )int a[2][3]={0,1};
与int a[2][3]={{0},{1}};
C )int a[2][3]={1,0,2,2,4,5}; 与int a[2][]={1,0,2,2,4,5};
D )int a[][3]={1,0,2,2,4,5}; 与int a[2][3]={1,0,2,2,4,5};
17. 在C++程序中,对象之间的相互通信,是通过( B )来实现的。

A )继承
B )调用成员函数
C )封装
D )函数重载
二、填空题(每空1分, 共14分)。

1. 假定一个类的构造函数为A(int x=1, int y=9 ) {a=x; b=a*y;},则执行A x(7); 语句后,
x.a=____7_____,x.b= ______63_________。

2. 以下程序输出结果是__ _5,9__ ___。

#include <iostream> using namespace std; void main()
{ int i = 0, sum =0; for (i = 1; i <= 20; i++) { if ( i%2==0 ) continue; sum += i; if(sum >= 5) break; } cout <<i <<"," << sum << endl; }
3. 以下程序输出结果是: 13 。

#include<iostream> using namespace std; void main()
D ) C Base(): Constructor
CDerive(): Constructor CBase(): Destructor CDerive(): Destructor A )CBase(): Constructor
CDerive(): Constructor CDerive(): Destructor CBase(): Destructor B )CDerive(): Constructor
CBase(): Constructor CBase(): Destructor CDerive(): Destructor
C )CDerive(): Constructor CBase(): Constructor CDerive(): Destructor CBase(): Destructor
{char ch[7]={"123ab"};
int i, s = 0;
for(i=0; ch[i]>='0' && ch[i]<='9'; i += 2)
s = 10 * s + ch[i] - '0';
cout<< s <<endl;
}
4.在已经定义了浮点型指针pt后,为了得到一个包括100个浮点数的动态存储空间,并由
pt所指向,应使用语句____float * pt = new float [100]; ______;撤销该空间应该用语句_____delete [] pt;_____________________。

5.如果期望某个变量的值在程序运行期间不能改变,则在定义该变量时,可以加上关键字
___const_________,这种变量成为常变量。

6.执行如下程序,输出结果为20 。

#include<iostream>
using namespace std;
void main( )
{int a=3,b=2,c=1;
int d, e;
d=a>b>c;
e = d?10:20;
cout<< e << endl;
}
7.设m、n为整型变量,x为浮点型变量,其中m=7,n=3,x=2.4,则算术表达式m%4+(float)(m/n)
+ x的值为7.4 。

8.执行如下程序,输出结果为 3 。

#include<iostream>
using namespace std;
void main()
{int i=0,j=0;
if ( i > 0)
if ( j <=0)
cout << "1;";
else
cout<< "2;";
cout<<"3" << endl;
}
9.已知char *str=”Programming”;,则执行语句cout << str[5];会输出 a ,
cout << str+5;会输出amming 。

10.运行如下程序,屏幕输出为:15。

#include<iostream>
using namespace std;
int add(int x = 0, int y = 2, int z = 4 ){
return x + y + z; }
void main()
{ int s=add(1) + add(0,1) + add(0,1,2) ;
cout<<s;
}
11.运行如下程序,屏幕输出为x=19;y=79 。

#include <iostream>
using namespace std;
void main()
{int a[5]={66,48,19,79,47};
int x=a[0],y=a[0];
for (int i=0; i<5;i++)
{
if (x>a[i]) x=a[i];
if (y<a[i]) y=a[i];
}
cout<<"x="<<x;
cout<<";y="<<y<<endl;
}
三.程序改错题(每修改一个错误3分,其中找到错误1分,修改正确2分,共18分)[每题有2个错误,请在程序中修改,不得增添或删减行]
1.下面是一个根据输入圆的半径进行面积计算并输出的程序。

#include <iostream>
using namespace std;
#define PI 3.14159;
int main()
{
double rad;// 圆的半径
double S; // 圆的面积
cout << “Please input the radius:”;
cin >> rad;
if ( rad = 0)
S = 0.0 ;
else
S = PI * rad * rad; // 计算面积
cout << “The area is:” << S ;
return 0;
}
第一处错误:#define PI 3.14159;修改为:#define PI 3.14159
第二处错误:if ( rad = 0)修改为:if ( rad == 0)
2.下面程序计算1~20之间所有奇数的和,函数add计算每次调用时实参的累加和并返回累
加结果,采用指针p访问变量Sum并输出显示。

#include <iostream>
using namespace std;
int add(int n) // 计算参数的累加和
{ static int sum; sum=0;
sum += n; cout << “sum =”<< sum <<endl;
return sum;
}
void main()
{
int Sum, *p , i;
for ( i=1; i<=20; i += 2)
Sum = add( i);
*p=Sum;
cout<<*p<<endl;
}
第一处错误:static int sum; sum =0;修改为:static int sum =0;
第二处错误:*p=Sum;修改为:p=&Sum;
3.创建一个CSquare类,调用构造函数和成员函数,根据边长计算正方形面积并输出。

请改
正程序中的2处错误。

#include <iostream>
using namespace std;
class CSquare
{
public:
CSquare (int i=0)
{length = i ;}
int GetArea( )
{CalArea( );
return Area;
}
~ CSquare (int x=1){ }
private:
void CalArea( );
int Area;
int length; };
void CSquare::CalArea( )
{Area = length * length ; }
int main()
{
CSquare a(123) ;
cout << a. Area ;
return 0;
}
第一处错误:~ CSquare (int x=1){ }修改为:~ CSquare (){ }
第二处错误:cout << a. Area ;修改为:cout << a. GetArea( ) ;
四.程序填充题(每空3分,共24分)
1.下列程序将字符串str1中的大写字母转化成小写字母,其余字符不变,结果拷贝到字符串
str2中,最后输出显示str1和str2中的内容。

#include <iostream>
using namespace std;
int main( )
{
char str1[ ] = "The C++ Programming Language !", str2[100];
char *p1, *p2;
p1 = str1; p2 = str2;
for( ; ; p1++, p2++) // 循环直到遇到str1中的字符串结束符if ('A' <= *p1 && *p1 <='Z') // 如果是大写字母
// 将大写字母转换为小写字母
else
*p2 = *p1;
*p2 = '\0';
p1 = str1; p2 = str2;
cout << "str1 is:" << p1 <<endl;
cout << "str2 is:" << p2 <<endl;
return 0;
}
第1处空填:*p1 !='\0' 或*p1 !=0 或*p1
第2处空填:*p2 = *p1-'A'+'a'; 或*p2 = *p1+32;
2.从键盘上输入一个不包括空格的字符串,长度不超过80个字符,统计字符串中是英文小
写字母的字符个数并显示输出。

#include <iostream>
using namespace std;
int count (char str[ ] );
void main( )
{ char text[81]={0};
cout<<"Please enter a line:";
cin>>text;
cout<<"The number of lower case letters =\n";
cout<< << endl; // 调用count函数
}
int count ( char str[ ] )
{ int num=0;
for (int i=0; str[i]; i++)
if ( ) // 判断是否为小写字母
num++;
return num;
}
第1处空填:count( text)
第2处空填:str[i]>='a' && str[i]<='z'
3.下面程序利用指针变量作为形参实现两个变量的值互换,请在下面的下划线处填入正确的
程序代码,完成程序功能。

#include <iostream>
using namespace std;
void swap(int *, int &) ;
int main()
{
int i=5, j=8;
cout<<i<<" "<<j<<endl;
return 0;
}
void swap(int *p1, int & p2)
{ int temp;
temp=*p1;
p2 = temp;
}
第1处空填:swap(&i, j) ;
第2处空填:*p1 = p2;
4.以下是一个采用类结构的方式求n!的程序,请填空完成程序。

#include <iostream>
using namespace std;
class Factorial
{
private:
int n, fact;
public:
Factorial( int );
void Calculate( );
void Display();
};
Factorial::Factorial(int val) {
n = val;
fact = 1; // 保存n!的计算结果
}
void Factorial::Calculate ( )
{ int i=n;
while( i >1){ fact *= ; } // 计算n!
}
void Factorial::Display () { cout<<n<<"!="<<fact<<endl; }
void main()
{ int n;
cout<<"请输入n的值:"; cin>>n;
A.Calculate ( );
A.Display ( );
}
第1处空填:i; i--; 或i--;
第2处空填:Factorial A(n) ;
五.编程题(第1题13分,第2题14分,共27分)
1.主函数中的浮点型二维数组A[3][3]需要进行数据修改和显示操作,具体要求如下:
1)编写数据修改函数void fun1(float x[][3], int n),功能是将二维数组A中大于等于所有元素平均值的元素赋值为1,小于平均值的元素赋为0;形参中的n为被修改二维数组A的行数;2)编写显示函数void Show(float * p, int n, int m),功能是显示二维数组中的所有元素;形参中指针p用于访问被显示数组,n为被显示数组行数,m为被显示数组列数;
3)编写主函数,为A[3][3]赋初值,依次分别为1,2,3,4,5,6,7,8,9;调用函数fun1完成元素值修改功能,再调用Show函数显示修改后的数组数据。

注:二维数组A[3][3]的首元素的地址为A[0] 或&A[0][0]。

#include <iostream>
using namespace std;
void fun1(float x[][3],int n)
{int i,j;
float temp=0, average=0;
for( i=0;i<3;i++)
for( j=0;j<n;j++)
temp += x[i][i];
average = temp / (3.*n);
for( i=0;i<3;i++)
for( j=0;j<n;j++)
{
if(x[i][j]>=average)
x[i][j] = 1.0;
else
x[i][j] = 0.0;
}
}
void show(float * p, int n, int m)
{
int i,j;
for( i=0;i<n;i++)
{
for( j=0;j<m;j++)
cout << *(p+i*m+j)<<" ";
cout<<"\n";
}
}
int main()
{
float A[3][3]={1,2,3,4,5,6,7,8,9};
fun1(A,3);
show(A[0],3,3);
return 0;
}
2.定义一个描述哺乳动物基本信息的类,类名称为Mammal,以类Mammal作为基类,公有
派生Dog类。

具体要求如下:
1)Mammal的成员包括:
a.保护数据成员:
char name[30]; // 姓名
int age;// 年龄
b.公有成员函数
虚函数:speak( ); //显示输出自己的所有信息,姓名、年龄
构造函数:Mammal( char * Name, int Age ) ; //完成类Mammal所有数据成员初始化2)派生类Dog的具体要求:
a.私有数据成员
string sound;// 叫声
b.公有成员函数
构造函数:完成数据成员的初始化
虚函数:speak( ); //显示输出自己的所有信息,姓名、年龄、叫声3)main( )函数中建立Mammal对象m和Dog类对象dog,分别为m("MAMMAL", 3);
Dog("DOG",5," bark"); ,建立一个Mammal的指针pt,首先指向m,调用speak函数,然后再指向dog,也调用speak。

分别输出两个对象的信息。

#include <iostream>
#include <string>
using namespace std;
class Mammal
{
protected:
char * name;
int age;
public:
Mammal(char *Name, int Age)
{
name = Name;
age = Age;
}
virtual void speak()
{
cout<<"Name:"<<name<<endl;
cout<<"Age:"<<age<<endl;
}
};
class Dog:public Mammal
{
private:
string sound;
public:
Dog(char *Name, int Age, string Sound):Mammal(Name, Age) { sound = Sound;}
virtual void speak()
{
cout<<"Name:"<<name<<endl;
cout<<"Age:"<<age<<endl;
cout<<"Sound:"<<sound<<endl;
}
};
int main()
{
Mammal m("MAMMAL", 3);
Dog dog("DOG", 5, "bark");
Mammal *pt;
pt = &m;
pt->speak();
pt = &dog;
pt->speak();
return 0;
}。

相关文档
最新文档