#include<iostream>
using namespace std;
struct student{
char id[10];
char name[20];
int score[4];
double average;
};
void input(student*,int );
void sort(student*,int );
void show(student*,int );
int main()
{int n;
cout<<"請輸入學生數量:";
cin>>n;
struct student*p=new struct student[n];
if(!p){
cout<<"allocation error!\n";
return 0;
}
input(p,n);
sort(p,n);
show(p,n);
delete []p;
return 0;
}
void input(student*s,int n)
{int i,j,sum=0;
for( i=0;i<n;i++)
{cout<<"請輸入第"<<i+1<<"位學生的學號:";
cin>>s[i].id;
cout<<"請輸入第"<<i+1<<"位學生的姓名:";
cin>>s[i].name;
cout<<"請輸入請輸入第"<<i+1<<"位學生的四門科成績:";
for(int j=0;j<4;j++)
cin>>s[i].score[j];
for(j=0;j<4;j++)
sum+=s[i].score[j];
s[i].average=sum/4;
cout<<"第"<<i+1<<"名同學的平均成績:"<<s[i].average<<endl;
}
}
void sort(student*s,int n)
{int i,j;
student temp;
for(j=0;j<n;j++)
for(i=0;i<n-j;i++)
if(s[i].average<s[i+1].average)
{temp=s[i];
s[i]=s[i+1];
s[i+1]=temp;
}
}
void show(student*s,int n)
{
cout<<"平均成績排序結果為"<<endl;
for(int i=0;i<n;i++)
{cout<<s[i].name <<endl;
cout<<s[i].average <<endl;}
}
uj5u.com熱心網友回復:
for(j=0;j<4;j++)sum+=s[i].score[j];
s[i].average=sum/4;
cout<<"第"<<i+1<<"名同學的平均成績:"<<s[i].average<<endl;
sum = 0; //在這里加上這一句,把sum歸0,因為幾個學生都用 sum 來統計總分,不歸0的話, 上一個學生的 sum值會帶入到下一個學生
// 中。在本例中,第一個學生的 sum = 10+10+10+10 = 40, 緊接著又接收到第二個學生的 20+20+20+20 = 120,所以第二
//個學生的平均成績就成了 120/4 = 30
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/123378.html
標籤:新手樂園
上一篇:Fibonacci數列的問題
下一篇:純新人求問一道題C++編程題
