国家奖牌榜

#include <stdio.h>
#include <stdlib.h>
//国家奖牌的定义
typedef struct
{
    char country[20];//国家名称
    int gold;//金牌数 
    int silver;//银牌数 
    int bronze;//铜牌数 
    int total;//奖牌总数 
}RcdType;
//顺序表结点结构的定义 
#define MAXSIZES 255
typedef struct
{
    RcdType r[MAXSIZES + 1];//r[0]闲置,存放国家奖牌信息
    int length;//顺序表长度 
}SqList;

//读入国家奖牌信息 
void input(SqList* L,int n);
RcdType searchCountry(L,countryName);
//显示国家奖牌信息 
void show(SqList L);

//按国家金牌数排序 
void goldSort(SqList* L);

//按奖牌总数排序 
void totalSort(SqList* L);
int main()
{
    SqList L;
    RcdType temp; 
    int n,select;
    char name[20];
    printf("请输入国家的个数:\n");
    scanf("%d",&n);
    input(&L,n);
    printf("\n");
    show(L);
    printf("请输入要查找的国家名称:\n");
    scanf("%s",temp.country);
    strcmp(name,temp.country);
    printf("\n");
    temp = searchCountry(L,temp.country);
    if(!strcmp(temp.country,"")) printf("%s信息不存在,无法查找。\n\n",name);
    else
    {
        printf("%s的奖牌信息:\n",temp.country);
        printf("Gold:%d Silver:%d Bronze:%d\n\n",temp.gold,temp.silver,temp.bronze);
    }
    printf("请输入排序规则:1、根据金牌数排序\t2、根据奖牌总数排序\n");
    scanf("%d",&select);
    switch(select)
    {
        case 1:
            goldSort(&L);
            break;
        case 2:
            totalSort(&L);
            break;
    }
    show(L);
    return 0;
}
void input(SqList* L,int n)
{
    int i;
    strcmp((*L).r[0].country,"");//标记是否查找成功 
    for(i = 1;i <= n;i++)
    {
        printf("请输入第%d个国家的相关信息:国家名、金牌数、银牌数、铜牌数\n",i);
        scanf("%s%d%d%d",(*L).r[i].country,&(*L).r[i].gold,&(*L).r[i].silver,&(*L).r[i].bronze);
        (*L).r[i].total = (*L).r[i].gold + (*L).r[i].silver + (*L).r[i].bronze;
    }
    //更新顺序表长度
    (*L).length = n;
}
void show(SqList L)
{
    int i;
    printf("Country\tGold\tSilver\tBronze\n");
    for(i = 1;i <= L.length;i++)
    {
        printf("%s\t%d\t%d\t%d\n",L.r[i].country,L.r[i].gold,L.r[i].silver,L.r[i].bronze);
    }
    printf("\n\n");
}
RcdType searchCountry(SqList L,char countryName[])
{
    int i;
    for(i = 1;i <= L.length;i++)
    {
        if(!strcmp(L.r[i].country,countryName)) return L.r[i];
    }
    return L.r[0];//未找到该国家信息 
}
void goldSort(SqList* L)
{
    // 大==>小
    int i,j;
    RcdType temp;
    for(i = 1;i < (*L).length;i++)
    {
        for(j = 1;j < (*L).length;j++)
        {
            //当前国家的金牌数小于下一个国家的金牌数,进行国家信息的交换。 
            if((*L).r[j].gold < (*L).r[j + 1].gold)
            {
                temp = (*L).r[j];
                (*L).r[j] = (*L).r[j + 1];
                (*L).r[j + 1] = temp;
            }
        }
    }
}
void totalSort(SqList* L)
{
    // 大==>小
    int i,j,curTotal,nextTotal;
    RcdType temp;
    for(i = 1;i < (*L).length;i++)
    {
        for(j = 1;j < (*L).length;j++)
        {
            curTotal = 0; 
            nextTotal = 0;
            curTotal += (*L).r[j].gold + (*L).r[j].silver + (*L).r[j].bronze;
            nextTotal += (*L).r[j + 1].gold + (*L).r[j + 1].silver + (*L).r[j + 1].bronze;
            if(curTotal < nextTotal)
            {
                temp = (*L).r[j];
                (*L).r[j] = (*L).r[j + 1];
                (*L).r[j + 1] = temp;
            }
        }
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值