void main() { int x; int i=0,n; int a[100]; }cout<<\"请输入一个整数: \"; cin>>x; while(x) { a[i]=x%10; x=x/10; i++; } n=i;
sort(a,n);
for(i=0;i第七章//将n个整数按输入顺序的逆序排列,要求应用带指针参数的函数实现。 #include void fun(int *p, int n) { int *q=p+n-1; int k; for(;pvoid main() { int a[100],n; cout<<\"请输入整数的个数: \"; cin>>n; cout<<\"请输入\"<>a[i]; fun(a,n);cout<<\"逆序排列的数据为: \\n\"; for(i=0;i//编程输入一行文字,找出其中的大写字母,小写字母、空格、数字以及其他字符各有多少。 #include #include void main() { char str[100]; cout<<\"请输入字符串: \"; cin.getline (str,100); char *p; p=str; int daxie=0,xiaoxie=0,shuzi=0,kongge=0,qita=0; while(*p) { if(*p>='A'&&*p<='Z') daxie++; else if(*p>='a'&&*p<='z') xiaoxie++; else if(*p>='0'&&*p<='9') shuzi++; else if(*p==' ') kongge++; else qita++; p++; } cout<<\"大写字符: \"<//编写一个从n个字符串中寻找最长串的函数char *longstr(char *z[], int n), //其中z是指向多个字符串的指针数组,n是字符串的个数,数组返回值是最长串的首地址。 //同时编写main函数验证程序。 #include #includechar *longstr(char *z[], int n)
{ char *pmaxstr; int len,maxlen; pmaxstr=z[0]; maxlen=strlen(z[0]); for(int i=1;ivoid main() { char *pstr[]={\"Monday\ char *pmax; int n; n=sizeof(pstr)/sizeof(pstr[0]); pmax=longstr(pstr,n); cout<<\"最长的字符串是: \"<//编写一个将一个字符串插入到另一个字符串指定位置的函数。同时编写main函数验证程序。#include #includevoid insert(char str[], char substr[], int n)//将substr插入到str的第n个字符后 { char str1[100]; int len; len=strlen(str); if(n>=len-1) { strcat(str,substr); return ; } strcpy(str1,str+n); strcpy(str+n,substr); strcat(str,str1); }
void main() { int n; char str[100],substr[100]; }
cout<<\"请输入第一个字符串: \"; cin.getline(str,100);
cout<<\"请输入第二个字符串: \"; cin.getline(substr,100);
cout<<\"将字符串\"<>n;insert(str,substr,n);
cout<<\"插入后的字符串为: \"<第八章#include #include struct point{ double x; double y; };void main() { point p1,p2; double dis; cout<<\"请输入平面上第一个点的坐标x和y: \"; cin>>p1.x>>p1.y; cout<<\"请输入平面上第二个点的坐标x和y: \"; cin>>p2.x>>p2.y; dis=sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)); cout<<\"点(\"<#include #include struct node { char ch; struct node *next; };node *create(char *str) {
node *head,*p1,*p2; head=NULL; p1=p2=head; while(*str) { p1=new node; p1->ch=*str; if(head==NULL) head=p1; else p2->next=p1; p2=p1; str++; } p2->next=NULL; return head; }
int search(node *head, char ch, int a[]) { int i=0,k=0; node *p=head; while(p) { k++; if(p->ch==ch) a[++i]=k; p=p->next; } return i; }
void main() { node *head=NULL; char str[100],ch; int a[100];
cout<<\"请输入一行字符串: \"; cin.getline (str,100);
head=create(str); //建立链表 cout<<\"请输入一个字符: \"; cin>>ch;
int n=search(head,ch,a);//查找字符,返回出现次数, a中为出现位置 if(n==0) cout<<\"字符串\"<}cout</建立一个链表,每个结点包括年龄和姓名,然后按年龄从小到大排序。 #include #include struct node { char name[20]; int age; struct node *next; };node *insert(node *head,node *p0) { node *p1,*p2; p1=head; if(head==NULL) { head=p0; p0->next=NULL; } else { while(p0->age>p1->age&&p1->next !=NULL) { p2=p1; p1=p1->next ; } if(p0->age<=p1->age) { if(p1==head) { p0->next=head; head=p0; } else {
p0->next=p1; p2->next=p0; } } else { p1->next=p0; p0->next=NULL; } } return head; }
void print(node *head) { node *p=head; while(p) { cout<name<<'\'<age<next; } }void main() { node *head=NULL; char name[20]; node *p; cout<<\"请输入姓名(输入0结束): \"; cin.getline(name,20); while(strcmp(name,\"0\")) { p=new node; strcpy(p->name,name); }
cout<<\"请输入\"<>p->age; cin.ignore (); head=insert(head,p); cout<<\"请输入姓名(输入0结束): \"; cin.getline(name,20); }cout<<\"年龄排序的结果: \\n\"; print(head);
第九章
//5. 构建一个类,含有三个数据成员,分别表示一个长方体的长、宽、高;含有一个成员函数,用来计算长方体的体积。 #include class Cub { double l,w,h; public: void setcub(double length, double width,double height) { l=length; w=width; h=height; } double volume() { return l*w*h; } void show() { cout<<\"长方体的长、宽、高分别为: \"; cout<void main() { Cub cub; double len,wid,hei; cout<<\"请输入长方体的长、宽、高: \"; cin>>len>>wid>>hei; cub.setcub (len,wid,hei); cub.show (); }//6. 设计一个学生类,包含学生的姓名、数学、物理、英语课程成绩,计算学生的平均成绩。 #include #include class Student { char name[20]; int math; int phy;int eng; double ave; public: void SetScore(char *str,int m,int p,int e) { strcpy(name,str); math=m; phy=p; eng=e; } void Average() { ave=(math+phy+eng)/3.0; } void Show() {
cout<void main() { Student stu; int m,p,e; char name[20];cout<<\"请输入学生的姓名: \"; cin.getline(name,20);
cout<<\"请输入数学、物理及英语的成绩: \"; cin>>m>>p>>e; stu.SetScore(name,m,p,e); stu.Average(); stu.Show(); } 7.
#include #define PI 3.1415926 class Nata { double r; public: Setr(double i) { r=i;} double PeriPrice() { double l=r+3; double s=2*PI*r+2*PI*l; return s*35; } double AreaPrice() { double s; s=PI*((r+3)*(r+3)-r*r); return s*20; } };
void main() { Nata pol; double r; cout<<\"请输入游泳池的半径(米): \"; cin>>r; pol.Setr(r); cout<<\"栅栏价格: \"<第十章 5.#include #include class Stu { char num[20]; int score; public: Stu(char *n, int s) { strcpy(num,n); score=s; } void Show() { cout<} int Getscore() { return score; } };Stu * max(Stu *p, int n) { Stu *p1; p1=p; int maxscore=p->Getscore(); for(int i=1;iGetscore()) { maxscore=(p+i)->Getscore(); p1=p+i; } return p1; }void main() { Stu stu[5]={Stu(\"001\ Stu *p=stu; for(;pShow(); p=max(stu,5); cout<<\"成绩最高的学生是: \\n\"; p->Show(); } 6#include #define PI 3.1415926 class Circle { double Radius; public: Circle(double r=0) { Radius=r; } Circle(Circle& c) { Radius=c.Radius;} double Peri() { return 2*PI*Radius; } double Area() { return Radius*Radius*PI; } void Show() { cout<<\"r=\"<void main() { double r; } /*cout<<\"请输入圆的半径 : \"; cin>>r; Circle cir(r); cir.Show();
7、有16个数:{1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10},已按由小到大的顺序排好, 存于数组a中,试建立一个类ARR,完成将其中相同的数删得只剩一个。 经删除后,a数组中的内容 为{1,2,3,4,5,6,7,8,9,10}, 具体要求如下: (1) 私有数据成员
int n: 数组实际元素个数。
int a[100]:存放原始数组及结果数组。 (2) 公有成员函数
ARR(int x[ ], int size):构造函数,用size初始化n,用x初始化a数组。 void delsame():完成数组a中相同元素的删除工作。
void show(): 将结果数组以每行5个数的形式输出到屏幕上。
(3) 在主程序中定义数组int b[16],初值如上。定义一个类ARR的对象v,用b及数组元素的个数初始化该对象,然后按上述要求完成对该类的测试。 */
#include #includeclass ARR //定义类, 类中的成员数据是一个数组和数组中存放的实际数据的项数 { int n; //数组中的实际元素个数 int a[100]; //数组, 定义的空间大一些
public: n
ARR(int x[], int size) //初始化类中的数据成员, 用形参数组x初始化a, 用形参size初始化{ }
n=size;
for(int i=0;ivoid delsame(void) //删除数组中相邻的相同的元素 {for(int i=0;iif(a[i]==a[i+1]) //当前元素与后面相邻的元素相同 {for(int j=i+1;jn--; //循环覆盖一次之后, 数组的有效元素个数减1i--; //继续判断下一个元素是否与当前元素相同, 因下一条语句是i++; 所以先将i减1,以使i保持不变 } } } void show(void) //10个一行, 输出删除后的数组中的内容 { for(int i=0,k=0;ivoid main(void) { int b[]={1,2,2,3,4,4,5,6,6,7,8,8,8,9,10,10}; //先定义数组, 用此数组初始化类的对象中的数组成员 int n=sizeof(b)/sizeof(int); //计算b数组的元素长度 ARR v(b,n); //定义类的对象并用数组b和数据n初始化对象的成员 v.show (); //输出对象的数组成员中的数据(还未做删除操作, 输出的是初始化后的数据) cout<}v.show (); //删除操作后输出对象的数组成员中的数据 cout<第十一章//5. 有一个学生类,包括学生学号、姓名、三门功课的成绩。设计一个友元函数,
//输出按平均成绩对应的等级;大于等于90,A级;80~89,B级;60~79,C级;小于60,D级。
#include #include class Stu { char num[10]; char name[20]; int score[3]; public: Stu(char *number, char *na,int a[]) { strcpy(num,number); strcpy(name,na); for(int i=0;i<3;i++) score[i]=a[i]; } void Show() { cout<void grade(Stu &stu) { double average=0; char g; for(int i=0;i<3;i++) average+=stu.score [i]; average=average/3; if(average>=90) g='A'; else if(average>=80) g='B';else if(average>=60) g='C'; else g='D'; stu.Show ();
cout<void main() { int i; char number[10]; char name[20]; int sc[3]; while(1) { cout<<\"请输入学生的学号(输入为0退出): \"; cin>>number; if(strcmp(number,\"0\")==0) break; cout<<\"请输入学生的姓名: \"; cin.ignore (); cin.getline (name,20); }}
cout<<\"请输入\"<>sc[i];Stu stu(number,name, sc); grade(stu);
第十二章
//定义复数类的加法与减法,使之能够执行下列运算: // Complex a(2,5), b(7, 8), c(0, 0); // c=a+b; // c=4.1+a; // c=b-5.6;
#include class Complex { double real; double image; public:Complex(double r=0, double i=0) { real=r; image=i; } Complex operator+(Complex &c) { Complex com; com.real=real+c.real; com.image=image+c.image; return com; } Complex operator-(double x) { Complex com; com.real=real-x; com.image=image; return com; } friend Complex operator +(double x, Complex c) { Complex com; com.real=x+c.real; com.image=c.image; return com; } void Show() { cout<void main() { Complex a(2,5), b(7, 8), c(0, 0); c=a+b; c.Show(); c=4.1+a; c.Show(); c=b-5.6; c.Show(); }//5. 设计一个2行3列的矩阵类,重载运算符\"+\"和\"-\",能实现矩阵类对象的加减运算; //重载流插入运算符\"<<\"和流提取运算符\">>\",使之能用于矩阵的输入和输出。
#include class Mat { double a[2][3]; public: Mat() { for(int i=0;i<2;i++) for(int j=0;j<3;j++) a[i][j]=0; } Mat(double b[][3]) { for(int i=0;i<2;i++) for(int j=0;j<3;j++) a[i][j]=b[i][j]; } Mat operator+(Mat &m) { Mat mat; for(int i=0;i<2;i++) for(int j=0;j<3;j++) mat.a[i][j]=a[i][j]+m.a[i][j]; return mat; } Mat operator-(Mat &m) { Mat mat; for(int i=0;i<2;i++) for(int j=0;j<3;j++) mat.a[i][j]=a[i][j]-m.a[i][j]; return mat; } friend istream& operator>>(istream&, Mat&); friend ostream& operator<<(ostream&, Mat&); };istream& operator>>(istream &is, Mat &m) { cout<<\"请输入2行3列矩阵内容: \\n\"; for(int i=0;i<2;i++) for(int j=0;j<3;j++) is>>m.a[i][j]; return is; }
ostream& operator<<(ostream &os, Mat &m) { for(int i=0;i<2;i++) { for(int j=0;j<3;j++) os<void main() { Mat m1,m2,m3; cin>>m1>>m2; cout<<\"m1+m2=\"<//6. 定义一个人民币的类,其中成员数据包括元、角、分,成员函数包括构造及输出函数。 //要求增加适当的成员函数,重载+、-、+=、++、输入输出流,来实现人民币的直接运算。注意分、角、元的进位。 #include #includeclass RMB{ //人民币类 private: int Yuan, Jiao, Fen;//私有数据 元 角 分 public: RMB(int yuan=0, int jiao=0, int fen=0) //构造函数 , 缺省构造为0元0角0分 { Yuan=yuan; Jiao=jiao; Fen=fen; } void Show() { cout<>(istream &is, RMB &);//只能用友元函数的形式重载输入运算符 friend ostream &operator<<(ostream &os, RMB &);//只能用友元函数的形式重载输出运算符 };
RMB RMB::operator +(RMB &r) //用成员函数的形式重载加法运算符 { RMB rs; //加法的和, 为另一个人民币的对象, 缺省构造, 为0元0角0分 rs.Fen=Fen+r.Fen; //首先分相加, 即对象本身的分成员与形参r的分成员相加 while(rs.Fen>=10) //当分大于10时, 循环 { }
}
rs.Jiao++; //循环依次角加1,分减10 rs.Fen-=10;
rs.Jiao+=Jiao+r.Jiao; //角相加
while(rs.Jiao>=10) //同样角大于10, 循环 { rs.Yuan++; rs.Jiao-=10; }
rs.Yuan+=Yuan+r.Yuan;
return rs; //将结果作为函数值返回
RMB operator -(RMB &r1, RMB &r2) //用友元函数的形式重载减法运算符 {
RMB rs; //减法的差, 为另一个人民币的对象, 缺省构造, 为0元0角0分
if(r1.Yuancout<<\"钱不够, 不能付帐!\\n\"; return rs; //不能相减, 返回值为0的对象 }if(r1.Yuan==r2.Yuan&&r1.Jiaocout<<\"钱不够, 不能付帐!\\n\"; return rs; }if(r1.Yuan==r2.Yuan&&r1.Jiao==r2.Jiao&&r1.Fenrs.Yuan=r1.Yuan-r2.Yuan; //首先先减元 rs.Jiao=r1.Jiao-r2.Jiao;while(rs.Jiao<0) //角相减为负值, 结果元减1, 角加10 {
}
rs.Yuan--; rs.Jiao+=10; }
rs.Fen=r1.Fen-r2.Fen;
while(rs.Fen<0) //分相减为负值 { rs.Jiao--; //角减1 if(rs.Jiao<0) //角若为负值 { rs.Yuan--; //元再减1 rs.Jiao+=10; } rs.Fen+=10; }
return rs;
RMB& RMB::operator+=(RMB &r) //只能用成员函数的形式重载+=运算符 { //该运算结果将对象本身的值改变, 所以返回对象本身的引用 Fen=Fen+r.Fen; //对象本身的分与形参的分相加, 再赋给对象本身 while(Fen>=10) { Jiao++; Fen-=10; } Jiao=Jiao+r.Jiao; while(Jiao>=10) { Yuan++; Jiao-=10; } Yuan=Yuan+r.Yuan; return *this; //返回对象本身的值 }
RMB& RMB::operator++(void) //对象本身加1分钱 { Fen=Fen+1; while(Fen>=10) { Jiao++; Fen-=10; } while(Jiao>=10) { Yuan++;
}
Jiao-=10; }
return *this;
istream & operator>>(istream &is, RMB &r) //只能用友元函数的形式重载输入运算符 { cout<<\"请分别输入元、角、分(整数之间用空格或回车间隔): \"; is>>r.Yuan>>r.Jiao>>r.Fen; //从键盘分别对形参对象的各个数据成员赋值 return is; //返回输入流的引用, 这样可以连续赋值 }
ostream& operator<<(ostream &os, RMB &r) //只能用友元函数的形式重载输出运算符 {
while(r.Fen>=10) //在输出前调整输出格式 { r.Jiao++; r.Fen-=10; }
while(r.Jiao>=10) { r.Yuan++; r.Jiao-=10; }
os<<\"¥\"<void main() { 0 }RMB r1(14, 5 ,7),r2,r3; //定义三个人民币的对象, 其中两个调用缺省的构造, 构造为cout<<\"请输入一个人民币数值: \\n\";
cin>>r2; //调用重载的输入流输入对象的数值 r3=r1+r2; //调用重载的加法运算符 cout<cout<cout<//7.定义一个时间的类,其中成员数据包括小时、分、秒,成员函数为构造函数。要求增加适当的成员函数,//重载+、-、+=及输入输出流,来实现时间类对象的直接输入输出及两个时间的运算。 #include #include #include class TIME{ //时间类 private:int Hour, Minute, Second;//私有数据 小时 分钟 秒 public:
TIME(int hour=0, int minute=0, int second=0) //构造函数 , 缺省构造为0时0分0秒 { Hour=hour; Minute=minute; Second=second; }
TIME operator+(TIME &t); //用成员函数的形式重载加法运算符 friend double operator-(TIME &t1, TIME &t2); //用友元函数的形式重载减法运算符, 返回分钟 TIME& operator+=(TIME &t); //只能用成员函数的形式重载+=运算符 TIME& operator++(); //用成员函数的形式重载++运算符 friend istream &operator>>(istream &is, TIME &);//只能用友元函数的形式重载输入运算符 friend ostream &operator<<(ostream &os, TIME &);//只能用友元函数的形式重载输出运算符 };
TIME TIME::operator +(TIME &t) //用成员函数的形式重载加法运算符 { TIME tt; //加法的和, 为另一个时间的对象, 缺省构造, 为0时0分0秒 tt.Second=Second+t.Second; //首先秒相加, 即对象本身的秒成员与形参t的秒成员相加 while(tt.Second >=60) //当秒大于60时, 循环 { }
tt.Minute++; //循环依次分加1,秒减60 tt.Second-=60; }
tt.Minute+=Minute+t.Minute; //分相加
while(tt.Minute>=60) //同样分大于60, 循环 { tt.Hour++; tt.Minute-=60; }
tt.Hour+=Hour+t.Hour; if(tt.Hour>=24) tt.Hour-=24;
return tt; //将结果作为函数值返回
double operator -(TIME &t1, TIME &t2) //用友元函数的形式重载减法运算符, 返回分钟数 { double minute; //减法的差, 为分钟 if(t1.Hourcout<<\"不能相减!\\n\"; return 0; //不能相减, 返回值为0 }if(t1.Hour==t2.Hour&&t1.Minutecout<<\"不能相减!\\n\"; return 0; }if(t1.Hour==t2.Hour&&t1.Minute==t2.Minute&&t1.Secondminute=(t1.Hour-t2.Hour)*60; //首先先减小时, 再将其变成分钟 minute+=t1.Minute-t2.Minute; if(t1.Second-t2.Second<0) minute--; return minute;TIME& TIME::operator+=(TIME &t) //只能用成员函数的形式重载+=运算符 { //该运算结果将对象本身的值改变, 所以返回对象本身的引用 Second=Second+t.Second; //对象本身的秒与形参的秒相加, 再赋给对象本身 if(Second>=60) { Minute++; Second-=60; } Minute=Minute+t.Minute; while(Minute>=60) { Hour++; Minute-=60; } Hour=Hour+t.Hour; if(Hour>=24) Hour=Hour-24; return *this; //返回对象本身的值 }
istream & operator>>(istream &is, TIME &t) //只能用友元函数的形式重载输入运算符
{ }
cout<<\"请输入时间(按提示逐个输入小时、分、秒): \\n\"; cout<<\"请输入小时(大于等于0, 小于等于23): \"; is>>t.Hour;
while(t.Hour>23||t.Hour<0) { cout<<\"输入小时的数值不对, 在0到23的范围内! 请重新输入! \"; is>>t.Hour; }
cout<<\"请输入分钟(大于等于0, 小于等于59): \"; is>>t.Minute;
while(t.Minute>59||t.Minute<0) { }
cout<<\"输入分钟的数值不对, 在0到59的范围内! 请重新输入! \"; is>>t.Minute;
cout<<\"请输入秒数(大于等于0, 小于等于59): \"; is>>t.Second;
while(t.Second>59||t.Second<0) {
cout<<\"输入秒数的数值不对, 在0到59的范围内! 请重新输入! \"; is>>t.Second; }
return is; //返回输入流的引用, 这样可以连续赋值
ostream& operator<<(ostream &os, TIME &t) //只能用友元函数的形式重载输出运算符 {
os<void main() {struct tm *CurrentTime; //这两个变量是为了取得当前时间 time_t time_date; time_date=time(0); //获得当前时间 CurrentTime=localtime(&time_date);//设置当前时间 TIME currenttime(CurrentTime->tm_hour,CurrentTime->tm_min,CurrentTime->tm_sec); //将当前时间赋值时间类对象 cout<<\"\\n\\欢迎使用简易时间计算器! \\n\"; cout<<\"\\n\当前时间是: \"< }{
cout<<\"\\n\\n\1. 时间加法\\n\"; cout<<\"\2. 时间减法\\n\";
cout<<\"\3. 时间自身加法(+=)\\n\"; cout<<\"\0. 退出时间计算器\\n\";
cout<<\"\\n\请选择操作您所需的操作: \"; cin>>Choice; //用户输入选择 switch(Choice) {
case 1: //选中加法操作 cout<<\"\\时间加法, 请按提示输入两个时间:\\n\\n\"; cin>>t1; cout<>t2;t3=t1+t2; //重载加法运算符 cout<>t1; cout<>t2; m=t1-t2; cout<>t1; cout<>t2; cout<}while(Choice!=0); //选择退出后才能退出菜单循环 cout<<\"\\n\\n\欢迎再次使用简易时间计算器, 谢谢!\\n\";第十三章
//7定义一个长方形Rect类,派生出长方体类Cub,计算派生类对象的表面积和体积。 #include class Rect { double len; double wid; public: Rect(double l=0,double w=0) { len=l; wid=w; } double Area() { return len*wid; } void Show() { cout<<\"length=\"<class Cub:public Rect { double hei; public: Cub(double l,double w,double h=0):Rect(l,w) { hei=h; } double Area() { return 2*(Rect::Area ()+wid*hei+len*hei); } double volume() { return Rect::Area ()*hei; } void Show() { cout<<\"length=\"<} };void main() { Cub cub(2,3,4); cub.Show(); }
//8定义一个Shape基类,并派生出圆球体(Sphere)和立方体类(Cube), //分别求圆球体与立方体对象的表面积和体积。 #include #define PI 3.1415926 class Shape {public: Shape(){} double Area(){} double Volume(){} void Show(){} };
class Sphere:public Shape { double r; public: Sphere(double rr):Shape() { r=rr; } double Area() { return 4*PI*r*r; } double Volume() { return 4*PI*r*r*r/3; } void Show() { cout<<\"r=\"<class Cube:public Shape { double len,wid,hei;public: Cube(double l,double w,double h):Shape() { len=l; wid=w; hei=h; } double Area() { return 2*(len*wid+wid*hei+len*hei); } double Volume() { return len*wid*hei; } void Show() { cout<<\"length=\"<void main() { Sphere sph(5); sph.Show (); Cube cub(2,3,4); cub.Show (); }