资源描述
资料内容仅供您学习参考,如有不当或者侵权,请联系改正或者删除。
C++语言程序设计课程期末针对性训练
一、 单选题( 每小题2分, 共20分)
1.在每个C++程序中都必须包含有这样一个函数, 该函数的函数名为( A ) 。
A. main B. MAIN C. name D. function
2.设x和y均为bool量, 则x && y为真的条件是( D ) 。
A. 其中一个为假 B. 其中一个为真
C. 它们均为假 D. 它们均为真
3. 逻辑表示式x>0 || y==5的相反表示式为( B ) 。
A. x<=0 || y!=5 B. x<=0 && y!=5
C. x>0 || y!=5 D. x>0 && y==5
4. 假定p是一个指向float型数据的指针, 则p+1所指数据的地址比p所指数据的地址大( C ) 个字节。
A. 1 B. 2 C. 4 D. 8
5. 枚举类型中的每个枚举常量的值都是一个( A ) 。
A. 整数 B. 浮点数 C. 字符 D. 逻辑值
6. 循环体至少被执行一次的语句为( C ) 语句。
A. for循环 B. while循环 C. do循环 D. 任一种循环
7. 在下面的字符数组定义中, ( D ) 语句有语法错误。
A. char a[20]=”abcdefg”; B. char a[]=”x+y=55.”;
C. char a[15]={’1’,’2’}; D. char a[10]=’5’;
8. 若用数组名作为函数调用的实参, 传递给形参的是( A ) 。
A. 数组的首地址 B. 数组中第一个元素的值
C. 数组全部元素的值 D. 数组元素的个数
9.假定AB为一个类, 则执行”AB a(4), b[5], *p[2];”语句时, 自动调用该类构造函数的次数为( A ) 。
A. 6 B. 7 C. 9 D. 11
10.当使用fstream流类定义一个流对象并打开一个磁盘文件时, 文件的隐含打开方式为( D ) 。
A. ios::in B. ios::out C. ios::in | ios::out D. 没有
二、 填空题( 每小题2分, 共20分)
1. 若需要定义一个标识符常量, 而且使C++能够进行类型检查, 则应在定义语句的开始使用保留字__ const __。
2. 算术表示式对应的C++表示式为_(x*y*y)/(3*a)+4*b-1 _。
3. 逻辑表示式x>y && x!=10的相反表示式为__ x<=y || x==10__。
4. 每个字符指针变量占用内存__4____个字节。
5. 执行”typedef int DataType;”语句后, 在使用int定义整型变量的地方都能够使用标识符___ DataType _______来定义整型变量。
6. 对于在所有函数定义之外定义的变量, 若没有被初始化则系统隐含对它赋予的初值为___0_____。
7.假定p所指对象的值为25, p+1所指对象的值为46, 则执行”*(p++);”语句后, p所指对象的值为___46_____。
8.假定一个结构类型的定义为”struct A{int a; double* b; A* c;};”, 则该类型的大小为____12___字节。
9.假定一维数组的定义为”int a[8];”, 则该数组所含元素的个数为_____8___。
10. 若while循环语句的开始为”while(i++<=10)”, 若i的初值为0, 同时在循环体中不会修改i的值, 则其循环体将被重复执行____11______次后正常结束。
三、 写出下列每个程序运行后的输出结果( 每小题6分, 共30分)
1. #include<iostream.h>
void main() {
int s1=0, s2=1;
for(int i=1; i<=6; i++) {s1+=i; s2*=i;}
cout<<s1<<','<<s2<<endl;
}
输出结果: 21,720
2. #include<iostream.h>
void main() {
int a[10]={68,79,86,65,46,94,37,78,60,53};
int c=0;
for(int i=0;i<10;i++)
if(a[i]>=60) c++;
cout<<”c=”<<c<<endl;
}
输出结果: c=7
3. #include<iostream.h>
void main() {
int a[3][4]={{1,2,7,8},{5,6,11,15},{9,20,3,4}};
int m=a[0][0];
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
if(a[i][j]>m) m=a[i][j];
cout<<m<<endl;
}
输出结果: 20
4. #include<iostream.h>
void main() {
int a=10, b=15;
cout<<a<<' '<<b<<' ';
{ a*=3;
int b=a+20;
cout<<a<<' '<<b<<' ';
}
cout<<a<<' '<<b<<endl;
}
输出结果: 10 15 30 50 30 15
5. #include<iostream.h>
void main() {
int a[8]={6,19,4,12,20,5,18,25};
int* p=a;
for(p=a; p<a+8;p++)
if(*p<10) cout<<*p<<’ ‘;
cout<<endl;
}
输出结果: 6 4 5
四、 写出下列每个函数的功能( 每小题8分, 共24分)
1. bool WB(int a[], int n, int x) {
for(int i=0;i<n;i++)
if(a[i]==x) return true;
return false;
}
函数功能: 从数组a中顺序查找值为x的元素, 若查找成功则返回真, 否则返回假。
2. int LJ(int a[], int n) {
int k=0;
for(int i=1;i<n;i++)
if(a[i]>a[k]) k=i;
return a[k];
}
函数功能: 求出数组a中n个元素的最大值并返回。
3. 假定结构类型Dnode中的data域为结点值域, next域为结点指针域。
DNode* QB(int n)
{
if(n==0) {return NULL;}
DNode* f=new DNode;
cin>>f->data;
DNode* p=f;
while(--n) {
p=p->next=new DNode;
cin>>p->data;
}
p->next=NULL;
return f;
函数功能: 建立一个具有n个结点的链表, 每个结点的值依次由键盘输入, 该函数返回其表头指针。
五、 按题目要求编写程序( 6分)
已知6≤a≤30、 15≤b≤36, 求出满足不定方程2a+5b=126的全部整数组解。如(13,20)就是其中的一组解, 并按此格式输出每组解。
答: #include<iostream.h>
void main()
{
int a,b;
for(a=6;a<=30; a++)
for(b=15;b<=36;b++)
if(2*a+5*b==126) cout<<'('<<a<<','<<b<<')'<<endl;
}
训练第二套
一、 单选题( 每小题2分, 共20分)
1. 枚举类型中的每个枚举常量的值都是一个( A ) 值。
A. 整数 B. 浮点数 C. 字符 D. 逻辑
2.设x和y均为bool量, 则逻辑表示式x || y为假的条件是( C ) 。
A. 它们均为真 B. 其中一个为真
C. 它们均为假 D. 其中一个为假
3. 声明或定义一个内联函数时, 必须在函数开始使用保留字( D ) 。
A. static B. const C. extern D. inline
4. 在下面的函数声明中, 存在着语法错误的是( D ) 。
A. BC(int a, int); B. BC(int, int);
C. BC(int, int=5); D. BC(int x; int y);
5. 假定a为一个整型数组名, 则元素a[4]与( C ) 的表示等价。
A. a+4 B. *a+4 C. *(a+4) D. *(a+16)
6. 下面循环语句执行结束后输出的i值为( B ) 的值。
for(int i=0; i<n; i++) if(i>n/2) {cout<<i<<endl; break;}
A. n/2 B. n/2+1 C. n-1 D. n
7. 将两个字符串连接起来组成一个字符串时, 选用( C ) 函数。
A. strlen() B. strcpy() C. strcat() D. strcmp()
8. 预处理命令在程序中都是以( B )字符开头的。
A. * B. # C. & D. @
9. 假定有定义”struct BOOK{char title[40]; float price;};”, 则不正确的变量定义语句为( D ) 。
A. BOOK x; ; B. BOOK x={"C++ Programming",27.0};
C. BOOK *x=new BOOK; D. BOOK x=new BOOK;
10. 假定AB为一个类, px为指向该类动态对象数组的指针, 该数组长度为n, 则执行”delete []px;”语句时, 自动调用该类析构函数的次数为( B ) 。
A. 1 B. n C. n-1 D. n+1
二、 填空题( 每小题2分, 共20分)
1.已知'A'~'Z'的ASCII码为65~90, 当执行”char ch=14*4+12;cout<<ch;”语句序列后, 得到的输出结果为___D_____。
2.double类型的长度为____8____。
3. 表示式x=x+1表示成增量表示式为_____++x _____。
4. 逻辑表示式a<=b || b==15的相反表示式为____a>b && b!=15____。
5. 假定一个二维数组的定义为”char* a[5][4];”, 则该数组所含元素的个数为____20____, 所占存储空间的字节数为___80_____。
6.当函数中的___局部____变量没有被赋初值时, 它的值是不确定的。
7.假定一个结构类型的定义为”struct A{double a,b; A* c;};”, 则该类型的大小为___20_____字节。
8. 假定要访问一个结构指针p所指对象中的数据成员data, 则表示方法为_ p->data _。
9.假定用户没有给一个名为AB的类定义构造函数, 则系统为其隐含定义的构造函数为 AB(){}_。
10. 当在程序中执行到 break 语句时, 就立即结束本层循环类语句或switch语句的执行。
三、 写出下列每个程序运行后的输出结果( 每小题6分, 共30分)
1. #include<iostream.h>
void main() {
int s=0;
for(int i=1;i<=8;i=+2)
s+=i*i;
cout<<"s="<<s<<endl;
}
输出结果: s=84
2. #include<iostream.h>
void main() {
int i=1,s=0;
while(s<20) {
if(i%2!=0) s+=i;
i++;
}
cout<<i<<’,’<<s<<endl;
}
输出结果: 10,25
3. #include<iostream.h>
void main() {
int a[8]={36,25,48,14,55,20,47,82};
int b1, b2;
b1=b2=a[0];
for(int i=1; i<8; i++) {
if(a[i]<b1) b1=a[i];
if(a[i]>b2) b2=a[i];
}
cout<<b1<<','<<b2<<endl;
}
输出结果: 14,82
4. #include<iomanip.h>
int LB(int *a, int n) {
int s=1;
for(int i=0;i<n;i++) {
s*=*a; a++;
}
return s;
}
void main() {
int a[5]={1,2,3,4,5};
cout<<LB(a,5)<<endl;
}
输出结果: 120
5. #include<iostream.h>
struct Worker {
char name[15]; //姓名
int age; //年龄
float pay; //工资
};
void main() {
Worker x={"wangfong",46,1640};
Worker y, *p;
y=x; p=&x;
cout<<y.name<<' '<<y.age<<' '<<y.pay<<endl;
cout<<p->name<<' '<<p->age+5<<' '<<p->pay-300<<endl;
}
输出结果: wangfong 46 1640
wangfong 51 1340
四、 写出下列每个函数的功能( 每小题8分, 共24分)
1. int WC(int a[], int n, int k) {
int c=0;
for(int i=0;i<n;i++)
if(a[i]>=k) c++;
return c;
}
函数功能: 统计出数组a的n个元素中大于等于参数k的值的元素个数并返回。
2. bool SG(int x) { //x为大于等于2的整数
int a=int(sqrt(x)); //sqrt(x)为求x的平方根
int i=2;
while(i<=a) {
if(x%i==0) break;
i++;
}
if(i>a) return true; else return false;
}
函数功能: 判断x是否为一个素数( 或质数) , 若是则返回真, 否则返回假。
3. 假定结构类型Worker中的name域表示姓名, age域表示年龄, pay域表示工资。
void QA(Worker a[], int n) {
for(int i=0; i<n; i++)
cin>>a[i].name>>a[i].age>>a[i].pay;
}
函数功能: 从键盘上输入n个Worker结构类型的记录依次保存到一维数组a的对应元素中。
五、 按题目要求编写函数( 6分)
假定函数声明为”void Print(int a[], int n);”, 在函数体中按下标从大到小的次序输出数组a中的n个元素的值, 并要求每行输出6个元素, 当然最后一行能够不足6个。
答: void Print(int a[], int n)
{
int i,j=0;
for(i=n-1; i>=0; i--) {
cout<<a[i]<<’ ’;
if(++j%6==0) cout<<endl;
}
cout<<endl;
}
训练第三套
一、 单选题( 每小题2分, 共20分)
1. 由C++源程序文件编译而成的目标文件的缺省扩展名为( A ) 。
A. obj B. lik C. exe D. cpp
2. 程序运行中需要从键盘上输入多于一个数据时, 各数据之间应使用( D )符号作为分隔符。
A. 空格或逗号 B. 逗号或回车 C. 逗号或分号 D. 空格或回车
3. 设x是一个bool型的逻辑量, y的值为10, 则表示式 x && y的值为( C ) 。
A. 1 B. 0 C. 与x值相同 D. 与x值相反
4. for语句能够被改写为( D ) 语句。
A. 复合 B. if C. switch D. while
5. 在下面的do循环语句中, 其循环体被执行的次数为( A ) 。
int i=0; do i++; while(i*i<10);
A. 4 B. 3 C. 5 D. 2
6. 在下面的一维数组定义中, ( C ) 语句有语法错误。
A. int a[]={1,2,3}; B. int a[10]={0};
C. int a[]; D. int a[5];
7. 下面的( C ) 保留字不能作为函数的返回类型。
A. void B. int C. new D. long
8. 下面的函数声明中, ( B )是”void BC(int a, int b);”的重载函数。
A. int BC(int x, int y); B. void BC(int a, char b);
C. float BC(int a, int b, int c=0); D. int BC(int a, int b=0);
9. 当类中一个字符指针成员指向具有n个字节的存储空间时, 它所能存储字符串的最大长度为( C ) 。
A. n B. n+1 C. n-1 D. n-2
10. 假定AB为一个类, 则该类的拷贝构造函数的声明语句为( D ) 。
A. AB&(AB x); B. AB(AB x); C. AB(AB* x); D. AB(AB&);
二、 填空题( 每小题2分, 共20分)
1.执行”cout<<char('A'+3);”语句后得到的输出结果为___D__。
2. 在C++每个程序行的后面或单独一行的开始使用注释的标记符为____//____。
3. 表示式float(25)/4的值为____6.25_______。
4. 关系表示式x+y>5的相反表示式为____ x+y<=5___
5. 假定一个二维数组的定义为”int a[3][6];”, 则该数组含有____18____个元素。
6. 执行”typedef int ABC[20];”语句把ABC定义为具有20个整型元素的_数组类型_。
7.假定p所指对象的值为36, p+1所指对象的值为49, 则*++p的值为__49___。
8. 假定a是一个一维数组, 则a[i]的指针访问方式为__*(a+i)_
9.对一个类中的数据成员的初始化能够经过构造函数中的初始化表实现, 也能够经过构造函数中的___函数体__实现。
10.当一个类对象离开它的作用域时, 系统将自动调用该类的___析构函数_。
三、 写出下列每个程序运行后的输出结果( 每小题6分, 共30分)
1. #include<iostream.h>
#include<stdlib.h>
int SD(int a, int b, char op) {
switch(op) {
case '+': return a+b;
case '-': return a-b;
default: {cout<<"操作符op出错, 退出运行!";exit(1);}
}
}
void main() {
int x=20, y=6;
cout<<SD(x,y,'+')<<' '<<SD(x,y,'-')<<endl;
}
运行结果: 26 14
2. #include<iostream.h>
#include<string.h>
void main() {
char* a[5]={"student","worker","cadre","soldier","apen"};
char *p1;
p1=a[0];
for(int i=1;i<5;i++) {
if(strcmp(a[i], p1)>0) p1=a[i];
}
cout<<p1<<endl;
}
运行结果: worker
3. #include<iostream.h>
int WF(int x, int y) {
x=x+y;
y=x+y;
return x+y;
}
void main() {
cout<<WF(8,5)<<endl;
}
运行结果: 31
4. #include<iomanip.h>
const int n=9;
void main() {
int a[n]={2,4,6,8,10,12,14,16,18};
int s=0;
for(int i=0; i<n; i++) {
if(i%3==0) s+=a[i];
}
cout<<”s=”<<s<<endl;
}
运行结果: 24
5. #include<iomanip.h>
void main() {
int* d=new int[5];
int i;
for(i=0;i<5;i++) {
d[i]=2*i+1;
cout<<d[i]<<' ';
}
cout<<endl;
delete[]d;
}
运行结果: 1 3 5 7 9
四、 写出下列每个函数的功能( 每小题8分, 共24分)
1. float FI(int n) { //n为大于等于1的整数
float x,y=0;
do {
cin>>x;
y+=x*x;
} while(--n>0);
return y;
}
函数功能: 求出从键盘上输入的n个整数的平方和并返回。
2. bool WE(int a[], int b[], int n) {
for(int i=0;i<n;i++)
if(a[i]!=b[i]) break;
if(i==n) return true; return false;
}
函数功能: 判断具有n个元素的两个数组a和b中对应元素值是否全部相等, 若是则返回真, 否则返回假。
3. void LK(int a[], int n, int& m) {
float s=0;
int i;
for(i=0;i<n;i++) s+=a[i];
s/=n;
m=0;
for(i=0;i<n;i++) if(a[i]>=s) m++;
}
函数功能: 统计出数组a的前n个元素中大于等于其平均值的元素个数并由引用参数m带回。
五、 按题目要求编写函数( 6分)
假定一个函数声明为”void AD(int a[], int n);”, 要求把数组a中的n个元素值按相反的次序仍保存在数组a中。
答: void AD(int a[], int n)
{
for(i=0; i<n/2; i++) {
int x=a[i]; a[i]=a[n-1-i]; a[n-1-i]=x;
}
}
训练第四套
一、 单选题( 每小题2分, 共20分)
1. C++程序的基本功能模块为( D ) 。
A. 表示式 B. 标识符 C. 语句 D. 函数
2. 存储以下数据, 占用存储字节最多的是( A ) 。
A. 0 B. ’0’ C. ”0” D. ’\n’
3. 在下面的一维数组定义中, 有语法错误的是( C ) 。
A. int a[]={1,2,3}; B. int a[10]={0};
C. int a[]; D. int a[5];
4. 在下面的语句或语句组中, ( B ) 不正确。
A. int a[5]; B. int M=10; int a[M];
C. int a[]={1,5,10,45}; D. const int N=12; int a[N];
5.C++语言中的每条简单语句以___B_____作为结束符。
A. 逗号 B. 分号 C. 空格 D. 换行符
6. 含随机函数的表示式rand()%20的值在( C )区间内。
A. 1~19 B. 1~20 C. 0~19 D. 0~20
7. 当处理一个特定的问题时, 若循环次数已知, 则一般采用( A ) 来解决。
A. for循环 B. while循环 C. do循环 D. switch语句
8. 在下面循环语句中内层循环体S语句的执行总次数为( D ) 。
for(int i=0; i<n; i++)
for(int j=i; j<n; j++) S;
A. n2 B. (n+1)/2 C. n(n-1)/2 D. n(n+1)/2
9. 若函数声明为double* function(), 则该函数的返回值为( B ) 。
A. 实数型 B. 实数指针型 C. 函数指针型 D. 数组型
10. 假定变量m定义为”int m=7;”, 则定义变量p的正确语句为( A ) 。
A. int p=&m; B. int *p=&m; C. int &p=*m; D. int *p=m;
二、 填空题( 每小题2分, 共20分)
1.C++语言中每条复合语句以_ }(或右花括号)_作为结束符。
2.假定一个枚举类型的定义为”enum RA{ab,ac,ad,ae};”, 则ac的值为___1____。
3.十进制数25表示成符合C++语言规则的八进制数为___031_____。
4. 表示式x=x+y表示成复合赋值表示式为__ x+=y __。
5.若x=5,y=15, 则x>y的逻辑值为__假( false 或0) _。
6.假定一个一维数组的定义为”char* a[8];”, 则该数组所占用存储空间的字节数为_32__。
7. 假定x=1
展开阅读全文