hcycy08042 2023-12-12 21:53 采纳率: 0%
浏览 145
已结题

6-1冒泡排序函数题

题目描述
从键盘输入某班学生某门课程的成绩(每班人数最多不超过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;
    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[i]);
    }while (score[i] >= 0);
    return i;
}

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

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

输入样例:
64 85 73 99 92 -1
输出样例:
n=5
第1趟:85 73 99 92 64
第2趟:85 99 92 73 64
第3趟:99 92 85 73 64
After sort: 99 92 85 73 64
输入样例:
92 88 85 76 62 59 -1
输出样例:
n=6
After sort: 92 88 85 76 62 59
以下是我写的代码

#include<string.h>
void DataSort(int score[], int n){
    int q1[41],mid,count=0;
    for(int j=0;score[j]>=0;j++){
        if(score[j]<score[j+1]){
            count++;
            printf("第%d趟: ",count);
            for(int m=j;score[m]<score[m+1];m++){
                mid=score[m];
                score[m]=score[m+1];
                score[m+1]=mid;
            }
            PrintScore(score,n);
            j=-1;
            continue;
        }
    }
    return 0;
}

但是pta显示运行这样

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月20日
    • 创建了问题 12月12日