北邮小学期c++文档_北邮小学期c

2020-02-28 其他范文 下载本文

北邮小学期c++文档由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“北邮小学期c”。

1.++程序设计实验报告

姓名: 班级: 学号: C

要求:

猜价格游戏

编写C++程序完成以下功能:

(1)假定有一件商品,程序用随机数指定该商品的价格(1-1000的整数);

(2)提示用户猜价格,并输入:若用户猜的价格比商品价格高或低,对用户作出相应的提示;(3)直到猜对为止,并给出提示。

算法:

int main(){ int price,input;srand(time(NULL));price=rand()%1000;cout>input;while(input!=price){ if(input>price)cout>input;} cout

使用srand()函数产生随机数,调用time.h的time()函数读取系统时间作为产生随机数的种子。采用循环结构,使函数运行至猜对价格,用cout输出,用cin输入。

2.要求:

矩形

编写C++程序完成以下功能:

(1)定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法;(2)定义一个矩形类,其属性包括左上角和右下角两个点,提供计算面积的方法;

(3)创建一个矩形对象,提示用户输入矩形左上角和右下角的坐标;

(4)观察矩形对象以及Point类成员的构造函数与析构函数的调用;(5)计算其面积,并输出。

算法:

cla point { private: float x1,y1,x2,y2;public:

};

cla rectangle { private: point a;public: rectangle(){ point(){

} x1=0;y1=0;x2=0;y2-0;float dis(){ return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));} float getx(){ return x2-x1;} float gety(){ return y1-y2;} void set(float a1,float b1,float a2,float b2){

} x1=a1;y1=b1;x2=a2;y2=b2;

};

} float x1,y1,x2,y2;cout>x1;cout>y1;cout>x2;cout>y2;a.set(x1,y1,x2,y2);float getarea(){ } return abs(a.getx()*a.gety());思路:

本题的关键在于创建point和rectangle两个类,在point中声明四个private成员分别是两个点的横坐标和纵坐标。声明返回private值的函数。Rectangle中将point类作为其private成员,在public中声明构造函数,读入两个点的横坐标和纵坐标,传给point。并声明计算面积的函数,利用point中返回x,y的函数得到长方形的x,y值计算其面积。

3.要求:

友元

编写C++程序完成以下功能:

(1)定义一个Boat和Car两个类,他们都具有私用属性——重量;(2)编写一个函数,计算两者的重量和。

double TotalWeight(Boat& b, Car& c);

算法:

cla boat;cla car { private: double w;public:

car(){

cout

};

cin>>w;} friend double TotalWeight(boat& b,car& c);cla boat { private: double w;public:

boat(){

cout

cin>>w;} friend double TotalWeight(boat& b,car& c);};

double TotalWeight(boat& b,car& c){ return(c.w+b.w);}

void main(){

} car c;boat b;cout

声明car,boat两个类,两者中都包含w这个private成员,用来记录重量,在car和boat的public中都声明友元函数TotalWeight()。这样TotalWeight()就能同时访问到car和boat的private成员了。

4.要求:

矩形

编写C++程序完成以下功能:

(6)定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法;(7)定义一个矩形类,其属性包括左上角和右下角两个点,提供计算面积的方法;

(8)创建一个矩形对象,提示用户输入矩形左上角和右下角的坐标;(9)观察矩形对象以及Point类成员的构造函数与析构函数的调用;(10)计算其面积,并输出。

算法:

void init(int a[][5]){

} for(int i=0;i>a[i][0]>>a[i][1]>>a[i][2]>>a[i][3]>>a[i][4];

void print(int a[][5]){

}

void add(int a1[][5],int a2[][5],int a3[][5]){ for(int i=0;i

}

void subtract(int a1[][5],int a2[][5],int a3[][5]){

} for(int i=0;i

} for(int n=0;n

} for(int n=0;n

} for(int n=0;n

void main(){ int a1[4][5],a2[4][5],a3[4][5];cout

init(a1);getchar();cout

声明三个4行5列的数组,读入矩阵的元素存入数组,用二重递归的方式遍历数组,执行加,减,输出操作。

5.要求:

编写C++程序完成以下功能:

(1)假定矩阵大小为4×5(整型);

(2)矩阵空间采用new动态申请,保存在指针中;

(3)定义矩阵初始化函数,可以从cin中输入矩阵元素;(4)定义矩阵输出函数,将矩阵格式化输出到cout;

(5)定义矩阵相加的函数,实现两个矩阵相加的功能,结果保存在另一个矩阵中;(6)定义矩阵相减的函数,实现两个矩阵相减的功能,结果保存在另一个矩阵中;(7)动态申请三个矩阵:A1、A2、A3;(8)初始化A1、A2;

(9)计算并输出A3 = A1加A2,A3 = A1减A2;(10)释放矩阵空间。

算法:

void main(){

int **a1,**a2,**a3;a1=new int*[4];for(int i=0;i

} a1[i]=new int[5];a2=new int*[4];for(int i=0;i

声明a为指向指针的指针,先申请一个四个元素的数组,类型为int**,用来储存每行第一个元素的指针。如此声明之后就可以用a[i][j]来访问某个元素了。

6.要求:

编写C++程序完成以下功能:

(1)用类来实现矩阵,定义一个矩阵的类,属性包括:

 矩阵大小,用 lines, rows(行、列来表示);

 存贮矩阵的数组指针,根据矩阵大小动态申请(new)。

(2)矩阵类的方法包括:

       构造函数,参数是矩阵大小,需要动态申请存贮矩阵的数组; 析构函数,需要释放矩阵的数组指针; 拷贝构造函数,需要申请和复制数组; 输入,可以从cin中输入矩阵元素; 输出,将矩阵格式化输出到cout;

矩阵相加的函数,实现两个矩阵相加的功能,结果保存在另一个矩阵类,但必须矩阵大小相同;

矩阵相减的函数,实现两个矩阵相减的功能,结果保存在另一个矩阵

类,但必须矩阵大小相同。

(3)(4)(5)(6)定义三个矩阵:A1、A2、A3; 初始化A1、A2;

计算并输出A3 = A1加A2,A3=A1减A2;

用new动态创建三个矩阵类的对象:pA1、pA1、pA3;

(7)初始化pA1、pA2;

(8)计算并输出pA3=pA1加pA2,pA3=pA1减pA2;(9)释放pA1、pA1、pA3。

算法:

cla matric{ private: int lines,rows;int **a;public:

void init(){ cin>>lines>>rows;a=new int*[lines];for(int n=0;n

a[n]=new int[rows];

} void input(){

} for(int i=0;i>a[i][n];void output(){

} for(int i=0;i

} for(int n=0;n

int getlines(){ return lines;} void copy(int** &b)

for(int i=0;i

{

} void add(matric A1,matric A2)

{

int**a1,**a2;lines=A1.getlines();rows=A1.getrows();A1.copy(a1);A2.copy(a2);

a=new int*[lines];for(int i=0;i

a[i]=new int[rows];

for(int i=0;i

} for(int n=0;n

{

int**temp=a;

for(int i=0;i

delete a[i];

}

}

void sub(matric A1,matric A2){

int**a1,**a2;lines=A1.getlines();rows=A1.getrows();

};A1.copy(a1);A2.copy(a2);

a=new int*[lines];for(int i=0;i

a[i]=new int[rows];

} for(int i=0;i

} for(int n=0;n

首先需要读入数组的行列,用上题动态申请数组的方法来动态申请。本题的关键在于编写copy函数,从private中传出数组的值,只是将上题4,5这两个常量改成了lines,rows这两个变量。使用copy函数的好处在与只允许单向传出数组的元素,而不允许指令来修改数组的元素从而保护了数据的安全。执行加减法时可以声明两个int**类型元素用来指向数组,用矩阵类中的copy函数,分别从A1,A2中拷贝出数组的元素,拷贝出值之后,加减操作与上题一样,用a[i][j]来访问数组元素即可。

7.要求:

形状

(一)编写C++程序完成以下功能:

(1)声明一个基类Shape(形状),其中包含一个方法来计算面积;(2)从Shape派生两个类矩形和圆形;(3)从矩形派生正方形;

(4)分别实现派生类构造函数、析构函数和其他方法;

(5)创建派生类的对象,观察构造函数、析构函数调用次序;(6)不同对象计算面积。

算法:

cla shape { public: shape()

{ cout

};cout

rectangle(float a,float b){

x=a;y=b;cout

{

} };cla circle:public shape { private: float r;public:

circle(float a){

} r=a;cout

{

};} return 3.1416*r*r;cla square:public rectangle { private: float a;public:

};square(float x):rectangle(x,x){ a=x;cout

长方形类和圆类继承shape类之后,只要重载area()函数即可正确地计算出面积,正方形类继承了长方形类,不需要重载长方形类的area()函数,只要给长方形类的x,y赋相同的值,然后就可以直接调用从长方形类中继承的area()函数,直接计算面积。

8.要求:

形状

(二)——虚函数

(1)将【形状

(一)】中的基类计算面积的方法定义为虚函数,比较与【形状

(一)】程序的差异;(2)将【形状

(一)】中的基类定义抽象类,比较与【形状

(一)】程序的差异。

算法:

算法与上题大致相同,只需要在area()函数前加上virtual即可。

思路:

算法与上题大致相同,只需要在area()函数前加上virtual即可,即将area()函数声明为虚函数。

将shape()类声明抽象类,只要把shape()中的area()函数声明成如下形式: Virtual float area()=0;纯虚函数即可。这样shape类就是一个抽象类,抽象类可以作

为基类被继承,但是不实例化,例如,shape a;这样声明一个a就是错误的。

9.要求:

对Point类重载++和――运算符

编写C++程序完成以下功能:

(1)Point类的属性包括点的坐标(x,y);(2)实现 Point类重载++和――运算符:

  ++p,--p,p++,p--。

++和――分别表示x,y增加或减少1。

算法:

cla point { private: int x,y;public: point operator++(int)

{

} point a=*this;x++;y++;return a;point operator++(){ x++;y++;return *this;} point operator--(int){

point a=*this;x--;y--;return a;} point operator--(){ x--;y--;

};return *this;} void ini(){ cin>>x;} cin>>y;point(){

} cout>x;cout>y;~point(){ } void print(){ } cout

本题的关键在于表示出a++和++a的不同,a++是先引用a的值然后再执行++,++a是先执行++然后再引用a的值。在对++的重载时可以在()中加入int加以区分a++和++a,如下point operator++(int),point operator++()。要做出a++的效果就需要申请point temp,这个中间变量,temp=this,把当前对象赋给a,然后再对当前对象执行++操作,最后返回temp,因为temp储存的是未执行++之前的值,所以能够做出先引用a的值在执行++的效果。——的过程与++完全相同。要求:

流式IO

(一)编写C++程序完成以下功能:

(1)使用ofstream 向一个文本文件中输出各种类型的数据,并打开文件观察结果:

 整数、无符号整型、长整型、浮点型、字符串、„„

(2)用十进制、八进制、十六进制方式向文本文件中输出整数;(3)使用控制符和成员函数来控制输出的格式:

 set()precision()...算法:

void main(){

} ofstream outfile(“xx.txt”);int integer;unsigned int uint;long int lint;float f;string s;cout>integer;cout>uint;cout>lint;cout>f;cout>s;outfile

.进行对文件的操作需要声明头文件#include,为了方便对字符串的操作再声明头文件#include,ofstream outfile(“xx.txt”);指令声明了一个文件输出类,打开了一个名叫xx.txt的文件,outfile.unsetf(ios::dec);outfile.setf(ios::dec);指令可以用来控制 文件输出的格式,做到格式化输出。outfile.set()是设置输出格式,outfile.unset()是取消设置。

11.要求:

流式IO

(三)编写C++程序完成以下功能:(1)输入一个文本文件名;

(2)打开文件名,在该文件的每一行前面加上一个行号,保存在另外一个文本文件中。

算法:

void main(){

} string a;cout>a;ifstream in(a);ofstream out(“out.txt”);string s;int i=1;while(getline(in,s)){ out

本实验比较简单。只需要声明一个字符串a用来储存读入的文件名,再用ifstream类来声明一个对象,打开a这个文件。利用getline()函数,geiline函数能够自动从文件中读入一行数据,每读入一行数据就在其前面加上行号,行号可以用变量i来计数,每读一行就加1,并将这个就上行号的一行数据写入out.txt中,知道无法读入,就结束程序。

12.要求:

电话本

编写C++程序完成以下功能:

(1)实现简单电话本功能,用姓名来搜索电话号码;(2)用户输入姓名,程序查找并输出结果;(3)用户可以通过输入,添加姓名和电话号码;(4)用户可以删除姓名和电话号码;(5)电话本可以保存在指定文件中;

(6)电话可被从指定文件中读入到内存。

算法:

#include #include #include using namespace std;

cla record { private: string name[50],number[50];public: record(){ int i=0;

string na,nu;

ifstream file(“phonenumber.txt”);

file>>na>>nu;

while(na.compare(“..”))

{

name[i]=na;

number[i]=nu;

file>>na>>nu;

i++;

}

for(i;i

{

name[i]=“..”;

number[i]=“..”;

} } void search(){

int i=0;

string na;

cout

cin>>na;

while(name[i].compare(“..”))

{

if(!name[i].compare(na))

{

cout

return;} i++;} cout

string na,nu;cout>na;cout>nu;for(int i=0;i

if(!name[i].compare(“..”)){

//cout

return;} } cout

} ofstream file(“phonenumber.txt”);for(int i=0;i

} if(!name[i].compare(“..”))break;if(name[i].compare(“,”))

file

};void del(){

} int i=0;string na;cout>na;while(name[i].compare(“..”)){

if(!name[i].compare(na)){

} i++;name[i]=“,”;number[i]=“,”;cout

for(int i=0;i

} for(int i=0;i

} if(name[i].compare(”..“)&&name[i].compare(”,“))cout

number:”

void main(){

int choice;

int i=0;record temp;while(1)

{

cout

cin>>choice;

}

switch(choice){

} case 1: temp.search();break;case 2:

temp.add();break;case 3: temp.del();break;case 4: temp.store();break;case 5: temp.show();break;} system(“pause”);思路:

程序的大体思路是:声明电话本类,private成员是一个50个元素的string型数组,运行程序时就将文件中的电话记录读入到内存中(string数组),方便操作。从内存中读入记录的语句写在电话本类的构造函数中,使得声明类时就可以自动读入记录。文件中最后一行用”....”来标记记录的结束。对于所有操作都写进了电话本类中,本程序可以执行五个基本操作:1.按名字查找记录,查找成功返回该条记录,查找失败输出“无该记录” 2.添加记录,添加记录会要求输入名字与电话,如果记录数小于50条会显示“成功插入”,如果记录已经等于50条会显示“插入失败” 3.按名字删除某条记录,执行删除操作时会先查询该记录,如果存在该记录就将该记录赋为“,,”表示删除,如果不存在该记录返回”不存在该记录”

4.存储命令,可以将内存中的记录再次存入到文件当中 5.输出命令,输出当前内存中的所有记录。命令的选择可以用switch语句实现。

感想:

经过一学期的学习,我已经对c++有了初步的掌握,了解了类这

个全新的概念。类的应用可以方便管理函数,不需要像c那样凌乱得写一大堆函数,要调用时需要向上找到这个这个函数,产看它的功能与传入传出的要求。我认为类更大作用是可以有效地保护数据,不被随意地更改,也方便了他人的二次开发,只需要了解头文件中包含的类,类的方法,就可以方便地实现他人早已实现的功能,方便后人开发。比如试验中用到的就是很好的例子。

《北邮小学期c++文档.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
北邮小学期c++文档
点击下载文档
相关专题 北邮小学期c 北邮 学期 文档 北邮小学期c 北邮 学期 文档
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文