c语言数组有关的操作

输入某游戏大赛10个队伍的名称(以字符串:如good good study),队伍过关数(整数),耗时数(如:90分钟)。输出排行榜(包括过关数、耗时,队伍名称)。
排行规则:
①先以过关数为标准。
②过关数一样的以时间为标准。
③过关数、时间一样的以队伍名称的首字母为标准。

定义又给结构体存放队伍信息,代码如下,望采纳

#include <stdio.h>
#include <string.h>

struct team {
    char name[50];
    int pass;
    int time;
};

int main() {
    struct team teams[10];
    int i, j;

    // 输入10个队伍信息
    for (i = 0; i < 10; i++) {
        printf("请输入第%d支队伍的名称、过关数和耗时(以空格分隔):", i + 1);
        scanf("%s %d %d", teams[i].name, &teams[i].pass, &teams[i].time);
    }

    // 排序
    for (i = 0; i < 10 - 1; i++) {
        for (j = i + 1; j < 10; j++) {
            if (teams[i].pass < teams[j].pass || (teams[i].pass == teams[j].pass && teams[i].time > teams[j].time) ||
                (teams[i].pass == teams[j].pass && teams[i].time == teams[j].time && strcmp(teams[i].name, teams[j].name) > 0)) {
                struct team temp = teams[i];
                teams[i] = teams[j];
                teams[j] = temp;
            }
        }
    }

    // 输出排行榜
    printf("排行榜:\n");
    for (i = 0; i < 10; i++) {
        printf("%d. 队伍名称:%s,过关数:%d,耗时:%d\n", i + 1, teams[i].name, teams[i].pass, teams[i].time);
    }

    return 0;
}

运行结果

img

就是要三层排序,字符串比较用strcmp
队伍定义一个结构体

#include <stdio.h>
typedef struct _team
{
    char name[100];
    int num;
    int times;
}team;

int main()
{
    team t[10],i,j,temp,change;
    for(i=0;i<10;i++)
    {
        printf("输入第%d个队伍的名称,过关数和耗时数:",i+1);
        gets(t[i].name);
        scanf("%d%d",&t[i].num,&t[i].times);
    }
    for(i=0;i<9;i++)
    {
        for(j=0;j<9-i;j++)
        {
             change = 0;
             if(t[j].num < t[j+1].num)
                  change = 1;
             else if(t[j].num == t[j+1].num)
             {
                  if(t[j].times > t[j+1].times)
                        change = 1;
                  else if(t[j].times == t[j+1].times)
                  {
                        if(strcmp(t[j].name,t[j+1].name) > 0)
                            change = 1;
                  }
             }
             if(change == 1)
             {
                  temp =  t[j];
                  t[j] = t[j+1];
                  t[j+1] = temp;
             }
        }
        if(change == 0)
              break;
    }
    for(i=0;i<10;i++)
        printf("第%d名: 队伍:%s 过关数:%d 耗时数:%d\n",i+1,t[i].name,t[i].num,t[i].times);
}

#include <stdio.h>
#include <string.h>

struct Team {
    char name[50];
    int pass;
    int time;
};

void sort(Team teams[], int n) {
    int i, j;
    Team temp;
    for (i = 0; i < n - 1; i++) {
        for (j = i + 1; j < n; j++) {
            if (teams[i].pass < teams[j].pass) {
                temp = teams[i];
                teams[i] = teams[j];
                teams[j] = temp;
            } else if (teams[i].pass == teams[j].pass) {
                if (teams[i].time > teams[j].time) {
                    temp = teams[i];
                    teams[i] = teams[j];
                    teams[j] = temp;
                } else if (teams[i].time == teams[j].time) {
                    if (strcmp(teams[i].name, teams[j].name) > 0) {
                        temp = teams[i];
                        teams[i] = teams[j];
                        teams[j] = temp;
                    }
                }
            }
        }
    }
}

int main() {
    Team teams[10];
    int i;
    for (i = 0; i < 10; i++) {
        printf("请输入第%d个队伍的名称,过关数和耗时\n", i + 1);
        scanf("%s %d %d", teams[i].name, &teams[i].pass, &teams[i].time);
    }
    sort(teams, 10);
    printf("排名\\t队伍名称\\t过关数\\t耗时\\n");
    for (i = 0; i < 10; i++) {
        printf("%d\\t%s\\t\\t%d\\t%d\\n", i + 1, teams[i].name, teams[i].pass, teams[i].time);
    }
    return 0;
}

输入实例代码 团队几 闯关数 时间就可以运行成功了