注册 登录
编程论坛 C++教室

额~哪位大神能帮菜鸟我找出问题呐?(我想说我是照着答案打得。。。。)

Love小小白 发布于 2012-12-05 09:42, 445 次点击
题目是“有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入10个学生数据,要求打印出3门课的总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课成绩、平均分数)
我的循环输入都是对的,可是输出显示的学号、姓名、成绩、平均分为什么都是 0 啊??!!!
#include<iostream>
#include<iomanip>
using namespace std;
const int n=10;
struct student
{
    char num[6];
    char name[8];
    int score[4];
    float avr;
}stu[n];
int main()
{
    int i,j,max,maxi,sum;
    float average;
    for(i=0;i<n;i++)
    {
        cout<<"input scores of student"<<i+1<<endl;
        cout<<"NO:";
        cin>>stu[i].num;
        cout<<"name:";
        cin>>stu[i].name;
        for(j=0;j<3;j++)
        {
            cout<<"score"<<j+1<<":";
            cin>>stu[i].score[j];
        }
        cout<<endl;
    }
    average=0;
    max=0;
    maxi=0;
    for(i=0;i<n;i++)
    {
        sum=0;
    for(j=0;j<3;j++)
        sum+=stu[i].score[j];
    stu[i].avr=sum/3.0;
    average+=stu[i].avr;
    if(sum>max)
    {
        max=sum;
        maxi=i;
    }
    }
    average/=n;
    cout<<" NO, name  score1    score2   score3    average"<<endl;
    for(i=0;i<n;i++)
        cout<<setw(3)<<stu[i].score[j]<<"   ";
    cout<<stu[i].avr<<endl;


    cout<<"average="<<average<<endl;
cout<<"The highest score is:"<<stu[maxi].name<<",score total:"<<max<<endl;
return 0;
}



6 回复
#2
mmmmmmmmmmmm2012-12-05 10:17
程序代码:
#include <iostream>
using namespace std;

int main(void)
{
    int score[6][3];//二位数组 存放6人3门功课的成绩及平均成绩
    int n=0;
    //收集成绩
    for (int i=0; i<6; i++)
    {
        cout<<"请输入第 "<<i+1<<" 位同学3门功课的成绩:"<<endl;
        for (int j=0; j<3; j++)
        {
            cout<<"请输入第"<<j+1<<" 门成绩: ";
            cin>>score[i][j];
        }
    }

    //输出成绩
    cout<<"请输入要查询成绩的同学序号(1-6),输入 0 结束查询";
    cin>>n;
    while (n)
    {
        n--;
        cout<<"序号为 "<<n<<" 的同学成绩如下:"<<endl;    //输出单科成绩
        for (int i=0; i<3; i++)
        {
            cout<<""<<i+1<<" 门成绩:";
            cout<<score[n][i]<<endl;
            if (i == 2)                                    //输出平均成绩
            {
                cout<<"平均成绩:";
                cout<<(score[n][0]+score[n][1]+score[n][2])/3<<endl;
            }
        }

        cout<<"请输入要查询成绩的同学序号(1-6),输入 0 结束查询";
        cin>>n;

    }

    return 0;
}
#3
rjsp2012-12-05 10:28
C++不像C++,C又不像C,你这么学下去就学费了,赶紧换书换老师吧
程序代码:
#include <iostream>
#include <string>

struct student
{
    size_t id;
    std::string name;
    double score[3];

    student() : id(0)
    {
        score[0] = 0.0;
        score[1] = 0.0;
        score[2] = 0.0;
    }

    double average() const
    {
        return (score[0]+score[1]+score[2])/3.0;
    }
};

std::ostream& operator<<( std::ostream& os, const student& s )
{
    return os
        << s.id << '\t'
        << s.name << '\t'
        << s.score[0] << '\t'
        << s.score[1] << '\t'
        << s.score[2] << '\t'
        << s.average();
}

using namespace std;

int main()
{
    const size_t n = 3;
    student stu[n];

    for( size_t i=0; i<n; ++i )
    {
        cout<<"input scores of student"<<i+1<<endl;
        cout<<"NO:";
        cin >> stu[i].id;
        cout<<"name:";
        cin>>stu[i].name;
        for( size_t j=0; j<3; ++j )
        {
            cout<<"score"<<j+1<<":";
            cin>>stu[i].score[j];
        }
        cout<<endl;
    }

    size_t maxindex = 0;

    cout<<"NO\tname\tscore1\tscore2\tscore3\taverage\n";
    for( size_t i=0; i<n; ++i )
    {
        cout << stu[i] << '\n';

        if( stu[i].average() > stu[maxindex].average() )
            maxindex = i;
    }
    cout<<endl;

    cout<<"The highest score is:\n";
    cout << stu[maxindex] << endl;

    return 0;
}

#4
Love小小白2012-12-05 10:29
额~大神,你。。。你确定看清我的题目了么?还是说我的表达能力有那么差么?它“要求打印出3门课的总平均成绩,以及最高分的学生的数据”。。。大神,在帮我看看吧>_<!!
#5
mmmmmmmmmmmm2012-12-05 11:10
向版主学习
#6
Love小小白2012-12-05 11:40
回复 3楼 rjsp
好的吧~~听从版主大人教诲。!然后。。。然后。。。。然后,您给的答案,偶看不懂。。。原谅偶吧。。。
#7
Love小小白2012-12-05 11:41
最后的答案貌似是这个。。。谢谢上面各位啦!!!


#include<iostream>
#include<iomanip>
using namespace std;
const int n=10;
struct student
{
    char num[6];
    char name[8];
    int score[4];
    float avr;
}stu[n];
int main()
{
    int i,j,max,maxi,sum;
    float average;
    for(i=0;i<n;i++)
    {
        cout<<"input scores of student"<<i+1<<endl;;
        cout<<"NO:";
        cin>>stu[i].num;
        cout<<"name:";
        cin>>stu[i].name;
        for(j=0;j<3;j++)
        {
            cout<<"score"<<j+1<<":";
            cin>>stu[i].score[j];
        }
        cout<<endl;
    }
    average=0;
    max=0;
    maxi=0;
    for(i=0;i<n;i++)
    {
        sum=0;
    for(j=0;j<3;j++)
        sum+=stu[i].score[j];
    stu[i].avr=sum/3.0;
    average+=stu[i].avr;
    if(sum>max)
    {
        max=sum;
        maxi=i;
    }
    }
    average/=n;
    cout<<"   NO   name   score1   score2   score3   average"<<endl;
    for(i=0;i<n;i++)
    {
        cout<<setw(8)<<stu[i].num<<"   "<<setw(10)<<stu[i].name<<" ";
        for(j=0;j<3;j++)
         cout<<setw(3)<<stu[i].score[j]<<" ";
        cout<<stu[i].avr<<endl;
    }
      cout<<"average="<<average<<endl;
      cout<<"The highest score is:"<<stu[maxi].name<<",score total:"<<max<<endl;
      return 0;
}
1