资源描述
. . . .
电子科技大学成人教育考卷(A卷)
(2007至2008学年度第二学期)
考试时间 2008年6月日课程《C++程序设计》 教师签名
班级 07计算机科学与技术班学生
大题号
一
二
三
四
五
六
七
八
九
十
合计
得分
一、单项选择题(每小题2分,共20分)
1. 由C++源程序文件编译而成的目标文件的缺省扩展名为( )。
A. obj B. lik C. exe D. cpp
2. 程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用( )符号作为分隔符。
A. 空格或逗号 B. 逗号或回车 C. 逗号或分号 D. 空格或回车
3. 设x是一个bool型的逻辑量,y的值为10,则表达式 x && y的值为( )。
A. 1 B. 0 C. 与x值相同 D. 与x值相反
4. for语句能够被改写为( )语句。
A. 复合 B. if C. switch D. while
5. 在下面的do循环语句中,其循环体被执行的次数为( )。
int i=0; do i++; while(i*i<10);
A. 4 B. 3 C. 5 D. 2
6. 在下面的一维数组定义中,( )语句有语法错误。
A. int a[]={1,2,3}; B. int a[10]={0}; C. int a[]; D. int a[5];
7. 下面的( )保留字不能作为函数的返回类型。
A. void B. int C. new D. long
8. 下面的函数声明中,( )是“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个字节的存储空间时,它所能存储字符串的最大长度为( )。
A. n B. n+1 C. n-1 D. n-2
10. 假定AB为一个类,则该类的拷贝构造函数的声明语句为( )。
A. AB&(AB x); B. AB(AB x); C. AB(AB* x); D. AB(AB&);
二、填空题(每小题2分,共20分)
1.执行“cout<<char('A'+3);”语句后得到的输出结果为________。
2. 在C++每个程序行的后面或单独一行的开始使用注释的标记符为__________。
3. 表达式float(25)/4的值为___________。
4. 关系表达式x+y>5的相反表达式为____________。
5. 假定一个二维数组的定义为“int a[3][6];”,则该数组含有__________个元素。
6. 执行“typedef int ABC[20];”语句把ABC定义为具有20个整型元素的________。
7.假定p所指对象的值为36,p+1所指对象的值为49,则*++p的值为________。
8. 假定a是一个一维数组,则a[i]的指针访问方式为____________。
9.对一个类中的数据成员的初始化可以通过构造函数中的初始化表实现,也可以通过构造函数中的____________实现。
10.当一个类对象离开它的作用域时,系统将自动调用该类的____________。
三、写出以下每个程序运行后的输出结果(每小题3分,共15分)
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;
}
运行结果:
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;
}
运行结果:
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;
}
运行结果:
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;
}
运行结果:
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;
}
运行结果:
四、写出以下每个函数的功能(每小题8分,共24分)
1. float FI(int n) { //n为大于等于1的整数
float x,y=0;
do {
cin>>x;
y+=x*x;
} while(--n>0);
return y;
}
函数功能:
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;
}
函数功能:
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++;
}
函数功能:
五、程序填充题,根据题意在横线上填写适宜的容。(每小题3分,共12分)
1. 下面函数是求两个整型参数a和b的最小公倍数。
int f2(int a, int b)
{
int i=2, p=1;
do {
while(a%i==0 && ____________) {
p*=i; a/=i; b/=i;
}
i++;
}while(a>=i && ____________);
return p*a*b;
}
2. 对数组a中的元素按相反次序重新排列。
void PV(int a[], int n)
{
int i;
for(i=0; i<n/2; i++) {
int x=a[i];
____________________;
____________________;
}
}
3. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法是把以L为表头指针的链表中各结点依次按相反次序并返回新链表的表头指针。
NODE* f8(NODE* L)
{
if(L==NULL) return NULL;
NODE *p=NULL, *q=L, *t; //p为新链表的表头指针,初始值为空
while(q!=NULL) {
t=q;
q=q->next;
t->next=__________;
p=__________;
}
return p;
}
4. 类A的定义
class A {
int *a; int n; int MaxLen;
public:
A(): a(0), n(0), MaxLen(0) {} //无参构造函数
A(int *aa, int nn, int MM) { //带参构造函数
n=nn;
MaxLen=MM;
if(n>MaxLen) exit(1);
a=new int[MaxLen];
for(int i=0; i<n; i++) ____________; //利用数组aa给数组a赋值
}
~A(){______________;} //释放动态存储空间
int GetValue(int i) {return a[i];} //函数体返回a[i]的值
};
六、按题目要求编写函数(9分)
假定一个函数声明为“void AD(int a[], int n);”,要求把数组a中的n个元素值按相反的次序仍保存在数组a中。
5 / 5
展开阅读全文