回 帖 发 新 帖 刷新版面

主题:刚学c++ 这个程序总是出问题啊 求高手帮忙改

#include"iostream.h"
#define NULL 0
struct STU
{
    int number;
    float score[5];
    float ave;
};

float average(STU);//计算平均分
int search(int x,int number);//查找所输入学号的学生
int judge(STU,int);//判断大于等于85分的学生
void main()
{
    int i,j=0;
    int count=0;
    int number;
    char classes[5][10];//定位一个而为数组来储存科目名称
    
    cout<<"please input the number of students\n";//输入学生数量
    cin>>number;
    STU *student=new STU[number];//开辟内存
    cout<<"please input the names of 5 classes\n";//输入学生信息
    for(i=0;i<5;i++)
        cin>>classes[i];
    cout<<"please input the student number and scores of 5 classes\n";
    for(i=0;i<number;i++)
    {
        cin>>student[i].number;
        for(j=0;j<5;j++)
            cin>>student[i].score[j];
        cin>>student[i].ave;
    }
    
    cout<<"good students follow\n";
    cout<<"----------------------------------------------------------------\n";
    cout<<"student_number\t";
    for(i=0;i<5;i++)
    {
        cout<<classes[i];//输出储存科目名称
        cout<<"\t";
    }
    cout<<"averege\n";
    cout<<endl;
    while(j<number)
    {
        student[j].ave=average(student[j]);
        if(judge(student[i].score,number)==1||student[j].ave>90)
        {
            cout<<student[j].number<<"\t\t";
                for(i=0;i<5;i++)
                    cout<<student[j].score[i]<<"\t";
                cout<<student[j].ave;
            count++;
            cout<<endl;
        }
        j++;
    }
    cout<<"\n";
    cout<<"----------------------------------------------------------------\n";
    cout<<"there are "<<count<<" good students\n";
    cout<<"----------------------------------------------------------------\n";
    cout<<endl;
    cout<<"input the number of student you want to search\n";
    int xstudent;
    cin>>xstudent;
    int x=xstudent-1;
    if(search(xstudent,number)==0)
        cout<<"ERROR!!!";
    else
    {   cout<<"----------------------------------------------------------------\n";
        cout<<"student_number\t";
        for(i=0;i<5;i++)
        {
            cout<<classes[i];
            cout<<"\t";
        }
        cout<<"averege\n";
        cout<<"----------------------------------------------------------------\n";
        cout<<endl;
        cout<<student[x].number<<"\t\t";
        for(j=0;j<5;j++)
            cout<<student[x].score[j]<<"\t";
        cout<<student[x].ave;
        cout<<endl;
        cout<<"----------------------------------------------------------------\n";
        delete []student;//释放内存
    }
}

float average(STU student)
{
    int i;
    float sum=0;
    for(i=0;i<5;i++)
        sum+=student.score[i];
    return (sum/5);
}

int search(int xstudent,int number)
{
    if(xstudent>number||xstudent<0||xstudent==0)
        return 0;
    else
        return 1;
}

int judge(STU student[],int number)
{
    int i,j;
    for(i=0;i<number;i++)
        for(j=0;j<5;j++)
        {
            if((student[i].score[j]>85)||(student[i].score[j]==85))
                return 1;
            else
                return 0;
        }
}

回复列表 (共3个回复)

沙发

//看完你的程序,并不是很明确要你做什么。
1、char classes[5][10];这是二维数组,你是不是只能声明一个存放科目的数组,如果是那样只要声明为一维数组就可以,char classes[5];
2、cout<<"please input the names of 5 cleasses\n";//这里是输入五科的科名吧。
3、  for(i=0;i<number;i++)
{
    cin>>student[i].number;
    for(j=0;j<5;j++)
        cin>>student[i].score[j];
    cin>>student[i].ave;
}
这个循环是为了输入学生ID(number),和他五科的成绩,对吗?为什么还需要输入平均值,完全可以去掉,对于结构的ave在结构体声明时会初始为0,而且在average(student[j]);中计算了平均值。
5、  if(judge(student[i].score,number)==1||student[j].ave>90)
if语句中judge函数第一个参数是float类型,而在声明是是声明成struct类型,编译是通不过的。这有judge(student[i].score,number)这里应该是j吧。
6、int judge(STU student[],int number)这个函数是你要判断这个学生是否有满足85分的科目吗?还是应该是全部科目为85分以上。
7、循环考虑不细致。
while(j<number)
   {
       student[j].ave=average(student[j]);
       if(judge(student[i].score,number)==1||student[j].ave>90)
       {
           ....
       }
       
       ....
   }
while(j<number)中走了number次,而int judge(STU student[],int number)函数中时间复杂度又为number*5,这样这个循环在这里就有number*number*5的时间复杂度。
实际只需number*5就可以。
我就先指出这样,希望对你有帮助。

最好指明你的功能意图。

板凳

另外再补充一点:
for(j=0;j<5;j++)
            cin>>student[i].score[j];
结束后j=5;
while(j<number)这时while循环是从6开始了,如果number小于5的话,那么while永远为false。

3 楼

这是我根据你的程序来修改的,好学生的判断标准是各科为85分或者85分以上,或者平均成绩在90分以上,也可以根据学号来搜索这个学生在的成绩情况。
程序修改后如下:
#include"iostream.h"
#define NULL 0
struct STU
{
    int number;
    float score[5];
    float ave;
};

float average(struct STU);//计算一个学生的平均分
int search(int x,int number);//查找所输入学号的学生
int judge(struct STU); //判断各科大于等于85分的学生
int main()///////////void main()
{
    int i,j=0;
    int count=0;
    int number;
    //char classes[5][10];//定位一个而为数组来储存科目名称
    char classes[5];

    cout<<"please input the number of students\n";//输入学生数量
    cin>>number;
    STU *student=new STU[number];//开辟内存
    cout<<"please input the names of 5 classes\n";//输入五科科名
    for(i=0;i<5;i++)
        cin>>classes[i];
    //cout<<"please input the student number and scores of 5 classes\n";
    for(i=0;i<number;i++)
    {
        cout<<"please input the student number and scores of 5 classes\n";
        cin>>student[i].number;
        for(j=0;j<5;j++)
            cin>>student[i].score[j];
      //  cin>>student[i].ave;
    }

    cout<<"good students follow\n";
    cout<<"----------------------------------------------------------------\n";
    cout<<"student_number\t";
    for(i=0;i<5;i++)
    {
        cout<<classes[i];//输出储存科目名称
        cout<<"\t";
    }
    cout<<"averege\n";
    cout<<endl;

    j = 0;
    while(j<number)
    {
        student[j].ave=average(student[j]);
        //if(judge(student[i].score,number)==1||student[j].ave>90)
        if(judge(student[j]) == 1 || student[j].ave > 90)
        {
            cout<<student[j].number<<"\t\t";
                for(i=0;i<5;i++)
                    cout<<student[j].score[i]<<"\t";
                cout<<student[j].ave;
            count++;
            cout<<endl;
        }

        j++;
    }
    cout<<"\n";
    cout<<"----------------------------------------------------------------\n";
    cout<<"there are "<<count<<" good students\n";
    cout<<"----------------------------------------------------------------\n";
    cout<<endl;
    cout<<"input the number of student you want to search\n";
    int xstudent;
    cin>>xstudent;
    int x=xstudent-1;
    if(search(xstudent,number)==0)
        cout<<"ERROR!!!";
    else
    {   cout<<"----------------------------------------------------------------\n";
        cout<<"student_number\t";
        for(i=0;i<5;i++)
        {
            cout<<classes[i];
            cout<<"\t";
        }
        cout<<"averege\n";
        cout<<"----------------------------------------------------------------\n";
        cout<<endl;
        cout<<student[x].number<<"\t\t";
        for(j=0;j<5;j++)
            cout<<student[x].score[j]<<"\t";
        cout<<student[x].ave;
        cout<<endl;
        cout<<"----------------------------------------------------------------\n";
        delete []student;//释放内存
    }

    return 0;  ///////////////////
}

float average(STU student)
{
    int i;
    float sum=0;
    for(i=0;i<5;i++)
        sum+=student.score[i];
    return (sum/5);
}

int search(int xstudent,int number)
{
    if(xstudent>number||xstudent<0||xstudent==0)
        return 0;
    else
        return 1;
}

int judge(STU student) //判断五科是否都为85分以上。
{
//    int i,j;
//    for(i=0;i<number;i++)

        for(int j=0;j<5;j++)
        {
            if(student.score[j] < 85)
                return 0;
        }

        return 1;
}

我来回复

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