2022年程序设计与问题求解II实验报告 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年程序设计与问题求解II实验报告 .pdf》由会员分享,可在线阅读,更多相关《2022年程序设计与问题求解II实验报告 .pdf(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验一数组、结构体和函数综合编程练习一、实验目的1. 复习数组,结构体和函数的相关知识2. 掌握利用数组存储数据和进行编程的方法3. 进一步掌握函数的编写二、实验内容1学生成绩统计从键盘输入一个班(全班最多不超过30 人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:(1)统计不及格人数并打印不及格学生名单;(2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;(3)统计各分数段的学生人数及所占的百分比。注:将成绩分为六个分数段,60 分以下为第 0 段,6069为第 1 段,7079为第 2 段,8089为第 3 段,9099为第 4 段,100分为第
2、5 段。编程要求 :1. 较好的用户输入输出提示信息2. 使用子函数来实现上述各个功能,并且要使用结构体数组来实现,该结构体中包括学生学号和成绩3. 最好不要使用全局变量源程序:#include using namespace std; #define N 30 struct student long num; /学生学号float score; /学生分数; student stuN; int Readscore(student stu)/从键盘输入一个班学生某门课的成绩及其学号当输入成绩为负值时,输入结束 cout 请依次输入学生的成绩 (百分制 ) 及其学号 endl; int n=0;
3、 for(int i=0;istui.scorestui.num; if(stui.score0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 39 页 - - - - - - - - - break; n+; return n; int Getfail(student stu,int n) /统计不及格人数并打印不及格学生名单 int a=0; for(int i=0;i0&stui.score=60)/保证大于零,成绩为负值的就不会输出了 coutstui.num
4、tstui.scoreendl; a+; return a; float Getaver(student stu,int n)/ 计算全班平均分 float a=0; for(int i=0;iN;i+) a=stui.score+a; return a/n; int Getaboveaver(student stu,int n,float aver)/ 统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单 int m=0; for(int i=0;i=aver) m+; coutstui.numtstui.scoreendl; return m; 名师资料总结 - - -精品资料欢迎下
5、载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 39 页 - - - - - - - - - void Getdetail(student stu,int n)/ 统计各分数段的人数及所占的百分比 float duan6=0,0,0,0,0,0; for(int i=0;in;i+)/用 n 而不是 N要不然其他没有数据的也会输出 switch(int (stui.score)/10) case 10: duan5+; break; case 9: duan4+; break; case 8: duan3+;
6、 break; case 7: duan2+; break; case 6: duan1+; break; default: duan0+; cout 六十分以下的人数为: duan0 所占百分比为: duan0*100/n%endl; cout60-69的人数为: duan1 所占百分比为: duan1*100/n%endl; cout70-79的人数为: duan2 所占百分比为: duan2*100/n%endl; cout80-89的人数为: duan3 所占百分比为: duan3*100/n%endl; cout90-99的人数为: duan4 所占百分比为: duan4*100/n
7、%endl; cout 满分的人数为: duan5 所占百分比为: duan5*100/n%endl; int main() /student stuN; int num=Readscore(stu); cout-不及格名单 -endl; int num1=Getfail(stu,num); cout-平均分 -endl; float average=Getaver(stu,num); coutaverageendl; cout-高于平均分名单 -endl; Getaboveaver(stu,num,average); cout-endl; 名师资料总结 - - -精品资料欢迎下载 - - -
8、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 39 页 - - - - - - - - - Getdetail(stu,num); cout-endl; return 0; 输入输出:请依次输入学生的成绩 (百分制 ) 及其学号89 1 34 2 64 3 78 4 -5 5 -不及格名单 - 2 34 -平均分 - 65 -高于平均分名单 - 1 89 4 78 - 六十分以下的人数为: 1 所占百分比为: 25% 60-69 的人数为: 1 所占百分比为: 25% 70-79 的人数为: 1 所占百分比为: 25%
9、80-89 的人数为: 1 所占百分比为: 25% 90-99 的人数为: 0 所占百分比为: 0% 满分的人数为: 0 所占百分比为: 0% - 2成绩排名次某班期末考试科目为数学(MT ) 、英语( EN )和物理( PH ) ,有最多不超过30人参加考试。要求:(1)计算每个学生的总分和平均分;(2)按总分成绩由高到低排出成绩的名次;(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数编程要求 :良好的用户输入输出提示信息使用子函数实现各个功能必须用结构体数组实现三、实验结果与分析将源程序、运行结果和分析以及实
10、验中遇到的问题和解决问题的方法,写在实验报告上源程序:#include 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 39 页 - - - - - - - - - #define N 2 using namespace std; double zongfenN; double pingjunN; struct MARK double math; double en; double ph; int num; ;/要加分号才行! ! !void jisuanchengji(
11、MARK a) cout-排序前的成绩单 -endl; for(int i=0;iN;i+) zongfeni=ai.math+ai.en+ai.ph; pingjuni=(ai.math+ai.en+ai.ph)/3; couti+1: 总分: zongfeni平均分: pingjuniendl; void paixu(double zongfen1,double pingjun,MARK b) /double max=zongfen10; MARK e; for(int j=0;jN;j+) double max=zongfen10; double aver=pingjun0; for(i
12、nt i=0;iN-i;i+) if(zongfen1izongfen1i+1) max=zongfen1i;zongfen1i=zongfen1i+1;zongfen1i+1=max; e=bi; bi=bi+1; bi+1=e; aver=pingjuni; pingjuni=pingjuni+1; pingjuni+1=aver; void print(MARK f,double zongfen,double pingjun) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5
13、 页,共 39 页 - - - - - - - - - cout-排序后的成绩单 -endl; cout 名次t; cout 学号t数学成绩 t英语成绩 t物理成绩 t平均分t总分endl; for(int i=0;iN;i+) couti+1tfi.numtfi.mathttfi.enttfi.ph; coutttpingjuni; couttzongfeniendl; void myfind(MARK f,double zongfen,double pingjunfen) int number; cout 请输入要查找的学生学号 number; for(int i=0;iN;i+) if(
14、number=fi.num) cout 名次t学号t数学成绩 t英语成绩 t物理成绩 t平均分t总分endl; couti+1tfi.numtfi.mathttfi.enttfi.ph; coutttpingjuni;couttzongfeniendl; int main() /double zongfenN; /double pingjunN; MARK mymarkN; cout 请依次输入学生的学号,数学成绩,英语成绩,物理成绩endl; for(int j=0;jmymarkj.nummymarkj.mathmymarkj.enmymarkj.ph; jisuanchengji(mym
15、ark);/主函数中调用函数时就不要再加【】paixu(zongfen,pingjun,mymark); print(mymark,zongfen,pingjun); myfind(mymark,zongfen,pingjun); return 0; 输入输出:请依次输入学生的学号,数学成绩,英语成绩,物理成绩101 75 85 78 102 78 89 34 -排序前的成绩单 - 1: 总分: 238平均分: 79.3333 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,
16、共 39 页 - - - - - - - - - 2: 总分: 201平均分: 67 -排序后的成绩单 - 名次学号数学成绩英语成绩物理成绩平均分总分1 101 75 85 78 79.3333 238 2 102 78 89 34 67 201 请输入要查找的学生学号101 名次学号数学成绩英语成绩物理成绩平均分总分1 101 75 85 78 79.3333 238 实验小结:通过这次试验用结构体重新编写了上学期做过的两个题目,相比之下,现在的方法更为简单,让自己有一种豁然开朗的感觉。灵活的运用结构体可以简化不少问题。实验二链表编程一、实验目的:1掌握建立链表中指针的运用、插入删除节点的方
17、法;二、实验准备:1复习链表的概念;建立链表的过程;链表节点的插入与删除;2预习实验内容,并在预习报告上写出程序流程图(或源代码);3上机输入源程序,调试运行并记录运行结果;4将源程序存在自己的软盘上,课后按要求写实验报告。三、实验内容:【编写程序】:编写函数,实现以下有关链表的各项功能1建立一个单链表 21 23 25 27 29 31,并输出该链表;2输入序号 n,查找序号为 n 的结点,并输出;4输入值 x,查找值为 x 的结点,并输出;5插入结点 : 输入序号 n 和值 x。在序号为 n 的结点后插入 x,并输出该链表;名师资料总结 - - -精品资料欢迎下载 - - - - - -
18、- - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 39 页 - - - - - - - - - 6删除结点 : 输入序号 n,册除序号为 n 的结点,并输出该链表。程序运行结果:该链表为: 21 23 25 27 29 31输入序号: 3输出值为: 25输 入 值:29输出序号: 5插入结点: 3,26 输出链表: 21 23 25 26 27 29 31删除结点: 3输出链表: 21 23 26 27 29 31 源程序:#include using namespace std; struct student int score; in
19、t num; struct student * next; ; void print(struct student *head) struct student *p; cout建立的链表如下 :endl; p=head; if(head!=NULL) do coutnumnext; while(p!=NULL); void find(struct student *head,int n ) struct student *p,*p1; int i=0,j=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -
20、 - - - - - 第 8 页,共 39 页 - - - - - - - - - cout输入序号为 :j; p=head; for(i=1;inext!=NULL) p1=p; p=p-next; else cout输出值为 :numendl; void find1(struct student *head,int n) struct student *p; int i,j; cout输入值为 :j; p=head; for(i=1;inext!=NULL) if(j!=p-num) p=p-next; else cout输出序号为 :inext=NULL; else while(p0-n
21、ump1-num)&(p1-next!=NULL) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 39 页 - - - - - - - - - p2=p1; p1=p1-next; if(p0-numnum) if(head=p1) head=p0; else p2-next=p0; p0-next=p1; else p1-next=p0; p0-next=NULL; n=n+1; print(head); return (head); struct student *
22、del(struct student *head,int n) int i=0; struct student *p1,*p2; if(head=NULL) cout链表为空 endl; return (head); p1=head; for(i=1;inext!=NULL) p2=p1; p1=p1-next; else if(p1=head) head=p1-next; else p2-next=p1-next; cout删除结点为 :nendl; n=n-1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
23、- - - - - - - 第 10 页,共 39 页 - - - - - - - - - print(head); return (head); struct student *mycreat(struct student stu,struct student *head) int j; for(int i=0;i6;i+) stui.num=21+i*2; head=&stu0; for(j=0;j5;j+) stuj.next=&stuj+1; stuj.next=NULL; return head; int main() int i=0,n=0; struct student *hea
24、d; student stu6,stu1; head=mycreat(stu,head);/ 改为 head=mycreat() print(head); find(head,6); find1(head,6); cout输入插入的结点(序号数值)stu1.scorestu1.num; head=insert(head,&stu1); cout输入删除的结点的序号 n; head=del(head,n); return 0; 运行结果:建立的链表如下 : 21 23 25 27 29 31 输入序号为 : 3 输出值为 :25 输入值为 : 21 输出序号为 :1 输入插入的结点(序号数值)3
25、 26 建立的链表如下 : 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 39 页 - - - - - - - - - 21 23 25 26 27 29 31 输入删除的结点的序号3 删除结点为 :3 建立的链表如下 : 21 23 26 27 29 31 实验三结构、链表综合编程一、实验目的:1掌握建立链表中指针的运用、插入删除节点的方法;2掌握链表的合并与排序方法。二、实验准备:1复习建立链表的过程;链表节点的插入与删除;链表的合并、排序等;2预习实验内容,并在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年程序设计与问题求解II实验报告 2022 程序设计 问题 求解 II 实验 报告
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内