课本123页第十题
#include "iostream.h"
#include "string.h"
#include "stdio.h"
class Date
{
public:
Date()
{
year=2010;
month=01;
day=01;
}
void SetY ear(int y)
{
year=y;
}
void SetMonth(int m)
{
month=m;
}
void SetDay(int d)
{
day=d;
}
int GetY ear()
{
return year;
}
int GetMonth()
{
return month;
}
int GetDay()
{
return day;
}
void DisplayDate()
{
cout< } private: int year,month,day; }; class Person { private: int PersonNumber; char sex[2]; Date date; int ID; public: Person() { } Person(int personnumber,char sex1[],Date d,int ID=0):date(d) { PersonNumber=personnumber; strcpy(sex,sex1); ID=0; } ~Person() { } Person(Person&); void SetPersonNumber(int spn) { PersonNumber=spn; } void SetSex(char *str) { strcpy(sex,str); } void SetDate(Date d) { date.SetY ear(d.GetY ear ()); date.SetMonth(d.GetMonth ()); date.SetDay(d.GetDay ()); } void SetID(int id ) { ID=id; } int GetPersonNumber() { return PersonNumber; } char* GetSex() { return sex; } int GetDate() { cout< return 1; } int GetID( ) { return ID; } }; Person::Person(Person &p) { PersonNumber=p.PersonNumber ; strcpy(sex,p.sex ); date=p.date ; ID=p.ID ; } void main() { Person person[4]; char sex[2]; int personnum; Date dd; int year,month,day; int id; for(int i=0;i<4;i++) { cout<<"请输入员工的编号:"< cin>>personnum; person[i].SetPersonNumber(personnum); cout<<"请输入员工的性别:"< cin>>sex; person[i].SetSex (sex); cout<<"请输入员工的出生年月:"< cin>>year>>month>>day; dd.SetY ear (year); dd.SetMonth (month); dd.SetDay (day); person[i].SetDate(dd); cout<<"请输入员工的身份证号:"< cin>>id; person[i].SetID(id); cout< } for(int j=0;j<4;j++) { cout< cout< cout< cout< } } 类的组合 #include "iostream.h" #include "math.h" class Point { public: Point(int xx=0,int yy=0) { x=xx; y=yy; } Point(Point &p); int Getx() { return x; } int Gety() { return y; } private: int x,y; }; Point::Point(Point &p) { x=p.x ; y=p.y ; cout<<"Point拷贝构造函数被调用"< } class Line { public : Line(Point xp1,Point xp2); Line(Line&); double Getlen() { return len; } private: Point p1,p2; double len; }; Line::Line(Point xp1,Point xp2):p1(xp1),p2(xp2) { cout<<"Line拷贝构造函数被调用"< double x=double(p1.Getx()-p2.Getx()); double y=double(p1.Gety()-p2.Gety()); len=sqrt(x*x+y*y); } Line::Line(Line &L):p1(L.p1),p2(L.p2) { cout<<"Line拷贝构造函数被调用"< len=L.len; } void main() { Point myp1(1,1),myp2(4,5); Line line(myp1,myp2); Line line2(line); cout< cout< } 1实现客户机(CLIENT)类。声明字符静态数据成员ServerName,保存其服务器名称;声明整形静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeSeverName()改变服务器名称。在头文件client.h中声明类,在文件client.cpp中实现,在文件test.cpp中测试这个类,观察相应的成员变量取值的变化情况。 #include "iostream" #include "cstring" using namespace std; class Client { private: static char ServerName[20]; static int ClientNum; public: Client(); static void ChangeSeverName(char name[]); void GetServerName(); void GetServerNum(); }; #include "Client.h" int Client::ClientNum =0; char Client::ServerName[20] =" "; void Client::ChangeSeverName(char name[]) { strcpy(ServerName,name); } Client::Client() { ClientNum++; } void Client::GetServerName () { for(int i=0;i<20;i++) cout< cout< } void Client::GetServerNum() { cout< } #include "Client.h" void main() { Client client; char name[20]={'s','e','v'}; client.ChangeSeverName (name); cout<<"服务器名字是:"< client.GetServerName (); cout<<"用户个数是:" < client.GetServerNum (); Client client2; char name2[20]={'s','u','n'}; client.ChangeSeverName (name2); cout<<"改变后服务器名字是:"< client.GetServerName (); cout<<"用户个数是:" < client.GetServerNum (); } 王婆卖瓜:每卖一瓜记录该瓜的重量,以及所卖出的总重量和总个数,同时允许退瓜,请编程模拟过程。 #include "iostream" using namespace std; class Watermelon { private : //float weight; static float totalweight; static int amount; public: Watermelon(); void SellOneWatermelon(float w); void WithdrawWatermelon(float w); int SellWatermelonAmount(); float SellWaterToalWeight(); }; #include "Watermelon.h" int Watermelon::amount =0; float Watermelon::totalweight =0.0f; void Watermelon::SellOneWatermelon(float w) { amount++; totalweight+=w; } void Watermelon::WithdrawWatermelon(float w) { amount--; totalweight-=w; } int Watermelon::SellWatermelonAmount() { return amount; } float Watermelon::SellWaterToalWeight() { return totalweight; } Watermelon::Watermelon() { } #include "Watermelon.h" void main() { Watermelon wm; wm.SellOneWatermelon (15.6f); wm.SellOneWatermelon(15.4f); cout<<"卖出西瓜的个数:"< cout<<"卖出西瓜的总重量:"< wm.WithdrawWatermelon (15.2f); cout<<"卖出西瓜的个数:"< cout<<"卖出西瓜的总重量:"< } 统计银行存款问题:设计一个程序,其中有三个类,即Cbank、Bbank、Gbank,分别为中国银行、工商银行、农业银行类。每个类都包含一个私有数据balance,用于存放储户在该行的存储数。要求设计友元函数计算储户在这3家银行的总存款数 class Bbank { private: static float balance; public: friend class Cbank; friend class Gbank; void StoreMoney(float m); void withdrawal(float m); friend float TotalMoney(Cbank cb,Bbank bb,Gbank gb); }; #include "Bbank.h" float Bbank::balance =0; void Bbank::StoreMoney (float m) { balance+=m; } void Bbank::withdrawal (float m) { balance-=m; } class Cbank { private: static float balance; public: friend class Bbank; friend class Gbank; void StoreMoney(float m); void withdrawal(float m); friend float TotalMoney(Cbank cb,Bbank bb,Gbank gb); }; #include "Cbank.h" float Cbank::balance =0; void Cbank::StoreMoney (float m) { balance+=m; } void Cbank::withdrawal (float m) { balance-=m; } class Gbank { private: static float balance; public: friend class Cbank; friend class Bbank; void StoreMoney(float m); void withdrawal(float m); friend float TotalMoney(Cbank cb,Bbank bb,Gbank gb); }; #include "Gbank.h" float Gbank::balance =0; void Gbank::StoreMoney (float m) { balance+=m; } void Gbank::withdrawal (float m) { balance-=m; } #include "iostream" #include "Cbank.h" #include "Bbank.h" #include "Gbank.h" using namespace std; float TotalMoney(Cbank cb,Bbank bb,Gbank gb) { return cb.balance +bb.balance +gb.balance ; } void main() Cbank cb; Bbank bb; Gbank gb; cb.StoreMoney (15.6f); bb.StoreMoney (56.6f); gb.StoreMoney (25.6f); cout< } ? 编写一个函数把华氏温度转换为摄氏温度,转换公式为:C=(F-32)*5/9. #include using namespace std; int swapFtoC(float f) { int c; c=(f-32)*5/9; return c; } int main() { float f,c; cout<<"请输入华氏温度"< cin>>f; c=swapFtoC(f); cout<<"摄氏温度为:"< return 0; } ? 编写重载函数Max1可分别求取2个整数、3个整数、2个双精度数、3个又精度数的最大值 #include using namespace std; int max(int a,int b) { return a>b?a:b; } int max(int a,int b,int c) { return c>(a>b?a:b)?c:(a>b?a:b); double max(double a,double b) { return a>b?a:b; } double max(double a,double b,double c) { return c>(a>b?a:b)?c:(a>b?a:b); } int main() { int a=5,b=12,c=7; double f=2.5,d=15.2,e=12.5; cout<<"整数a与b的最大值:"< cout<<"整数a,b和c的最大值:"< cout<<"双精度数d与e的最大值:"< cout<<"双精度数d,e和f的最大值:"< } ? 使用系统函数pow(x,y)计算x?y的值,注意包含头文件cmath #include #include using namespace std; int main() { int x,y; cout<<"请输入x的值:"; cin>>x; cout<<"请输入x的y次方的值:"; cin>>y; cout<<'\n'<<"x的y次方为"< } ? 用递归的方法编写函数求Fibonacci级数、观察递归调用的过程#include using namespace std; int Fibonacci(int array[],int n) { if(n==0) return array[0]=0; else if(n==1) return array[1]=1; else return Fibonacci(array,n-1)+Fibonacci(array, n-2); } int main() { int array[20]={0},c; for(int i=0;i<20;i++) { c=Fibonacci(array,i); cout< } } (1) 编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵#include using namespace std; const int N=3; void TransformArray(int Array[][N], int n ) { int i,j; for( i=0;i for( j=0;j {int t=Array[i][j]; Array[i][j]=Array[j][i]; Array[j][i]=t; } } void main() { int array[3][N]; int (*point)[N]; point=array; int *p[3]; p[0]=array[0]; p[1]=array[1]; p[2]=array[2]; for( int i=0;i<3;i++) for( int j=0;j cin>>*(*(point+i)+j); cout<<"原来的数组"< for( i=0;i<3;i++) { for(int j=0;j cout< cout< } TransformArray(array,3); cout<<"转置后的数组"< for( i=0;i<3;i++) { for(int j=0;j cout<<*(*(p+i)+j)<<" "; cout< } } (2) 使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能说明: A可作成一维动态数组int *p=new array[3*3]。;也可作为二维动态数组: B Int (*p)[3]=new array[3][3],int n=3;int (*p)=array[n][3]. C 若想行数列数都做成变量,需定义成: Int m,n; int **p=new int *[m];for(i=0;i 释放时,是for(i=0;i 建议使用a 或b,c较难,有兴趣的同学可以尝试 #include "iostream.h" /*void transformarray(int **p,int **p2,int n) { for(int i=0;i for(int j=0;j p2[i][j]=p[j][i]; }*/ void transformarray(int **p,int **p2,int m,int n) { for(int i=0;i for(int j=0;j p2[j][i]=p[i][j]; } void main() { //int (*point)[3],(*point2)[3]; int m,n,i,j; /*int i1[]={1,2,3}; int i2[]={4,5,6}; int i3[]={7,8,9};*/ cout<<"请输入M:"; cin>>m; cout<<"\n请输入N:"< cin>>n; int **p=new int*[m],**p2=new int*[m]; //cout< for(i=0;i p[i]=new int[n]; for(i=0;i p2[i]=new int[n]; for(i=0;i for(j=0;j cin>>p[i][j]; /*p[0]=i1; p[1]=i2; p[2]=i3;*/ // point=new int[n][3]; // point2=new int[n][3]; /*for( i=0;i for( j=0;j cin>>p[i][j];*/ //transformarray(point,point2,n); transformarray(p,p2,m,n); /* for( i=0;i for( j=0;j<3;j++) cout< /*delete[] point; delete[] point2;*/ for( i=0;i for( j=0;j cout< for(i=0;i delete p[i]; delete []p; for(i=0;i delete []p2[i]; delete []p2; } 编程实现两字符串的连接,要求分别使用字符数组保存字符串(不要使用系统函数)和用string类声明字符串对象,(使用string类需包含string库) #include "iostream.h" void StrConnect(char *c1,char *c2) { while(*c1++!='\0'); c1--; while(*c2!='\0')*c1++=*c2++; } void main() { char c3[20]={'i','a','m','a'}; char c4[6]={'b','o','y'}; StrConnect(c3,c4); for(int i=0;i<20&&c3[i]!='\0';i++) cout< } #include "iostream.h" #include "String.h" void main() { char c3[20]={'i','a','m','a'}; char c4[6]={'b','o','y'}; strcat(c3,c4); for(int i=0;i<20&&c3[i]!='\0';i++) cout< } 定义对象数组,类的定义与要求同4-10 void main() { int n; cin>>n; Person *p=new Person[n]; char sex[2]; int personnum; Date dd; int year,month,day; int id; for(int i=0;i { cout<<"请输入员工的编号:"< cin>>personnum; p[i].SetPersonNumber(personnum); cout<<"请输入员工的性别:"< cin>>sex; p[i].SetSex (sex); cout<<"请输入员工的出生年月:"< cin>>year>>month>>day; dd.SetY ear (year); dd.SetMonth (month); dd.SetDay (day); p[i].SetDate(dd); cout<<"请输入员工的身份证号:"< cin>>id; p[i].SetID(id); cout< } for(int j=0;j { cout< cout< cout< cout< } } 王婆卖瓜的动态实现 #include "iostream" using namespace std; class Watermelon { private : //float weight; static float totalweight; static int amount; public: Watermelon(); void SellOneWatermelon(float w); void WithdrawWatermelon(float w); int SellWatermelonAmount(); float SellWaterToalWeight(); }; int Watermelon::amount =0; float Watermelon::totalweight =0.0f; void Watermelon::SellOneWatermelon(float w) { amount++; totalweight+=w; } void Watermelon::WithdrawWatermelon(float w) { amount--; totalweight-=w; } int Watermelon::SellWatermelonAmount() { return amount; } float Watermelon::SellWaterToalWeight() { return totalweight; } Watermelon::Watermelon() { } void main() { int n; cin>>n; float f; Watermelon *wm=new Watermelon[n]; for(int i=1;i<=n;i++) { cout<<"第"< cout<<"卖出第一个瓜的重量"; cin>>f; wm[i].SellOneWatermelon (f); cout<<"卖出第二个瓜的重量"; cin>>f; wm[i].SellOneWatermelon(f); cout<<"卖出西瓜的个数:"< cout<<"卖出西瓜的总重量:"< cout<<"被退回瓜的重量"< cin>>f; wm[i].WithdrawWatermelon (15.2f); cout<<"卖出西瓜的个数:"< cout<<"卖出西瓜的总重量:"< } } ? 声明Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“――“(自减)运算符,实现对坐标值的改变。(用成员函数实现)重载”+”运算符,实现对两个点的x,y成员分别相加。(用友元函数实现)。 #include using namespace std; class Point { private: int x; int y; public: Point() { } Point(int xx,int yy) { x=xx; y=yy; } Point& operator ++(); Point operator ++(int); void show() { cout<<"x:"< } }; Point& Point::operator ++() { x++; y++; return *this; } Point Point::operator ++(int) { Point pt=*this; ++(*this); return pt; } void main() { Point pt(5,5); pt++; pt.show(); ++pt; pt.show(); } #include //using namespace std; class Point { private: int x; int y; public: