C语言最终排名,程序有一点点排的不对

img

img


#define _CRT_SECURE_NO_WARNINGS
#define N 10000
#include
struct stu
{
    int num;
    int ID[N];
    int M[N];
};
int main()
{
    struct stu a;
    printf("请输入队伍伍数:");
    scanf("%d", &(a.num));
    printf("请依次输入ID和做题数:");
    for (int i = 0; i < (a.num); i++)
    {
        scanf("%d", &(a.ID[i]));
        scanf("%d", &(a.M[i]));
    
    }
    printf("%d个\n", a.num);
    int t;
    for (int b = 0; b < (a.num)-1; b++)
    {
        for (int c = 0; c < (a.num) - 1 - b; c++)
        {
            if (a.M[b] < a.M[b + 1])
            {
                t = a.M[b + 1];
                a.M[b + 1] = a.M[b];
                a.M[b]=t;
            }
        }
    }
    for (int j = 0; j < (a.num); j++)
    {
        printf("%d %d\n", a.ID[j], a.M[j]);
    }
    return 0;
    
}

很想知道结构体中的那两个数组,一个去冒泡排序了,然后输出之后就是队的ID和他们自己做的题数对应不上了,我希望他们俩是绑定在一起的,就是一个队,他做了几个题,做的题的个数去冒泡排序了,然后我希望最后输出的是冒泡排序后队ID也能和他们做的题的个数给对上。而且我还有一个问题,那个做的题的个数一旦输入超过个位数,就比如说十位数23,他就没法冒泡排序,他就自己主动不参与冒泡排序,就是每次十位数的位置都不对。希望解答,感谢

  • 冒泡有问题,应该对 内循环 进行冒泡

img

帮你改了一下:

#define _CRT_SECURE_NO_WARNINGS
#define N 10000
#include<stdio.h>
struct stu
{
    int num;
    int ID[N];
    int M[N];
};
int main()
{
    struct stu a;
    printf("请输入队伍伍数:");
    scanf("%d", &(a.num));
    printf("请依次输入ID和做题数:\n");
    for (int i = 0; i < (a.num); i++)
    {
        scanf("%d", &(a.ID[i]));
        scanf("%d", &(a.M[i]));
    
    }
    printf("%d个\n", a.num);
    int t;
    int m;
    for (int b = 0; b < (a.num)-1; b++)
    {
        for (int c = 0; c < (a.num) - 1 - b; c++)
        {
            if (a.M[c] < a.M[c + 1])
            {
                t = a.M[c + 1];
                a.M[c + 1] = a.M[c];
                a.M[c]=t;

                m = a.ID[c + 1];
                a.ID[c + 1] = a.ID[c];
                a.ID[c] = m;
            }
        }
    }
    for (int j = 0; j < (a.num); j++)
    {
        printf("%d %d\n", a.ID[j], a.M[j]);
    }
    return 0;
    
}


如有帮助,欢迎点赞+采纳哈!

应该定义为结构体数组。struct stu a[]
按你这个M交换后,ID也要交换,不然就对不上了