程序设计与问题求解II实验报告Word文件下载.docx

上传人:b****6 文档编号:18633642 上传时间:2022-12-30 格式:DOCX 页数:52 大小:40.44KB
下载 相关 举报
程序设计与问题求解II实验报告Word文件下载.docx_第1页
第1页 / 共52页
程序设计与问题求解II实验报告Word文件下载.docx_第2页
第2页 / 共52页
程序设计与问题求解II实验报告Word文件下载.docx_第3页
第3页 / 共52页
程序设计与问题求解II实验报告Word文件下载.docx_第4页
第4页 / 共52页
程序设计与问题求解II实验报告Word文件下载.docx_第5页
第5页 / 共52页
点击查看更多>>
下载资源
资源描述

程序设计与问题求解II实验报告Word文件下载.docx

《程序设计与问题求解II实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《程序设计与问题求解II实验报告Word文件下载.docx(52页珍藏版)》请在冰豆网上搜索。

程序设计与问题求解II实验报告Word文件下载.docx

stu[i].num;

if(stu[i].score<

0)

{

break;

}

n++;

}

returnn;

}

intGetfail(studentstu[],intn)//统计不及格人数并打印不及格学生名单

inta=0;

if(stu[i].score>

0&

&

stu[i].score<

=60)//保证大于零,成绩为负值的就不会输出了

cout<

stu[i].num<

\t"

a++;

returna;

floatGetaver(studentstu[],intn)//计算全班平均分

floata=0;

a=stu[i].score+a;

returna/n;

intGetaboveaver(studentstu[],intn,floataver)//统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单

intm=0;

for(inti=0;

n;

i++)//这里要用n而不是N,要不然其他没有数据的也会输出

=aver)

m++;

returnm;

voidGetdetail(studentstu[],intn)//统计各分数段的人数及所占的百分比

floatduan[6]={0,0,0,0,0,0};

i++)//用n而不是N要不然其他没有数据的也会输出

switch(int((stu[i].score)/10))

case10:

duan[5]++;

break;

case9:

duan[4]++;

case8:

duan[3]++;

case7:

duan[2]++;

case6:

duan[1]++;

default:

duan[0]++;

六十分以下的人数为:

duan[0]<

所占百分比为:

duan[0]*100/n<

%"

cout<

60-69的人数为:

duan[1]<

duan[1]*100/n<

70-79的人数为:

duan[2]<

duan[2]*100/n<

80-89的人数为:

duan[3]<

duan[3]*100/n<

90-99的人数为:

duan[4]<

duan[4]*100/n<

满分的人数为:

duan[5]<

duan[5]*100/n<

intmain()

//studentstu[N];

intnum=Readscore(stu);

------------不及格名单-----------------------------"

intnum1=Getfail(stu,num);

-------------平均分---------------------------------"

floataverage=Getaver(stu,num);

average<

----------------高于平均分名单---------------------"

Getaboveaver(stu,num,average);

----------------------------------------------------"

Getdetail(stu,num);

return0;

输入输出:

请依次输入学生的成绩(百分制)及其学号

891

342

643

784

-55

------------不及格名单-----------------------------

234

-------------平均分---------------------------------

65

----------------高于平均分名单---------------------

189

478

----------------------------------------------------

1所占百分比为:

25%

0所占百分比为:

0%

2.成绩排名次

某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。

要求:

(1)计算每个学生的总分和平均分;

(2)按总分成绩由高到低排出成绩的名次;

(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;

(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数

良好的用户输入输出提示信息

使用子函数实现各个功能

必须用结构体数组实现

三、实验结果与分析

将源程序、运行结果和分析以及实验中遇到的问题和解决问题的方法,写在实验报告上

#defineN2

doublezongfen[N];

doublepingjun[N];

structMARK

doublemath;

doubleen;

doubleph;

intnum;

//要加分号才行!

voidjisuanchengji(MARKa[])

----------排序前的成绩单----------"

for(inti=0;

{

zongfen[i]=a[i].math+a[i].en+a[i].ph;

pingjun[i]=(a[i].math+a[i].en+a[i].ph)/3;

i+1<

:

总分:

zongfen[i]<

平均分:

pingjun[i]<

}

voidpaixu(doublezongfen1[],doublepingjun[],MARKb[])

//doublemax=zongfen1[0];

MARKe;

for(intj=0;

j<

j++)

doublemax=zongfen1[0];

doubleaver=pingjun[0];

N-i;

if(zongfen1[i]<

zongfen1[i+1])

{max=zongfen1[i];

zongfen1[i]=zongfen1[i+1];

zongfen1[i+1]=max;

e=b[i];

b[i]=b[i+1];

b[i+1]=e;

aver=pingjun[i];

pingjun[i]=pingjun[i+1];

pingjun[i+1]=aver;

voidprint(MARKf[],doublezongfen[],doublepingjun[])

----------排序后的成绩单----------"

名次\t"

;

cout<

学号"

\t数学成绩"

\t英语成绩"

\t物理成绩"

\t平均分"

\t总分"

f[i].num<

f[i].math<

\t\t"

f[i].en<

f[i].ph;

pingjun[i];

voidmyfind(MARKf[],doublezongfen[],doublepingjunfen[])

intnumber;

请输入要查找的学生学号"

cin>

number;

{if(number==f[i].num)

{cout<

名次"

\t学号"

//doublezongfen[N];

//doublepingjun[N];

MARKmymark[N];

请依次输入学生的学号,数学成绩,英语成绩,物理成绩"

j++)

cin>

mymark[j].num>

mymark[j].math>

mymark[j].en>

mymark[j].ph;

jisuanchengji(mymark);

//主函数中调用函数时就不要再加【】

paixu(zongfen,pingjun,mymark);

print(mymark,zongfen,pingjun);

myfind(mymark,zongfen,pingjun);

return0;

请依次输入学生的学号,数学成绩,英语成绩,物理成绩

101758578

102788934

----------排序前的成绩单----------

1:

238平均分:

79.3333

2:

201平均分:

67

----------排序后的成绩单----------

名次学号数学成绩英语成绩物理成绩平均分总分

110175857879.3333238

210278893467201

请输入要查找的学生学号

101

实验小结:

通过这次试验用结构体重新编写了上学期做过的两个题目,相比之下,现在的方法更为简单,让自己有一种豁然开朗的感觉。

灵活的运用结构体可以简化不少问题。

实验二链表编程

一、实验目的:

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

删除结点:

212326272931

intscore;

structstudent*next;

 

voidprint(structstudent*head)

structstudent*p;

建立的链表如下:

p=head;

if(head!

=NULL)

do

cout<

p->

num<

\n"

p=p->

next;

}while(p!

=NULL);

voidfind(structstudent*head,intn)

{structstudent*p,*p1;

inti=0,j=0;

输入序号为:

j;

for(i=1;

if(i!

=j&

next!

{p1=p;

p=p->

else{cout<

输出值为:

voidfind1(structstudent*head,intn)

{structstudent*p;

inti,j;

输入值为:

n-1;

if(p->

if((j!

=p->

num))

else

输出序号为:

structstudent*insert(structstudent*head,structstudent*stu1)

{intn=0;

structstudent*p0,*p1,*p2;

p1=head;

p0=stu1;

if(head==NULL)

head=p0;

p0->

next=NULL;

else

{while((p0->

num>

p1->

num)&

(p1->

=NULL))

p2=p1;

p1=p1->

}if(p0->

=p1->

num)

{

if(head==p1)

{head=p0;

}

else

{

p2->

next=p0;

p0->

next=p1;

}

else

{

p1->

p0->

}

n=n+1;

print(head);

return(head);

structstudent*del(structstudent*head,intn)

inti=0;

structstudent*p1,*p2;

if(head==NULL)

链表为空"

return(head);

=6;

if(i!

=n&

p2=p1;

p1=p1->

if(p1==head)

{head=p1->

else

{p2->

next=p1->

删除结点为:

n<

n=n-1;

structstudent*mycreat(structstudentstu[],structstudent*head)

intj;

6;

{stu[i].num=21+i*2;

head=&

stu[0];

for(j=0;

5;

{stu[j].next=&

stu[j+1];

stu[j].next=NULL;

returnhead;

inti=0,n=0;

structstudent*head;

studentstu[6],stu1;

head=mycreat(stu,head);

//改为head=mycreat()

find(head,6);

find1(head,6);

输入插入的结点(序号+数值)"

stu1.score>

stu1.num;

head=insert(head,&

stu1);

输入删除的结点的序号"

head=del(head,n);

运行结果:

21

23

27

31

1

输入插入的结点(序号+数值)

326

26

输入删除的结点的序号

实验三结构、链表综合编程

2.掌握链表的合并与排序方法。

1.复习建立链表的过程;

链表的合并、排序等;

建立多个班级学生成绩链表,其中,每个结点包含下面这些信息:

学号、姓名、成绩

要求完成下面的功能:

1.建立2个班学生成绩的无序链表,其中每个班包含10个结点数据(输入或从文件中读取每个同学的信息),将每个班的成绩链表按成绩高低排序后分别输出该链表;

2.将2个班级学生成绩合并(按成绩高低排序)后输出;

3.查找学生成绩:

通过输入同学的学号,将该同学从链表中找出,并输出该同学信息;

如果找不到,则输出“无此学生”。

structstuscore

charname[20];

doublescore;

stuscore*next;

stuscore*mycreat(stuscore*head)

{stuscore*p,*q;

{p=newstuscore;

请输入成绩"

score;

请输入此同学的学号"

num;

请输入此同学的姓名"

name;

//p->

老师加上的,有无均可

if(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1