《C++实验代码(36页).doc》由会员分享,可在线阅读,更多相关《C++实验代码(36页).doc(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-C+实验代码-第 36 页实验项目一 C+程序设计初步题目在Visual Studio 2008平台上,用C+语言创建一个控制台应用程序,当其运行时在屏幕上显示“Hello,World!”(参考P15) 实验项目二 类与对象(1)有以下程序:#include using namespace std;class Time /定义Time类public:/数据成员为公用的 int hour; int minute;int sec;int main( ) Time t1;/定义t1为Time类对象 cint1.hour;/输入设定的时间 cint1.minute; cint1.sec; coutt
2、1.hour“:”t1.minute “:”t1.secendl;/输出时间 return 0;改写程序,要求:将数据成员改为私有的;将输入和输出的功能改为由成员函数实现;在类体内定义成员函数。然后编译和运行程序。请分析什么成员应指定为公用的?什么成员应指定为私有的?什么函数最好放在类中定义?什么函数最好放在类外定义?代码:/ 实验_1.cpp : 定义控制台应用程序的入口点。#include stdafx.h#include using namespace std;class Time /定义Time类private:/数据成员为私有的 int hour; int minute; int s
3、ec;public:void Input()cout请输入时、分、秒:hourminutesec;void print()cout时间为:endl; couthour:minute :secendl;int _tmain(int argc, _TCHAR* argv) Time t1; t1.Input (); t1.print (); return 0;结果:(2)修改实验1中的学生成绩管理系统,建立类OurClass,实现班级学生信息的输入,排序和输出。要求:添加构造函数,初始化班级名称,将成员函数定义在类外,类的定义单独放在头文件中。代码:头文件:#define N 3struct St
4、udentlong lNum;char sName12;float cGrade;float ccGrade;float fGrade;class OurClassprivate:char cName20;Student stuN;public:OurClass:OurClass(); void Input();void print();void Sort();.cpp:/ 学生成绩管理.cpp : 定义控制台应用程序的入口点。#include stdafx.h#includeiostreamusing namespace std;#include student.hint main()Our
5、Class c1; c1.Input();c1.Sort ();coutendl排序结果为:endlendl;c1.print ();return 0;OurClass:OurClass () /(char Nme20)cout请输入班级名称:cName;void OurClass:Input ()int i;cout输入N个学生的学号、姓名和成绩endl;for(i=0;istui.lNumstui.sName stui.cGrade stui.ccGrade ;stui.fGrade =stui.cGrade+stui.ccGrade;void OurClass:Sort() int i,
6、j;Student Temp;for(i=0;iN;i+)for(j=i+1;jN;j+)if (stui.fGradestuj.fGrade )Temp=stui;stui=stuj;stuj=Temp;void OurClass:print() int i; cout班级名称:; coutcNameendl; cout学号姓名成绩endl; for(i=0;iN;i+) coutstui.lNum stui.sName stui.fGrade endl;结果:(3)需要求3个长方柱的体积(用对象数组完成),请编一个基于对象的程序。数据成员包括length(长)、width(宽)、heigh
7、t(高)。要求用成员函数实现以下功能:由键盘分别输入3个长方柱的长、宽、高;计算长方柱的体积;输出3个长方柱的体积。请编程序,上机调试并运行。完成后,将其中的数组名当常量指针用。代码:头文件:class cubeprivate:double length;double width;double height;public:cube();void input();void print();double volume();/ 求长方柱的体积.cpp : 定义控制台应用程序的入口点。#include stdafx.h#includeiostreamusing namespace std;#inclu
8、decube.hvoid cube:input()double length;double width;double height;cube:cube() cout请输入长方柱的长、宽、高:lengthwidthheight;double cube:volume()return length*width*height;void cube:print()cout长方柱的体积为:volume()endl;int main()cube c3;for(int i=0;iprint();return 0;结果:(4)友元函数(1)有以下程序:#include using namespace std;cl
9、ass Date; /对Date类的提前引用声明class Time /定义Time类public:Time(int,int,int);void display(Date &); /display是成员函数,形参是Date类对象的引用 private:int hour;int minute;int sec;class Date /声明Date类public:Date(int,int,int);friend void Timedisplay(Date &); /声明Time中的display函数为友元成员函数 private:int month;int day;int year;TimeTime
10、(int h,int m,int s) /类Time的构造函数hour=h;minute=m;sec=s;void Timedisplay(Date &d) /display的作用是输出年、月、日和时、分、秒coutd.month“/”d.day“/”d.yearendl; /引用Date类对象中的私有数据couthour“:”minute“:”secendl; /引用本类对象中的私有数据DateDate(int m,int d,int y) /类Date的构造函数month=m;day=d;year=y;int main( )Time t1(10,13,56); /定义Time类对象t1Da
11、te d1(12,25,2004); /定义Date类对象d1t1.display(d1); /调用t1中的display函数,实参是Date类对象d1return 0;请读者分析和运行此程序,注意友元函数Time:display的作用。将程序中的display函数不放在Time类中,而作为类外的普通函数,然后分别在Time和Date类中将display声明为友元函数。在主函数中调用display函数,display函数分别引用Time和Date两个类的对象的私有数据,输出年、月、日和时、分、秒。修改后上机调试和运行。代码:/ 实验_4.cpp : 定义控制台应用程序的入口点。#include
12、 stdafx.h#include using namespace std;class Date; /对Date类的提前引用声明class Time /定义Time类friend void display(Date &,Time &);public:Time(int,int,int);/void display(Date &); /display是成员函数,形参是Date类对象的引用private:int hour;int minute;int sec;class Date /声明Date类public:Date(int,int,int);friend void display(Date &,
13、Time &); public:int month;int day;int year;Time:Time(int h,int m,int s) /类Time的构造函数hour=h; minute=m; sec=s;void display(Date &d,Time &t1) /display变为普通函数coutd.month/d.day/d.yearendl; /引用Date类对象中的私有数据coutt1.hour:t1.minute:t1.secendl; Date:Date(int m,int d,int y) /类Date的构造函数month=m;day=d;year=y;int _tm
14、ain(int argc, _TCHAR* argv)Time t1(10,13,56); /定义Time类对象t1Date d1(12,25,2004); /定义Date类对象d1display(d1,t1);return 0;结果:实验项目三 函数重载(1) 编写程序,实现普通函数重载练习。 求三角型,矩形,圆形的面积和周长,其中面积函数和周长函数重载。代码:class Zhc /Area.hprivate: double a,b,c; double r;public: Zhc (double a,double b,double c); Zhc (double a,double b); Z
15、hc (double r); class Area /Area.hprivate: double a,b,c; double r;public: Area(double a,double b,double c); Area(double a,double b); Area(double r);/ 三角形等面积及周长.cpp : 定义控制台应用程序的入口点。#include stdafx.h#include iostreamusing namespace std;#include Area.h#include Zhc.h#include math.hint _tmain(int argc, _T
16、CHAR* argv)double a,b,c;double r;cout请输入三角形的三条边a,b,c: abc; cout三角形的面积为: sqrt(a+b+c)/2*(a+b+c)/2-a)*(a+b+c)/2-b)*(a+b+c)/2-c)endl; cout三角形的周长为:a+b+cendl;cout请输入矩形的两条边a,b:ab; cout矩形的面积为:a*bendl; cout矩形的周长为:2*(a+b)endl; cout请输入圆的半径:r; cout圆的面积为: r*r*3.14endl; cout圆的周长为: 2*r*3.14endl;double Area(double
17、a,double b,double c) return sqrt(a+b+c)/2*(a+b+c)/2-a)*(a+b+c)/2-b)*(a+b+c)/2-c); double Area(double a,double b) return a*b;double Area(double r) return r*r*3.14; double Zhc(double a,double b,double c) return a+b+c;double Zhc(double a,double b) return 2*(a+b);double Zhc(double r)return 2*r*3.14;结果:(
18、2) 编写程序,(注意复数构造函数的重载及构造函数分带默认参数和不带默认参数的情况) 求两个复数的和,复数考虑有实部和虚部、无实部、无虚部三种情况代码:头文件:#define N 2class Complexprivate:double real;double imag;public:Complex(double r=0,double i=0);void Input();void Print();friend Complex Add(Complex c1,Complex c2);/ 复数相加.cpp : 定义控制台应用程序的入口点。#includestdafx.h#includeiostrea
19、musing namespace std;#includecomplex.hint main()Complex total=0;Complex cN;for(int m=0;mN;m+)cout请输入第m+1个复数:;cm.Input();total=Add(total,cm);coutrealimag; cout0) cout+; coutimagiendl; else if(imag=0) coutendl;Complex Add(Complex c1,Complex c2)c1.real=c1.real+c2.real;c1.imag=c1.imag+c2.imag;return c1;
20、 void Complex:Print()cout0)cout+;if(imag!=0)coutimagiendl;结果:(3) 以上实验做完,练习书上的例题。实验项目四 常量与引用1、有关const的上机内容:(1)、运行课本中的例4-5,分析查看 ,然后逐个将程序中的const 删除,分析运行的结果;代码:/student.h#ifndef STUDENT_H_#define STUDENT_H_class Studentint No;char Name20;public :Student();int GetNo(); char*GetName();#endif/student.cpp#i
21、nclude stdafx.h#include#includestudent.hStudent:Student()No=1;strcpy(Name,wang);int Student:GetNo()return No; char*Student:GetName()return Name;/ 例_5.cpp : 定义控制台应用程序的入口点。#include stdafx.h#includestudent.hint main()Student s1;s1.GetNo();s1.GetName(); Student s2;s2.GetNo();/s2.GetName();return 0;结果:(2
22、)、运行课本中的例4-10与例4-11,对比两个程序中指针和引用。例4-10:/ 例_10.cpp : 定义控制台应用程序的入口点。#include stdafx.h#includeusing namespace std;void changpointer1(int* x) (*x)+; *x=1;void changpointer2(int*& x)x+; *x=2;int main()int iData3=0;int *p=iData;int i;for(i=0;i3;i+)coutiDatai=iDatai ; coutendl; changpointer1(&p); for(i=0;i
23、3;i+)coutiDatai=iDatai ;coutendl;p=iData;changpointer2(p); for(i=0;i3;i+) coutiDatai=iDatai ; coutendl; return 0;结果:例4-11:/ 例_11.cpp : 定义控制台应用程序的入口点。#include stdafx.h#includeusing namespace std;void swapbypointer(int* x,int*y)int z;z=*x;*x=*y;*y=z;void swapbycite(int& x,int& y)int z;z=x;x=y;y=z;int
24、main()int i=10,j=20;int m=10,n=20;swapbypointer(&i,&j); swapbycite(m,n);couti=i,j=jendl;coutm=m,n=nendl;return 0;结果:2、有关拷贝构造函数(1)比较例4-15和例4-16,理解拷贝构造函数的作用。例4-15:/ 例-15.cpp : 定义控制台应用程序的入口点。#include stdafx.h#includeusing namespace std;class Studentstatic int number;public:Student()number+;show(Student
25、);Student()number-;show(Student);static void show(const char* str=NULL)if (str)coutstr:;coutnumber=numberendl;int Student:number=0;Student f(Student x)x.show(x inside f();return x;int _tmain(int argc, _TCHAR* argv)Student h1;Student h2=f(h1);Student:show(after call f();return 0;结果:例4-16:/ 例-16修改例-15
26、.cpp : 定义控制台应用程序的入口点。#include stdafx.h#includeusing namespace std;class Studentstatic int number;public:Student()number+;show(Student);/拷贝构造函数Student(const Student&)number+;show(Student);Student()number-;show(Student);static void show(const char* str=NULL)if (str)coutstr:;coutnumber=numberendl;int S
27、tudent:number=0;Student f(Student x)x.show(x inside f();return x;int _tmain(int argc, _TCHAR* argv)Student h1;Student h2=f(h1);Student:show(after call f();return 0;结果:实验项目五 静态与命名控制(1)商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受9.8折优惠。现已知当天3个销售员销售情况为销货员号(num)销货件数(qu
28、antity)销货单价(price)101523.51021224.5610310021.5请编程序,计算出当日此商品的总销售款sum以及每件商品的平均售价。要求用静态数据成员和静态成员函数。(提示:定义一个销售员类,包含属性:num(销售员编号),quantity(销售件数),price(单价),discount(折扣),sum(总销售款),n(商品销售总件数)。将折扣discount,总销售款sum和商品销售总件数n声明为静态数据成员,再定义静态成员函数average(求平均售价)和display(输出结果)。代码:头文件:#define N 3class Seller private:
29、int num,quantity;double price; static double discount; static double sum; static int n;public:Seller();static void print(Seller *p); staticdouble Seller:Average();/ 商店销售.cpp : 定义控制台应用程序的入口点。#include stdafx.h#includeiomanip#includeiostreamusing namespace std;#includeseller.hdouble Seller:discount =0.
30、76;double Seller:sum =0;int Seller:n =0;int main()Seller s3;Seller:print (s);return 0;Seller:Seller()cout请输入销售员的编号,销货件数和销货单价:numquantityprice;n+=quantity;if(quantity=10) sum+=quantity*price*discount*0.98; elsesum+=quantity*price*discount;double Seller:Average()return sum/n;void Seller:print(Seller *
31、p) int i; coutendl销售信息为:endl; coutsetw(8)销货员号setw(8)销货件数setw(8)销货单价endl; for(i=0;iN;i+) coutsetw(8)pi.numsetw(8)pi.quantitysetw(8)pi.priceendl; cout统一折扣为:discountendl; cout对一次购件以上者,还可以享受.8折优惠endl; cout总销售额为:sumendl; cout销货总件数为:nendl; cout平均价格为:Average()endl;结果:(2) 计算实验2中的学生总成绩及平均成绩,并输出结果(请分别用利用友元函数和
32、静态来完成)静态:头文件:#define N class OurClassprivate: char cName20; int Num; char Name20; float CGrade, CjGrade,date,ave;public: /OurClass(); static void input(OurClass stuN); static void sort(OurClass stuN); static void show(OurClass stuN);.cpp:#include iostreamusing namespace std;#include student.hint mai
33、n()OurClass stuN;OurClass:input(stu);OurClass:sort (stu);OurClass:show (stu);return 0;void OurClass:input(OurClass stuN) int i;cout请输入3个学生的信息endl;cout学号t姓名tc和c+成绩endl;for(i=0;istui.Numstui.Namestui.CGradestui.CjGrade;stui.date=stui.CGrade+stui.CjGrade;stui.ave=(stui.CGrade+stui.CjGrade)/2;void OurCl
34、ass:sort(OurClass stuN)int i,j;OurClass temp;for(i=0;iN-1;i+)for(j=i+1;jN;j+)if(stui.datestuj.date)temp=stui;stui=stuj;stuj=temp;void OurClass:show(OurClass stuN) int i;cout成绩排名endl;cout名次 学号 姓名 成绩综合 平均成绩:endl;for(i=0;iN;i+)couti+1 stui.Num stui.Name stui.date stui.aveendl;结果:友元:头文件:#define N 3class
35、 OurClassprivate: char cName20; int Num; char Name20; float CGrade, CjGrade,date,ave;public: friend OurClass input(OurClass stuN); friend OurClass sort(OurClass stuN); friend OurClass show(OurClass stuN);.cpp:#include iostreamusing namespace std;#include student.hint main()OurClass stuN;input(stu);s
36、ort (stu);show (stu);return 0;/本实验使用对象数组,有n个数组元素就会构造n次,需要重复输入n次班级名,因此注销。/*OurClass:OurClass()cout请输入班级名称cName;OurClass input(OurClass stu) int i;cout请输入3个学生的信息endl;cout学号t姓名tc和c+成绩endl;for(i=0;istui.Numstui.Namestui.CGradestui.CjGrade;stui.date=stui.CGrade+stui.CjGrade;stui.ave=(stui.CGrade+stui.CjG
37、rade)/2;return stuN;OurClass sort(OurClass stu)int i,j;OurClass temp;for(i=0;iN-1;i+)for(j=i+1;jN;j+)if(stui.datestuj.date)temp=stui;stui=stuj;stuj=temp;return stuN;OurClass show(OurClass stu) int i; cout成绩排名endl;cout名次 学号 姓名 成绩综合 平均成绩:endl;for(i=0;iN;i+)couti+1 stui.Num stui.Name stui.date stui.aveendl;return stuN;实验项目六 运算符重载(1)P145 第2题 二维数组相加:编写一个程序,用成员函数重载运算符“+”和“-”,实现两个二维数组相加,要求第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。代码:头文件:#define N 3#define M 4class Arrayprivate:int ANM;pu
限制150内