找不到 C++ 程序的解决方案

Can't find a solution to a c++ program

本文关键字:解决方案 程序 C++ 找不到      更新时间:2023-10-16

所以我必须为以下程序编写一个代码:

编写一个带有主功能和菜单的程序,用于选择功能:a) 将学生的数据输入数组(教师人数、年龄、性别)(最多25)b) 将男女学生的数据改写为两个新的数组,并输出数组和平均年龄c) 输出最年轻的学生,将数组按年龄升序排列并输出数组d) 通过教员号码搜索学生并输出他的信息

好的,到目前为止还不错。a)和d)正在正常工作,但b)和c)给我带来了一些麻烦。关于c),它说最年轻的学生是88758375岁,它没有输出数组。在b)上,它给了我一个逻辑错误,它说整数除以零,导致程序崩溃。我真的试着找出任何错误,但我被卡住了,所以我向你寻求帮助:))

#include "stdafx.h"
#include <iostream>
using namespace std;
const int N = 25;
struct student
{
    int fN;
    int age;
    char sex;
};
// a)
void input(student fN[N], int numberOfStudents)
{
    for (int i = 0; i<numberOfStudents; i++)
    {
        cout << "Faculty number: ";
        cin >> fN[i].fN;
        cout << "Age: ";
        cin >> fN[i].age;
        cout << "Sex: ";
        cin >> fN[i].sex;
        cout << endl;
    }
}
// b)
void rearrange(student fN[N], student fNm[N], student fNf[N], int numberOfStudents, int m, int f)
{
    int avgAgeM = 0, avgAgeF = 0;
    for (int i = 0; i < numberOfStudents; i++)
    {
        if (fN[i].sex == 'm')
        {
            fNm[m].fN = fN[i].fN;
            fNm[m].age = fN[i].age;
            fNm[m].sex = fN[i].sex;
            m++;
            avgAgeM = avgAgeM + fN[i].age;
        }
        else if (fN[i].sex == 'f')
        {
            fNf[f].fN = fN[i].fN;
            fNf[f].age = fN[i].age;
            fNf[f].sex = fN[i].sex;
            f++;
            avgAgeF = avgAgeF + fN[i].age;
        }
        cout << endl;
        for (int i = 0; i < m; i++)
        {
            cout << "tFaculty number: " << fNm[i].fN << "tAge: " << fNm[i].age << "tSex: " << fNm[i].sex << endl;
        }
        cout << "Average male age: " << avgAgeM / m << "nn";
        for (int i = 0; i<f; i++)
        {
            cout << "tFaculty number: " << fNf[i].fN << "tAge: " << fNf[i].age << "tSex: " << fNf[i].sex << endl;
        }
        cout << "Average female age: " << avgAgeF / f << "nn";
    }
}
// c)
void ascendingAge(student fNm[N], student fNf[N], int m, int f)
{
    int x, y;
    char z;
    for (int i = 0; i < m-1; i++)
        for (int j = 0; j < m-i-1; j++)
        {
            if (fNm[j].age > fNm[j + 1].age)
            {
                x = fNm[j].age;
                y = fNm[j].fN;
                z = fNm[j].sex;
                fNm[j + 1].age = fNm[j].age;
                fNm[j].age = x;
                fNm[j + 1].fN = fNm[j].fN;
                fNm[j].fN = y;
                fNm[j + 1].sex = fNm[j].sex;
                fNm[j].sex = z;
            }
        }
    for (int i = 0; i < f-1; i++)
        for (int j = 0; j < f-i-1; j++)
        {
            if (fNf[j].age > fNf[j + 1].age)
            {
                x = fNf[j].age;
                y = fNf[j].fN;
                z = fNf[j].sex;
                fNf[j + 1].age = fNf[j].age;
                fNf[j].age = x;
                fNf[j + 1].fN = fNf[j].fN;
                fNf[j].fN = y;
                fNf[j + 1].sex = fNf[j].sex;
                fNf[j].sex = z;
            }
        }
    cout << "The youngest female student is " << fNf[0].age << " year-old." << endl;
    for (int i = 0; i < m; i++)
        cout << "tFaculty number: " << fNm[i].fN << "tAge: " << fNm[i].age << "tSex: " << fNm[i].sex << endl;
    for (int i = 0; i<f; i++)
        cout << "tFaculty number: " << fNf[i].fN << "tAge: " << fNf[i].age << "tSex: " << fNf[i].sex << endl;
    cout << endl;
}
//d
void searchStudent(student fN[N], int numberOfStudents)
{
    int x, index;
    bool yes = false;
    cout << "Enter a faculty number: ";
    cin >> x;
    for (int i = 0; i < numberOfStudents; i++)
        if (fN[i].fN == x)
        {
            yes = true;
            index = i;
        }
    cout << endl;
    if (yes == true)
        cout << "tFaculty number: " << fN[index].fN << "tAge: " << fN[index].age << "tSex: " << fN[index].sex << endl;
    else
        cout << "No such faculty number.nn";
}

int main()
{
    student fN[N], fNm[N], fNf[N];
    int numberOfStudents, m = 0, f = 0;
    char check;
    cout << "Enter number of students: ";
    cin >> numberOfStudents;
BACK:
    cout << "nn";
    cout << "t a) nt b) nt c) nt d)n Press'q' to exit.nn";

    cin >> check;
    switch (check)
    {
    case 'a':
        input(fN, numberOfStudents);
        goto BACK;
        break;
    case 'b':
        rearrange(fN, fNm, fNf, numberOfStudents, m, f);
        goto BACK;
        break;
    case 'c':
        ascendingAge(fNm, fNf, m, f);
        goto BACK;
        break;
    case 'd':
        searchStudent(fN, numberOfStudents);
        goto BACK;
        break;
    case 'q':
        return 0;
        break;
    default:
        cout << "Wrong input.n";
        goto BACK;
    }
    system("pause");
    return 0;
}

在函数重排中,您需要通过引用传递mk

void rearrange(student fN[N], student fNm[N], student fNf[N], int numberOfStudents, int& m, int& f):

Оr它们不会被更改

您似乎希望mf是此函数的输出

void rearrange(student fN[N], student fNm[N], student fNf[N], int numberOfStudents, int m, int f)

但只有通过引用才能起作用:

void rearrange(student fN[N], student fNm[N], student fNf[N], int numberOfStudents, int& m, int& f)

你应该通过测试防止被零除。代替:

cout << "Average male age: " << avgAgeM / m << "nn";

使用

if (m)
   cout << "Average male age: " << avgAgeM / m << "nn";
else
   cout << "There are zero malesnn";

类似地,对于f

相关文章: