yangzhixiaohuli 发表于 2023-11-23 13:29:37

要求实现用选择排序法将分数从高到低排序(并输出每趟排序结果)的函数

从键盘输入某班学生某门课程的成绩(每班人数最多不超过40人),当输入为负值时,表示输入结束。本题要求实现用选择排序法将分数从高到低排序(并输出每趟排序结果)的函数。

函数接口定义:
void DataSort(int score[], int n);

其中 score 是用户传入的学生成绩数组, n是学生人数。

裁判测试程序样例:
#include <stdio.h>
#define N 40
int ReadScore(int score[]);
void DataSort(int score[], int n);
void PrintScore(int score[], int n);
int main()
{
    int score, n;
    n = ReadScore(score);
    printf("n=%d\n", n);
    if(n)
    { DataSort(score, n);
      printf("After sort: ");
      PrintScore(score, n);
    }
    return 0;
}

int ReadScore(int score[])
{
    int i = -1;
    do{
      i++;
      scanf("%d", &score);
    }while (score >= 0);
    return i;
}

/* 你的代码将被嵌在这里 */

void PrintScore(int score[], int n)
{
    int i;
    for (i=0; i<n; i++)
    {if (i!=0)printf(" ");
       printf("%d", score);
    }
    printf("\n");
}

输入样例:
64 85 73 99 92 -1

输出样例:
n=5
第1趟:99 85 73 64 92
第2趟:99 92 73 64 85
第3趟:99 92 85 64 73
第4趟:99 92 85 73 64
After sort: 99 92 85 73 64

这题怎么写

FishC_GPT 发表于 2023-11-23 13:30:20

#include <stdio.h>

void DataSort(int score[], int n) {
    int i, j, temp;
   
    for (i = 0; i < n - 1; i++) {
      for (j = 0; j < n - i - 1; j++) {
            if (score < score) {
                temp = score;
                score = score;
                score = temp;
            }
      }
      // 输出每趟排序结果
      for (j = 0; j < n; j++) {
            printf("%d ", score);
      }
      printf("\n");
    }
}

int main() {
    int score;
    int n = 0;
   
    // 读入分数,直到输入为负值结束
    while (1) {
      scanf("%d", &score);
      if (score < 0) {
            break;
      }
      n++;
      if (n == 40) {
            break;
      }
    }
   
    printf("n=%d\n", n);
   
    if (n > 0) {
      DataSort(score, n);
      printf("After sort: ");
      for (int i = 0; i < n; i++) {
            printf("%d ", score);
      }
      printf("\n");
    }
   
    return 0;
}
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 要求实现用选择排序法将分数从高到低排序(并输出每趟排序结果)的函数