输入5位同学3门功课的成绩,进行:每位同学的总成绩、每门功课的总成绩与平均成绩、每门功课的最高成绩与最低成绩、学生平均成绩排序等综合统计。
程序设计如下:
#include "stdio.h"
/* 定义变量,便于全局修改数组长度 */
#define e 5
#define r 3
void main()
{
float isux[e][r], sum1, sum2, aver[e], maxh[e], minh[e], maxl[r], minl[r];
int q, w, t;
for(q=0; q<e; q++)
{
for(w=0; w<r; w++)
{
printf("请输入第%d位同学的第%d门功课成绩(0-100):\n",q+1,w+1);
scanf("%f",&isux[q][w]);
/* 非法数据,重新输入 */
while(isux[q][w]>100 || isux[q][w]<0)
{
printf("请重新输入第%d位同学的第%d门功课成绩(0-100):\n",q+1,w+1);
scanf("%f",&isux[q][w]);
}
}
}
printf("\n");
/* 循环输出所有同学三门功课的成绩 */
printf("\n【所有同学三门功课的成绩表】:\n");
for(q=0; q<e; q++)
{
for(w=0; w<r; w++)
{
printf("%.2f分\t\t",isux[q][w]);
}
printf("\n\n");
}
/* 输出每位同学三门功课成绩中的最高分和最低分 */
for(q=0; q<e; q++)
{
// 把每行第一个数组元素赋值给最大值和最小值,然后进行数据比对
maxh[q] = isux[q][0];
minh[q] = isux[q][0];
for(w=1; w<r; w++)
{
if(maxh[q]<isux[q][w])
{
maxh[q]=isux[q][w]; // 保证maxh是每一行的最大值
}
if(minh[q]>isux[q][w])
{
minh[q]=isux[q][w]; // 保证minh是每一行的最小值
}
}
}
printf("\n【每位同学三门功课成绩中的最高分和最低分】");
for(q=0; q<e; q++)
{
printf("\n第%d位同学的三门功课成绩中最高分为:%.2f分,最低分为:%.2f分\n",q+1,maxh[q],minh[q]);
}
printf("\n\n");
/* 求每位同学三门功课的总分及平均分 */
printf("【每位同学三门功课的总分及平均分】\n");
for(q=0; q<e; q++)
{
sum1 = 0;
for(w=0; w<r; w++)
{
sum1 += isux[q][w];
}
aver[q] = sum1/3;
printf("第%d位同学三门功课的总分为:%.2f分,平均分为:%.2f分\n\n",q+1,sum1,aver[q]);
}
/* 将所有同学三门功课的平均成绩由高到低进行排序 */
for(q=0; q<e-1; q++)
{
for(w=0; w<e-1-q; w++)
{
if(aver[w]<aver[w+1])
{
t=aver[w];
aver[w]=aver[w+1];
aver[w+1]=t;
}
}
}
printf("\n【所有同学三门功课的平均成绩由高到低分别为】:\n");
for(q=0; q<e; q++)
{
printf("%.2f分\t\t",aver[q]);
}
printf("\n\n");
/* 输出每门功课成绩中的最高分和最低分 */
for(q=0; q<r; q++)
{
// 把每列第一个数组元素赋值给最大值和最小值,然后进行数据比对
maxl[q]=isux[0][q];
minl[q]=isux[0][q];
for(w=1; w<e; w++)
{
if(maxl[q]<isux[w][q])
{
maxl[q]=isux[w][q]; // 保证maxl是每一列的最大值
}
if(minl[q]>isux[w][q]) // 保证minl是每一列的最小值
{
minl[q]=isux[w][q];
}
}
}
printf("\n【每门功课成绩中的最高分和最低分】");
for(q=0; q<r; q++)
{
printf("\n第%d门功课的成绩中最高分为:%.2f分,最低分为:%.2f分\n",q+1,maxl[q],minl[q]);
}
printf("\n");
/* 计算出每门功课的平均成绩 */
printf("\n【每门功课的平均成绩】");
for(w=0; w<r; w++)
{
sum2 = 0;
for(q=0; q<e; q++)
{
sum2 += isux[q][w];
}
printf("\n第%d门功课的平均成绩为:%.2f分\n",w+1,sum2/5);
}
printf("\n");
/* 将三门功课中低于每门功课平均分的成绩统计并打印出来 */
printf("\n【三门功课中低于每门功课平均分的成绩】");
for(q=0; q<r; q++)
{
printf("\n第%d门功课的成绩中低于该门功课平均分的同学的成绩有:\n",q+1);
for(w=1; w<e; w++)
{
if(isux[w][q]<sum2/5)
{
printf("%.2f分\n",isux[w][q]);
}
}
}
printf("\n");
/* 将将未及格的成绩统计并打印出来 */
printf("\n【三门功课中未及格的成绩】");
for(q=0; q<r; q++)
{
printf("\n第%d门功课中未及格的成绩有:\n",q+1);
for(w=1; w<e; w++)
{
if(isux[w][q]<60)
{
printf("%.2f分\n",isux[w][q]);
}
}
}
printf("\n");
}