实验7数组的应用参考答案Word文件下载.docx
《实验7数组的应用参考答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验7数组的应用参考答案Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
yanghui.c参考答案
[实验任务四]:
设计程序实例7-1:
学生成绩统计cjtj.c(一维数组和函数综合编程练习)参考答案
#include<
stdio.h>
#defineARR_SIZE30
intReadScore(intnum[],floatscore[]);
intGetFail(intnum[],floatscore[],intn);
floatGetAver(floatscore[],intn);
intGetAboveAver(intnum[],floatscore[],intn);
voidGetDetail(floatscore[],intn);
voidmain()
{
intn,num[ARR_SIZE],fail,aboveAver;
floatscore[ARR_SIZE];
printf("
Pleaseenternumandscoreuntilscore<
0:
\n"
);
n=ReadScore(num,score);
Totalstudents:
%d\n"
n);
fail=GetFail(num,score,n);
Failstudents=%d\n"
fail);
aboveAver=GetAboveAver(num,score,n);
Aboveaverstudents=%d\n"
aboveAver);
GetDetail(score,n);
}
/*函数功能:
从键盘输入一个班学生某门课的成绩及其学号,当输入成绩为负值时,输入结束
函数参数:
整型数组num,存储学生学号
;
实型数组score,存储学生成绩
函数返回值:
学生总数
*/
intReadScore(intnum[],floatscore[])
{
inti=0;
scanf("
%d%f"
&
num[i],&
score[i]);
while(score[i]>
=0)
{
i++;
scanf("
}
returni;
统计不及格人数并打印不及格学生
整型数组num,存储学生学号
整型变量n,学生总数
不及格人数
intGetFail(intnum[],floatscore[],intn)
inti,count;
Fail:
\nnumber--score\n"
count=0;
for(i=0;
i<
n;
i++)
if(score[i]<
60)
{
printf("
%d------%.0f\n"
num[i],score[i]);
count++;
}
returncount;
计算全班平均分成绩
实型数组score,存储学生成绩
整型变量n,学生总数
平均分
floatGetAver(floatscore[],intn)
inti;
floatsum=0;
sum=sum+score[i];
returnsum/n;
统计成绩在全班平均分及平均分之上的学生人数并打印其学生
整型变量n,学生总数
成绩在全班平均分及平均分之上的学生人数
intGetAboveAver(intnum[],floatscore[],intn)
floataver;
aver=GetAver(score,n);
aver=%f\n"
aver);
Aboveaver:
if(score[i]>
=aver)
{
统计各分数段的学生人数及所占的百分比
无
voidGetDetail(floatscore[],intn)
inti,j,stu[6];
6;
i++)
stu[i]=0;
j=0;
else
j=((int)score[i]-50)/10;
stu[j]++;
if(i==0)
<
60%d%.2f%%\n"
stu[i],
(float)stu[i]/(float)n*100);
elseif(i==5)
%d%d%.2f%%\n"
(i+5)*10,stu[i],
%d--%d%d%.2f%%\n"
(i+5)*10,(i+5)*10+9,
stu[i],(float)stu[i]/(float)n*100);
程序运行结果如下:
0fornomorethan30students:
9901090↙
9901166↙
9901278↙
9901388↙
9901445↙
99015100↙
9901697↙
9901787↙
9901876↙
9901983↙
99020-1↙
10
number--score
99014-------45
Failstudents=1
aver=81.000000
99010------90
99013------88
99015------100
99016------97
99017------87
99020------83
Aboveaverstudents=6
60110.00%
60-69110.00%
70-79220.00%
80-89330.00%
90-99220.00%
100110.00%
设计程序实例7-2:
成绩排名次cjrank.c(二维数组、函数和常用算法综合编程练习)参考答案
#defineSTU30
#defineCOURSE3
voidInput(longnum[],intscore[][COURSE],intn);
voidGetSumAver(intscore[][COURSE],intn,intsum[],floataver[]);
voidSort(longnum[],intscore[][COURSE],intn,intsum[],floataver[]);
voidPrint(longnum[],intscore[][COURSE],intn,intsum[],floataver[]);
intSearch(longnum[],intn,longx);
main()
intn,score[STU][COURSE],sum[STU],pos;
longnum[STU],x;
floataver[STU];
Pleaseenterthetotalnumberofthestudents(n<
=30):
"
%d"
n);
/*输入参加考试的学生人数*/
EnterNo.andscoreas:
MTENPH\n"
Input(num,score,n);
/*输入学生成绩*/
GetSumAver(score,n,sum,aver);
/*计算总分和平均分*/
Beforesort:
Print(num,score,n,sum,aver);
Sort(num,score,n,sum,aver);
/*排名次*/
Aftersort:
Pleaseentersearchingnumber:
%ld"
x);
/*以长整型格式输入待查找学生的学号*/
pos=Search(num,n,x);
/*名次查寻*/
if(pos!
=-1)
position:
\tNO\tMT\tEN\tPH\tSUM\tAVER\n"
%8ld\t%4ld\t%4d\t%4d\t%4d\t%5d\t%5.0f\n"
pos+1,num[pos],
score[pos][0],score[pos][1],score[pos][2],
sum[pos],aver[pos]);
else
{
printf("
Notfound!
/*函数功能:
输入某班学生期末考试三门课程成绩
函数参数:
长整型数组num,存放学生学号
整型数组score,存放学生成绩
整型变量n,存放学生人数
函数返回值:
voidInput(longnum[],intscore[][COURSE],intn)
inti,j;
num[i]);
for(j=0;
j<
COURSE;
j++)
score[i][j]);
计算每个学生的总分和平均分
整型数组score,存放学生成绩
整型数组sum,计算得到的每个学生的总分
实型数组aver,计算得到的每个学生的平均分
voidGetSumAver(intscore[][COURSE],intn,intsum[],floataver[])
sum[i]=0;
sum[i]=sum[i]+score[i][j];
aver[i]=(float)sum[i]/COURSE;
按总分成绩由高到低排出成绩的名次
长整型数组num,存放学生学号
整型数组sum,存放每个学生的总分
实型数组aver,存放每个学生的平均分
voidSort(longnum[],intscore[][COURSE],intn,intsum[],floataver[])
inti,j,k,m;
inttemp1;
longtemp2;
floattemp3;
n-1;
k=i;
for(j=i+1;
j++)
if(sum[j]>
sum[k])k=j;
if(k!
=i)
temp1=sum[k];
sum[k]=sum[i];
sum[i]=temp1;
temp2=num[k];
num[k]=num[i];
num[i]=temp2;
temp3=aver[k];
aver[k]=aver[i];
aver[i]=temp3;
for(m=0;
m<
m++)
{
temp1=score[k][m];
score[k][m]=score[i][m];
score[i][m]=temp1;
}
}
打印出名次表,表格包括学生编号、各科分数、总分和平均分
voidPrint(longnum[],intscore[][COURSE],intn,intsum[],
floataver[])
NO\t|MT\tEN\tPH\tSUM\tAVER\n"
----------------------------------------------------\n"
%4ld\t|"
num[i]);
%4d\t"
score[i][j]);
%5d\t%5.0f\n"
sum[i],aver[i]);
在学号数组中顺序查找学生的学号
整型变量n,存放学生人数
长整型变量x,存放待查找学生的学号
找到时,返回学生学号再学号数组中的下标位置
否则,返回值-1
*/
intSearch(longnum[],intn,longx)
if(num[i]==x)return(i);
return(-1);
5↙
MTENPH
99010808783↙
99011909593↙
99012677887↙
99013768981↙
99014605645↙
NO
|
MT
EN
PH
SUM
AVER
--------------------------------------------------------------
99010
80
87
83
250
99011
90
95
93
278
99012
67
78
232
77
99013
76
89
81
246
82
99014
60
56
45
161
54
99012↙
NOMTENPHSUMAVER
49901267787423277