c++实验报告

课程名称

C++与面向对象程序设计

实验项目名称

 

实验室名称及编号

 

实验日期

 

学生姓名

 

学号

 

专业班级 

 

同组组员

机器编号或IP

***.***.***.***

 

一,实验目的和要求

 

 1.理解和使用函数重载以及带默认参数的函数;

2.使用new和delete进行动态内存管理;

3.理解和使用引用。

 

二、实验环境(软、硬件及条件)

一台安装有Visual C++ 6.0的计算机

三,实验步骤

1.阅读下面的程序,写出程序的运行结果。

#include <iostream.h>

int max_def(int x, int y)

{

      return (x>y?x:y);

}

int max_def(int x, int y, int z)

{

      int temp = 0;

      return (temp=(x>y?x:y))>z?temp:z;

}

double max_def(double x, double y)

{

      return (x>y?x:y);

}

int main()

{

      int x1 = 0;

      int x2 = 0;

      double d1 = 0.0;

      double d2 = 0.0;

      x1 = max_def(5,6);

      x2 = max_def(2,3,4);

      d1 = max_def(2.1,5.6);

      d2 = max_def(12.3,3.4,7.8);

      cout<<"x1="<<x1<<endl;

      cout<<"x2="<<x2<<endl;

      cout<<"d1="<<d1<<endl;

      cout<<"d2="<<d2<<endl; 

      return 0;

}

 

该程序的运行结果是      x1=6

                        x2=4

                        d1=5.6

                        d2=12                         

 

 

2. 阅读下面的程序,写出程序的运行结果。

#include <iostream.h>

void swap(int a, int b)

{

      int temp = a;

      a = b;

      b = temp;

}

void swap(int *a, int *b)

{

      int temp = *a;

      *a = *b;

      *b = temp;

}

 

int main()

{

      int i = 5;

      int j = 10;

      cout<<"Before swap: i="<<i<<",j="<<j<<endl;

      swap(i,j);

      cout<<"After the first swap: i="<<i<<",j="<<j<<endl;

      swap(&i,&j);

      cout<<"After the second swap: i="<<i<<",j="<<j<<endl;

      return 0;

}

该程序的运行结果是   Before swap: i=5,j=10

                     After the first swap: i=5,j=10

                     After the second swap: i=10,j=5                            

 

3.以下程序的功能是:      请输入9个整数:

                           1 2 3 4 5 6 7 8 9

                           the  product  is :362880                       

 

# include <iostream.h>

const int size=9;                                

int *init()                  //返回指针值的函数

{

      return  new int[size];   //分配空间将首地址返回

}

void readin(int *a)      //从a指向的存储单元开始读入数据

{

      int i;

      cout<<"请输入"<<size<<"个整数:"<<endl;

      for (i=0;i<size;i++)

        cin>>*(a+i);      //读入数据到a+i指向的存储单元

}

void product(int *arr ,int  size,int *result)

                      //计算从arr指向的存储单元开始的

                      //连续size个存储单元的乘积

{   int m,i;

      for (m=1,i=0;size>0;size--,i++)

            m=m*(*(arr+i));

      *result=m; //乘积的结果放入result指向的存储单元

}

int main()

{

      int *x,res;

      if ((x=init())==NULL)

            return 1;

      readin(x);

      product(x,size,&res);

      cout<<"the  product  is :"<<res<<endl;

      delete[ ] x;

      return 0;   

}

 

3.设计一个函数:exchange(float x, float y, float z),当调用exchange(a,b,c)时,将a的内容赋值给b,b的内容赋值给c,c的内容赋值给a,要求采用引用的方式来实现。

#include<iostream>

using namespace std;

float exchange(float &x,float &y, float &z)

{

float t;

t=x;

x=y;

y=t;

y=z;

z=t;

return x,y,z;

}

int main()

{

float a,b,c;

cout<<" please inputa,b,c"<<endl;

cin>>a;

cin>>b;

cin>>c;

float &i=a;

float &j=b;

float &k=c;

exchange(i,j,k);

cout<<"交换后的值"<<a<<b<<c<<endl;

return 0;

}

4.编写重载函数max1可分别求取2个整数,3个整数,2个浮点数,3个浮点数的最大值。  

 #include<iostream>

using namespace std;

int max(int a,int b)

{

 return a>b?a:b;

}

int max(int a,int b,int c)

{

 return max(a,max(b,c));

}

double max(double a,double b)

{

 return a>b?a:b;

}

double max(double a,double b,double c)

{

 return max(a,max(b,c));

}

void main()

{

 int a,b,c;

 double x,y,z;

 cout<<"input three int:"<<endl;;

 cin>>a>>b>>c;

 cout<<max(a,b,c)<<endl;

 cout<<max(a,b)<<endl;

 cout<<"input three double:" <<endl;

 cin>>x>>y>>z;

 cout<<max(x,y,z)<<endl;

 cout<<max(x,y)<<endl;

}

 

      

 

 

 

 

四、实验中遇到的问题及解决

:\Users\周佳丽\Desktop\Microsoft Visual Studio(3)\Microsoft Visual Studio\Common\Cpp1.cpp(7) : error C2059: syntax error : ';'

C:\Users\周佳丽\Desktop\Microsoft Visual Studio(3)\Microsoft Visual Studio\Common\Cpp1.cpp(13) : warning C4508: 'exchange' : function should return a value; 'void' return type assumed

C:\Users\周佳丽\Desktop\Microsoft Visual Studio(3)\Microsoft Visual Studio\Common\Cpp1.cpp(19) : error C2440: 'initializing' : cannot convert from 'float *' to 'float'

        There is no context in which this conversion is possible

C:\Users\周佳丽\Desktop\Microsoft Visual Studio(3)\Microsoft Visual Studio\Common\Cpp1.cpp(20) : error C2440: 'initializing' : cannot convert from 'float *' to 'float'

        There is no context in which this conversion is possible

C:\Users\周佳丽\Desktop\Microsoft Visual Studio(3)\Microsoft Visual Studio\Common\Cpp1.cpp(21) : error C2440: 'initializing' : cannot convert from 'float *' to 'float'

        There is no context in which this conversion is possible

Error executing cl.exe.

 

 

 

 

实验结果及分析

<1> 

x1=6

x2=4

d1=5.6

d2=12

<2>

Before swap: i=5,j=10

After the first swap: i=5,j=10

After the second swap: i=10,j=5

<3>

请输入9个整数:

1 2 3 4 5 6 7 8 9

the  product  is :362880

<4>

please inputa,b,c

4 7 8

交换后的值784

<5>

input three int:

1 2 3

3

2

input three double:

3.2 7.2 2.1

7.2

7.2

 

为了方便,把代码放在Word里面了,每次上机实验的题目代码都在。 第一次: 对如下多项式编写类定义: + + +…+ 其中,n为多项式的次数。完成如下功能: (1) 可存储任意大的多项式(提示:可用动态数组实现)。 (2) 定义构造函数、析构函数、拷贝构造函数。 (3) 包含一个static成员存储定义的多项式的数量。 (4) 定义一个成员函数输出多项式。(可参照-x^4-6x^3+5格式输出) (5) 定义一个成员函数计算多项式的值。 (6) 写main函数测试类的功能。 (7) 采用多文件实现。 考虑:哪些成员函数可以声明为const. 第二次: (8) 重载“+”运算符,实现两个多项式相加。 (9) 重载“-”运算符,实现两个多项式相减。 (10) 重载“*”运算符,实现两个多项式相乘。 (11) 重载“=”运算符,实现两个多项式的赋值运算。 考虑:把其中某个运算符重载为友元函数。 第三次: C++的一般编译器都定义和封装了字符串功能,请模仿定义string类的实现,可以实现并支持如下功能: (1)string s = “吉林大学”; (2)string t = s; (3)string m; m = t; (4)m.legnth() 函数测量字符串的长度 (5)m.cat(string const &)连接字符串 第四次: 我公司为仪器生产企业,目前生产摄像机和行车记录仪两种产品,分别销售给用户。 摄像机包含摄像、图像质量设定、编码算法等属性。 将摄像机增加相应芯片(具有操作菜单、自动拍摄、车速传感器、源代码等功能)后,形成一个行车记录仪。 要求: 设计摄像机类,并请根据下列不同的功能要求,采用不同的继承方式,设计行车记录仪类,并添加测试代码,体验不同继承方式下的成员访问属性。(类设计时可根据需要自行添加数据成员和其他成员函数。) (1) 行车记录仪的芯片可以使用摄像机的摄像、图像质量设定功能。 行车记录仪用户可以操作行车记录仪的操作菜单和摄像机的摄像功能。 (2)行车记录仪的芯片可以使用摄像机的拍摄、图像质量设定功能。 行车记录仪用户仅仅可以操作行车记录仪的操作菜单。 (3) 行车记录仪的芯片可以使用摄像机的拍摄、图像质量设定功能。 行车记录仪用户仅仅可以操作行车记录仪的操作菜单 同时其他公司购买行车记录仪,因该公司也用于销售,不得泄露其全部内容 课后: (1)采用组合方式设计行车记录仪类,增加相应测试代码,体验继承和组合的关系。 (2)分别为继承和组合方式下为各类添加构造函数、析构函数,增加相应测试代码,体验对象的初始化和构造顺序。 (3)将摄像机类和行车记录仪类功能相近的函数(如拍摄、编码等功能函数)设为同名函数,增加相应测试代码,体验同名函数覆盖。 (4)为我公司建立一个多态的产品类层次结构,使用抽象类,测试时,创建一个基类指针的容器,通过基类指针调用虚函数,体验多态。
题目: 为某高校的学籍和成绩管理设计一系统。要求建立的数据有: (1)学生类,包含班级号、学号、姓名、专业等成员; (2)学生成绩类,包含班级号、学号,课程名,成绩等成员。 完成下列功能:首先输入学生数据及成绩数据,再根据提示分别实现查找功能。其中:  函数 Xslr 负责学生数据录入;  函数 Cjlr 负责成绩数据录入;  函数 Look1 负责根据姓名查找学生的基本信息和成绩信息;  函数 Look2 负责根据班级列出学生的基本信息;  函数 Dayin1 负责依据班级输出满足条件的学生的基本情况;  函数 Dayin2 负责输出某一同学的成绩单。   题目: 设计一个电子通信录。其中包括如下类: (1)通信地址类 addr。包含公有数据:  成员 char post[10]; //邮编  成员 char ad[40]; //家庭地址  构造函数 addr(char p[10]="",char a[40]="");  成员函数 void setadd(addr a); //用 a 为当前对象赋值 (2)出生年月类 birth。包含公有数据:  成员 int year; //年份  成员 int month; //月份  成员 int day; //日期  构造函数 birth(int y=0,int m=0,int d=0);  成员函数 void setbir(birth b); //用 b 为当前对象赋值 (3)类 friends。包含数据:  私有成员 int number; //序号  私有成员 char name[20]; //姓名  私有成员 char sex; //性别  私有成员 char telephone[13]; //联系电话  公有成员 birth bir; //出生年月  公有成员 addr add; //通信地址  公有构造函数 friends(int nu=0,char n[20]=" ",char s=' ',int y=0,int m=0,int d=0,char p[10]=" ",char a[40]=" ",char t[13]=" ");  公有成员函数 void setfri(int nu,char n[20],char s,birth b,addr a,char t[13]); //为 当前对象赋值  公有成员函数 friends input(friends &bb); //为对象 bb 输出数据  公有成员函数 int search(friends aa[100],char n[20]); //在 aa 中查找姓名为 n 的对象  公有成员函数 void show(friends aa); //输出对象 aa  公有成员函数 void delet(friends aa[100],int k); //在 aa 中删除下标为 k 的元素 (4)在主函数中完成主菜单的设计,并根据输入值完成所需操作。  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯子佳人傻了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值