天津理工大学C++期末考试Word格式文档下载.docx
《天津理工大学C++期末考试Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《天津理工大学C++期末考试Word格式文档下载.docx(67页珍藏版)》请在冰豆网上搜索。
#include<
iostream>
usingnamespacestd;
classCoordinate
{
public:
Coordinate(intx1,inty1){x=x1;
y=y1;
Coordinate(Coordinate&
p);
~Coordinate(){cout<
"
Destructoriscalled."
intgetx(){returnx;
intgety(){returny;
private:
intx,y;
};
Coordinate:
:
Coordinate(Coordinate&
p){//拷贝构造函数
x=p.x;
y=p.y;
cout<
Copyinitianizationconstructoriscalled."
intmain(){
Coordinatep1(3,4);
Coordinatep2(p1);
Coordinatep3=p2;
p3=("
p3.getx()<
"
p3.gety()<
)"
return0;
(1)记录程序的运行结果
(2)将Coordinate类中带有两个参数的构造函数进行修改,在函数体内增加如下语句:
cout<
”Constructoriscalled.”<
重新记录程序的运行结果,并解释输出结果。
(3)按下列要求进行测试。
在主函数体内,添加如下语句:
Coordinatep4;
ç
错误原因:
构造函数没有参数构造函数为Coordinate:
Coordinate(int,int)
Coordinatep5
(2);
ç
错误原因:
参数数量不对
2.
根据注释语句的提示实现类Date的成员函数,并将完整的程序编译、连接成功以保证程序能够正确运行。
iostream.h>
classDate{
voidprintDate();
//显示日期
分析:
1.题目中Date类的数据成员为day,month,year且均为整型访问属性为私有主函数中声明了testDay对象
2.数据成员均为私有则不能通过tesDay.day=<
数值>
的方法来设置题目中给出了voidsetDay(int)voidsetMonth(int)和voidsetYear(int)三个成员函数去是指daymonth和year的值还有一个voidprintDate()来输出
3.准备工作结束开始编程看程序仅差4个成员函数未定义类外定义要写出作用域即该函数属于哪个类:
格式:
返回值类型作用域:
函数名参数表
voidDate:
setDay(intd)/*定义时必须要给形参一个名字这里给的是*/d{day=d}//设置了day的值其他函数依此类推输出函数就不用再唠叨了
4.验证结果出现溢出数据时查看是否写反了例如写成d=day了解设置函数的作用机制见附二
voidsetDay(int);
//设置日的值
voidsetMonth(int);
//设置月的值
voidsetYear(int);
//设置年的值
intday,month,year;
DatetestDay;
testDay.setDay(5);
testDay.setMonth(10);
testDay.setYear(2010);
testDay.printDate();
voidDate:
setDay(intd){day=d;
setMonth(intm){month=m;
setYear(inty){year=y;
printDate(){cout<
year<
/"
month<
day<
3.
下面是一个计算器类的定义,请完成该类的成员函数的实现,并设计一个主函数使用该类和相关成员函数以测试
该类设计的正确性。
classcounter
counter(intnumber=0)//构造函数
{
value=number;
}
voidincrement();
//给value原值加1
voiddecrement();
//给value原值减1
intgetvalue();
//取得计数器值
intprint();
//显示计数
intvalue;
//数据成员
voidcounter:
increment(){value++;
Thecounterhasincreasedby1"
}//(其中的cout语句可以不写)
decrement(){value--;
Thecounterhasdecreasedby1"
intcounter:
getvalue(){returnvalue;
print(){cout<
\nDisplay:
getvalue()<
endl<
return0;
Pleaseinputoriginnumber:
;
//定义counter类的几个对象并调用有关成员函数
inta;
cin>
>
a;
counterc(a);
//输入a并将a作为参数通过构造函数为对象中的value赋值
c.increment();
c.print();
//题目要求验证所以使用输出函数一次验证value的值
c.decrement();
4.
定义一个类ClsName,要求该类设计如下:
(1)该类有两个整型数据成员x和y;
(2)为该类重载三个不同的构造函数:
分别为无参数、带一个参数和带两个参数的构造函数,要求在构造函数中输出必要的信息以示区别;
(3)设计2个成员函数用来读取数据成员x和y;
(4)设计2个成员函数用来设置数据成员x和y;
(5)设计1个成员函数用来在屏幕上打印输出数据成员x和y;
(6)在main()函数中用三个不同的构造函数创建3个对象,并使用所有的成员函数对这些对象进行必要的操作。
classClsName
inta,b;
ClsName(inta,intb){cout<
Constructbytwonumbers."
x=a,y=b;
}//以下三个
(2)中要求的重载构造函数
ClsName(inta){cout<
Constructby1number."
}//题目要求加以区别,所以cout输出不同内容加以区分
ClsName(void){cout<
Constructwithoutanumber."
}ç
因为x,y的访问属性为私有,不能由主函数直接访问所以会设置读取函数专门负责返回相应的值
重载:
函数名相同,参数的类型不同或者个数不同、或者都不同。
即根据带入参数的类型、数量的不同,来实现不同的功能
voidsetx(){cout<
ChangeX:
cin>
x;
voidsety(){cout<
ChangeY:
y;
voidprint(){cout<
X="
getx()<
'
\t'
Y="
gety()<
intx,y;
ß
(1)中要求的两个整型数据成员
intmain()
Test1:
Inputwith2numbers,nowpleaseinputtwonumbers:
b;
ClsNamet1(a,b);
t1.print();
t1.setx();
t1.sety();
\nTest2:
Inputwithanumbers,nowpleaseinputanumber:
ClsNamet2(a);
t2.print();
t2.setx();
t2.sety();
\nTest3:
Withoutnumbers"
ClsNamet3;
t3.print();
t3.setx();
t3.sety();
5.
建立类cylinder,包括两个数据成员radius和height,分别表示圆柱体的半径和高度,cylinder类的构造函数被传递了两个double值来初始化这两个成员;
定义成员函数area()和volume用来求圆柱体的表面积和体积,定义成员函数print()打印cylinder类的相关信息。
最后,在主函数中对cylinder类的设计进行测试。
这题很简单没啥说的
#include<
classcylinder
voidset(doubler,doubleh){radius=r,height=h;
doublearea(){return(radius*3.14);
doublevolume(){return(height*area());
Area="
area()<
Volume="
volume()<
doubleradius,height;
cylinderv;
Radius="
Height="
v.set(a,b);
v.print();
6.
定义一个学生类CStudent实现简单的学籍管理功能,要求该类至少实现以下功能:
(1)录入学生的基本信息(包括姓名,学号,性别,年龄,专业,入学时间,各门功课成绩)
(2)输出学生的基本信息
(3)选课(输入时间和所选的课程)
(4)统计每门课的学分绩点
(5)统计每学期的平均学分绩点
(6)统计重考科目
(7)统计重修科目
string>
constMAX=4;
classCStudent{
stringname,sex,ID,object,jtime;
//分别存储姓名性别学号专业入学时间
intage;
//存储年龄
intmark[MAX];
//设立一个数组存放成绩
stringsbj[MAX];
//设立string数组来存放科目名称
intretry,redo;
//统计重考重修数量
stringt_chose,s_chose;
//存放选课时间和选课名称
intm_point[MAX],m_mark[MAX];
//存放每门功课的学分和绩点
intmarker[MAX];
//存放重修科目的角标(有时不止挂掉一科可能会很多所以声明称数组)
为什么建立数据时使用的数组?
通过对角标的控制便可以把一行数据全部对应起来
请看下面数据对应关系:
角标
科目名称(sbj[i])
成绩(mark[i])
学分(m_mark[i])
数学
44
6
1
C语言
92
2
英语
72
4
便于统计也可以方便地调用出一门科目的全部内容
intmarker2[MAX];
//存放重修科目角标
CStudent()
cout<
构造CStudent开始录入基本信息"
Name:
name;
ID:
ID;
Sex:
sex;
Age:
age;
YourObject:
object;
Timeyoujointhecolleage:
jtime;
Nowpleaseinputyourmarks."
for(inti=0;
i<
MAX;
i++)
{
cout<
Subjectname:
sbj[i];
Mark:
mark[i];
}
voidbaseprint()//按
(2)要求输出基本信息
基本信息:
学生姓名:
name<
\t学号:
ID<
\t年龄:
age<
\t性别"
sex<
入学时间:
jtime<
\t专业:
object<
成绩:
sbj[i]<
:
mark[i]<
\t"
voidchose()//按(3)要求设置选课函数
选课名称:
s_chose;
选课时间:
t_chose;
voidPoint()//按(4)要求
请设置"
的学分:
m_mark[i];
intscore=0,j=0;
//给score赋初值防止溢出因为后面有score+=...相当于score=score+...无法确定第一个score的值
retry=0;
for(i=0;
if(mark[i]>
=60)score+=m_mark[i];
//成绩及格垒加学分
else{retry++;
marker[j++]=i;
}//否则不及格便要重考将重考数量自增
}//其中marker[j++]=i是将当时重修科目的角标记录下来
floats=0;
i++){
if(m_mark==0){m_point[i]=0;
学分绩点均为0"
continue;
float(m_point[i]=4-(100-(float)mark[i])*(100-(float)mark[i])/1600);
//绩点的计算方法
s+=m_point[i];
所获学分:
m_mark[i]<
\t绩点:
m_point[i]<
平均绩点为:
s/MAX<
voidcheck()
if(retry==0)cout<
无重考科目"
else
重考数目为:
retry<
包括"
for(inti=0;
retry;
i++)cout<
sbj[marker[i]]<
redo=0;
inttemp,j=0;
输入重考分数"
for(i=0;
{
cout<
temp;
if(temp<
60)
{
redo++;
marker2[j++]=marker[i];
}
}
if(redo==0)cout<
无重修科目"
else
重修数目为:
redo<
redo;
sbj[marker2[i]]<
intmain(void)
CStudenta;
a.baseprint();
a.chose();
a.Point();
a.check();
注意:
(1)新设计的类中所需要的数据成员需要根据所要实现的功能自行设计;
(2)用一个演示程序完成对所设计的新类的功能测试,并给出测试数据和实验结果;
(3)为增加程序可读性,请在程序中对类成员进行适当注释说明;
补充实验题:
(1)教材134页【3.33】-【3.36】
实验二
(2010-3-23)
实验名称:
复杂形式的对象。
实验目的:
(1)掌握对象数组、对象指针和string类的使用方法;
把对象想象成一种数据类型比如整型有整型数组吧(inta[10])自然也有对象数组
对象指针以以上类似有时涉及到动态联编()
String类不如说是string类型类似于智能化的字符串数组
(2)掌握对象数组、对象指针和对象引用作为函数参数的使用方法;
主要看书实际用的不多注意对象数组初始化方法(书P77中上的说明)
(3)掌握类对象作为成员的使用方法;
了解就行
(4)掌握友元的概念和使用方法;
通常的,通过A对象想要访问B对象的私有成员是不可能的而通过友元就可以做到
需要注意的是友元函数虽然在类内声明但是友元函数不是成员函数独立于类外所以类外定义是不能加作用域“:
”
另外,由于使用的VisualC++6.0不是完全使用C++标准编程时如果遇到报错内容为一堆大写字母且错误位置指向友元函数的话把#include<
usingnamespacestd;
改为#include<
还有!
只有上述情况才可以把头文件加上“.h”,否则会导致部分功能不正常
(5)掌握静态数据成员和静态成员函数的使用方法;
例如:
有Object类,拥有数据成员a,由Object类声明出的对象A、B、C,那么A、B、C都拥有各自的a,内存中也会分配出各自的内存空间A:
a,B:
a,C:
a(共3个)。
而如果将数据成员a声明为静态成员(static),那么A、B、C则共用一个内存空间a(只有1个)
最典型的例子是统计声明对象的数量
使用方法:
static数据类型数据成员名
由于不能直接对数据成员赋初值所以静态数据成员初始化方法为:
数据类型类名:
静态数据成员名=初值(注意:
1.是类名,不是对象名;
2.之前不要加static)
静态成员函数
静态成员函数属于整个类而不是某个对象所以调用方法为类名:
静态成员函数名(参数表)
其他参看书P103几点说明
Time类的框架定义如下:
//PoweredbyZuki&
X.Duke
classTime//声明Time类
Time(intA=0,intB=0,intC=0)//带默认参数的构造函数
hour=A;
minute=B;
second=C;
//setfunctions
voidsetTime(inta,intb,intc)//设置hour,minute,second
RunSetimeFunction"
setHour(a);
setMinute(b);
setSecond(c);
voidsetHour