




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+程序设计习题解答27目录第2部分 习题解答2第1章 面向对象程序设计概述2第2章 面向过程程序设计12第3章 类和对象14第4章 继承与派生18第5章 多态性与虚函数21第6章 友元与静态成员25第7章 运算符重载29第8章 泛型编程33第9章 输入/输出36第10章 异常处理38第2部分 习题解答第1章 面向对象程序设计概述一、简答题简述面向过程程序设计和面向对象程序设计的编程思想,体会面向对象程序设计的优点。【答案要点】面向过程程序设计的编程思想:功能分解、逐步求精、模块化、结构化。当要设计一个目标系统时,首先从整体上概括出整个系统需要实现的功能,然后对系统的每项功能进行逐层分解,直到
2、每项子功能都足够简单,不需要再分解为止。具体实现系统时,每项子功能对应一个模块,模块间尽量相对独立,通过模块间的调用关系或全局变量而有机地联系起来。面向对象程序设计的编程思想:(1)客观世界中的事物都是对象(object),对象之间存在一定的关系。(2)用对象的属性(attribute)描述事物的静态特征,用对象的操作(operation)描述事物的行为(动态特征)。(3)对象的属性和操作结合为一体,形成一个相对独立、不可分的实体。对象对外屏蔽其内部细节,只留下少量接口,以便与外界联系。(4)通过抽象对对象进行分类,把具有相同属性和相同操作的对象归为一类,类是这些对象的抽象描述,每个对象是其所
3、属类的一个实例。(5)复杂的对象可以用简单的对象作为其构成部分。(6)通过在不同程度上运用抽象的原则,可以得到一般类和特殊类。特殊类继承一般类的属性与操作,从而简化系统的构造过程。(7)对象之间通过传递消息进行通信,以实现对象之间的动态联系。(8)通过关联表达类之间的静态关系。与传统的面向过程程序设计相比,面向对象程序设计的优点如下:(1)从认识论的角度看,面向对象程序设计改变了软件开发的方式。软件开发人员能够利用人类认识事物所采用的一般思维方式来进行软件开发。(2)面向对象程序中的数据的安全性高。外界只能通过对象提供的对外接口操作对象中的数据,这可以有效保护数据的安全。(3)面向对象程序设计
4、有助于软件的维护与复用。某类对象数据结构的改变只会引起该类对象操作代码的改变,只要其对外提供的接口不发生变化,程序的其余部分就不需要做任何改动。面向对象程序设计中类的继承机制有效解决了代码复用的问题。人们可以像使用集成电路(IC)构造计算机硬件那样,比较方便地重用对象类来构造软件系统。二、编程题【程序参考代码】/*学生信息管理系统C语言源代码*/#include <> /*包含输入/输出头文件*/#include <> /*包含字符串处理头文件*/#include <>#define MAXSIZE 100 /*能够处理的学生总人数,可以随意修改*/type
5、def struct /*用于存放生日信息的结构体*/ int year; int month; int day;Date;typedef struct Stud /*用于存放学生信息的结构体*/char Num12; /*学号为11位*/ char Name11; /*姓名,最多5个汉字*/ char Sex2; /*性别,男记为m,女记为f */Date Birthday; /*出生日期*/ float English, DataStructure, CPlusPlus; /*三门课成绩*/ float Sum, Average; /*总成绩、平均成绩*/Student;char CurF
6、ile40; /*存放当前正在操作的磁盘文件的文件名*/int IsOpen=0; /*当前是否有磁盘文件被打开标志*/int found=0; /*在查找学生信息时是否找到标志*/Student studMAXSIZE; /*用于存放读入内存中的所有学生信息的全局数组*/int Index=0; /*存放实际学生人数的全局变量*/*各自定义函数原型声明*/void Create(); /*新建学生信息文件*/ void Open(); /*打开学生信息文件,并读取学生信息到全局数组stud中*/void Display(); /*显示学生信息*/void Search(); /*查询学生信息
7、*/int SearchNum(char* Num); /*按学号查询学生信息*/int SearchName(char* Name); /*按姓名查询学生信息*/void Append(); /*添加学生信息*/void Modify(); /*修改学生信息*/void Delete(); /*删除学生信息*/void Total(); /*统计所有学生某一科目总成绩*/void Sort(); /*学生信息排序*/ void Backup(); /*备份学生信息*/void menu() /*系统功能菜单*/ int choice; /*用于保存用户对功能菜单的选择结果*/for( ; ;
8、 ) /*显示系统功能菜单*/printf("n*n");printf("* 学生信息管理系统 *n"); printf("*n"); printf("* 1新建学生信息文件 *n"); printf("* 2打开学生信息文件 *n"); printf("* 3显示学生信息 *n"); printf("* 4查询学生信息 *n"); printf("* 5添加学生信息 *n");printf("* 6修改学生信息 *n&quo
9、t;);printf("* 7删除学生信息 *n");printf("* 8统计学生信息 *n");printf("* 9学生信息排序 *n"); printf("* 10备份学生信息 *n"); printf("* 0退出系统 *n"); printf("*n"); printf(" 请选择要执行的操作(08):_"); scanf("%d", &choice); switch(choice) case 1: Create()
10、; break; case 2: Open(); break; case 3: Display(); break; case 4: Search(); break;case 5: Append(); break;case 6: Modify(); break;case 7: Delete(); break;case 8: Total(); break; case 9: Sort(); break;case 10: Backup(); break; case 0: return; default: printf("选择错误!请重新选择。n");/*switch结束*/*for
11、结束*/void ReOrEx()/*在用户执行完一项系统功能后,可以选择:是继续运行系统,还是退出系统*/int n; printf("n*n");printf("* 1. 返回上级菜单 *n"); printf("* 0. 退出系统 *n");printf("*n");printf(" 请选择(1/0)_"); scanf("%d",&n);if(n=0)printf("n*n"); printf("* 谢谢使用本系统! *n&quo
12、t;); printf("*n"); exit(1);void main()printf("*n");printf("* 欢迎使用学生信息管理系统! *n");printf("*n");system("pause"); menu();/*系统功能以菜单的形式提供给用户*/ printf("n*n");printf("* 谢谢使用本系统! *n");printf("*n");/*main函数结束*/*各自定义函数实现代码*/int New
13、(char* FileName) /*创建磁盘文件*/FILE *fp; if(fp=fopen(FileName,"w")=NULL) return 0; else fclose(fp); Index=0;return 1; void Create() /*新建学生信息文件*/char FileName40;printf("请输入新建文件的名称:");scanf("%s", &FileName);if(strcmp(FileName, "studentbackup") strcat(FileName, &
14、quot;.dat");if(!New(FileName)printf("%s文件创建失败!n", FileName);else strcpy(CurFile, FileName); printf("%s文件创建成功!n", FileName);else printf("%s是备份文件,禁止创建与此文件同名的文件!n",FileName); ReOrEx();void Open() /*打开学生信息文件*/char FileName40;printf("请输入要打开的数据文件的名称:");scanf(&q
15、uot;%s", &FileName);if(strcmp(FileName, "studentbackup")strcat(FileName, ".dat"); if(IsOpen=0) FILE *fp; if(fp=fopen(FileName, "rb")=NULL) printf("%s文件打开失败!n", FileName); elseIsOpen=1;Index=0; while(!feof(fp)fread(&studIndex, sizeof(struct Stud),
16、1, fp);Index+;Index-;printf("学生总人数为:%dn", Index);fclose(fp); printf("%s文件打开成功!n", FileName); strcpy(CurFile, FileName); elseprintf("%s文件已经打开!n", FileName); elseprintf("%s是备份文件,禁止打开此文件!n", FileName);ReOrEx();void Display() /*显示全部学生信息*/int i; if(!strcmp(CurFile,
17、 "") printf("当前并未打开或新建文件,无法显示!n"); elseprintf("n 显示所有学生成绩信息nn");printf("%-12s%-11s%-5s%-14s%-12s%-15s%-12s%-12s%-12sn", "Num", "Name", "Sex", "Birthday", "English", "DataStructure", "CPlusPlus&qu
18、ot;, "Sum", "Average"); for(i=0; i<Index; i+) printf("%-12s%-11s%-5s%4d/%2d/%2d%10.2f%15.2f%12.2f%12.2f%12.2fnn", studi.Num, studi.Name, studi.Sex, studi., studi., studi., studi.English, studi.DataStructure, studi.CPlusPlus, studi.Sum, studi.Average);ReOrEx();int Sea
19、rchNum(char* Num) /*按学号查询学生信息*/int i;for(i=0; <Index; i+)if(!strcmp(studi.Num, Num)printf("对应此学号的学生信息存在!n");found=1;return i;printf("没有此学生的信息!n");found=0;return 0;int SearchName(char* Name) /*按姓名查询学生信息*/int i;for(i=0; i<Index; i+)if(!strcmp(studi.Name, Name)printf("对应此
20、学号的学生信息存在!n");found=1;return i;printf("没有此学生的信息!n");found=0;return 0;void Search() /*查询学生信息*/int n;int i;char Num12; char Name10;if(!strcmp(CurFile, "") printf("当前并未打开或新建文件,无法查询!n"); elseprintf("n 查询某一学生信息n");printf("*n"); printf("* 1. 按学号查
21、询 *n"); printf("* 2. 按姓名查询 *n"); printf("*n"); printf(" 请选择(1/2)_");scanf("%d", &n);if(n=1)printf("请输入学生学号:n");scanf("%s", Num);i=SearchNum(Num);else if(n=2)printf("请输入学生姓名:n");scanf("%s", &Name);i=SearchNam
22、e(Name);printf("该学生的具体信息为:nn");printf("%-12s%-11s%-5s%-14s%-12s%-15s%-12s%-12s%-12sn", "Num", "Name", "Sex", "Birthday", "English", "DataStructure", "CPlusPlus","Sum", "Average");printf(&quo
23、t;%-12s%-11s%-5s%4d/%2d/%2d%10.2f%15.2f%12.2f%12.2f%12.2fnn", studi.Num, studi.Name, studi.Sex, studi., studi., studi., studi.English, studi.DataStructure, studi.CPlusPlus, studi.Sum, studi.Average);ReOrEx();void AddData() /*添加一条学生信息*/char Num12;char Name10;char Sex2;int Year, Month, Day;float
24、English, DataStructure, CPP;int location;if(Index>=MAXSIZE)printf("错误! 学生信息已满,不能添加!n");else printf("执行添加学生信息操作!n");printf("n请输入学生学号:");scanf("%s", Num);location=SearchNum(Num);if (!found) printf("可以进行添加操作!n");printf("n请输入学生姓名:"); scanf(&
25、quot;%s", Name); printf("n请输入学生性别:"); scanf("%s", &Sex); printf("n请输入学生出生年份:"); scanf("%d", &Year); printf("n请输入学生出生月份:"); scanf("%d", &Month); printf("n请输入学生出生日:"); scanf("%d", &Day); printf("n
26、请输入学生英语成绩:"); scanf("%f", &English); printf("n请输入学生数据结构成绩:"); scanf("%f", &DataStructure); printf("n请输入学生C+成绩:"); scanf("%f", &CPP); printf("n"); strcpy(studIndex.Num, Num); strcpy(studIndex.Name, Name); strcpy(studIndex.Se
27、x, Sex);studIndex.=Year; studIndex.=Month; studIndex.=Day;studIndex.English=English;studIndex.DataStructure=DataStructure;studIndex.CPlusPlus=CPP;studIndex.Sum=English+DataStructure+CPP;studIndex.Average=studIndex.Sum/3;Index+;printf("插入一条学生信息操作成功!n");else printf("不能进行添加学生信息操作!n"
28、);void Save(char* FileName) /*学生信息存盘*/FILE *fp;int i;if(fp=fopen(FileName, "wb")=NULL)printf("文件打开失败!");return;for(i=0;I <Index; i+)fwrite(&studi, sizeof(struct Stud), 1, fp);fclose(fp);void Append() /*添加学生信息*/if(!strcmp(CurFile, "") printf("当前并未打开或新建文件,无法添加
29、!n");elseAddData(); Save(CurFile); ReOrEx();void ModifyData() /*修改一条学生信息*/char Num12;char Name10;char Sex2;float English, DataStructure, CPP;int Year, Month, Day;int location;printf("n执行修改学生信息操作!nn");printf("请输入将要修改的学生的学号:");scanf("%s", Num);location=SearchNum(Num)
30、;if (found) printf("可以进行修改学生信息操作!n");printf("n请输入学生姓名:");scanf("%s", Name);printf("n请输入学生性别:"); scanf("%s", &Sex); printf("n请输入学生出生年份:"); scanf("%d", &Year); printf("n请输入学生出生月份:"); scanf("%d", &Mont
31、h); printf("n请输入学生出生日:"); scanf("%d", &Day); printf("n请输入学生英语成绩:"); scanf("%f", &English); printf("n请输入学生数据结构成绩:");scanf("%f", &DataStructure); printf("n请输入学生C+成绩:"); scanf("%f", &CPP); printf("n&quo
32、t;);strcpy(studlocation.Num, Num); strcpy(studlocation.Name, Name); strcpy(studlocation.Sex, Sex);studlocation.=Year; studlocation.=Month; studlocation.=Day;studlocation.English=English;studlocation.DataStructure=DataStructure;studlocation.CPlusPlus=CPP;studlocation.Sum=English+DataStructure+CPP;stu
33、dlocation.Average=studIndex.Sum/3;printf("执行修改学生信息操作成功!n"); else printf("不能进行修改学生信息操作!n");void Modify() /*修改学生信息*/if(!strcmp(CurFile, "") printf("当前并未打开或新建文件,无法修改!n"); else ModifyData(); Save(CurFile);ReOrEx();int DeleteData()/*删除一条学生信息*/char Num12; int locati
34、on,i;printf("n 执行删除学生信息操作!nn");printf("警告!学生信息一旦删除,将不可恢复。请小心使用该操作!nn");printf("请输入将要删除的学生的学号:n");scanf("%s", Num);location=SearchNum(Num);if(found)if(location!=MAXSIZE)for(i=location; i<MAXSIZE; i+)strcpy(studi.Num, studi+1.Num); strcpy(studi.Name, studi+1.
35、Name);strcpy(studi.Sex, studi+1.Sex);studi.=studi+1.;studi.=studi+1.;studi.=studi+1.;studi.English=studi+1.English;studi.DataStructure=studi+1.DataStructure;studi.CPlusPlus=studi+1.CPlusPlus;studi.Sum=studi+1.Sum;studi.Average=studi+1.Average;Index-;return 1;return 0;void Delete() /*删除学生信息*/if(!strc
36、mp(CurFile, "")printf("当前并未打开或新建文件,无法删除!n"); elseif(DeleteData()Save(CurFile);printf("删除一条学生信息操作成功!n");else printf("不能进行删除操作!n");printf("删除一条学生信息操作失败!n");ReOrEx();float GetOneCourseSum(int n) /*计算所有学生某一科目的总成绩*/float N=0;int i;switch(n)case 1:nglish;b
37、reak;case 2:ataStructure;break;case 3:PlusPlus; break;return N;float GetOneCourseAverage(int n)/*计算所有学生某一科目的平均成绩*/float temp=0;temp=GetOneCourseSum(n)/Index;return temp;void Total() /*统计某一科目总成绩*/int x;if(!strcmp(CurFile, "")printf("当前并未打开或新建文件,无法统计成绩!n"); elseprintf("n 统计某一科
38、目总成绩及平均成绩n");printf("n");printf("*n"); printf("* 1. 统计英语课程总成绩及平均成绩 *n"); printf("* 2. 统计数据结构课程总成绩及平均成绩 *n");printf("* 3. 统计C+课程总成绩及平均成绩 *n");printf("*n"); printf(" 请选择(1-3)_");scanf("%d", &x);switch(x)case 1:pri
39、ntf("n英语总成绩为:%5.2fnn", GetOneCourseSum(1); printf("英语平均成绩为:%5.2fn", GetOneCourseAverage(1);break;case 2:printf("n数据结构总成绩为:%5.2fnn", GetOneCourseSum(2); printf("数据结构平均成绩为:%5.2fn", GetOneCourseAverage(2);break;case 3:printf("nC+总成绩为:%5.2fnn", GetOneCou
40、rseSum(3); printf("c+平均成绩为:%5.2fn", GetOneCourseAverage(3);break;default:printf("选择错误!n");ReOrEx();void Bubble(int N) /*冒泡排序*/Student temp;int change=1;int i,j;switch(N)case 1: /*按英语成绩排序*/for(i=Index-1; i>=1 && change; -i)change=0;for(j=0; j<i; +j)if(studj.English&g
41、t;studj+1.English) strcpy, studj.Num); strcpy, studj.Name); strcpy, studj.Sex); =studj.English; =studj.DataStructure; =studj.CPlusPlus; =studj.Sum; =studj.Average; strcpy(studj.Num, studj+1.Num); strcpy(studj.Name, tudj+1.Name); strcpy(studj.Sex, studj+1.Sex); studj.=studj+1.; studj.=studj+1.; studj
42、.=studj+1.; studj.English=studj+1.English; studj.DataStructure=studj+1.DataStructure; studj.CPlusPlus=studj+1.CPlusPlus; studj.Sum=studj+1.Sum; studj.Average=studj+1.Average; strcpy(studj+1.Num, ; strcpy(studj+1.Name, ; strcpy(studj+1.Sex, ; studj+1.= studj+1.= studj+1.= studj+1.English=; studj+1.Da
43、taStructure=; studj+1.CPlusPlus=; studj+1.Sum=; studj+1.Average=; change=1;break;case 2: /*按数据结构成绩排序*/for(i=Index-1; i>=1 && change; -i)change=0;for(j=0; j<i; +j)if(studj.DataStructure>studj+1.DataStructure) (此处省略的代码与按英语成绩排序中的加粗代码完全一样) break;case 3: /*按C+成绩排序*/for(i=Index-1; i>=1
44、 && change; -i)change=0;for(j=0; j<i; +j)if(studj.CPlusPlus>studj+1.CPlusPlus) (此处省略的代码与按英语成绩排序中的加粗代码完全一样) break;case 4: /*按总成绩排序*/for(i=Index-1; i>=1 && change; -i)change=0;for(j=0; j<i; +j)if(studj.Sum>studj+1.Sum) (此处省略的代码与按英语成绩排序中的加粗代码完全一样) break;printf("n 显示所
45、有学生成绩信息nn");printf("%-12s%-11s%-5s%-14s%-12s%-15s%-12s%-12s%-12sn", "Num", "Name", "Sex", "Birthday", "English", "DataStructure", "CPlusPlus", "Sum", "Average"); for(i=0;i<Index;i+)printf(&quo
46、t;%-12s%-11s%-5s%4d/%2d/%2d%10.2f%15.2f%12.2f%12.2f%12.2fnn", studi.Num, studi.Name, studi.Sex, studi., studi., studi., studi.English, studi.DataStructure, studi.CPlusPlus, studi.Sum,studi.Average);void Sort() /*按某一科目成绩升序显示学生成绩*/int x;if(!strcmp(CurFile, "") printf("当前并未打开或新建文件,无
47、法显示!n"); elseprintf("n 按某一科目成绩升序显示学生成绩n");printf("n");printf("*n"); printf("* 1. 按英语成绩升序显示学生成绩 *n");printf("* 2. 按数据结构成绩升序显示学生成绩 *n");printf("* 3. 按C+成绩升序显示学生成绩 *n");printf("* 4. 按总成绩成绩升序显示学生成绩 *n");printf("*n"); pr
48、intf(" 请选择(1-4)_");scanf("%d", &x);printf("n"); Bubble(x);ReOrEx();void Backup() /*创建备份文件,备份学生信息*/if(!strcmp(CurFile, "") printf("当前并未打开或新建文件,无法备份!n"); elseFILE *fp; int i; if(fp=fopen("", "wb")=NULL) printf("创建备份文件失败!&qu
49、ot;); return; for(i=0; i<Index; i+) fwrite(&studi, sizeof(struct Stud), 1, fp); printf("备份学生信息成功!n"); fclose(fp); ReOrEx();第2章 面向过程程序设计一、简答题1【答案要点】直接常量也称字面值常量,在程序中直接按其书写形式对待,如数字12、字符'a'、字符串"Hello"等,而常变量是变量,系统会在静态存储区为常变量分配内存空间,如下语句定义的变量PI就是常变量。const float PI=常变量在声明时必须进行初始化,可以用值对其初始化,也可以使用表达式,使用表达式时,系统会先计算出表达式的值,然后再将值赋给常变量。在程序运行的过程中,其
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学生科技创新课件
- 2025年小学科学教材教法考试测试题及答案
- 2025年罕见病药物研发激励政策深度解析及产业链全景分析报告
- 2025年连锁药店市场拓展与数字化药店顾客满意度研究报告
- 2025年肿瘤早筛技术在癌症早期诊断中的关键地位与市场前景分析报告
- 企业重组业务管理办法
- 人员空缺权限管理办法
- 乡镇项目合同管理办法
- 会计档案工作管理办法
- 企业舆情控制管理办法
- 2025至2030年中国间苯二甲醇市场分析及竞争策略研究报告
- 外事安保活动方案
- 2025年 江西省公安厅警务辅助人员招聘考试笔试试卷附答案
- 2025年抗菌药物培训资料
- 2025年雅思考试写作专项预测试卷:雅思写作高分句型解析
- 购物中心威士忌酒吧行业深度调研及发展项目商业计划书
- 猪场生猪销售管理制度
- 初中教师坐班管理制度
- 2025贵州省水利投资(集团)有限责任公司招聘84人笔试备考题库附答案详解(综合题)
- 页岩气储层表征评价技术进展及其未来发展趋势分析
- 统编版高中政治必修三《政治与法治》期末复习:选择题刷题练习题(含答案解析)
评论
0/150
提交评论