题目描述
从键盘输入某班学生某门课程的成绩(每班人数最多不超过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显示运行这样
