首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

c++结构体有关问题

2012-04-06 
c++结构体问题#includeiostreamusing namespace stdstruct stu{int nofloat eng,math,phy,sumint rew

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");
}
运行没错无错误,但就是不能真确输出,为什么?怎么改?

[解决办法]
太乱了,整理了下

C/C++ code
#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");}
[解决办法]
C/C++ code
#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");} 

热点排行