求高手帮忙告知一下下面这段程序哪儿有错?
我是一个大一新生自学了C现在在自学C++下面是我小打小闹写的一段程序。目的是实现再输入端输入5个学生4门功课的成绩,然后求出(1)每个学生的总分。(2)每门课程的平均分。(3)输出总分最高的学生的姓名和总分数。
我写了下面一段比较繁琐的程序实现了前两个,最后一个好像出了问题。不知出在哪儿?求高手告知一下。本人不胜感激。
#include<iostream>
using namespace std;
#define MAX 5
#define SUB 4
#define NAME 20
#define NULL 0
typedef struct
{
int subject[SUB];
int sum;
char str[NAME];
}student;
student STU[MAX];
student *s=STU;
double average[SUB];
void cin_score(student *s)
{
int i,j;
for(i=0;i<MAX;i++)
{
cin>>STU[i].str;
for(j=0;j<SUB;j++)
cin>>STU[i].subject[j];
}
}
void calculate_sum(student STU[])
{
int i,j;
for(i=0;i<MAX;i++)
{
STU[i].sum=0;
for(j=0;j<SUB;j++)
STU[i].sum=STU[i].sum+STU[i].subject[j];
}
}
void cout_sum(student *s)
{
int i;
for(i=0;i<MAX;i++)
{
cout<<STU[i].sum<<" ";
cout<<STU[i].str<<endl;;
}
cout<<endl;
}
void average_subject(student *s,double average[])
{
int sum=0,i,j;
for(j=0;j<SUB;j++)
{
for(i=0;i<=MAX;i++)
{
sum=sum+STU[i].subject[j];
}
average[j]=1.0*sum/MAX;
sum=0;
}
}
void print_average(double average[])
{
int i;
for(i=0;i<SUB;i++)
{
cout<<average[i]<<endl;
}
}
void sort_score(student *s)
{
int highest=STU[0].sum;
int i;
student *m=NULL;
for(i=0;i<MAX;i++)
{
if(highest<STU[i].sum)
highest=STU[i].sum;
*m=STU[i];
}
cout<<highest<<m->str<<endl;
}
void main()
{
cout<<"Please input the score of every student:"<<endl;
student *p=STU;
cin_score(p);
calculate_sum(p);
cout_sum(p);
average_subject(p,average);
print_average(average);
sort_score(STU);
}
[解决办法]
用指针记录下谁最大就行了。
- C/C++ code
#include<iostream>using namespace std;#define MAX 5#define SUB 4#define NAME 20#define NULL 0typedef struct { int subject[SUB]; int sum; char str[NAME];}student;student STU[MAX];student *s=STU;double average[SUB];void cin_score(student *s){ int i,j; for(i=0;i<MAX;i++) { cin>>STU[i].str; for(j=0;j<SUB;j++) cin>>STU[i].subject[j]; }}void calculate_sum(student STU[]){ int i,j; for(i=0;i<MAX;i++) { STU[i].sum=0; for(j=0;j<SUB;j++) STU[i].sum=STU[i].sum+STU[i].subject[j]; }}void cout_sum(student *s){ int i; for(i=0;i<MAX;i++) { cout<<STU[i].sum<<" "; cout<<STU[i].str<<endl;; } cout<<endl;}void average_subject(student *s,double average[]){ int sum=0,i,j; for(j=0;j<SUB;j++) { for(i=0;i<=MAX;i++) { sum=sum+STU[i].subject[j]; } average[j]=1.0*sum/MAX; sum=0; }}void print_average(double average[]){ int i; for(i=0;i<SUB;i++) { cout<<average[i]<<endl; }}void sort_score(student *s){ int highest=STU[0].sum; int i; student *m=NULL; for(i=0;i<MAX;i++) { if(highest<STU[i].sum){ highest=STU[i].sum; m = &STU[i]; //将m指向分数最高的学生就行了 //*m=STU[i]; //m里面什么都没有,*m就出错了 } } cout<<highest<<m->str<<endl;}void main(){ cout<<"Please input the score of every student:"<<endl; student *p=STU; cin_score(p); calculate_sum(p); cout_sum(p); average_subject(p,average); print_average(average); sort_score(STU);}
[解决办法]
- C/C++ code
#include<iostream>using namespace std;#define MAX 5#define SUB 4#define NAME 20#define NULL 0typedef struct { int subject[SUB]; int sum; char str[NAME];}student;student STU[MAX];student *s=STU;double average[SUB];void cin_score(student *s){ int i,j; for(i=0;i<MAX;i++) { cin>>STU[i].str; for(j=0;j<SUB;j++) cin>>STU[i].subject[j]; }}void calculate_sum(student STU[]){ int i,j; for(i=0;i<MAX;i++) { STU[i].sum=0; for(j=0;j<SUB;j++) STU[i].sum=STU[i].sum+STU[i].subject[j]; }}void cout_sum(student *s){ int i; for(i=0;i<MAX;i++) { cout<<STU[i].str<<": "; cout<<STU[i].sum<<" "; } cout<<endl;}void average_subject(student *s,double average[]){ int sum=0,i,j; for(j=0;j<SUB;j++) { for(i=0;i<=MAX;i++) { sum=sum+STU[i].subject[j]; } average[j]=1.0*sum/MAX; sum=0; }}void print_average(double average[]){ int i; for(i=0;i<SUB;i++) { cout<<average[i]<<endl; }}void sort_score(student *s){ int highest=STU[0].sum; int i; student *m=NULL; for(i=0;i<MAX;i++) { if(highest<STU[i].sum) { highest=STU[i].sum; m=&STU[i]; } } cout<<m->str<<":"<<highest<<endl;}void main(){ cout<<"Please input the score of every student:"<<endl; student *p=STU; cin_score(p); cout<<"sum:"<<endl; calculate_sum(p); cout_sum(p); cout<<"average:"<<endl; average_subject(p,average); print_average(average); cout<<"max:"<<endl; sort_score(STU);}
[解决办法]
你学过C++的容器么? 用map vector容器 来做会比较轻松 好做些!