函数和数组来计算gpa

时间:2017-05-18 14:55:51

标签: c++ arrays function

[![enter image description here][1]][1]

这是我尝试过的,但每当我运行该程序时,它会崩溃并说错误,尽管它正确编译。它要求我输入部门编号,但之后没有显示任何输出

#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
const int STDTs = 25;
const int DEPTs = 7;
void  initializeGPAs(double gpa[][DEPTs])
{
    for(int i=0;i<STDTs;i++)
        for(int j=0;j<DEPTs;j++)
        gpa[i][j]=(10+rand()%31)/10;
}
void computeDeptAvg(double gpa[][DEPTs] , double deptAvg[])
{

    for(int i=0;i<STDTs;i++)
    {
        int sum=0;

        for(int j=0;j<DEPTs;j++)
        sum+=gpa[j][i];

    deptAvg[i]=double(sum/STDTs);
    }
}
int StdsOnProbationCount(double gpa[][DEPTs])
{
    int ctr=0;
   for(int i=0;i<STDTs;i++)
        for(int j=0;j<DEPTs;j++)
        if(gpa[i][j]<2)
            ctr++;

            return ctr;
}

int StdsOnProbationCountinDeptX(double gpa[][DEPTs], int x)
{
    int ctr=0;
     for(int i=0;i<STDTs;i++)
        if(gpa[i][x-1]<2)
        ctr++;

        return ctr;
}

void showReport(double gpa[][DEPTs],string dept_names[], double deptAvg[], int ctr1, int ctr2, int x)
{
    cout<<endl;
for(int i=0;i<DEPTs;i++)
{
cout<<'\t'<<dept_names[i]<<"  ";
}
cout<<endl;
     for(int i=0;i<STDTs;i++)
    {
        cout<<"Student "<<i+1<<":    ";

        for(int j=0;j<DEPTs;j++)
            cout<<gpa[i][j]<<"   ";

        cout<<endl;

    }
    cout<<endl;

    for(int t=0;t<DEPTs;t++)
        cout<<"Dept Avg.:   "<<deptAvg[t]<<"  ";

        cout<<endl<<endl;

        cout<<"Total number of students who are on probation is: "<<ctr1;
        cout<<endl;
        cout<<"Number of students who are on probation in "<<dept_names[x-1]<<" Dept. is "<<ctr2;

}
int main()
{
 double gpa[STDTs][DEPTs];
 int ctr1, ctr2, x;
 double deptAvg[DEPTs];
 string dept_names[DEPTs]={"MATH","STAT","COMP","PHYS","CHEM","BIOL","GEOL"};
 initializeGPAs(gpa);
 computeDeptAvg(gpa, deptAvg);
 ctr1 = StdsOnProbationCount(gpa);
 cout<<"Enter Department Number [1 to 7]: ";
 cin >> x;
 ctr2 = StdsOnProbationCountinDeptX(gpa, x);
 showReport(gpa, dept_names, deptAvg, ctr1, ctr2, x);
 return 0;
}

编辑:我想出了一切,但我的问题似乎是在这个函数中,因为它显示所有部门平均值的零

void computeDeptAvg(double gpa[][DEPTs] , double deptAvg[])
{

    for(int i=0;i<STDTs;i++)
    {
        int sum=0;

        for(int j=0;j<DEPTs;j++)
        {
            sum+=gpa[j][i];
       deptAvg[j]=double(sum/STDTs*1.0);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我只考虑你的computeDeptAvg功能。

  • 您的sum变量应为double类型,并将其声明为int进行所有计算(特别是sum+=gpa[j][i]和{{1} },这是一个整数除法)容易截断错误。

  • 您以错误的顺序嵌套了两个循环:您应该对特定部门中所有学生的分数求和,以便计算该部门的平均值。此外,每次执行外循环时都会覆盖sum/STDTs

  • 您已在deptAvg[j]中将gpa声明为main,但在您的循环中,您使用的是double gpa[STDTs][DEPTs];,其中gpa[j][i]位于范围[0, DEPTs )和{0, STDT 中的j

修改后的版本可以是:

i