C+
语言程序设计
期末
复习资料
C++语言程序设计复习题
一、单选题
1. 在定义函数的格式类型修饰符 函数名 (形式参数表)函数体;中,函数体可以是( )。
A、基本语句 B、复合语句
C、空语句 D、语句序列
2.A>B&&A<=B的值( )。
A、为true B、为false
C、与A>B 的值相同 D、与A<=B的值相同
3.每一个实在参数就是一个( )。
A、表达式 B、常量
C、变量 D、函数调用
4. 假定AB为一个类,则该类的拷贝构造函数的声明语句为________。
A AB&(AB x); B AB(AB x) C AB(AB &x); D AB(AB* x)
5. 对于结构中定义的成员,其隐含访问权限为________。
A public B protected C private D static
6.当使用fstream流类定义一个流对象并打开一个磁盘文件时,文件的隐含打开方
式为________。
A ios::in B ios::out C ios::in | ios::out D 没有
7.在PC机中运行的C++ 语言程序,char类型的数据占 字节。
A、1 B、2 C、3 D、4
8.指出下列哪种基本类型是错误的 B 。
A、float B、integer C、char D、long
9.若a,b,c均为整型变量,则表达式a=2,b=a+2,c=0的值为 。
A、不定 B、2 C、4 D、0
10.设char t=’A’;则表达式5+0.6+t值的数据类型为 。
A、int B、float C、不确定 D、double
11.以下 为不正确的if语句。
A、if (x>y); B、if (x= =y) x+y;
C、if (x! = y) cin>>x else cin>>y; D、if(x<y) {x++;y++;}
12.指向数组元素为整型的一维数组的指针变量的定义是 。
A、int *p( ) B、int (*p)( ) C、int *p[4] D、int (*p)[4]
13.以下关于switch语句和break语句的描述中不正确的是 。
A、 break语句不能用于循环语句和switch语句外的任何其它语句
B、 switch语句中使用break语句或continue语句的作用相同
C、 在循环语句中使用break语句是为了使流程跳出循环体,提前结束循环
D、 在循环语句中使用continue语句是为了结束本次循环,而不是终止整个循环的执行。
14.下列关于函数定义的说法,正确的是 。
A、函数定义时,可以嵌套 B、函数定义不可以嵌套,但可以嵌套调用
C、主函数main()内可以定义函数 D、函数定义可以嵌套,调用也可以嵌套。
15.若有以下说明语句
int a[3][4]={2,3,4,5,3,4,5,6,4,5,6,7};
则正确对数组元素引用为 。
A、*(a+1) B、*(a[3]+2) C、a[1]+3 D、a[0][0]
16.若定义如下的共同体类型变量x,则x所占用的内存字节数为 (以IBM PC机为例)
union data
{ int i;
char ch;
double f;
}x;
A、7 B、11 C、8 D、10
二、填空题
1.应用程序TEST.CPP中只有一个函数,这个函数的名称是 main 。
2.5|6,5&6和5^6的值分别是 7 , 4 和 3 。
3.不借助于其他变量交换x和y两个变量的值,应顺序执行的三个赋值语句是 x=x+y , y=x-y 和 x=x-y 。
4.下面的语句显示输出8行8列数组h的主对角线上的所有元素,请补充完整:
for( i=0 ; i<8 ;i++)cout<< h[i][i] <<' ' ;
5.若一函数是以return;结束运行的,说明该函数是 无参 函数。
6.若正常执行了如下语句:
int m[20],*p1=&m[5],*p2=m+17,n;
n=p2-p1;
则n的值为 12 。
7.已知' A'一'Z'的ASCII码为65—90,当执行"char ch=14*5+2;cout<<ch<<endl;"语句序列后,得到的输出结果为 H 。
8.float和double类型的长度分别为 4 和 8 。
9.表达式x=x+l表示成增量表达式为 x++ 。
10.假定p所指对象的值为36,p+l所指对象的值为49,则*++p的值为 49 。
11.假定要访问一个结构对象x中的由a指针成员所指向的对象,则表示方法为 *(x.a) 。
12.对一个类中的数据成员的初始化可以通过构造函数中的 初始化表 实现,也可以通过构造函数中的 函数体 实现。
13.在C++程序中,语句之间必须用 ; 分隔。
14.在C++程序中, = 运算符优先级最低。
15.在C++语言中,在IBM PC机环境下,double型数据占 8 字节。
16.若k 为int型变量,则下列语句的输出为 16 。
k=017;
cout<<++k;
17.表达式 b*b-4*a*c>0 是判断一元二次方式ax2+bx+c=0有实根的表达式。
18.表达式(b=10)&&(c=0)的值为 0 。
19.已知a的ASCII的十进制代码为97,则表达式10+15.2-27*(‘a’-‘b’)的值为 52.2 。
20.在C++语言中,& 作为双目运算符时表示的是 按位与 ,而作为单目运算时表示的是 引用 。
21.一个函数由函数 名 和函数 体 两部分构成。
22.C++在执行过程中不检查数组是否 越界 。
23.C++语言规定,调用一个函数时,实参数变量与形参数变量之间的数据传递是 。
24.指针变量的指针是 地址 。
25.结构体变量中的成员的引用一般形式:结构变量名.成员名 。
26.写出满足A>B则把A+B赋给M的if语句 if(A>B) M=A+B 。
27.写出指向int型变量的指针变量p的一个定义语句: int *p 。
三、给出下列程序运行后的输出结果
1.#include<iostream.h>
void SB(char ch) {
switch(ch) {
case 'A': case 'a':
cout<<"well !"; break;
case 'B': case 'b':
cout<<"good !"; break;
case 'C': case 'c':
cout<<"pass ! "; break;
default:
cout<<"bad! "; break;
}
cout<<endl;
}
void main() {
char a[6] ="Abcaf";
for(int i=0; a[i]; i++) SB(a[i]);
}
答案:
well !
good !
pass !
well !
bad!
2.#include<iostream.h>
void main() {
int a[10]= {36,25,48,14,55,40,72,40,86,27};
int b1, b2;
b1 = b2 = a[0];
for(int i= 1;i<10;i++)
if(a[i]>b1) {
if(b1>b2) b2=b1;
b1 = a[i];
}
cout<<b1<<' '<<b2<<endl;
}
答案:86 72
3.#include<iomanip.h>
void main() {
int a[8]= {3,5,7,9,11,13,15,17};
int *p=a;
for(int i=0;i<8;i++) {
*p+=10;
cout<<setw(5)<< *p++;
if ((i+1) %3==0) cout<<endl;
}
}
答案:
13 15 27
19 21 23
25 27
4. #include<iomanip.h>
void LE(int* a, int* b) {
int x=*a;
*a=*b; *b=x;
cout<<*a<<' '<<*b<<endl;
}
void main() {
int x=10, y=25;
LE(&x,&y); cout<<x<<' '<<y<<endl;
}
答案:
25 10
25 10
5. #include<iostream.h>
class A {
int a,b;
public:
A() {a=b=0;}
A(int aa, int bb) {
a=aa; b=bb;
cout<<a<<' '<<b<<endl;
}
};
void main() {
A x,y(2,3),z(4,5);
}
答案:(下面是四个数,中间有空格)
2 3
4 5
6.#include<iostream.h>
void main()
{int m=3,x=4,y=4,z=7;
m=(m<x)?x++: m;
m=(m<y)?y++: m;
m=(m<z)?z++: m;
cout>>“m=”>>m>>endl>>”x=”>>x>>endl>>”y=”>>y>>endl>>”z=”>>z;
}
程序运行后的输出结果为:
答案:
m=7
x=5
y=4
z=8
7.#include<iostream.h>
void sort(int x,int y,int z)
{ int t;
if (x>y)
{t=x;x=y;y=t;}
if(x>z)
{t=x;x=z;z=t;}
if(y>z)
{t=y;y=z;z=t;}
cout>>“x=”>>x>>’ ‘>>”y=”>>y>>’ ‘>>”z=”>>z;
}
void main()
{ int a,b,c;
cin>>a>>b>>c;
cout>>“a=”>>a>>’ ‘>>”b=”>>b>>’ ‘>>”c=”>>c;
sort(a,b,c);
cout>>“a=”>>a>>’ ‘>>”b=”>>b>>’ ‘>>”c=”>>c;
}
假设输入为:10 6 8<CR>则程序运行后的输出结果为:
参考答案:
a=10 b=6 c=8x=6 y=8 z=10a=10 b=6 c=8
8. #include<iostream.h>
void prn str(char *str,int m,int n)
{ int i;
for (i=1;i<m;i++)
{ cout>>“*”;
str++;
}
for (i=1;(i<=n)&&(*str);i++)
court>>*str++;
while(*str)
{ cout>>“*”;
str++;
}
cout>>endl;
}
void main()
{ char *p=“information”;
prn str(p,3,4);
}
程序运行后的输出结果为:
答案: **form*****
四、写出下列每个函数的功能
1. int Count(double a[], int n) {
double m=0;
int i;
for(i=0;i<n;i++) m+=a[i];
m=m/n;
int c=0;
for(i=0;i<n;i++)
if(a[i]>=m) c++;
return c;
}
答案:计算并返回参数数组中大于等于参数数组中所有元素平均值的元素个数
2. long fact(long n){
if (n<=1L) return 1L;
return n*fact(n-1L);
}
答案:通过函数递归调用,计算并返回参数n的阶乘
3. #include<iostream.h>
void WA(int a[], int n) {
for(int i=0;i<n-1;i++) {
int k=i;
for(int j=i+1;j<n;j++)
if(a[j]<a[k]) k=j;
int x=a[i]; a[i]=a[k]; a[k]=x;
}
}
答案:对参数数组中的元素进行升序排序
4.#include<iomanip.h>
#include<fstream.h>
void JB(char* fname)
//可把以fname所指字符串作为文件标识符的文件称为fname文件,
//假定该文件中保存着一批字符串,每个字符串的长度均小于20。
{
ifstream fin(fname);
char a[20];
int i=0;
while(fin>>a) {
cout<<a<<endl;
i++;
}
fin.close();
cout<<"i="<<i<<endl;
}
答案:依次把参数fname所指的文件中字符输入到字符串数组a中,并输出文件中字符个数
五、编程题
1.设计一程序,它输入一个整数,判断它是否是整数序列32,52,31,86,3,44,11,7,55,63中的一个;若是,显示该整数在序列中的序号(注:最小序号是1),否则显示0。
答案:
#include<iostream.h>
int getno(int val)
{
int a[]={32,52,31,86,3,44,11,7,55,63};
for(int i=0;i<10;i++)
if(val==a[i]) return(i+1);
return(0);
}
void main()
{
int val;
cin>>val;
cout<<getno(val);
}
2.编写一个程序,统计输入的一行字符中数字、空格及其它字符分别有多少个。
答案:
#include<iostream.h>
void main()
{
int i,eng=0,numb=0,blan=0,others=0;
char a[100];
cin.getline(a,100);
for(i=0;a[i];i++)
{
if(a[i]<57&&a[i]>48) numb++;
else if(a[i]==32) blan++;
else if((a[i]>65&&a[i]<90)||(a[i]>97&&a[i]<97+25)) eng++;
else others++;
}
cout<<"eng="<<eng<<endl<<"numb="<<numb<<endl;
cout<<"blan="<<blan<<endl<<"others="<<others<<endl;
}
3.有8个学生,每个学生四门课程的成绩存放在一个8行5列的二维数组的0到7行的1到4列中,编写一个函数实现:计算每个学生四门课程的总成绩,并存放在该学生所在行的第0列中。
答案:
#include<iostream.h>
void main()
{
int i,j;
int a[8][5]={{0}};
for(i=0;i<8;i++)
for(j=1;j<5;j++)
cin>>a[i][j]; //输入学生成绩
for(i=0;i<8;i++)
for(j=1;j<5;j++)
a[i][0]+=a[i][j]; //求学生四门课程总成绩
}