c语言程序设计 学生成绩管理

由键盘输入n(n不超过1000)个学生m(m不超过10)门课的成绩,要求(1)将学生按总分由高到低排序,按格式要求输出排序后的结果(一行一个学生信息);(2)输出每一门成绩的平均分,留一位小数。
【第一组自测数据】
【键盘输入】
5 3
90 70 75
89 67 78
87 65 98
97 86 77
88 96 82
【正确输出】
88 96 82
97 86 77
87 65 98
90 70 75
89 67 78
90.2 76.8 82
一、题目与运行说明
称述程序设计的任务,程序的功能是什么?强调的是程序要做什么?并按要求明确说明:
(1)程序中所使用的主要变量
(2)数据输入的形式和输入值的范围
(3)数据输出的形式
(4)程序所能达到的功能及出错处理

二、程序设计思路
说明实现程序的主要思路,要求写出主要的算法,建议画出流程图。

三、程序清单
列出程序,代码中变量定义与重要语句部分加上注释。

发邮箱[email protected]
#include <stdio.h>
typedef struct student
{
int mark[10];
int sum;
}student;
void main()
{
student stu[1000];
student temp;
student avg;
int n, m, i, j;
printf("");
scanf("%d", &n);
printf("");
scanf("%d", &m);
for (i = 0; i != m; ++i)
{
avg.mark[i] = 0;
}
for (i = 0; i != n; ++i)
{
stu[i].sum = 0;
for (j = 0; j != m; ++j)
{
scanf("%d", &(stu[i].mark[j]));
stu[i].sum += stu[i].mark[j];
avg.mark[j] += stu[i].mark[j];
}
}
for (i = 0; i != n; ++i)
{
for (j = i + 1; j != n; ++j)
{
if (stu[i].sum < stu[j].sum)
{
temp = stu[j];
stu[j] = stu[i];
stu[i] = temp;
}
}
}
for (i = 0; i != n; ++i)
{
for (j = 0; j != m; ++j)
{
printf("%d ", stu[i].mark[j]);
}
printf("\n");
}
for (i = 0; i != m; ++i)
{
printf("%.1f ", avg.mark[i] / (float)n);
}
printf("\n");
}
找到了程序,求下面那三个问题的答案。

已发送,请注意查收:

一、
程序的设计任务与功能:输入几组学生的信息按总成绩大小排序后输出,并输出各科成绩的平均值.
二、
动态定义了一个二维数组,可以根据用户的需要确定大小。
在定义二维数组是,每一维都比实际大一,分别用来储蓄每个学生的总成绩与各科平均值。
主要算法在于一个冒泡排序,此冒泡排序是以每个学生的信息为单位处理的。
#include<stdio.h>
void main()
{
int n,m,i,j,c; /*n、m分别表示二维数组大小(实际更大),由用户输入,i、j做为输出数组数值时的下标*/
puts("请输入学生数n(n<=1000)和课程数m(m<=10)");
scanf("%d%d",&n,&m);
int **a=new int*[n+1];
for(i=0;i<=n;i++)
a[i]=new int[m+1];//完成了二维数组的动态赋值。
for(i=0;i<n;i++) //信息录入
{
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
}
for(i=0;i<n;i++) //将每个学生的各科成绩相加
{
a[i][m]=0;
for(j=0;j<m;j++)
a[i][m]+=a[i][j];
}
for(i=0;i<m;i++) //各科总成绩初始化为0
a[n][i]=0;
for(i=n;i>1;i--) //冒泡排序,按总成绩大小给学生排序
for(j=0;j<i-1;j++)
if(a[j][m]>a[j+1][m])
for(c=0;c<=m;c++)
{
int temp;
temp=a[j][c];
a[j][c]=a[j+1][c];
a[j+1][c]=temp;
}
puts("输出为:");
for(i=n-1;i>=0;i--) //输入排序后的学生成绩
{
for(j=0;j<m;j++)
{
printf("%5d",a[i][j]);
a[n][j]+=a[i][j];
}
puts("");
}
for(i=0;i<m;i++) //输出各科总成绩平均值
printf("%5.1f",1.0*a[n][i]/n);
puts("");
}
温馨提示:答案为网友推荐,仅供参考