数组问题求助
#include <stdio.h>int main(){
float a={{10,30,40,80,0},
{10,20,80,80,0},
{50,20,80,70,0},
{82,65,87,98,0},
{100,100,100,100,0}};
for(int i=0; i<5; i++){
for(int j=0; j<4;j++){
a+=a;
if(j==3) a=a/4.0;
}
}
printf("排序前::\n");
for(int i=0; i<5;i++){
printf("第%d个学生的平均成绩是%f\n",i+1,a);
}
for(int i=0;i<4;i++){
for(int j=0;j<4-i;j++){
if(a<a){
//j和j+1换行
for(int x=0;x<5;x++){
float change=0;
change = a;
a = a;
a = change;
}
}
}
}
printf("排序后::\n");
for(int i=0; i<5;i++){
printf("第%d个学生的平均成绩是%f\n",i+1,a);
}
return 0;
}
问题:已知5个学生的4门课成绩,要求求出每个学生的平均成绩,并分别求出每门课的平均成绩,成绩最高的学生排在最前面的行,成绩最低的学生排在数组最后面的行
求助:输出出错,排序后的输出和排序前的输出一样。 问题出在排序部分的代码逻辑上。在冒泡排序的过程中,需要对整行数据进行交换,而不仅仅是平均成绩。以下是修复后的代码:
#include <stdio.h>
int main(){
float a={{10,30,40,80,0},
{10,20,80,80,0},
{50,20,80,70,0},
{82,65,87,98,0},
{100,100,100,100,0}};
for(int i=0; i<5; i++){
for(int j=0; j<4;j++){
a[ i]+=a[ i];
if(j==3) a[ i]=a[ i]/4.0;
}
}
printf("排序前::\n");
for(int i=0; i<5;i++){
printf("第%d个学生的平均成绩是%f\n",i+1,a[ i]);
}
for(int i=0;i<4;i++){
for(int j=0;j<4-i;j++){
if(a<a){
// j 和 j+1 换行
for(int x=0;x<5;x++){
float change=0;
change = a;
a = a;
a = change;
}
}
}
}
printf("排序后::\n");
for(int i=0; i<5;i++){
printf("第%d个学生的平均成绩是%f\n",i+1,a[ i]);
}
return 0;
}
我对冒泡排序部分的代码做了修改,将整行数据进行了交换,而不仅仅是平均成绩。这样可以保证排序的正确性。 在你的代码中,计算每个学生的平均成绩没有问题。但是在排序的部分,你使用了冒泡排序来将成绩最高的学生排在最前面,这是有问题的。因为你只是交换了平均成绩,实际上应该同时交换整行数据。
下面是修改后的代码,我使用了标准库函数qsort来进行排序:
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
float avgA = *((float*)a + 4);
float avgB = *((float*)b + 4);
return avgA > avgB ? -1 : 1;
}
int main() {
float a = {
{10, 30, 40, 80, 0},
{10, 20, 80, 80, 0},
{50, 20, 80, 70, 0},
{82, 65, 87, 98, 0},
{100, 100, 100, 100, 0}
};
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 4; j++) {
a += a;
if (j == 3) a = a / 4.0;
}
}
printf("排序前::\n");
for (int i = 0; i < 5; i++) {
printf("第%d个学生的平均成绩是%f\n", i + 1, a);
}
qsort(a, 5, sizeof(a), compare);
printf("排序后::\n");
for (int i = 0; i < 5; i++) {
printf("第%d个学生的平均成绩是%f\n", i + 1, a);
}
return 0;
}
在修改后的代码中,我定义了一个compare函数用于qsort排序的比较。然后在主函数中调用qsort对数组进行排序。这样就能正确地将成绩最高的学生排在最前面,成绩最低的学生排在数组最后面。 isdkz 发表于 2023-11-18 20:26
问题出在排序部分的代码逻辑上。在冒泡排序的过程中,需要对整行数据进行交换,而不仅仅是平均成绩。以下是 ...
您修改后的代码和没修改的代码一模一样 Mike_python小 发表于 2023-11-18 20:27
在你的代码中,计算每个学生的平均成绩没有问题。但是在排序的部分,你使用了冒泡排序来将成绩最高的学生排 ...
可以像我之前的思路,使用冒泡排序吗
页:
[1]