输入某课程10个成绩(百分制),(1)将其排名次(第一名到第十名输出;(2)又输入一个成绩,将其有序插入在十个成绩之中,按名次(到第十一名)输出。
获取10个分数输入后,可以用某种排序方法从高到低排序分数;
插入的分数,分两种情况:如果此分数小于等于第十名的分数,则这个分数放置到数组最后一个位置即可;其他情况,可以把这个分数逐个与数组元素相比,如果大于等于当前位置的分数,则把此位置及其后面的分数后移一个位置,此位置放置插入的分数即可有序插入分数。
代码如下:
#include <stdio.h>
int main(void){
int scores[11];
int i=0;
// 从输入获取10个分数
while(i<10){
printf("请输入第%d个学生的成绩:",i+1);
scanf("%d",&scores[i]);
i++;
}
int j,temp;
// 用选择排序从高到低排序分数
for(i=0;i<9;i++){
for(j=i+1;j<10;j++){
if(scores[i]<scores[j]){
temp=scores[i];
scores[i]=scores[j];
scores[j]=temp;
}
}
}
// 打印第1名到第10名
printf("\n从第一名到第十名依次为:\n");
for(i=0;i<10;i++){
printf("%d ",scores[i]);
}
// 获取插入的分数
printf("\n\n请再输入一个成绩:");
scanf("%d",&temp);
if(temp<=scores[9]){ // 当要插入的分数 小于等于第十名的成绩时,则把这个分数放置到数组最后一个位置即可
scores[10]=temp;
} else{ // 其他情况
for(i=0;i<10;i++){
// 如果要插入的分数大于等于当前分数,则将当前分数及其后面的分数后移一个位置,此位置放置插入的分数
if(temp>=scores[i]){
for(j=10;j>i;j--){
scores[j]=scores[j-1];
}
scores[j]=temp;
break;
}
}
}
// 打印插入分数后的结果
printf("\n插入一个成绩后,第一名到第十一名依次为:\n");
for(i=0;i<11;i++){
printf("%d ",scores[i]);
}
return 0;
}