我有5個學生的名字及其3個科目的成績,我計算了他們的3個課程的平均值。但是之後我需要將他們的數據(名稱,3門課程和平均成績)從最高平均分到最低平均分。 任何人都可以告訴我我的代碼有什麼問題嗎? 這裏是我的代碼...如何在C++中對二維數組進行排序
# include <iostream>
# include <string>
# include <iomanip>
using namespace std;
void read(string names[],double grades[][4],int n);
void average(double grades[][4], int n);
void sort(string names[],double grades[][4], int n);
int main()
{
string names[5]; double grades[5][4];
cout<<fixed<<showpoint<<setprecision (2);
cout<<" please enter the names and grades(math,phy,cpp) for 5 students\n";
read(names,grades,5);
average(grades,5);
sort(names,grades,5);
for(int rows=0; rows<5; rows++)
{
cout<<names[rows]<<"\t";
for(int col=0; col<4; col++)
{
cout<<grades[rows][col]<<"\t";
}
cout<<endl;
}
system("pause");
return 0;
}
void read(string names[],double grades[][4],int n)
{
for(int rows=0; rows<n; rows++)
{
cin>>names[rows];
for(int col=0; col<3; col++)
{
cin>>grades[rows][col];
}
}
system("cls");
}
void average(double grades[][4], int n)
{
double sum;
for(int rows=0; rows<n; rows++)
{
sum=0.0;
for(int col=0; col<3;col++)
{
sum=sum+grades[rows][col];
}
grades[rows][3]=sum/3;
}
}
void sort(string names[],double grades[][4], int n)
{
double temp;int end=n;string swap_names;
for(int rows=0; rows<end; rows++)
{
if(grades[rows][3]> grades[rows+1][3])
{
for(int col=0; col<4;col++)
{
temp=grades[rows+1][col];
grades[rows+1][col]=grades[rows][col];
grades[rows][col]=temp;
}
swap_names=names[rows+1];
names[rows+1]=names[rows];
names[rows]=swap_names;
}
}
}
謝謝。
一個建議:包含自己的姓名,年級,平均學生創建一個類。然後將這些對象存儲在一個向量中。然後對自定義函數或可調用對象使用'std :: sort()'。 – trojanfoe
歡迎來到Stack Overflow!要求人們發現代碼中的錯誤並不是特別有效。您應該使用調試器(或者添加打印語句)來分析問題,追蹤程序的進度,並將其與預期發生的情況進行比較。只要兩者發生分歧,那麼你就發現了你的問題。 (然後如果有必要,你應該構建一個[最小測試用例](http://sscce.org)。) –