C++面向对象程序设计习题答案.docx
- 文档编号:13432174
- 上传时间:2023-06-14
- 格式:DOCX
- 页数:56
- 大小:167KB
C++面向对象程序设计习题答案.docx
《C++面向对象程序设计习题答案.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计习题答案.docx(56页珍藏版)》请在冰点文库上搜索。
C++面向对象程序设计习题答案
《C++面向对象程序设计》习题答案(总29页)
《C++程序设计》
习题解答
第2部分习题解答
第1章面向对象程序设计概述
一、简答题
简述面向过程程序设计和面向对象程序设计的编程思想,体会面向对象程序设计的优点。
【答案要点】
面向过程程序设计的编程思想:
功能分解、逐步求精、模块化、结构化。
当要设计一个目标系统时,首先从整体上概括出整个系统需要实现的功能,然后对系统的每项功能进行逐层分解,直到每项子功能都足够简单,不需要再分解为止。
具体实现系统时,每项子功能对应一个模块,模块间尽量相对独立,通过模块间的调用关系或全局变量而有机地联系起来。
面向对象程序设计的编程思想:
(1)客观世界中的事物都是对象(object),对象之间存在一定的关系。
(2)用对象的属性(attribute)描述事物的静态特征,用对象的操作(operation)描述事物的行为(动态特征)。
(3)对象的属性和操作结合为一体,形成一个相对独立、不可分的实体。
对象对外屏蔽其内部细节,只留下少量接口,以便与外界联系。
(4)通过抽象对对象进行分类,把具有相同属性和相同操作的对象归为一类,类是这些对象的抽象描述,每个对象是其所属类的一个实例。
(5)复杂的对象可以用简单的对象作为其构成部分。
(6)通过在不同程度上运用抽象的原则,可以得到一般类和特殊类。
特殊类继承一般类的属性与操作,从而简化系统的构造过程。
(7)对象之间通过传递消息进行通信,以实现对象之间的动态联系。
(8)通过关联表达类之间的静态关系。
与传统的面向过程程序设计相比,面向对象程序设计的优点如下:
(1)从认识论的角度看,面向对象程序设计改变了软件开发的方式。
软件开发人员能够利用人类认识事物所采用的一般思维方式来进行软件开发。
(2)面向对象程序中的数据的安全性高。
外界只能通过对象提供的对外接口操作对象中的数据,这可以有效保护数据的安全。
(3)面向对象程序设计有助于软件的维护与复用。
某类对象数据结构的改变只会引起该类对象操作代码的改变,只要其对外提供的接口不发生变化,程序的其余部分就不需要做任何改动。
面向对象程序设计中类的继承机制有效解决了代码复用的问题。
人们可以像使用集成电路(IC)构造计算机硬件那样,比较方便地重用对象类来构造软件系统。
二、编程题
【程序参考代码】
/*学生信息管理系统C语言源代码*/
#include<>/*包含输入/输出头文件*/
#include<>/*包含字符串处理头文件*/
#include<>
#defineMAXSIZE100/*能够处理的学生总人数,可以随意修改*/
typedefstruct{/*用于存放生日信息的结构体*/
intyear;
intmonth;
intday;
}Date;
typedefstructStud{/*用于存放学生信息的结构体*/
charNum[12];/*学号为11位*/
charName[11];/*姓名,最多5个汉字*/
charSex[2];/*性别,男记为m,女记为f*/
DateBirthday;/*出生日期*/
floatEnglish,DataStructure,CPlusPlus;/*三门课成绩*/
floatSum,Average;/*总成绩、平均成绩*/
}Student;
charCurFile[40];/*存放当前正在操作的磁盘文件的文件名*/
intIsOpen=0;/*当前是否有磁盘文件被打开标志*/
intfound=0;/*在查找学生信息时是否找到标志*/
Studentstud[MAXSIZE];/*用于存放读入内存中的所有学生信息的全局数组*/
intIndex=0;/*存放实际学生人数的全局变量*/
/*各自定义函数原型声明*/
voidCreate();/*新建学生信息文件*/
voidOpen();/*打开学生信息文件,并读取学生信息到全局数组stud中*/
voidDisplay();/*显示学生信息*/
voidSearch();/*查询学生信息*/
intSearchNum(char*Num);/*按学号查询学生信息*/
intSearchName(char*Name);/*按姓名查询学生信息*/
voidAppend();/*添加学生信息*/
voidModify();/*修改学生信息*/
voidDelete();/*删除学生信息*/
voidTotal();/*统计所有学生某一科目总成绩*/
voidSort();/*学生信息排序*/
voidBackup();/*备份学生信息*/
voidmenu()/*系统功能菜单*/
{intchoice;/*用于保存用户对功能菜单的选择结果*/
for(;;)
{/*显示系统功能菜单*/
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");
printf("************7.删除学生信息*****************\n");
printf("************8.统计学生信息*****************\n");
printf("************9.学生信息排序*****************\n");
printf("************10.备份学生信息*****************\n");
printf("************0.退出系统*****************\n");
printf("****************************************************\n");
printf("请选择要执行的操作(0~8):
_");
scanf("%d",&choice);
switch(choice){
case1:
Create();break;
case2:
Open();break;
case3:
Display();break;
case4:
Search();break;
case5:
Append();break;
case6:
Modify();break;
case7:
Delete();break;
case8:
Total();break;
case9:
Sort();break;
case10:
Backup();break;
case0:
return;
default:
printf("选择错误!
请重新选择。
\n");
}/*switch结束*/
}/*for结束*/
}
voidReOrEx()/*在用户执行完一项系统功能后,可以选择:
是继续运行系统,还是退出系统*/
{intn;
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");
printf("****************************************************\n");
exit
(1);
}
}
voidmain()
{printf("****************************************************\n");
printf("*********欢迎使用学生信息管理系统!
*********\n");
printf("****************************************************\n");
system("pause");
menu();/*系统功能以菜单的形式提供给用户*/
printf("\n****************************************************\n");
printf("*************谢谢使用本系统!
***************\n");
printf("****************************************************\n");
}/*main函数结束*/
/*各自定义函数实现代码*/
intNew(char*FileName)/*创建磁盘文件*/
{FILE*fp;
if((fp=fopen(FileName,"w"))==NULL)
{return0;}
else
{fclose(fp);Index=0;return1;}
}
voidCreate()/*新建学生信息文件*/
{charFileName[40];
printf("请输入新建文件的名称:
");
scanf("%s",&FileName);
if(strcmp(FileName,"studentbackup"))
{strcat(FileName,".dat");
if(!
New(FileName))
printf("%s文件创建失败!
\n",FileName);
else
{strcpy(CurFile,FileName);
printf("%s文件创建成功!
\n",FileName);
}
}
else
{printf("%s是备份文件,禁止创建与此文件同名的文件!
\n",FileName);}
ReOrEx();
}
voidOpen()/*打开学生信息文件*/
{charFileName[40];
printf("请输入要打开的数据文件的名称:
");
scanf("%s",&FileName);
if(strcmp(FileName,"studentbackup"))
{strcat(FileName,".dat");
if(IsOpen==0)
{FILE*fp;
if((fp=fopen(FileName,"rb"))==NULL)
{printf("%s文件打开失败!
\n",FileName);}
else
{IsOpen=1;
Index=0;
while(!
feof(fp))
{fread(&stud[Index],sizeof(structStud),1,fp);
Index++;
}
Index--;
printf("学生总人数为:
%d\n",Index);
fclose(fp);
printf("%s文件打开成功!
\n",FileName);
strcpy(CurFile,FileName);
}
}
else
printf("%s文件已经打开!
\n",FileName);
}
else
printf("%s是备份文件,禁止打开此文件!
\n",FileName);
ReOrEx();
}
voidDisplay()/*显示全部学生信息*/
{inti;
if(!
strcmp(CurFile,""))
{printf("当前并未打开或新建文件,无法显示!
\n");}
else
{printf("\n显示所有学生成绩信息\n\n");
printf("%--12s%--11s%--5s%--14s%--12s%--15s%--12s%--12s%--12s\n","Num","Name","Sex","Birthday","English","DataStructure","CPlusPlus","Sum","Average");
for(i=0;i { printf("%--12s%--11s%--5s%4d/%2d/%2d%%%%%\n\n",stud[i].Num,stud[i].Name,stud[i].Sex,stud[i].,stud[i].,stud[i].,stud[i].English,stud[i].DataStructure,stud[i].CPlusPlus,stud[i].Sum,stud[i].Average); } } ReOrEx(); } intSearchNum(char*Num)/*按学号查询学生信息*/ {inti; for(i=0; {if(! strcmp(stud[i].Num,Num)) {printf("对应此学号的学生信息存在! \n"); found=1; returni; } } printf("没有此学生的信息! \n"); found=0; return0; } intSearchName(char*Name)/*按姓名查询学生信息*/ {inti; for(i=0;i {if(! strcmp(stud[i].Name,Name)) {printf("对应此学号的学生信息存在! \n"); found=1; returni; } } printf("没有此学生的信息! \n"); found=0; return0; } voidSearch()/*查询学生信息*/ {intn; inti; charNum[12]; charName[10]; if(! strcmp(CurFile,"")) {printf("当前并未打开或新建文件,无法查询! \n");} else {printf("\n查询某一学生信息\n"); printf("****************************************************\n"); printf("***************1.按学号查询*************\n"); printf("***************2.按姓名查询*************\n"); printf("****************************************************\n"); printf("请选择(1/2)_"); scanf("%d",&n); if(n==1) {printf("请输入学生学号: \n"); scanf("%s",Num); i=SearchNum(Num); } elseif(n==2) {printf("请输入学生姓名: \n"); scanf("%s",&Name); i=SearchName(Name); } printf("该学生的具体信息为: \n\n"); printf("%--12s%--11s%--5s%--14s%--12s%--15s%--12s%--12s%--12s\n","Num","Name","Sex","Birthday","English","DataStructure","CPlusPlus","Sum","Average"); printf("%--12s%--11s%--5s%4d/%2d/%2d%%%%%\n\n",stud[i].Num,stud[i].Name,stud[i].Sex,stud[i].,stud[i].,stud[i].,stud[i].English,stud[i].DataStructure,stud[i].CPlusPlus,stud[i].Sum,stud[i].Average); } ReOrEx(); } voidAddData()/*添加一条学生信息*/ {charNum[12]; charName[10]; charSex[2]; intYear,Month,Day; floatEnglish,DataStructure,CPP; intlocation; if(Index>=MAXSIZE){printf("错误! 学生信息已满,不能添加! \n");} else {printf("执行添加学生信息操作! \n"); printf("\n请输入学生学号: "); scanf("%s",Num); location=SearchNum(Num); if(! found) {printf("可以进行添加操作! \n"); printf("\n请输入学生姓名: "); scanf("%s",Name); printf("\n请输入学生性别: "); scanf("%s",&Sex); printf("\n请输入学生出生年份: "); scanf("%d",&Year); printf("\n请输入学生出生月份: "); scanf("%d",&Month); printf("\n请输入学生出生日: "); scanf("%d",&Day); printf("\n请输入学生英语成绩: "); scanf("%f",&English); printf("\n请输入学生数据结构成绩: "); scanf("%f",&DataStructure); printf("\n请输入学生C++成绩: "); scanf("%f",&CPP); printf("\n"); strcpy(stud[Index].Num,Num); strcpy(stud[Index].Name,Name); strcpy(stud[Index].Sex,Sex); stud[Index].=Year; stud[Index].=Month; stud[Index].=Day; stud[Index].English=English; stud[Index].DataStructure=DataStructure; stud[Index].CPlusPlus=CPP; stud[Index].Sum=English+DataStructure+CPP; stud[Index].Average=stud[Index].Sum/3; Index++; printf("插入一条学生信息操作成功! \n"); } elseprintf("不能进行添加学生信息操作! \n"); } } voidSave(char*FileName)/*学生信息存盘*/ {FILE*fp; inti; if((fp=fopen(FileName,"wb"))==NULL) {printf("文件打开失败! ");return;} for(i=0;I {fwrite(&stud[i],sizeof(structStud),1,fp);} fclose(fp); } voidAppend()/*添加学生信息*/ {if(! strcmp(CurFile,"")) {printf("当前并未打开或新建文件,无法添加! \n");} else {AddData();Save(CurFile);} ReOrEx(); } voidModifyData()/*修改一条学生信息*/ {charNum[12]; charName[10]; charSex[2]; floatEnglish,DataStructure,CPP; intYear,Month,Day; intlocation; printf("\n执行修改学生信息操作! \n\n"); printf("请输入将要修改的学生的学号: "); scanf("%s",Num); location=SearchNum(Num); if(found) {printf("可以进行修改学生信息操作! \n"); printf("\n请输入学生姓名: "); scanf("%s",Name); printf("\n请输入学生性别: "); scanf("%s",&Sex); printf("\n请输入学生出生年份: "); scanf("%d",&Year); printf("\n请输入学生出生月份: "); scanf("%d",&Mo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 面向 对象 程序设计 习题 答案
![提示](https://static.bingdoc.com/images/bang_tan.gif)