下次你再临脚来找我,我去你麻痹!

版权声明:分享、借鉴或使用刁肥宅的劳动成果请务必注明出处!刁肥宅保留追究剽窃者的一切权利! https://blog.csdn.net/u25th_engineer/article/details/84504819

  不要让别人为你的愚蠢埋单!    @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;
}
图 测试样例运行结果

猜你喜欢

转载自blog.csdn.net/u25th_engineer/article/details/84504819
今日推荐