程序设计与问题求解II实验指导书V10.docx
《程序设计与问题求解II实验指导书V10.docx》由会员分享,可在线阅读,更多相关《程序设计与问题求解II实验指导书V10.docx(12页珍藏版)》请在冰豆网上搜索。
程序设计与问题求解II实验指导书V10
实验数组、结构体和函数综合编程练习
一、实验目的
1.复习数组,结构体和函数的相关知识
2.掌握利用数组存储数据和进行编程的方法
3.进一步掌握函数的编写
二、实验内容
1.学生成绩统计
从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:
(1)统计不及格人数并打印不及格学生名单;
(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;
(3)统计各分数段的学生人数及所占的百分比。
注:
将成绩分为六个分数段,60分以下为第0段,60~69为第1段,70~79为第2段,80~89为第3段,90~99为第4段,100分为第5段。
编程要求:
1.较好的用户输入输出提示信息
2.使用子函数来实现上述各个功能,并且要使用结构体数组来实现,该结构体中包括学生学号和成绩
3.最好不要使用全局变量
提示:
供参考的函数原型如下:
typedeftagStudent
{
longnum;//学生学号
floatscore;//学生分数
}Student;
intReadScore(Studentstu[]);
/*函数功能:
从键盘输入一个班学生某门课的成绩及其学号
当输入成绩为负值时,输入结束
函数参数:
存放学生信息的Student结构体数组
函数返回值:
学生总数
*/
intGetFail(Studentstu[],intn);
/*函数功能:
统计不及格人数并打印不及格学生名单
函数参数:
存放学生信息的Student结构体数组
整型变量n,存放学生总数
函数返回值:
不及格人数
*/
floatGetAver(Studentstu[],intn);
/*函数功能:
计算全班平均分
函数参数:
存放学生信息的Student结构体数组
整型变量n,存放学生总数
函数返回值:
平均分
*/
intGetAboveAver(Studentstu[],intn);
/*函数功能:
统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单
函数参数:
存放学生信息的Student结构体数组
整型变量n,存放学生总数
函数返回值:
成绩在全班平均分及平均分之上的学生人数
*/
voidGetDetail(Studentstu[],intn);
/*函数功能:
统计各分数段的学生人数及所占的百分比
函数参数:
存放学生信息的Student结构体数组
整型变量n,存放学生总数
函数返回值:
无
*/
2.成绩排名次
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。
要求:
(1)计算每个学生的总分和平均分;
(2)按总分成绩由高到低排出成绩的名次;
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数
编程要求:
良好的用户输入输出提示信息
使用子函数实现各个功能
必须用结构体数组实现
提示:
设计好存放学生信息的结构体,方便编程。
用函数编程实现计算每个学生的总分;
用函数编程实现按总分由高到低对学生成绩排序
用函数编程实现查找学号为k的学生在班级中的排名名次及相关成绩等信息,找不到时返回-1值
三、实验结果与分析
将源程序、运行结果和分析以及实验中遇到的问题和解决问题的方法,写在实验报告上。
实验链表编程
一、实验目的:
1.掌握建立链表中指针的运用、插入删除节点的方法;
二、实验准备:
1.复习链表的概念;建立链表的过程;链表节点的插入与删除;
2.预习实验内容,并在预习报告上写出程序流程图(或源代码);
3.上机输入源程序,调试运行并记录运行结果;
4.将源程序存在自己的软盘上,课后按要求写实验报告。
三、实验内容:
【编写程序】:
编写函数,实现以下有关链表的各项功能
1.建立一个单链表212325272931,并输出该链表;
2.输入序号n,查找序号为n的结点,并输出;
4.输入值x,查找值为x的结点,并输出;
5.插入结点:
输入序号n和值x。
在序号为n的结点后插入x,并输出该链表;
6.删除结点:
输入序号n,册除序号为n的结点,并输出该链表。
程序运行结果:
该链表为:
212325272931
输入序号:
3
输出值为:
25
输入值:
29
输出序号:
5
插入结点:
3,26
输出链表:
21232526272931
删除结点:
3
输出链表:
212326272931
实验结构、链表综合编程
一、实验目的:
1.掌握建立链表中指针的运用、插入删除节点的方法;
2.掌握链表的合并与排序方法。
二、实验准备:
1.复习建立链表的过程;链表节点的插入与删除;链表的合并、排序等;
2.预习实验内容,并在预习报告上写出程序流程图(或源代码);
3.上机输入源程序,调试运行并记录运行结果;
4.将源程序存在自己的软盘上,课后按要求写实验报告。
三、实验内容:
【编写程序】:
建立多个班级学生成绩链表,其中,每个结点包含下面这些信息:
学号、姓名、成绩
要求完成下面的功能:
1.建立2个班学生成绩的无序链表,其中每个班包含10个结点数据(输入或从文件中读取每个同学的信息),将每个班的成绩链表按成绩高低排序后分别输出该链表;
2.将2个班级学生成绩合并(按成绩高低排序)后输出;
3.查找学生成绩:
通过输入同学的学号,将该同学从链表中找出,并输出该同学信息;如果找不到,则输出“无此学生”。
实验递归程序设计
一、实验目的
1.学习递归程序的设计
2.掌握递归函数的编写
二、实验内容
1.求游戏人员的年龄
有5个人围坐在一起,问第五个人多大年纪,他说比第4个人大2岁;问第4个人,他说比第3个人大2岁;问第3个人,他说比第2个人大2岁;问第2个人,他说比第1个人大2岁。
第一个人说自己10岁,问第5个人多大年纪。
提示:
此程序为递归问题,递归公式为:
2.计算最大公约数
利用计算最大公约数的三条性质,用递归方法计算两个整数的最大公约数。
性质1:
如果x>y,则x和y的最大公约数与x-y和y的最大公约数相同,即
性质2:
如果y>x,则x和y的最大公约数与x和y-x的最大公约数相同,即
性质3:
如果x=y,则x和y的最大公约数与x值和y值相同,即
注意:
上述两个代码的编写都非常简单,在代码编写成功后,需要自己再回忆一下代码的编写过程,复习以前学过的内容,学习代码的调试。
实验类与对象
实验目的
初步掌握面向对象的思想,类的封装,多文件项目
实验内容
题目一:
验证题目,
将下面的程序正确划分到不同的文件中,编译链接运行
时间类:
//mytime.h
#ifndefMYTIME_H_
#defineMYTIME_H_
#include
usingnamespacestd;
classTime
{
private:
inthours;
intminutes;
public:
Time();
Time(inth,intm=0);
voidAddMin(intm);
voidAddHr(inth);
voidReset(inth=0,intm=0);
TimeSum(constTime&t)const;
voidShow()const;
};
#endif
//mytime.cpp
#include"mytime.h"
Time:
:
Time()
{
hours=minutes=0;
}
Time:
:
Time(inth,intm)
{
hours=h;
minutes=m;
}
voidTime:
:
AddMin(intm)
{
minutes+=m;
hours+=minutes/60;
minutes%=60;
}
voidTime:
:
AddHr(inth)
{
hours+=h;
}
voidTime:
:
Reset(inth,intm)
{
hours=h;
minutes=m;
}
TimeTime:
:
Sum(constTime&t)const
{
Timesum;
sum.minutes=minutes+t.minutes;
sum.hours=hours+t.hours+sum.minutes/60;
sum.minutes%=60;
returnsum;
}
voidTime:
:
Show()const
{
cout<cout<}
//usetime.cpp
#include
usingnamespacestd;
#include"mytime.h"
intmain()
{
TimeA;
TimeB(5,40);
TimeC(2,55);
cout<<"A=";
A.Show();
cout<<"B=";
B.Show();
cout<<"C=";
C.Show();
A=B.Sum(C);
cout<<"B.Sum(C)=";
A.Show();
return0;
}
题目二:
实现链表类,并使用自己编写的链表类,实现链表编程题目中的内容
实验附录
多文件项目
实验继承与多态
实验目的
理解类的继承与多态
实验内容
题目:
1.基类shape,并在该基类中定义属性m_area表示形状的面积、虚方法area用于计算形状的面积、showarea方法用于显示形状的面积;
2.编写类circle圆形,它是shape的派生类,在该类中增加属性radius表示半径,定义一个带一个整型参数的构造函数以便在创建实例时对半径进行设置;对基类中的虚方法area进行重写实现对圆面积的计算;
3.编写类rectangle方形,它是shape的派生类,在该类中增加属性length和width表示长和宽,定义构造函数(带长和宽两个形式参数),对基类中的虚方法area进行重写实现对方形面积的计算。
4.在主程序中创建circle和rectangle的实例(注意与构造函数对应),调用各自的area方法实现对面积的计算,并调用基类中的方法showarea实现面积的输出。
实例讲解:
#include
usingstd:
:
cout;
usingstd:
:
endl;
classBaseClass{
public:
/*virtual*/voidprint(){//请去掉注释后查看结果有何不同,并思考为什么?
//virtual只能在声明时使用,在定义时(cpp中)不能有!
cout<<"AAA"<}
};
classSubClass:
publicBaseClass{
public:
voidprint(){
cout<<"BBB"<}
};
voidmain(){
BaseClassbaseClass,*baseClass_p=