程序设计与问题求解下实验答案Word文件下载.docx
- 文档编号:19393958
- 上传时间:2023-01-05
- 格式:DOCX
- 页数:42
- 大小:24.53KB
程序设计与问题求解下实验答案Word文件下载.docx
《程序设计与问题求解下实验答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《程序设计与问题求解下实验答案Word文件下载.docx(42页珍藏版)》请在冰豆网上搜索。
*/
intGetFail(Studentstu[],intn)
inti,count;
printf("
Fail:
\nnumber--score\n"
);
count=0;
for(i=0;
i<
n;
i++)
if(stu[i].score<
60)
{
printf("
%ld------%.0f\n"
stu[i].num,stu[i].score);
count++;
}
returncount;
计算全班平均分
平均分
floatGetAver(Studentstu[],intn)
inti;
floatsum=0;
sum=sum+stu[i].score;
returnsum/n;
统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单
成绩在全班平均分及平均分之上的学生人数
intGetAboveAver(Studentstu[],intn)
floataver;
aver=GetAver(stu,n);
aver=%f\n"
aver);
Aboveaver:
if(stu[i].score>
=aver)
统计各分数段的学生人数及所占的百分比
无
voidGetDetail(Studentstu[],intn)
inti,j,stuLevel[6];
6;
stuLevel[i]=0;
j=0;
else
j=((int)stu[i].score-50)/10;
stuLevel[j]++;
if(i==0)
<
60%d%.2f%%\n"
stuLevel[i],
(float)stuLevel[i]/(float)n*100);
elseif(i==5)
%d%d%.2f%%\n"
(i+5)*10,stuLevel[i],
%d--%d%d%.2f%%\n"
(i+5)*10,(i+5)*10+9,
stuLevel[i],(float)stuLevel[i]/(float)n*100);
2.成绩排名次
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。
要求:
(1)计算每个学生的总分和平均分;
(2)按总分成绩由高到低排出成绩的名次;
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数
#defineSTU30
andscoreas:
MTENPH\n"
Input(stu,n);
/*输入学生成绩*/
GetSumAver(stu,n);
/*计算总分和平均分*/
Beforesort:
\n"
Print(stu,n);
Sort(stu,n);
/*排名次*/
Aftersort:
Pleaseentersearchingnumber:
"
scanf("
%ld"
x);
/*以长整型格式输入待查找学生的学号*/
pos=Search(stu,n,x);
/*名次查询*/
if(pos!
=-1)
printf("
position:
\tNO\tMT\tEN\tPH\tSUM\tAVER\n"
%8d\t%4ld\t%4d\t%4d\t%4d\t%5d\t%\n"
pos+1,stu[pos].num,stu[pos].math,stu[pos].english,
stu[pos].physics,stu[pos].sum,stu[pos].aver);
else
Notfound!
/*函数功能:
输入某班学生期末考试三门课程成绩
函数参数:
结构体数组stu,存放学生信息
整型变量n,存放学生人数
函数返回值:
voidInput(Studentstu[],intn)
stu[i].num);
%d"
stu[i].math);
stu[i].english);
stu[i].physics);
计算每个学生的总分和平均分
整型变量n,存放学生人数
voidGetSumAver(Studentstu[],intn)
stu[i].sum=stu[i].english+stu[i].math+stu[i].physics;
stu[i].aver=(float)stu[i].sum/3;
按总分成绩由高到低排出成绩的名次
voidSort(Studentstu[],intn)
inti,j,k;
StudenttempStu;
n-1;
k=i;
for(j=i+1;
j<
j++)
if(stu[j].sum>
stu[k].sum)k=j;
if(k!
=i)
tempStu=stu[i];
stu[i]=stu[k];
stu[k]=tempStu;
打印名次表,表格内包括学生编号、各科分数、总分和平均分
voidPrint(Studentstu[],intn)
NO\t|MT\tEN\tPH\tSUM\tAVER\n"
----------------------------------------------------\n"
%ld\t|"
stu[i].num);
%4d\t%4d\t%4d\t"
stu[i].math,stu[i].english,stu[i].physics);
%5d\t%\n"
stu[i].sum,stu[i].aver);
查找学生的学号
长整型变量x,存放待查找学生的学号
找到时,返回学生学号在数组中的下标位置,否则返回值-1
intSearch(Studentstu[],intn,longx)
if(stu[i].num==x)return(i);
return(-1);
实验递归程序设计
求游戏人员的年龄
1.求游戏人员的年龄
intage(intn);
intmain()
intage5;
age5=age(5);
第5个人的年龄为%d\n"
age5);
intage(intn)
if(n==1)
return10;
returnage(n-1)+2;
求最大公约数
intgcd(intx,inty);
intx,y;
intgcdResult;
输入要计算最大公约数的两个数:
%d%d"
&
x,&
y);
gcdResult=gcd(x,y);
最大公约数为%d\n"
gcdResult);
intgcd(intx,inty)
if(x==y)
returnx;
elseif(x>
y)
returngcd(x-y,y);
elsereturngcd(x,y-x);
/*x<
y*/
实验链表编程
//注:
该程序并没有出错控制,假设用户输入都是正常的范围内
iostream>
usingnamespacestd;
structNode
intdata;
Node*next;
};
voidcreateList(Node*head,intnum);
intfindByNo(Node*head,intnum);
intfindByData(Node*head,intdata);
voidinsertData(Node*head,intdata,intnum);
voiddeleteData(Node*head,intnum);
voidprintOut(Node*head);
voidmain()
//inta[6]={21,23,25,27,29,31};
intnum;
Node*head=newNode();
cout<
请输入6个结点的值:
;
createList(head,6);
该链表为:
printOut(head);
请输入要查找的结点的序号(1-6):
cin>
num;
data=findByNo(head,num);
查找到的结点的值为"
data<
endl;
请输入要查找的结点的值:
data;
num=findByData(head,data);
查找到的结点的序号为:
num<
插入结点位置:
插入结点的值:
insertData(head,data,num);
请输入要删除的结点序号:
deleteData(head,num);
intfindByNo(Node*head,intnum)
intcount=0;
Node*p=head;
while(p->
next!
=NULL)
{
p=p->
next;
count++;
if(count==num)
returnp->
intfindByData(Node*head,intdata)
if(p->
data==data)
returncount;
//输入序号num和值data。
在序号为num的结点后插入data,并输出该链表
voidinsertData(Node*head,intdata,intnum)
Node*q=newNode();
q->
data=data;
next=p->
p->
next=q;
printOut(head);
return;
//输入序号num,删除序号为num的结点,并输出该链表
voiddeleteData(Node*head,intnum)
Node*p=head->
Node*pre=head;
while(p!
if(count==num)//删除节点
pre->
deletep;
pre=p;
p=p->
voidprintOut(Node*head)
%d"
p->
data);
voidcreateList(Node*head,intnum)
Node*p;
Node*q=head;
for(inti=0;
i<
i++)
p=newNode();
cin>
p->
p->
next=NULL;
q->
next=p;
q=q->
实验结构、链表综合编程
注意:
下面的代码用到了文件,但是学生编程并不要求使用文件
【编写程序】:
建立多个班级学生成绩链表,其中,每个结点包含下面这些信息:
学号、姓名、成绩
要求完成下面的功能:
1.建立2个班学生成绩的无序链表,其中每个班包含10个结点数据(输入或从文件中读取每个同学的信息),将每个班的成绩链表按成绩高低排序后分别输出该链表;
2.将2个班级学生成绩合并(按成绩高低排序)后输出;
3.查找学生成绩:
通过输入同学的学号,将该同学从链表中找出,并输出该同学信息;
如果找不到,则输出“无此学生”。
//
101a56
102b78
103c69
104d26
105e60
106f66
107g70
108h90
109i92
110j99
201aa26
202bb55
203cc78
204dd46
205ee89
206ff65
207gg99
208hh85
209ii73
210jj96
代码如下:
fstream>
charno[5];
charname[6];
doubleperform;
cout<
no<
"
name<
perform<
Node*q;
//读入班级1,构成链表
Node*headClass1=newNode();
q=headClass1;
ifstreamfin1("
if(!
fin1)
文件1打开失败!
return;
10;
fin1>
no>
name>
perform;
班级1原始数据为:
printOut(headClass1);
//读入班级2,构成链表
Node*headClass2=newNode();
q=headClass2;
ifstreamfin2("
fin2)
fin2>
班级2原始数据为:
printOut(headClass2);
//排序--------------------------------------------------------------
//对班级1高低排序输出
q=headClass1->
Node*temp=newNode();
Node*max;
while(q!
temp->
perform=q->
max=q;
p=q->
while(p!
if(p->
perform>
temp->
perform)
{
max=p;
temp->
perform=p->
}
strcpy(temp->
no,q->
no);
name,q->
name);
strcpy(q->
no,max->
name,max->
perform=max->
strcpy(max->
no,temp->
name,temp->
max->
perform=temp->
deletetemp;
temp=NULL;
班级1排序后数据为:
//对班级2高低排序输出
q=headClass2->
temp=newNode();
te
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 问题 求解 实验 答案