类和对象 实验九 刘维富编写的C++程序设计书后习题.doc_第1页
类和对象 实验九 刘维富编写的C++程序设计书后习题.doc_第2页
类和对象 实验九 刘维富编写的C++程序设计书后习题.doc_第3页
类和对象 实验九 刘维富编写的C++程序设计书后习题.doc_第4页
类和对象 实验九 刘维富编写的C++程序设计书后习题.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验九1、定义一个学生类CStudent,私有数据成员包括name(姓名)、id(学号)、math(数学成绩)和english(英语成绩),私有静态数据成员包括count(学生总人数)、mathc(数学总成绩)和engishc(英语总成绩),公有函数成员包括设置两门课的成绩、求本人总成绩和输出本人数据、输出各门课程的平均分,以及构造函数和析构函数。在主函数中定义一个学生对象数组。输入10名学生的数据,输出各门课程的平均分以及总成绩位于前20%的学生数据。#include stdafx.h#include #include #include #define N 10using namespace std;class CStudent char name10; int id; float math, english; static int count; static float mathc; static float englishc; public :CStudent(char *name=#, int id=0, float math=0, float english=0) strcpy(this-name, name);this-id = id;this-math = math;this-english = english;count +;mathc += math;englishc += english;CStudent() void setScore(float math, float english) this-math = math;this-english = english;float ScoreSum() return math + english;void OutPut() cout姓名:namet学号:idt数学成绩:matht英语成绩:englisht总成绩为:ScoreSum()endl;void AvgScore() cout数学的平均分:mathc/countendl;cout英语的平均分:englishc/countnameidab;mathc += a; englishc += b ;math = a; english = b;static void sortScore(CStudent C, int n); ;void CStudent:sortScore(CStudent C, int n) int i, j;CStudent t;for(i=0; in; i+) for(j=0; jn-i-1; j+) if(Cj.math+Cj.english Cj+1.math+Cj+1.english) t = Cj; Cj = Cj+1; Cj+1 = t; int CStudent:count;float CStudent:mathc;float CStudent:englishc;int main() CStudent CN;cout请输入N个学生的信息(姓名 学号 数学成绩 英语成绩):n;for(int i=0; iN; i+) Ci.InPut();coutendl;cout两门课的平均分如下:n;C0. AvgScore();coutendl;CStudent:sortScore(C, N);cout按两门成绩总分降序排序后,学生排名如下:n;for(i=0; iN; i+) Ci.OutPut(); coutendl;cout按总分排序后,成绩位于前20%的学生如下:n;for(i=0; i0.2*N; i+) Ci.OutPut();return 0;2、试建立一个类CArray,将数值k插入到一个有序(升序)数据集中,并保持有序性不变。例如,原有序数据集为1,2,3,4,6,7,8,9,10,插入5后变为1,2,3,4,5,6,7,8,9,10;插入20后变为1,2,3,4,6,7,8,9,10,20。#include #include using namespace std;class CArray int k, num; int *p; public :CArray(int n, int t, int m) k = n;p = new intm;if(!p) cout内存分配失败!n; exit(-1);memcpy(p, t, (m-1)*sizeof(int);num = m;CArray() if(p) delete p;void insert() for(int i=0; i k) break;for(int j=num-1; ji; j-) pj = pj-1;pi = k;void print() for(int i=1; inum; i+) coutpi-1t;if(i % 5 = 0) coutn;int main() int n, test = 1, 2, 3, 4, 6, 7, 8, 9, 10;coutn;CArray t1(n, test, 10);t1.insert();cout插入n后,的数组为:n; t1.print();coutendl;return 0;实验十1、定义矩形类Rect,其数据成员left和right是Point类的对象,分别表示矩形的左上角坐标和右一角坐标。试为Rect类重载运算符“”,实现两个矩形对象面积大小的比较,并编写一个完整的程序,验证重载运算符的正确性。#include stdafx.h#include #include #define N 2using namespace std;class Point float x, y;public :Point(float x, float y) this-x = x;this-y = y;friend class Rect; ;class Rect Point left, right; public:Rect(float left=0, float top=0, float right=0, float bottom=0) : left(left, top), right(right, bottom)float Area() return fabs(left.x - right.x) * (left.y - right.y);void InPut(int i) cout输入第ileft.xleft.yright.xright.y;void OutPut(int j) cout第j个矩形坐标为:(left.x,left.y),(right.x,right.y)(Rect &R) return this-Area() R.Area() ? true : false;bool operator Area() R.Area() ? true : false;int main() Rect RN;for(int i=0; iN; i+) Ri.InPut(i+1);for(int j=0; jN; j+) Rj.OutPut(j+1);coutendlcoutR1) cout第2个矩形的面积,即:R0.Area()R1.Area()endl;if(R0 R1) cout第1个矩形的面积第2个矩形的面积,即:R0.Area()R1.Area()endl;return 0;2、定义字符串类String,重载=、+=、-=、=和!=运算符,并在主函数中检查重载运算符的正确性。#include stdafx.h#include #include #include using namespace std;class String char *s; int length; public:String(char *s=NULL) if(s) length = strlen(s);this-s = new charlength + 1;if(!s) couts, s); else length = 0; this-s = NULL;String() if(s) delete s;char *get() return s;String& operator =(String &t) if(t.length) char *k = new chart.length + 1;if(!k) coutlength) delete s;s = k; else if(this-length) delete s;s = NULL;this-length = t.length;return *this;String& operator +=(String &t) if(t.length) char *c = new chart.length + this-length + 1;if(!c) couts);strcat(c, t.s);if(this-length) delete this-s;this-s = c;this-length += t.length; return *this;String& operator -=(int n) if(n = 0 & n length) char *c = new charlength-n+1;if(!c) couts, length-n);*(c+length-n) = 0;delete this-s; this-s = c;this-length -= n; else if(n = this-length) if(this-length) delete this-s;this-s = NULL;this-length = 0; else coutlength) char *c = strstr(this-s, t.s);if(c) if(t.length = this-length) delete this-s;this-s = NULL;this-length = 0; else char *d = new charthis-length-t.length+1;if(!d) couts, c-s); strcpy(d+(c-s), c+t.length);delete this-s;this-s = d;this-length -= t.length;return *this;bool operator =(String &t) if(this-length & t.length) if(strcmp(this-s, t.s) return false;else return true; else if(this-length = t.length) return true; return false;bool operator !=(String &t) if(this-length & t.length) if(strcmp(t.s,this-s) return true;return false; else if(this-length = t.length) return false; return true;void print() if(this-length) couts;else cout空;int main() String s1(vb), s2(java), s3(c#), s4(c+), s5(liguohui), s6(li), s7, s8(li);couts1=; s1.print(); cout;s2=; s2.print(); s1 = s2;cout; 当s1=s2后; s1=; s1.print(); cout; s2=; s2.print();coutnns3=; s3.print(); cout; s4=; s4.print(); s3 += s4;cout; 当s3+=s4后; s3=; s3.print(); cout; s4=; s4.print();coutnns5=; s5.print(); cout; s6=; s6.print(); s5 -= s6;cout; 当

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论