面向程序设计实验报告.docx
《面向程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《面向程序设计实验报告.docx(36页珍藏版)》请在冰豆网上搜索。
面向程序设计实验报告
实验报告
实验课程:
学生姓名:
学号:
专业班级:
年月日
一、实验一熟悉C++开发环境及简单程序设计和应用
…………………………………………3
2、实验二基本控制结构程序设计
…………………………………………8
3、实验三数组和指针
…………………………………………12
4、实验四继承和派生
…………………………………………21
南昌大学实验报告
学生姓名:
李阳学号:
6100509053专业班级:
电商091
实验类型:
□验证□综合□设计□创新实验日期:
2011.11.10实验成绩:
一、实验项目名称
实验一熟悉C++开发环境及简单程序设计和应用
一.实验目的
1.初步了解C++程序的编译、连接和运行的过程。
2.掌握和理解C++程序的结构。
二.实验内容
1.使用VC
2.运行一个简单的C++程序
3.编程求出对任意输入的两个整数,求出该两个整数的最大公约数和最小公倍数
三.实验环境
PC微机;
Windows操作系统;
VC程序集成环境。
四.实验步骤
1.启动VC
如果用户计算机系统已经安装了VC编译系统,按下图所示进入VC集成环境。
在该窗口,有9个菜单条目。
熟悉每个菜单的意义和操作。
2.输入程序
输入以下程序
#include
usingnamespacestd;
voidmain()
{
inti
(1),sum(0);
do{
sum+=i;
i++;
}while(i<=10);
cout<<"sum="<}
3.保存文件、运行程序、退出VC程序、打开已经存在的文件
4.编程求出对任意输入的两个整数,求出该两个整数的最大公约数和最小公倍数
五.思考题
总结实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。
南昌大学实验报告
学生姓名:
李阳学号:
6100509053专业班级:
电商091
实验类型:
□验证□综合□设计□创新实验日期:
2011.10.28实验成绩:
(以下主要内容由学生完成)
一、实验项目名称
实验二基本控制结构程序设计
二、实验目的
1.学会有关C++语言的有关运算符,以及包含这些运算符的表达式的使用,熟练掌握多重选择结构。
2.掌握C++函数的定义方法、函数的调用方法、参数说明以及返回值。
掌握函数的嵌套调用及递归调用的设计方法;
3.在编程过程中加深理解函数调用的程序设计思想。
三、实验步骤
1.当a=1,b=2,c=3时,编程求出
a^b&-c
a&b|c
!
a|a
~a|a
a^a
a>>2
以上表达式的值
2.编程实现这样一个完整的程序,运行时向用户提问“你考试考了多少分?
(0~100),接受输入后判断其等级并显示出来。
规则如下:
等级
范围
优
90〈=分数〈=100
良
80〈=分数〈90
中
60〈=分数〈80
差
0〈=分数〈60
3.用递归方法编写程序求Fibonacci级数,公式为:
fib(n)=fib(n-1)+fib(n-2),n>2;fib
(1)=fib
(2)=1;观察递归调用的过程。
六、思考讨论题或体会或对改进实验的建议
南昌大学实验报告
学生姓名:
学号:
专业班级:
实验类型:
□验证□综合□设计□创新实验日期:
实验成绩:
一、实验项目名称
实验三数组和指针
一.实验目的
1.掌握数组的基本概念,包括:
数组的定义、数组的类型、数组的初始化、数组的赋值、数组元素下标的范围、数组元素的正确以及引用数组元素的输入/输出等;重点掌握对象数组的使用。
2.掌握指针的基本概念和基本用法。
包括:
变量的地址和变量的值,指针变量的说明、指针变量的初始化、指针的内容与定义格式、指针的基本运算等;重点掌握对象指针的使用。
二.实验内容
有关数组和指针的程序设计
三.实验环境
PC微机
DOS操作系统或Windows操作系统
TurboC程序集成环境
四.实验步骤
1.编程实现:
设计一个Point类,利用对象数组,进行点的线性拟合。
要求能通过键盘输入对对象数组进行赋值。
#include
#include
usingnamespacestd;
classPoint
{
public:
Point(floatxx=0,floatyy=0)
{
X=xx;
Y=yy;
}
floatGetX(){returnX;}
floatGetY(){returnY;}
friendfloatlinefit(Pointl_point[],intn_point);//友元函数
private:
floatX,Y;
};
floatlinefit(Pointl_point[],intn_point)//友元函数体
{
floatav_x,av_y;
floatL_xx,L_yy,L_xy;
av_x=0;
av_y=0;
L_xx=0;
L_yy=0;
L_xy=0;
for(inti=0;i{
av_x+=l_point[i].X/n_point;
av_y+=l_point[i].Y/n_point;
}
for(i=0;i{//计算Lxx,Lyy,Lxy
L_xx+=(l_point[i].X-av_x)*(l_point[i].X-av_x);
L_yy+=(l_point[i].Y-av_y)*(l_point[i].Y-av_y);
L_xy+=(l_point[i].X-av_x)*(l_point[i].Y-av_y);
}
cout<<"Thislinecanbefittedbyy=ax+b."<cout<<"a="<cout<<"b="<returnfloat(L_xy/sqrt(L_xx*L_yy));//返回相关系数r
}
intmain()
{
intx,y;
Pointl_p[10];//定义一个数组
cout<<"请输入10组观测数据(XiYi):
"<for(inti=0;i<10;i++)
{
cout<<"请输入第"<
";
cin>>x>>y;
l_p[i]=Point(x,y);
}
floatr=linefit(l_p,10);//进行线性回归计算
cout<<"Linecoefficientr="<return0;
}
2.编程实现:
利用指针,设计一个程序,对任意的一个浮点数,可以将其整数部分和小数部分分别输出。
#include
usingnamespacestd;
voidsplitfloat(floatx,int*intpart,float*fracpart)
{
*intpart=int(x);
*fracpart=x-*intpart;
}
voidmain()
{
intn;
floatx,f;
cout<<"enterafloatpointnumebers:
"<cin>>x;
splitfloat(x,&n,&f);
cout<<"integerpart="<}
3.编程实现:
设计一个Point类,编程实现通过对象指针的方法访问Point类对象的成员;通过成员函数指针的方法访问成员函数;动态创建和删除对象数组
程序如下:
#include
usingnamespacestd;
classpoint
{public:
point();
point(intxx,intyy);
~point();
intGetX(){returnX;};
intGetY(){returnY;};
voidMove(intx,inty);
private:
intX,Y;
};
point:
:
point()
{X=Y=0;cout<<"defaultconstructorcalled."<point:
:
point(intxx,intyy)
{X=xx;Y=yy;cout<<"constructorcalled."<point:
:
~point()
{cout<<"destructorcalled."<voidpoint:
:
Move(intx,inty)
{intX=x;intY=y;cout<voidmain()
{
pointA(4,5);
point*p_A=&A;
int(point:
:
*p_GeX)()=&point:
:
GetX;
point*ptr=newpoint[3];
ptr[0].Move(5,10);
ptr[1].Move(10,20);
ptr[2].Move(15,25);
cout<<"deleting..."<delete[]ptr;
cout<<(p_A->GetX)()<cout<<(A.*p_GeX)()<}
五.思考题
小结有关对象数组、数组指针、函数指针、对象指针的使用。
南昌大学实验报告
学生姓名:
李阳学号:
6100509053专业班级:
电商091
实验类型:
□验证□综合□设计□创新实验日期:
实验成绩:
(以下主要内容由学生完成)
1、实验项目名称
实验4继承和派生
2、实验目的
1.理解掌握类的继承和派生等
基本概念。
2.掌握不同继承方式下对基类成员的访问控制,学习利用虚基类解决二义性问题。
三、实验内容
1、求解矩形的面积。
2、用虚基类构造一个销售经理类,使之同时具有销售人员和管理人员的特点。
2、用高斯消去法解线性方程组的程序设计。
四、实验环境
PC微机
Windows操作系统
VC程序集成环境
四.实验步骤
1.编程实现:
先构造点类,再分别利用公有、私有、保护等继承方式构造一个矩形类,求出其面积。
程序如下:
#include
usingnamespacestd;
classpoint
{public:
voidinitp(floatxx=0,floatyy=0){X=xx;Y=yy;}
voidmove(floatxo,floatyo){X+=xo;Y+=yo;}
intGetX(){returnX;}
intGetY(){returnY;}
voidMove(intx,inty){X=x;Y=y;}
private:
intX,Y;
};
classrectangle_a:
publicpoint
{public:
intflag(floatx,floaty,floatw,floath)
{initp(x,y);W=w;H=h;returnW*H;}
floatGetW(){returnW;}
floatGetH(){returnH;}
private:
floatW,H;
};
classrectangle_b:
privatepoint
{public:
intflag(floatx,floaty,floatw,floath)
{initp(x,y);W=w;H=h;returnW*H;};
floatGetX(){returnpoint:
:
GetX();};
floatGetY(){returnpoint:
:
GetY();};
floatGetW(){returnW;};
floatGetH(){returnH;};
private:
floatW,H;
};
classrectangle_c:
protectedpoint
{public:
intflag(floatx,floaty,floatw,floath)
{initp(x,y);W=w;H=h;returnW*H;}
floatGetX(){returnpoint:
:
GetX();}
floatGetY(){returnpoint:
:
GetY();}
floatGetW(){returnW;}
floatGetH(){returnH;}
private:
floatW,H;
};
voidmain()
{
rectangle_aa;
rectangle_bb;
rectangle_cc;
cout<cout<cout<}
2.编程实现:
构造一个销售经理类,使之同时具有销售人员和管理人员的特点,编程演示对其的管理。
程序如下:
#include
#include
usingnamespacestd;
classemployee
{
protected:
charname[20];//姓名
intindividualEmpNo;//个人编号
intgrade;//级别
floataccumPay;//月薪总额
staticintemployeeNo;//本公司职员编号目前最大值
public:
employee();//构造函数
~employee();//析构函数
voidpay();//计算月薪函数
voidpromote(int);//升级函数
voidSetName(char*);//设置姓名函数
char*GetName();//提取姓名函数
intGetindividualEmpNo();//提取编号函数
intGetgrade();//提取级别函数
floatGetaccumPay();//提取月薪函数
};
classsalesman:
virtualpublicemployee//兼职推销员类
{
protected:
floatCommRate;//按销售额提取酬金的百分比
floatsales;//当月销售额
public:
salesman();//构造函数
voidSetsales(floatsl);//设置销售额
voidpay();//计算月薪函数
};
classmanager:
virtualpublicemployee//经理类
{
protected:
floatmonthlyPay;//固定月薪数
public:
manager();//构造函数
voidpay();//计算月薪函数
};
classsalesmanager:
publicmanager,publicsalesman//销售经理类
{
public:
salesmanager();//构造函数
voidpay();//计算月薪函数
};
intemployee:
:
employeeNo=1000;//员工编号基数为1000
employee:
:
employee()
{individualEmpNo=employeeNo++;//新输入的员工编号为目前最大编号加1
grade=1;//级别初值为1
accumPay=0.0;}//月薪总额初值为0
employee:
:
~employee(){}
voidemployee:
:
pay()//计算月薪,空函数
{}
voidemployee:
:
promote(intincrement)
{grade+=increment;}//升级,提升的级数由increment指定
voidemployee:
:
SetName(char*names)
{strcpy(name,names);}//设置姓名
char*employee:
:
GetName()
{returnname;}//获取姓名
intemployee:
:
GetindividualEmpNo()
{returnindividualEmpNo;}//获取成员编号
intemployee:
:
Getgrade()
{returngrade;}//获取级别
floatemployee:
:
GetaccumPay()
{returnaccumPay;}//获取月薪
salesman:
:
salesman()
{CommRate=0.04;}//销售提成比例4%
voidsalesman:
:
Setsales(floatsl)
{sales=sl;}//设置销售额
voidsalesman:
:
pay()
{accumPay=sales*CommRate;}//月薪=销售提成
manager:
:
manager()
{monthlyPay=8000;}//固定月薪8000元
voidmanager:
:
pay()
{accumPay=monthlyPay;}//月薪总额即固定月薪数
salesmanager:
:
salesmanager()
{monthlyPay=5000;
CommRate=0.005;}
voidsalesmanager:
:
pay()
{accumPay=monthlyPay+CommRate*sales;}//月薪=固定月薪+销售提成
voidmain()
{
managerm1;
salesmanagersm1;
salesmans1;
charnamestr[20];//输入雇员姓名时首先临时存放在namestr中
cout<<"请输下一个雇员的姓名:
";
cin>>namestr;
m1.SetName(namestr);//设置雇员m1姓名
cout<<"请输下一个雇员的姓名:
";
cin>>namestr;
sm1.SetName(namestr);//设置雇员sm1姓名
cout<<"请输下一个雇员的姓名:
";
cin>>namestr;
s1.SetName(namestr);//设置雇员s1姓名
m1.promote(3);//经理m1提升3级
m1.pay();//计算m1月薪
cout<<"请输入销售经理"<";
floatsl;
cin>>sl;//输入s1所管辖部门本月的销售总额
sm1.Setsales(sl);//设置s1所管辖部门本月的销售总额
sm1.pay();//计算s1月薪
sm1.promote
(2);//s1提升2级
cout<<"请输入推销员"<";
cin>>sl;//输入s1本月的销售额
s1.Setsales(sl);//设置s1本月的销售额
s1.pay();//计算s1月薪
//显示m1信息
cout<<<"级别为"<//显示sm1信息
cout<<<"级别为"<//显示s1信息
cout<<<"级别为"<}
2.编程实现:
根据以前学过的数学知识,利用类继承的方法实现用高斯消去法解线性方程组。
程序代码如下:
(书上都有代码)
//linequ.h文件一,类声明
#ifndefLINEQU_H
#defineLINEQU_H
#include
#include
usingnamespacestd;
classMatrix//基类Matrix声明
{
public:
//外部接口
Matrix(intdims=2);//构造函数
~Matrix();//析构函数
voidsetMatrix(double*rmatr);//矩阵赋初值
voidprintM();//显示矩阵
protected:
//保护数据成员
intindex;//矩阵的维数
double*MatrixA;//矩阵存放数组首地址
};
classLinequ:
publicMatrix//公有派生类Linequ声明
{
public:
//外部接口
Linequ(intdims=2);//构造函数
~Linequ();//析构函数
voidsetLinequ(double*a,double*b);//方程赋值
voidprintL();//显示方程
intSolve();//全选主元高斯消去法求解方程
voidshowX();//显示方程的解
private:
//私有数据
double*sums;//方程右端项
double*solu;//方程的解
};
#endif
//lineequ.cpp文件二,类实现
#ifndefLINEEQU_CP