




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
08计算机4班 实验一:类与对象一:1. 定义一个描述学生通讯录的类,数据成员包括:姓名、学校、电话号码和邮编;成员函数包括:输出各个数据成员的值,分别设置和获取各个数据成员的值。#include #include class COMMUchar *pName;/姓名,数据成员为私有的 char *pSchool;/单位 char *pNum;/电话号码char Box10;/邮编public:void Print(void)/输出数据成员cout姓名:pNamet;cout单位:pSchoolt;cout电话号码:pNumt;cout邮编:Boxn;void Init(char *,char *,char *,char *);void FreeSpace(void);/释放数据成员占用的空间void SetName(char *name)if(pName ) delete pName;/释放存储空间pName = new charstrlen(name)+1;/申请存储空间strcpy(pName,name);void SetScool(char *unit)/置学校名称if( pSchool ) delete pSchool;pSchool = new charstrlen(unit)+1;strcpy(pSchool,unit);void SetNum(char *num)/置电话号码if( pNum ) delete pNum;pNum = new charstrlen(num)+1;strcpy(pNum,num);void SetBox(char *mailnum)/置邮编strcpy(Box,mailnum);char *GetName(void)/取姓名 return pName; char *GetScool(void )/取学校 return pSchool; char *GetNum(void)/取电话号码 return pNum; char *GetBox(void)/取邮编 return Box; ;void COMMU:Init(char *name,char *unit,char *num,char *b)/完成初始化pName = new char strlen(name)+1;strcpy(pName,name);pSchool = new char strlen(unit)+1;strcpy(pSchool,unit);pNum = new char strlen(num)+1;strcpy(pNum,num);strcpy(Box,b);void COMMU:FreeSpace(void)if(pName) delete pName;if(pSchool) delete pSchool;if(pNum) delete pNum;void main(void ) COMMU c1,c2;c1.Init(张建国,南京大学,025-,);c2.Init(李国强,南京工业大学,025-,);c1.Print();c2.Print();c1.SetName(王国安);coutc1.GetName()n;c1.SetScool(南京理工大学);coutc1.GetScool()n;c1.SetNum(025-);coutc1.GetNum()n;c1.SetBox();coutc1.GetBox()n;c1.Print();c1.FreeSpace();c2.FreeSpace();二:定义一个类CName,要求该类设计如下:(1)该类有两个整型数据成员x和y;(2)为该类重载三个不同的构造函数:分别为无参数、带一个参数和带两个参数的构造函数,要求在构造函数中输出必要的信息以示区别;(3)设计2个成员函数用来读取数据成员x和y;(4)设计2个成员函数用来设置数据成员x和y;(5)设计1个成员函数用来在屏幕上打印输出数据成员x和y;(6)在main()函数中用三个不同的构造函数创建3个对象,并使用所有的成员函数对这些对象进行必要的操作。方法一:MEGA_INTEGER:实现了+、运算;/mega_integer.h#include #includeusing namespace std;/*只考虑十进制的正整数的情况*/const int MAX=100;class MEGA_INTEGERpublic:int digitMAX; / 使用数组来存储这些数字int num; / 一共有num个有效数位public:MEGA_INTEGER();MEGA_INTEGER(int digit1, int n1); MEGA_INTEGER();void inputDigit(); /接收键盘输入,将数字存在到digit数组中;void outputDigit(); / 读出digit数组中存储的大数;int getnum(); /返回有效数位的个数private:void delLeftZeros(); /私有函数,去掉长整数串最左边的无效0;;void add(MEGA_INTEGER A, MEGA_INTEGER B); /完成加法,并输出结果void subtract(MEGA_INTEGER A, MEGA_INTEGER B); /完成减法,并输出结果void multiply(MEGA_INTEGER A, MEGA_INTEGER B); /完成乘法,并输出结果void divide(MEGA_INTEGER A, MEGA_INTEGER B); /完成除法,并输出结果MEGA_INTEGER:MEGA_INTEGER()int i;num=0;for(i=0;iMAX;i+)digiti=0;MEGA_INTEGER:MEGA_INTEGER(int digit1, int n1=MAX)int i;for(i=0;iMAX;i+)digiti=0;for(i=0;i=0;i-)if(digiti!=0)break;num=i+1;if (num=0) /保证至少输出一位num=1;/ 首先将巨大整数当作字符串读入到内存中;然后将字符串转化为int数组;void MEGA_INTEGER:inputDigit()char s1MAX;int i;int j;/ 字符串s1由键盘输入 cin.getline(s1,MAX,n);/coutn 输入的巨大整数为:ns19|s1i0)cout 输入无效数字 !=0;i-)digitj=s1i-0;j+;/ 3) 记录有效数位delLeftZeros(); void MEGA_INTEGER:outputDigit()int i;/cout=0;i-)coutdigiti;int MEGA_INTEGER:getnum()return num;MEGA_INTEGER:MEGA_INTEGER()/ 加法void add(MEGA_INTEGER A, MEGA_INTEGER B)int sumMAX; /记录运算的结果int num; / 运算结果的有效位数int i,k;int tmp;/ 初始化for(i=0;iB.num)k=A.num;elsek=B.num;for(i=0;i=10)sumi+1+;sumi=tmp-10;elsesumi=tmp;if(sumk0)num=k+1;elsenum=k;MEGA_INTEGER SUM(sum,num);/ 输出结果SUM.outputDigit();/ 减法void subtract(MEGA_INTEGER A, MEGA_INTEGER B)int resultMAX; /记录运算的结果int num; / 运算结果的有效位数int i,k;int tmp;int flag=0; /标识/ 初始化for(i=0;i=B.num)k=A.num;for(i=0;ik;i+)tmp=A.digiti-B.digiti+resulti;if(tmp=0) / 被减数=减数num=k;MEGA_INTEGER DIFF(result,num);/ 输出结果DIFF.outputDigit();return;/考虑被减数小于减数的情况,解决办法:减数被减数 k=B.num;/ 初始化for(i=0;iMAX;i+)resulti=0;num=0;for(i=0;ik;i+)tmp=B.digiti-A.digiti+resulti;if(tmp0)resulti+1-;resulti=tmp+10;elseresulti=tmp;num=k;MEGA_INTEGER DIFF1(result,num);/ 输出结果cout-; / 注意输出负号DIFF1.outputDigit();return;/完成乘法void multiply(MEGA_INTEGER A, MEGA_INTEGER B)int resultMAX; /记录运算的结果int num; / 运算结果的有效位数int i,j,k;int tmp;/ 初始化for(i=0;iMAX;i+)resulti=0;num=0;/乘过程num=A.num+B.num; / 计算结果可能的最多的位数for(j=0;jB.num;j+) / 循环乘数的各位k=j;for(i=0;iA.num;i+)tmp=A.digiti*B.digitj+resultk;/ 取tmp的个位和十位: 个位保留在本位;十位进到前一位resultk=tmp%10;resultk+1+=tmp/10;k+;MEGA_INTEGER PRODUCT(result,num);/ 输出结果PRODUCT.outputDigit();/完成除法void divide(MEGA_INTEGER A, MEGA_INTEGER B)/main.cpp#include #include mega_integer.husing namespace std;int main( int argc , char *argv)MEGA_INTEGER a;MEGA_INTEGER b;char symbol;cout* 目前没有给出除法运算 * n;cout请输入第一个大整数(以n结束): ;a.inputDigit();/a.outputDigit();cout请输入第二个大整数(以n结束): ;b.inputDigit();coutsymbol;cout运算结果为: ;switch(symbol)case +:add(a,b);break;case -:subtract(a,b);break;case *:multiply(a,b);break;case /:/divide(a,b);break;default:cout 错误的运算符号,复杂运算无法进行 :pn;break;coutendl;return 0;方法二:MEGA_INTEGER_POLY:采用运算符重载的方式实现了+、运算,自定义了I/O操作(减法运算只能完成减数不大于被减数情况);/Main.cpp:#include #include mega_integer_poly.husing namespace std;int main( int argc , char *argv)MEGA_INTEGER Left,Right,Result;char symbol;coutLeft;coutRight;coutsymbol;switch(symbol)case +:Result=Left+Right;break;case -:Result=Left-Right;break;case *:Result=Left*Right;break;case /:Result=Left/Right;break;default:cout 错误的运算符号,复杂运算无法进行 :pn;break;outputResult(Left, Right, Result, symbol);return 0;/ mega_integer_poly.cpp#include #include mega_integer_poly.husing namespace std;MEGA_INTEGER:MEGA_INTEGER()int i;num=0;for(i=0;iMAX;i+)digiti=0;MEGA_INTEGER:MEGA_INTEGER(const MEGA_INTEGER& obj) /拷贝构造函数int i;for(i=0;iMAX;i+)digiti=obj.digiti;num=obj.num;MEGA_INTEGER:MEGA_INTEGER(int digit1, int n1=MAX)int i;for(i=0;iMAX;i+)digiti=0;for(i=0;i=0;i-)if(digiti!=0)break;num=i+1;if(num=0)num=1;int MEGA_INTEGER:getnum()return num;MEGA_INTEGER:MEGA_INTEGER()/ 重载赋值运算符MEGA_INTEGER MEGA_INTEGER:operator =(const MEGA_INTEGER& other)int i;for(i=0;iother.num)k=num;elsek=other.num;for(i=0;i=10)result.digiti+1+;result.digiti=tmp-10;elseresult.digiti=tmp;result.delLeftZeros();return result;/ 减法MEGA_INTEGER MEGA_INTEGER:operator -(const MEGA_INTEGER& other)MEGA_INTEGER result;int i,k;int tmp;if(num=other.num)k=num;elsecout目前不考虑被减数小于减数的情况!n;return result;for(i=0;ik;i+)tmp=digiti-other.digiti+result.digiti;if(tmp0)result.digiti+1-;result.digiti=tmp+10;elseresult.digiti=tmp;if(result.digitk0)cout目前不考虑被减数小于减数的情况!n;return result;result.delLeftZeros();return result;/ 乘法MEGA_INTEGER MEGA_INTEGER:operator *(const MEGA_INTEGER& other)MEGA_INTEGER result;int i,j,k;int tmp;result.num=num+other.num; / 计算结果可能的最多的位数for(j=0;jother.num;j+) / 循环乘数的各位k=j;for(i=0;inum;i+)tmp=digiti*other.digitj+result.digitk;/ 取tmp的个位和十位: 个位保留在本位;十位进到前一位result.digitk=tmp%10;result.digitk+1+=tmp/10;k+;result.delLeftZeros();return result;/ 除法MEGA_INTEGER MEGA_INTEGER:operator /(const MEGA_INTEGER& other)MEGA_INTEGER result;int i,j,k;int tmp;cout没有实现除法运算!n;result.delLeftZeros();return result;/ 类外友元 重载流的运算符ostream& operator =0;i-)stream运算符istream& operator (istream& stream, MEGA_INTEGER& obj)char s1MAX;int i;int j;/ 字符串s1由键盘输入cin.getline(s1,MAX,n);/ 1) 检查输入的正确性for(i=0;s1i!=0;i+)if(s1i9|s1i0)cout 输入无效数字 !=0;i-)obj.digitj=s1i-0;j+;/ 3) 记录有效数位obj.delLeftZeros();return stream;/按竖式给出运算结果void outputResult(MEGA_INTEGER& A, MEGA_INTEGER& B, MEGA_INTEGER& R, char symbol)int i;int emp=5;int maxNUM;cout*n;/ 找到一个最大值maxNUM=A.getnum();if(A.getnum()maxNUM)maxNUM=R.getnum();for(i=0;iemp+maxNUM-A.getnum();i+)cout ;coutAendl;for(i=0;iemp-2;i+)cout ;coutsymbol;for(i=0;i1+maxNUM-B.getnum();i+)cout ;coutBendl;for(i=0;iemp-2;i+)cout ;for(i=0;imaxNUM+2;i+)cout-;coutendl;for(i=0;iemp+maxNUM-R.getnum();i+)cout ;coutRendl;cout*n;/ mega_integer_poly.h#include #includeusing namespace std;/*只考虑十进制的正整数的情况*/const int MAX=100;class MEGA_INTEGERprivate:int digitMAX; / 使用数组来存储这些数字int num; / 一共有num个有效数位public:MEGA_INTEGER();MEGA_INTEGER(const MEGA_INTEGER& obj); /拷贝构造函数MEGA_INTEGER(int digit1, int n1); MEGA_INTEGER();int getnum(); /返回有效数位的个数/类内运算符重载MEGA_INTEGER operator =(const MEGA_INTEGER& other);MEGA_INTEGER operator +(const MEGA_INTEGER& other);MEGA_INTEGER operator -(const MEGA_INTEGER& other);MEGA_INTEGER operator *(const MEGA_INTEGER& other);MEGA_INTEGER operator /(const MEGA_INTEGER& other);/ 类外友元 重载流的运算符; 接收键盘输入,将数字存在到digit数组中;friend ostream& operator 运算符; 读出digit数组中存储的大数;friend istream& operator (istream& steam, MEGA_INTEGER& obj);/ 类外友元实现 运算符的重载/friend MEGA_INTEGER operator +(const MEGA_INTEGER& left, const MEGA_INTEGER& right);/friend MEGA_INTEGER operator -(const MEGA_INTEGER& left, const MEGA_INTEGER& right);/friend MEGA_INTEGER operator *(const MEGA_INTEGER& left, const MEGA_INTEGER& right);/friend MEGA_INTEGER operator /(const MEGA_INTEGER& left, const MEGA_INTEGER& right);private:void delLeftZeros(); /私有函数,去掉长整数串最左边的无效0;;/按竖式给出运算结果void outputResult(MEGA_INTEGER& A, MEGA_INTEGER& B, MEGA_INTEGER& R, char symbol);三:3定义一个学生类CStudent实现简单的学籍管理功能,要求该类至少实现以下功能:(1) 录入学生的基本信息(包括姓名,学号,性别,年龄,专业,入学时间,各门功课成绩)(2) 输出学生的基本信息(3) 选课(输入时间和所选的课程)(4) 统计每门课的学分绩点(5) 统计每学期的平均学分绩点(6) 统计重考科目(7) 统计重修科目/ CStudent.h#include #include using namespace std;#ifndef CSTUDENT_H#define CSTUDENT_H const int MAX_LEN=100;const int MAX_TERM=8;const int MAX_COURSE=100;/ 根据课程的学分和成绩,根据设定的绩点,计算并返回学分绩double getCreditPoint(int credit, double mark)double point;double creditpoint;if(mark=90&mark=85&mark=80&mark=70&mark=60&mark70)point=1.0;elsepoint=0.0;/*某课程学分绩(该课程学分)(该课程成绩对应绩点)*/creditpoint=credit*point;return creditpoint;/定义一个类CCourse来记录每门课程的基本信息class CCoursepublic:char courseNameMAX_LEN; /课程名称;int courseID ; /课程课号 int courseCredit; /课程学分; int courseTerm; /课程所在的学期public:CCourse()strcpy(courseName, NULL-NAME );courseID=00000;courseCredit=0;courseTerm=0;CCourse(char* name, int id, int credit, int term)strcpy(courseName,name);courseID=id;courseCredit=credit;courseTerm=term;/设置课程的基本信息void setCourseBasicInfo(char* name, int id, int credit, int term)strcpy(courseName,name);courseID=id;courseCredit=credit;courseTerm=term;/ 返回课程的基本信息void getCourseBasicInfo()/cout courseID courseName courseCredit courseTermendl;coutcourseID courseName courseCredit courseTermendl;CCourse();/ 定义全局变量CCourse COURSESMAX_COURSE; /CCourse的对象数组来记录所有课程的信息int COURSES_NUM; /CCourse的对象数组的元素的个数/定义一个类CStudent来记录学生的基本信息和选课情况class CStudentprivate:/基本信息:姓名,学号,性别,年龄,专业,入学时间int id;char nameMAX_LEN;char sex; /F or M or U : Femal, Male, Unknownint age;char specialityMAX_LEN;int year;int count; /记录此学生所选课程的数目,count=LENint courseIDMAX_COURSE ; /记录所选课程的课号double courseMarkMAX_COURSE; /记录所选课程的成绩: -1: 未修;0:重修;0?60: 重考;public:CStudent(); / 提供一个无参的构造函数CStudent(int iid, char* nname, char ssex, int aage, char* sspeci, int yyear); /完成初始化工作;void setBasicInfo(int iid, char* nname, char ssex, int aage, char* sspeci, int yyear); / 设置学生基本信息void inputBasicInfo(); / 接收键盘输入的学生的基本信息;void outputBasicInfo(); /输出学生的基本信息;void selectCourses(); / 选课程void setCourseMark(int course_id, double mark); /登记某一门课的成绩void getCourseCreditPoints();/ 统计每门课的学分绩点void getAvgCreditPoint(); /统计每学期的平均学分绩点void getReexamCourses(); / 输出重考课程的信息;void getRestudyCourses(); / 输出重修课程的信息;CStudent(); /完成析构工作;;CStudent:CStudent()int i;id=0;count=0;for(i=0;iMAX_COURSE;i+)courseIDi=0;courseMarki=-1; /表示未修CStudent:CStudent(int iid, char* nname, char ssex, int aage, char* sspeci, int yyear)int i;id=iid;strcpy(name,nname);sex=ssex;age=aage;strcpy(speciality,sspeci);year=yyear;count=0;for(i=0;iMAX_COURSE;i+)courseIDi=0;courseMarki=-1; /表示未修/ 接收键盘输入的学生的基本信息void CStudent:inputBasicInfo()cout:n;cout姓名:;cin.getline(name,MAX_LEN,n);cout专业:;cin.getline(speciality,MAX_LEN,n);coutid;coutsex;coutage;coutyear;/ 设置学生的基本信息void CStudent:setBasicInfo(int iid, char* nname, char ssex, int aage, char* sspeci, int yyear)id=iid;strcpy(name,nname);sex=ssex;age=aage;strcpy(speciality,sspeci);year=yyear;/输出学生的基本信息void CStudent:outputBasicInfo()cout * n;cout:n; cout学号 姓名 性别 年龄 专业 入学年份n;coutid name sex age speciality yearendl;/ 选课程void CStudent:selectCourses()int i,j;int idS;cout;count=0;cout * n;cout:n;cout courseID courseName courseCredit courseTermn;for(i=0;iCOURSES_NUM;i+)COURSESi.getCourseBasicInf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025出租专业租赁公司脚手架租赁合同
- 2025厂房及场地租赁合同范本涵盖场地使用与维护责任
- 2025版租赁住宅与室内空气质量检测合同
- 2025版外墙保温保温材料研发与推广应用合同
- 2025版能源企业员工劳动合同及节能减排承诺书
- 2025年度事业单位与劳动者双方聘用合同及劳动合同
- 2025版青少年素质教育培训合作合同
- 2025年度环保餐具采购与销售合作协议
- 2025年度银行存款质押贷款业务合同模板
- 2025版现代农业用地及开发权转让协议
- 2025年徐州市中考数学试题卷(含答案及解析)
- 2025-2026学年北师大版(2024)初中物理八年级上册教学计划及进度表
- 2025年地理信息系统考试题及答案
- 2025年度哈尔滨“丁香人才周”(春季)哈尔滨新区教育系统专项招聘80人考试备考试题及答案解析
- 军用电台知识培训方案课件
- 江苏员额检察官考试完整版试题及答案
- 2025年中级注册安全工程师《其他安全》十年真题考点
- 翻越您的浪浪山新学期开学第一课+课件
- (2025)行政执法人员考试题库(附答案)
- 院前急救工作制度及流程
- 1-安全生产治本攻坚三年行动工作方案及台账模板(2024-2026年)
评论
0/150
提交评论