回 帖 发 新 帖 刷新版面

主题:请大家帮忙看看 哪里出错了

// test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream.h>

class Student
{
public:
    int Number;
    char Name[10];
    float Chinese,Math,English;
    void sort(int n,float *pt,Student *p,Student *pr)       /*插入法排序*/
    {
        Student m;
        m=*pr;
        while (n>0&&(*(pt+n)<*(pt+n-1)))
        {
            *(p+n)=*(p+n-1);
            n--;
        }
        *(p+n)=m;
    }
};

int main()
{
    int i;
    float ct=0,mt=0,et=0,tt=0,total[5];
    Student stu[5];
    for (i=0;i<5;i++)
    {
        cout<<"请分别输入第"<<i+1<<"名学生的学号 姓名 语文成绩 数学成绩 英语成绩:"<<endl;
        cin>>stu[i].Number>>stu[i].Name>>stu[i].Chinese>>stu[i].Math>>stu[i].English;
        total[i]=stu[i].Chinese+stu[i].Math+stu[i].English;
        stu[i].sort(i,total,stu,&stu[i]);
    }
        cout<<"  "<<"学号  姓名   语文   数学   英语   总成绩"<<endl;
    for (i=0;i<5;i++)
    {
        total[i]=stu[i].Chinese+stu[i].Math+stu[i].English;
        cout<<"    "<<stu[i].Number<<"     "<<stu[i].Name<<"     "<<stu[i].Chinese<<"      "<<stu[i].Math<<"      "<<stu[i].English<<"      "<<total[i]<<endl;
    }
    for (i=0;i<5;i++)
    {
        ct+=stu[i].Chinese;
        mt+=stu[i].Math;
        et+=stu[i].English;
        tt+=total[i];
    }
    cout<<"语文平均成绩为:"<<ct/5<<endl;
    cout<<"数学平均成绩为:"<<mt/5<<endl;
    cout<<"英语平均成绩为:"<<et/5<<endl;
    cout<<"总平均成绩为:  "<<tt/5<<endl;
    return 0;
}

这个题就是要求输入5个学生的语文 数学 英语成绩,最后根据三科的总成绩按顺序排列  可是我排完序并不总是正确 有些数据可以 有些就不行 附件里有两张图片例子 请大家帮忙分析下哪里出错了 怎么改 (本人基础差 请多多指教)

回复列表 (共4个回复)

沙发

在分析你代码的问题之前,我想说一下我自己对你的题目的理解:
我认为你所实现的类本质上只是一个student结构体,方法是硬安上去的,更好风格的写法也许是:
对于一个student类来说,应该至少具有4个私有属性和5个公开方法
4个私有属性,即3门课的成绩和平均成绩
5个公开方法,即
构造函数,用来输入学生成绩,并计算平均成绩
取得学生语文成绩的函数
取得学生数学成绩的函数
取得学生英语成绩的函数
取得学生平均成绩的函数

排序函数,不知道你的题目是什么要求了。

板凳


[em28]虚心接受,如果还有什么可以改进的地方或是有什么建议请尽量提出,谢谢

3 楼

你的图呢……

4 楼


图没传上去 只是些例子 我就不传了  [em8]

我来回复

您尚未登录,请登录后再回复。点此登录或注册