不要让别人为你的愚蠢埋单! @QQ列表某人!
【问题描述】
一个小组五位同学,选修了相同的4门功课。请输入5位同学各4门的成绩,计算每位同学的总分。
然后按总分对二维数组排序,并输出排序后的每位学生信息。
5位同学的学号信息如下表:
学号 S1 S2 S3 S4 total
1001
1002
1003
1004
1005
【实验提示】
定义的二维数组需要保存学号与总分信息。建议定义5列6列的二维数组,第0列存储学号。第5列存储总分。学号以初始化方式录入数组第0列。
注意,排序交换数据时需要一整行都交换。
【输入形式】
按行输入5位学生的4个成绩数据
【输出形式】
以二维表格形式输出5位学生的学号、4门成绩、总分,一行输出一名学生信息
【样例输入】
Input 1001 4 score:1 2 3 4
Input 1002 4 score:55 65 75 85
Input 1003 4 score:33 44 55 66
Input 1004 4 score:10 20 30 40
Input 1005 4 score:81 85 91 95
【样例输出】
1001 1 2 3 4 10
1002 55 65 75 85 280
1003 33 44 55 66 198
1004 10 20 30 40 100
1005 81 85 91 95 352
========sort========
1005 81 85 91 95 352
1002 55 65 75 85 280
1003 33 44 55 66 198
1004 10 20 30 40 100
1001 1 2 3 4 10
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct student
{
int Arr[4];
int ID;
int tot;
}stu;
void _swap( int *a, int *b )
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void f( stu w[5] )
{
int i, j, tmp;
for( i = 0; i < 5; i ++ )
{
for( j = i; j < 5; j ++ )
{
if( w[i].tot < w[j].tot )
{
//printf( "交换前:\nw[%d].ID = %d, w[%d].ID = %d\n", i, w[i].ID, j, w[j].ID );
_swap( &w[i].Arr[0], &w[j].Arr[0] );
_swap( &w[i].Arr[1], &w[j].Arr[1] );
_swap( &w[i].Arr[2], &w[j].Arr[2] );
_swap( &w[i].Arr[3], &w[j].Arr[3] );
_swap( &w[i].tot, &w[j].tot );
_swap( &w[i].ID, &w[j].ID );
//printf( "交换后:\nw[%d].ID = %d, w[%d].ID = %d\n", i, w[i].ID, j, w[j].ID );
}
}
}
}
int main()
{
stu S[5];
int i, j;
for( i = 0; i < 5; i ++ )
{
printf( "Input %d 4 score:", 10001 + i );
scanf( "%d%d%d%d", &S[i].Arr[0], &S[i].Arr[1], &S[i].Arr[2], &S[i].Arr[3] );
S[i].ID = 10001 + i;
S[i].tot = S[i].Arr[0] + S[i].Arr[1] + S[i].Arr[2] + S[i].Arr[3];
}
for( i = 0; i < 5; i ++ )
{
printf( "%d %d %d %d %d %d\n", S[i].ID, S[i].Arr[0], S[i].Arr[1],
S[i].Arr[2], S[i].Arr[3], S[i].tot );
}
printf( "========sort========\n");
f( S );
for( j = 0; j < 5; j ++ )
{
printf( "%d %d %d %d %d %d\n", S[j].ID, S[j].Arr[0], S[j].Arr[1],
S[j].Arr[2], S[j].Arr[3], S[j].tot );
}
return 0;
}