找不到 C++ 程序的解决方案
Can't find a solution to a c++ program
所以我必须为以下程序编写一个代码:
编写一个带有主功能和菜单的程序,用于选择功能: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;
}
在函数重排中,您需要通过引用传递m
和k
:
void rearrange(student fN[N], student fNm[N], student fNf[N], int numberOfStudents, int& m, int& f):
Оr它们不会被更改
您似乎希望m
和f
是此函数的输出
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
相关文章:
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 如何在程序中实现单词跳过解决方案
- 如何计算该程序的复杂性?是否有任何其他复杂性较低的解决方案
- MPI在某个进程找到解决方案时使用广播结束程序
- 如何将解决方案中的项目从应用程序更改为静态库
- 更新的程序仍然崩溃,似乎找不到解决方案?
- 只有当我一直显示某些内容直到找到解决方案时,程序才能工作
- 商业申请许可问题和LIBPCAP应用程序的解决方案
- 一个解决方案,两个项目:如何从 Windows 应用程序调用控制台项目?C++
- 简单程序没有输出和崩溃.我的解决方案有什么问题
- 在一个应用程序中MPI_Scatter和MPI_Bcast解决方案。如何让分区打印分区大小
- 将类从应用程序解决方案移动到静态库解决方案会产生无法解决的外部符号链接错误
- 找不到 C++ 程序的解决方案
- 为什么通过系统("color YX")更改控制台应用程序中C++颜色不是最佳解决方案?
- 拥有一个包含MFC项目和用于单元测试的控制台应用程序的解决方案
- QLineEdit:是否有一个优雅的解决方案来告诉多个QLineEdit部件分开事件处理程序
- QT是我的跨平台应用程序的正确解决方案吗?
- TeamCity使用c++项目构建VS2012解决方案,其中包含设备驱动程序无法清理目录
- C++程序-不确定是否,我提供了正确的解决方案
- ConsoleApplication4.exe已停止工作.Windows将关闭该程序并通知是否有可用的解决方案