#define N 30
int Average(int score[], int n)/* Average()函数原型 */
void ReadScore(int score[], long num[],int n)/* ReadScore()函数原型 */
void DataSort(int score[], long num[], int n)
void PrintScore(int score[], long num[], int n)
void DataNum(int score[], long num[], int n)
void PrintNum(int score[], long num[], int n)
void SearchNum(int score[],long num[],int n)
void Statistics(int score[], int n)
void List(int score[], long num[], int n)
int main()
{
int choice,n,score[N], aver=0,i,sum=0
long num[N]
do
{
printf("1: Append record\n")
printf("2: Caculate total and average score of course\n")
printf("3: Sort in descending order by score\n")
printf("4: Sort in ascending order by number\n")
printf("5: Search by number\n")
printf("6: Statistic analysisc\n")
printf("7: List record\n")
printf("0: Exit\n")
scanf("%d",&choice)
switch(choice)
{
case 1:printf("Total students are:")
scanf("%d",&n)
ReadScore (score,num,n)
break
case 2:aver = Average(score, n)
printf("Average score is %d\n",aver)
for (i=0i<ni++)
{
sum += score[i]
}
printf("Caculate total score is %d\n",sum)
break
case 3:DataSort(score,num,n)
printf("Sorted scores :\n")
printf(" number:score: \n")
PrintScore(score,num,n)
break
case 4:DataNum(score,num,n)
printf("Sorted number :\n")
printf(" number:score: \n")
PrintNum(score,num,n)
break
case 5:SearchNum(score,num,n)
break
case 6:Statistics(score, n)
break
case 7:List(score,num,n)
break
case 0:break
}
}while(choice!=0)
return 0
}
void ReadScore(int score[], long num[],int n)
{
int i
for(i=0i<ni++)
{
printf("Input student's ID and score:")
scanf("%ld%d",&num[i],&score[i])
}
}
/* 2、函数功能:计算课程的总分和平均分 */
int Average(int score[], int n) /* Average()函数定义 */
{
int i, sum = 0
for (i=0i<ni++)
{
sum += score[i]
}
return sum / n
}
/* 3、函数功能:成绩由高到低排序 */
void DataNum(int score[], long num[], int n)
{
int i,j,k,temp1
long temp2
for(i=0i<n-1i++)
{
k=i
for(j=i+1j<nj++)
{
if (score[j]>score[k])
{
k=j
}
}
if(k!=i)
{
temp1=score[k]score[k]=score[i]score[i]=temp1
temp2=num[k]num[k]=num[i]num[i]=temp2
}
}
}
/* 函数功能:显示排序后学生学号和成绩 */
void PrintNum(int score[], long num[], int n)
{
int i
for(i=0i<ni++)
{
printf(" %10ld%4d\n",num[i],score[i])
}
}
/* 4、函数功能:学号由小到大排序 */
void DataSort(int score[], long num[], int n)
{
int i,j,k,temp1
long temp2
for(i=0i<n-1i++)
{
k=i
for(j=i+1j<nj++)
{
if (num[j]<num[k])
{
k=j
}
}
if(k!=i)
{
temp1=num[k]num[k]=num[i]num[i]=temp1
temp2=score[k]score[k]=score[i]score[i]=temp2
}
}
}
/* 函数功能:显示排序后学生学号和成绩 */
void PrintScore(int score[], long num[], int n)
{
int i
for(i=0i<ni++)
{
printf(" %10ld%4d\n",num[i],score[i])
}
}
/* 5、函数功能:按学号查询学生排名及其成绩*/
void SearchNum(int score[],long num[],int n)
{
long number
int i
printf("Please input the number you want to search:")
scanf("%ld",&number)
for(i=0i<ni++)
{
if(num[i]==number)
{
printf("%ld %d\n",num[i],score[i])
return
}
}
printf("\nNot found!\n")
}
/* 6、函数功能:统计个人类别的人数以及所占的百分比*/
void Statistics(int score[], int n)
{
int i,a=0,b=0,c=0,d=0,e=0
for(i=0i<ni++)
{
if(score[i]>=90)
{
a++
}
else if(score[i]>=80)
{
b++
}
else if(score[i]>=70)
{
c++
}
else if(score[i]>=60)
{
d++
}
else
{
e++
}
}
printf("优秀人数:%d\t占:%.3f%%\n良好人数:%d\t占:%.3f%%\n中等人数:%d\t占:%.3f%%\n及格人数:%d\t占:%.3f%%\n不及格人数:%d\t占:%.3f%%\n",a,(float)100*a/n,b,(float)100*b/n,c,(float)100*c/n,d,(float)100*d/n,e,(float)100*e/n)
}
/* 7、函数功能:输入学生学号、成绩、总分、平均分*/
void List(int score[], long num[], int n)
{
int i, j=0
for(i=0i<ni++)
{
printf("学号:%ld\t考试成绩:%d\n",num[i],score[i])
j+=score[i]
}
printf("课程总分:%d\n平均分:%.3f\n",j,(float)j/n)
}
《03 00 C语言 全59讲 主讲-苏小红 哈尔滨工业大学》百度网盘资源免费下载
链接: https://pan.baidu.com/s/1YAxqTBta2f0LJoGW2eytGw
?pwd=riuy 提取码: riuy03 00 C语言 全59讲 主讲-苏小红 哈尔滨工业大学|各学科 学习视频目录|1-30讲|课程目录.txt|C语言哈工大教材 苏小红.jpg|9.flv|8.flv|7.flv|6.flv|5.flv|4.flv|30.flv|3.flv|29.flv|28.flv
不知道你说的是不是这一次实验
2.2.7 实验7:二维数组和函数综合编程练习
成绩排名次
某班期末考试科目为数学(MT)、英语(EN)和物理(PH),有最多不超过30人参加考试。考试后要求:
(1)计算每个学生的总分和平均分;
(2)按总分成绩由高到低排出成绩的名次;
(3)打印出名次表,表格内包括学生编号、各科分数、总分和平均分;
(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数。
【思考题】 请读者思考如下问题。
① 如果增加一个要求:要求按照学生的学号由小到大对学号、成绩等信息进行排序,那么程序如何修改呢?
② 如果要求程序运行后先打印出一个菜单,提示用户选择:成绩录入、成绩排序、成绩查找,在选择某项功能后执行相应的 *** 作,那么程序如何修改呢?
答案
#include <stdio.h>
#define STU 30
#define COURSE 3
void Input(long num[],int score[][COURSE],int n)
void GetSumAver(int score[][COURSE],int n,int sum[],float aver[])
void Sort(long num[],int score[][COURSE],int n,int sum[],float aver[])
void Print(long num[],int score[][COURSE],int n,int sum[],float aver[])
int Search(long num[], int n, long x)
main()
{
int n, score[STU][COURSE], sum[STU], pos
long num[STU], x
float aver[STU]
printf("Please enter the total number of the students(n<=30):")
scanf("%d", &n) /*输入参加考试的学生人数*/
printf("Enter No. and score as: MT EN PH\n")
Input(num, score, n) /*输入学生成绩*/
GetSumAver(score, n, sum, aver) /*计算总分和平均分*/
printf("Before sort:\n")
Print(num, score, n, sum, aver)
Sort(num, score, n, sum, aver) /*排名次*/
printf("After sort:\n")
Print(num, score, n, sum, aver)
printf("Please enter searching number:")
scanf("%ld", &x) /*以长整型格式输入待查找学生的学号*/
pos = Search(num, n, x) /*名次查询*/
if (pos != -1)
{
printf("position:\t NO \t MT \t EN \t PH \t SUM \t AVER\n")
printf("%8d\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("Not found!\n")
}
}
/* 函数功能:输入某班学生期末考试三门课程成绩
函数参数:长整型数组num,存放学生学号
整型数组score,存放学生成绩
整型变量n,存放学生人数
函数返回值:无
*/
void Input(long num[], int score[][COURSE], int n)
{
int i, j
for (i=0i<ni++)
{
scanf("%ld", &num[i])
for (j=0j<COURSEj++)
{
scanf("%d", &score[i][j])
}
}
}
/* 函数功能:计算每个学生的总分和平均分
函数参数: 整型数组score,存放学生成绩
整型变量n,存放学生人数
整型数组sum,计算得到的每个学生的总分
实型数组aver,计算得到的每个学生的平均分
函数返回值:无
*/
void GetSumAver(int score[][COURSE], int n, int sum[], float aver[])
{
int i, j
for (i=0i<ni++)
{
sum[i] = 0
for (j=0j<COURSEj++)
{
sum[i] = sum[i] + score[i][j]
}
aver[i] = (float)sum[i] / COURSE
}
}
/* 函数功能:按总分成绩由高到低排出成绩的名次
函数参数:长整型数组num,存放学生学号
整型数组score,存放学生成绩
整型变量n,存放学生人数
整型数组sum,存放每个学生的总分
实型数组aver,存放每个学生的平均分
函数返回值:无
*/
void Sort(long num[],int score[][COURSE], int n, int sum[], float aver[])
{
int i, j, k, m
int temp1
long temp2
float temp3
for (i=0i<n-1i++)
{
k = i
for (j=i+1j<nj++)
{
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=0m<COURSEm++)
{
temp1 = score[k][m]
score[k][m] = score[i][m]
score[i][m] = temp1
}
}
}
}
/* 函数功能: 打印名次表,表格内包括学生编号、各科分数、总分和平均分
函数参数: 长整型数组num,存放学生学号
整型数组score,存放学生成绩
整型变量n,存放学生人数
整型数组sum,存放每个学生的总分
实型数组aver,存放每个学生的平均分
函数返回值:无
*/
void Print(long num[], int score[][COURSE], int n,
int sum[], float aver[])
{
int i, j
printf(" NO \t| MT \t EN \t PH \t SUM \t AVER\n")
printf("----------------------------------------------------\n")
for (i=0i<ni++)
{
printf("%ld\t| ", num[i])
for (j=0j<COURSEj++)
{
printf("%4d\t", score[i][j])
}
printf("%5d\t%5.0f\n", sum[i], aver[i])
}
}
/* 函数功能:在学号数组中顺序查找学生的学号
函数参数:长整型数组num,存放学生学号
整型变量n,存放学生人数
长整型变量x,存放待查找学生的学号
函数返回值:找到时,返回学生学号在学号数组中的下标位置,否则返回值-1
*/
int Search(long num[], int n, long x)
{
int i
for (i=0i<ni++)
{
if (num[i] == x) return(i)
}
return (-1)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)