前言
今天我们来说一下数组的简单应用。
一、争夺前五名
题目来源:
描述
期中考试开始了,大家都想取得好成绩,争夺前五名。从键盘输入 n 个学生成绩,输出每组排在前五高的成绩。
数据范围:5≤n≤50 ,成绩采取百分制并不会出现负数
输入描述:
两行,第一行输入一个整数,表示n个学生(>=5),第二行输入n个学生成绩(整数表示,范围0~100),用空格分隔。
输出描述:
一行,输出成绩最高的前五个,用空格分隔。
二、解题过程
1.分析问题
题目的关键在于,多组输入后怎么比较大小,这时我们就要用到数组了,把所有数字装数组里,再比较大小,把数组里的数按大小排好序,再按顺序输出。
2.代码如下
#include<stdio.h> int main(){ int n,a,max=0; scanf("%d\n",&n); //输入n,表示数组大小。 int c[n]; //用n初始数组 for(int i=0;i<n;i++){ scanf("%d",&c[i]); //遍历输入 } for(int j=0;j<n;j++){ for(int k=j+1;k<n;k++){ //k=j+1,表示数组后一位和前一位比较 if(c[j]<c[k]){ max=c[j]; //准备换位置,大在前,小在后,方便后面输出 c[j]=c[k]; //先赋值给max,作为中间量,然后把前一位的量改为后一位的量 c[k]=max; //后一位的量变成前一位的,用max来传递。 } } } for(int w=0;w<5;w++){ //拍好大小后,挨个输出五个 printf("%d ",c[w]); } return 0; }
问题的核心有两个:
1、用两个循环来让数组一前一后比较大小。
2、通过赋值来把两个值交换。max这个中间量一定不能少!没有中间量,在前一位赋值为位一个之后,前一位原来的值就找不回来了,这时后一位就不能赋值为前一位了。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了数组基本排列的问题,希望对大家有帮助~