一.题目描述:

     输入一个正整数N代表国家个数,紧接着输入国家名称,该国家获得金牌数目,获得银牌数目,获得铜牌数目。然后根据输入输出国家获奖排名,排名规则是首先按金牌排名,如果金牌相同则比较银牌,如果银牌也相同,则比较铜牌数目,否则按照输入顺序输出排名。

二.输入输出样例:

输入:                                                         

China   32 28 34

England  12 34 22

France 23 33 2

Japan 12 34 22

Rusia 23 43 0

 输出:

China

Rusia

France

England

Japan

三.解题思想:首先这题要求用c语言实现,所以可以采用c语言中的结构体来存储各个国家的名称以及获奖情况,然后进行排序。常见的排序算法有很多,这题中采用冒泡排序,只不过所用的冒泡排序是添加了一些条件的排序。

关于冒泡排序:外循环为排序趟数,len个元素需要进行len-1趟。内循环为每趟需要比较的次数,第i趟需要比较len-i次。注意在写两层循环的时候,这样写:for(int i=0;i<len;i++) for(int j=0;j<len-1-j;j++)。

四.带注释的代码:

#include<stdio.h>
#include<string.h>
//定义一个结构体
struct AwardState
{char str[21];          //用来存储国家名称int  G;             //用来存储金牌数量 int  S;             //用来存储银牌数量 int  B;             //用来存储铜牌数量
}ST[21];//定义了一个结构体数组 int main()
{struct AwardState Temp;//定义一个结构题变量,用来交换 int n;//输入一个数n,表示国家数量scanf("%d", &n);//输入各个国家名称以及每个国家获奖情况 int i=0;//循环输入n个国家的名称以及获奖情况 for(;i<n;i++){scanf("%s",&ST[i].str);scanf("%d",&ST[i].G);scanf("%d",&ST[i].S);scanf("%d",&ST[i].B);}//进行冒泡排序int j=0;for(;j<n;j++){    int e=0;for(;e<n-1-j;e++){if(ST[e].G<ST[e+1].G)//前面国家的金牌数量小于后面的国家 {Temp=ST[e];ST[e]=ST[e+1];ST[e+1]=Temp;}if(ST[e].G==ST[e+1].G)//前面国家的金牌数量等于后面的国家 {if(ST[e].S<ST[e+1].S) //银牌数量不等 {Temp=ST[e];ST[e]=ST[e+1];ST[e+1]=Temp;}if(ST[e].S==ST[e+1].S) //银牌数量相等 {if(ST[e].B<ST[e+1].B) //铜牌数量不等 {Temp=ST[e];ST[e]=ST[e+1];ST[e+1]=Temp;}if(ST[e].B==ST[e+1].B){if(strcmp(ST[e].str,ST[e+1].str)>0){Temp=ST[e];ST[e]=ST[e+1];ST[e+1]=Temp; }}}}}}//输出排序后的结果 int k=0;for(;k<n;k++) {printf("%s\n",ST[k].str);//只输出国家名称 }} 

四.程序运行结果:

利用C语言结构体解决“各个国家体育竞赛获奖排名”问题相关推荐

  1. 利用C语言结构体实现学生成绩录入系统

    利用C语言结构体实现学生成绩录入系统 ##功能介绍 密码功能嵌入于主函数中,初始密码为:123456(可根据需要修改) 输入1可以调用add函数对学生的基本信息以及成绩进行输入 输入2则调用print ...

  2. 利用c语言结构体和union实现类似c++的public,private的实现

    最近在看strongswan源代码,看到strongswan的代码框架很有意思,用C语言实现类的思想.当我们编写完一个模块,我们需要提供的是H的文件给其他模块使用,我们希望H文件中就只能包含一些公有函 ...

  3. 利用c语言结构体实现通讯录

    用结构体实现一个 可以用来存储1000个人的信息的通讯录,每个人的信息包括: 姓名.性别.年龄.电话.住址 程序如下: #include<stdio.h> #include<stri ...

  4. 用c语言输出11位电话号码,用C语言结构体解决 “从键盘输入五个用户的数据,包括姓名和电话号码,要求按姓名排序后,输出用户数据...

    满意答案 //希望我的回答对你的学习有帮助 #include #include struct Student { char Name[10];//学生的姓名,使用字符数组存储,长度为 10 char  ...

  5. 关于c语言结构体偏移的一点思考

    注:此处只是利用了编译器的特性来计算结构体偏移 这句话就一笔带过,说得有点牵强附会.以后有时间自己再详细了解一下编译器的特性... more exceptional c++ 中文版 26页 https ...

  6. C 语言结构体引用,引用 C 语言结构体学习

    引用 C 语言结构体学习 这篇文章很基础,是个学习的好资料,所以收藏了: 1.直接声明结构体变量: struct{ int length; int width; }box1; 这样就声明了一个名为bo ...

  7. C语言坐标结构,关于c语言结构体偏移的一点思考(一)

    1 引言 而在实际开发过程中,比较常见的场景是给定结构体变量的初始地址,如何访问结构体内每一个成员变量?这类问题的核心是如何快速的计算结构体成员变量的偏移地址.本文将和大家一起探讨结构体内成员变量偏移 ...

  8. c语言 结构体 ppt,C语言结构体ppt课件

    <C语言结构体ppt课件>由会员分享,可在线阅读,更多相关<C语言结构体ppt课件(25页珍藏版)>请在人人文库网上搜索. 1.01,02,03,9.1 结构体,9.2 共用体 ...

  9. ARM汇编语言实现peek()_ARM汇编之访问C语言结构体数据

    前言 本文的写作目的在于装逼,没有要产生实际价值的意思. 前几天在做编译器的项目,有一个项目团队成员一直在问我ARM汇编能不能读C语言的结构体.我心想,我这生成ARM汇编的代码是用C++写的呀,又不是 ...

最新文章

  1. 10th blog:Object
  2. ubuntu+idea intellij配置android开发环境
  3. 宏定义函数container_of的解释
  4. 前端开发 什么是网页 什么是html
  5. 微软BI 之SSIS 系列 - 理解Data Flow Task 中的同步与异步, 阻塞,半阻塞和全阻塞以及Buffer 缓存概念...
  6. linux 基础命令汇总
  7. UTM坐标转GPS方法分享
  8. 使用Python的pandas库操作Excel
  9. 遥感影像几何校正方法
  10. 计算机的睡眠和休眠设置密码,怎么设置笔记本电脑睡眠唤醒密码
  11. CentOS系统编译部署nginx-http-flv-module模块搭建流媒体服务器
  12. 南航里程每年清空吗_速度用!南航里程即将大量贬值!还有每年3张南航处卡!...
  13. 苹果笔记本什么系统_苹果笔记本领域双系统
  14. SDL版仙剑奇侠传读后感
  15. 设计一款理财产品并发布推广
  16. ArcBlock ⑦ 月报 | 产品一天半迭代1个版本 全球开发者社区建设启动
  17. Oracle 12c新特性--LREG进程专门负责注册实例服务
  18. 无线通信与云智能技术结合的ISE智能家居套件
  19. 使用hexo搭建一个博客超详细步骤
  20. 顺差和逆差,哪个好点?

热门文章

  1. 中国经济预计2028年超过美国!为什么?看解读!
  2. 电脑视频打开后提示服务器错误或者百度云盘视频白屏的问题
  3. 怎么对物联网卡进行充值?
  4. SolidWorks绘图及Unity模型导入
  5. 哈工大计算机出国到哪学大学,哈尔滨工业大学公派研究生出国留学,985院校的研究生公费出国留学容易吗?...
  6. 现实迷途 第十五章 损兵折将
  7. 数学建模全球定位系统
  8. macOS删除自带 ABC 输入法的方法
  9. Android游戏帧分析工具,android性能跟踪分析工具系列 - TraceView
  10. java计算机毕业设计沙县小吃点餐系统源码+数据库+系统+lw文档+mybatis+运行部署