输入某课程10个成绩(百分制),(1)将其排名次(第一名到第十名输出;(2)又输入一个成绩,将其有序插入在十个成绩之中,按名次(到第十一名)输出。

输入某课程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;
} 

img