带指针的void函数

时间:2013-11-16 04:07:45

标签: c++ arrays function pointers

该程序读取每个学生的学生人数和三个分数(考试),然后计算平均值,然后以表格格式显示信息。由于某种原因,它无法正常工作。我必须使用11个函数编写此程序,因此无法更改格式,函数数量或主程序中的任何重大更改。 更新:我做了一些更改,现在我可以编译并运行它,它显示所有内容

int student_num (const string & prompt);
void scores (int scores1[], int scores2[],int scores3[], int students);
void sum (int scores1[], int scores2[],int scores3[], int totals[], int students);
double average (int totals[], int students);
double find_max(const int totals[], const int students);
double find_min(const int totals[], const int students);
int above_ave (const int totals[], int students, double ave);
void display (int const scores1[], int const scores2[], int const scores3[], int const totals[], int students, double ave, int mini, int maxi, int n);
void header ();
void body(int const exam1, int const exam2, int const exam3, int total_grade, int st_id, double ave);
void bottom (int students, double ave, int mini, int maxi, int n);
int main()
{
    int * scores1;
    int * scores2;
    int * scores3;
    int * totals;
    int students(0);
    double avg(0.0);
    int min, max, above;
    string prompt = "Enter number of students: ";
    students = student_num (prompt);
    scores1 = new int [students];
    scores2 = new int [students];
    scores3 = new int [students];
    totals = new int [3];
    scores (scores1, scores2,scores3,students);
    sum (scores1, scores2, scores3, totals, students);
    int ave = average (totals, students);
    int maxi = find_max(totals, students);
    int mini = find_min(totals, students);
    int n = above_ave (totals, students, ave);
    display (scores1, scores2, scores3, totals, students, ave, mini, maxi, n);
    delete scores1;
    delete scores2;
    delete scores3;
    delete totals;
    return 0;
}
int student_num (const string & prompt)
{
    int students, m;
      cout << prompt;
      cin >> students;
          }
return students;
}

void scores (int scores1[], int scores2[],int scores3[], int students)
{
    for (int i(0); i<students; i++)
    {
        cout << "Enter the three scores" << i+1<< ":";
        cin >> scores1 [i];
        cin >> scores2 [i];
        cin >> scores3 [i];
    }
}
void sum (int scores1[], int scores2[],int scores3[], int totals[], int students)
{
    for (int i(0); i< students; i++)
    {
        totals[i] = scores1[i] + scores2[i] + scores3[i];
    }
}
double average (int totals[], int students)
{
    double ave(0), sum (0);
    for (int i(0); i<students; i++)
    {
        sum += totals [i];
    }
    ave = sum/students;
    return ave;
}
double find_max(const int totals[], const int students)
{
    double maxi(0); // maximum value of the array
    for (int i=0; i<students; i++) //i= loop variable
    {
        if (totals[i] > maxi)
        {
            maxi = totals[i];
        }
    }
    return(maxi);
}
double find_min(const int totals[], const int students)
{
    double mini = totals [0];
    for (int i=1; i<students; i++)
    {
        if (totals[i] < mini)
        {
            mini = totals[i];
        }
    }
    return(mini);
}
int above_ave (const int totals[], int students, double ave)
{
    int n(0), i(0);
    for (int i(0); i<students; i++)
    {
        if (totals[i] > ave)
        {
            n++;
        }
    }
    return n;
}
void display (int const scores1[], int const scores2[], int const scores3[], int const totals[], int students, double ave, int mini, int maxi, int n)
{
    header();
    for (int i(0); i<students; i++)
    {
        int exam1 = scores1[i];
        int exam2 = scores2[i];
        int exam3 = scores3[i];
        int total_grade = totals[i];
        int st_id = i;
        body (exam1, exam2, exam3, total_grade, st_id, ave);
    }
    bottom (students, ave, mini, maxi, n);
}
void body (int const exam1, int const exam2, int const exam3, int total_grade, int st_id, double ave)
{
    cout << setw(7) << right << fixed << st_id+1;
    cout << setw(10) << left << fixed << exam1;
    cout << setw(10) << left << fixed << exam2;
    cout << setw(10) << left << fixed << exam3;
    cout << setw(5) << left << fixed << total_grade;
    if (total_grade > ave)
    {cout << setw(2)<<right << "+"<< endl;}
    else
    {cout << setw(2)<<right << "-"<< endl;}
}
void bottom (int students, double ave, int mini, int maxi, int n)
{
   cout << setw(40) << left << "The number of students is:" << setw(7) << left << students<< endl;
    cout << setw(40) << left << "The avg total score (rounded) is" << setw(7) << left << int (ave)<< endl;
    cout << setw(40) << left << "The maximum total score is:" << setw(7) << left << maxi << endl;
    cout << setw(40) << left << "The minimum total score is:" << setw(7) << left << mini << endl;
    cout << setw(40) << left << "Total scores at or above the avg is:" << setw(7) << left << n << endl;

}

1 个答案:

答案 0 :(得分:2)

该行

for (int i(1); i<students+1; i++)
scores函数中的

与需要的值相差1。你没有打印出你认为自己的分数,而且你很幸运,你没有因为超出数组的限制而遇到段错误。