C++ 如何在C++;
我有5个学生的名字和他们3门课的成绩,我计算了他们3门课的平均成绩。但我需要根据他们的数据(姓名、3门课程的成绩和平均成绩)从平均成绩最高的一门到最低的一门进行排序。 谁能告诉我我的代码有什么问题吗? 这是我的密码C++ 如何在C++;,c++,visual-c++,C++,Visual C++,我有5个学生的名字和他们3门课的成绩,我计算了他们3门课的平均成绩。但我需要根据他们的数据(姓名、3门课程的成绩和平均成绩)从平均成绩最高的一门到最低的一门进行排序。 谁能告诉我我的代码有什么问题吗? 这是我的密码 # include <iostream> # include <string> # include <iomanip> using namespace std; void read(string names[],double grades[][4]
# 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;
无效读取(字符串名称[],双等级[][4],整数n);
无效平均值(双等级[][4],整数n);
无效排序(字符串名称[],双等级[][4],整数n);
int main()
{
字符串名称[5];双级[5][4];
CUT你的排序算法还没有完成。这是所谓的冒泡排序算法的一次迭代,请参阅更多细节。但是冒泡排序确实有相当差的性能,如果你的数据库很大,那么你应该真正考虑使用一个库中的排序,如一条注释中所建议的。
< P>问题是用你的<代码>排序。()
函数。冒泡排序是一种O(n2)排序,其中作为sort()
只需要O(n)正确的时间
请尝试此已更正的排序代码()
void排序(字符串名[],双等级[][4],整数n)
{
双温;
int end=n;
字符串交换名称;
对于(int rows1=0;rows1)一个建议:为该学生创建一个包含其姓名、成绩和平均值的类。然后将这些对象存储在向量中。然后使用std::sort()
使用自定义函数或可调用对象。欢迎使用堆栈溢出!要求人们发现代码中的错误不是特别有效。您应该使用调试器(或添加打印语句)要隔离问题,请跟踪程序的进度,并将其与预期发生的情况进行比较。一旦两者出现分歧,您就找到了问题。(然后,如果必要,您应该构建一个。)谢谢……我感谢您的帮助。它成功了。
void sort(string names[],double grades[][4], int n)
{
double temp;
int end=n;
string swap_names;
for(int rows1=0; rows1<end; rows1++)
{
for(int rows2=0; rows2<end; rows2++)
{
if(grades[rows1][3] < grades[rows2][3])
{
for(int i=0; i<4; i++)
{
temp=grades[rows1][i];
grades[rows1][i]=grades[rows2][i];
grades[rows2][i]=temp;
}
swap_names=names[rows1];
names[rows1]=names[rows2];
names[rows2]=swap_names;
}
}
}
}