c++结构体问题
#include<iostream>
using namespace std;
struct stu
{int no;
float eng,math,phy,sum;
int rewarding;
};
void sum_1(stu s[],int n)
{for(int i=0;i<n;i++)
s[i].sum=s[i].eng+s[i].math+s[i].phy;//计算每一个学生的总分
}
//按总分排序
void sort(stu s[],int n)
{stu temp;
for(int i=0;i<n;i++)
for(int j=0;j<n-i;j++)
{if(s[j].sum>s[j+1].sum)
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
//排名
void red(stu s[],int n)
{for(int i=0;i<n;i++)
s[i].rewarding=i+1;
}
//打印输出
void print(stu s[],int n)
{for(int i=0;i<n;i++)
cout<<s[i].no<<s[i].eng<<s[i].eng<<s[i].phy<<s[i].sum<<s[i].rewarding<<'\n';
}
void main()
{stu s[2];
for(int i=0;i<2;i++)
cin>>s[i].no>>s[i].eng>>s[i].math>>s[i].phy;
sum_1(s,2);
sort(s,2);
red(s,2);
print(s,2);
system("pause");
}
运行没错无错误,但就是不能真确输出,为什么?怎么改?
[解决办法]
太乱了,整理了下
#include<iostream>using namespace std;struct stu{ int no; float eng,math,phy,sum; int rewarding;};void sum_1(stu s[],int n){ for(int i=0;i<n;i++) s[i].sum=s[i].eng+s[i].math+s[i].phy;//计算每一个学生的总分}//按总分排序void sort(stu s[],int n){ stu temp; for(int i=0;i<n;i++) for(int j=0;j<n-i;j++) { if(s[j].sum>s[j+1].sum) temp=s[j]; s[j]=s[j+1]; s[j+1]=temp; }}//排名void red(stu s[],int n){ for(int i=0;i<n;i++) s[i].rewarding=i+1;}//打印输出void print(stu s[],int n){ for(int i=0;i<n;i++) cout<<s[i].no<<s[i].eng<<s[i].eng<<s[i].phy<<s[i].sum<<s[i].rewarding<<'\n';}void main(){ stu s[2]; for(int i=0;i<2;i++) cin>>s[i].no>>s[i].eng>>s[i].math>>s[i].phy; sum_1(s,2); sort(s,2); red(s,2); print(s,2); system("pause");}
[解决办法]
#include<iostream>using namespace std;struct stu{ int no; float eng,math,phy,sum; int rewarding;};void sum_1(stu s[],int n){ for(int i=0;i<n;i++) { s[i].sum=s[i].eng+s[i].math+s[i].phy;//计算每一个学生的总分 } }//按总分排序void sort(stu s[],int n){ stu temp; for(int i=0;i<n;i++) { for(int j=0;j<n-i;j++) { /// 楼主你这个地方有错 j + 1 可能大于等于n,数组溢出 if((j + 1 ) < n && s[j].sum>s[j+1].sum) { temp=s[j]; /// 这里你交换元素,这三句话应该是放在if语句里面的。 s[j]=s[j+1]; s[j+1]=temp; } } } }//排名void red(stu s[],int n){ for(int i=0;i<n;i++) s[i].rewarding=i+1;}//打印输出void print(stu s[],int n){ for(int i=0;i<n;i++) cout<<s[i].no<<" "<<s[i].eng<<" "<<s[i].eng<<" "<<s[i].phy<<" "<<s[i].sum<<" "<<s[i].rewarding<<endl;}void main(){ stu s[2]; for(int i=0;i<2;i++) { cin>>s[i].no>>s[i].eng>>s[i].math>>s[i].phy; } sum_1(s,2); sort(s,2); red(s,2); print(s,2); system("pause");}