资源描述
程序设计基础(C++)试卷(A)
考试时间为120分钟 考试形式:闭卷
题号
一
二
三
四
总 分
得分
阅卷人
合分人
请同学们将答案填写在后面的答题卡中,注意相应的题号
一、 单项选择题(本大题共10小题,每小题2分,共20分)
1、.若有以下定义,int a=100,*p=&a ; 则说法错误的是( D )。
A.声明变量p,其中*表示p是一个指针变量 B.变量p经初始化,获得变量a的地址
C.变量p只可以指向一个整型变量 D.变量p的值为100
2、假定建立了链表结构,指针p,q分别指向相邻的结点,则以下可以将q所指结点从链表中删除并释放该结点的语句组是( )。
A.delete q; p->next=q->next; B. (*p).next=(*q).next; delete q;
C.q=(*q).next; (*p).next=q;delete q; D.q=q->next; p->next=q; p=p->next; delete q;
3、.若有下面的说明和定义:
struct test{
int ml; char m2; float m3;
union uu{char ul[5]; int u2[2]; } ua;
}myaa;
则 sizeof(struct test)的值是( )。
A.12 B.14 C.17 D.9
4、假定MyClass为一个类,则该类的拷贝构造函数的声明语句为( )。
A.MyClass &(MyClass x) B.MyClass (MyClass x)
C.MyClass (MyClass &x) D.MyClass (MyClass *x)
5、下面对于友元函数描述正确的是( )。
A.友元函数不破坏类的封装性,可尽量使用
B.友元函数是类的成员函数
C.友元函数可以是一般函数,也可以是另一个类的成员函数
D.友元函数不能访问类的所有数据成员
6、类的析构函数是在( )时候系统自动调用的?
A.类创建时 B.创建对象时 C.删除对象时 D.不自动调用
7、若有BOX类的对象s1,用s1复制另一个对象s2,正确的是( )
A.s2=s1; B.BOX s2(s1); C.BOX s1(s2); D.s2=new(s10);
8、下列有关运算符重载的描述中,( )是正确的。
A.运算符重载可改变其优先级 B.运算符重载不改变其语法结构
C.运算符重载可改变其结合性 D.运算符重载可改变其操作数的个数
9、在C++语言程序中,对象之间的相互通信通过( ).
A.继承实现 B.调用成员函数实现 C.封装实现 D.函数重载实现
10、以下( )成员函数表示虚函数。
A.int virtual vf(); B.void vf(int)=0;
C.void vf()=0; D.virtual void vf(int);
二、填空题(本大题共10小题,每小题1分,共10分)
11、定义 int y为x的引用,则定义语句为【 】。
12、设 union { int a; char c[99]; }b; 则sizeof(b)的值是【 】。
13、假定类AB中有一个公用属性的静态成员bb, 在类外不通过对象名访问该成员 bb 的写法为【 】。
14、若需要把一个函数 void f( ); 定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句【 】。
15、生成一个派生类对象时,先调用【 】的构造函数,然后调用派生类的构造函数。
16、派生类构造函数的初始化列表中包含【 】。
17、动态联编调用函数操作是指向对象的【 】或对象引用。
18、 语句ofstream f ("SALARY. DAT",ios::app);的功能是建立流对象f, 试图打开文件SAL:aRY. DAT并与之连接,ios::app文件操作方式为【 】。
19、文件访问方式有两种,顺序访问和【 】。
20、已知enum color{red,yellow=5,white,black};则执行cout<<red+black后的值是【 】。
三、程序分析、运行题(本大题共6小题,共30分,每小题5分)
21、分析程序,写运行结果。
#include<iostream>
using namespace std;
void fun(int *p,int m) {
int i;
for( i=0;i<m;i++) *p++=i*i+1;
}
void main() {
int i,*b=new int[5];
fun(b,5);
for( i=0;i<5;i++) cout<<b[i]<<" ";
cout<<endl;
delete [] b;
}
22、下列函数sort用冒泡法实现对字符串按字典顺序由小到大排序,程序填空。
void sort(char *p[],int n) // 定义指针数组 p, n个字符串
{char ① ; //第1空
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(strcmp( ② )>0 ) // 第 2空
{ temp=p[j];
p[j]=p[j+1] ;
p[j+1]=temp;
}
}
23、下面是包含子对象的派生类的构造函数。写出运行结果。
#include <iostream>
#include <string>
using namespace std;
class Student
{public:
Student(int n, string nam ) {num=n; name=nam; }
void display( ) {cout<<"num:"<<num<<endl<<"name:"<<name<<endl;}
protected:
int num; string name;
};
class Student1: public Student
{ public:
Student1(int n, string nam,int n1, string nam1,int a, string ad)
:Student(n,nam),monitor(n1,nam1) {age=a; addr=ad; }
void show( ) {cout<<"This student is:"<<endl;
display();
cout<<"age: "<<age<<endl;
cout<<"address: "<<addr<<endl<<endl;
}
void show_monitor( ) {
cout<<endl<<"Class monitor is:"<<endl;
monitor.display( );
}
private:
Student monitor;
int age;
string addr;
};
int main( )
{ Student1 stud1(10010,"Wang-li",10001,"Li-sun",19,"115 Beijing Road,Shanghai");
stud1.show( ); //输出学生的数据
stud1.show_monitor(); //输出子对象的数据
return 0;
}
24、下列程序通过把类Distance定义为类Point的友元类来实现计算两点之间距离。程序填空。
#include <iostream>
#inlclude <cmath>
using namespace std;
class Point{
public:
① //第1空
Point(float a,float b){ X=a; Y=b;}
void Print(){cout<<”X=”<<X<<endl; cout<<”Y=”<<Y<<endl;}
private:
float X,Y;
};
class Distance
{ public:
float Dis(Point & p,Point & q);
};
float Distance::Dis(Point & p,Point & q)
{ float result;
result= ② //第2空
cout<<result<<endl;
return result;
}
int main(){
Point p(10,10), q(20,20);
Distance d;
d.Dis(p,q); return 0;
}
25、下面是一个类的测试程序,设计出能使用如下测试程序的类。测试结果:8-5=3
void main(){
Test a;
a.init(8,5);
a.print();
}
26、下列函数功能是输出两个字符串对应位置相等的字符。将代码补充完整。
void outstring(char *str1,char *str2) {
while(*str1!=′\0′&&__①______) //第1空
{
if (*str1 == *str2) cout<<*str1<<endl;
str1++;
__ ②______; //第2空
}
}
四、程序设计题(本大题共4小题,共40分)
27、根据以下链表示意图,设计链表综合操作程序。2个模块分别为:创建动态链表creat()、遍历链表print()。(16分)
data next
head… 8 4 3 ..
#define NULL 0
struct list{char data; list *next;} ;
list *creat( void)
{
return head;
}
void print(list *head)
{
}
28、将运算符“-”重载为适用于复数加法,重载函数作为成员函数。输出数据函数display()为类的成员函数。(8分)
#include <iostream>
using namespace std;
class Complex
{
};
int main( )
{ Complex c1(3,4),c2(5,-10),c3;
c3=c1-c2;
cout<<"c1="; c1.display( );
cout<<"c2="; c2.display( );
cout<<"c1-c2 ="; c3.display( );
}
29、输入3个整数,调用函数实现按由小到大排序(用指针法实现)(8分)
#include <iostream.h>
using namespace std;
int main()
{
void sort(int *,int *);
cout<<a<<”,”<<b<<”,”<<c<<eddl;
}
void sort(int *p,int *q)
(
}
30、建立磁盘文件f1.dat(文本文件),从键盘输入20个整数存放在f1.dat中。(8分)
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
}
注意:按屏幕输出格式写答案
得分
答 题 卡
1
2
3
4
5
6
7
8
9
10
得分
11
12
13
14
15
16
17
18
19
20
得分
21
22
23
24
25
26
得分
27得分 : 28得分 :
29得分: 30得分:
第 4 页 共 4 页
展开阅读全文