程序從.txt文件中讀取以下數據:檢查我的邏輯? (平均GPA計算程序)
f 3.40
f 4.00
m 3.56
m 3.80
f 2.30
f 3.95
m 3.90
m 4.00
m 2.00
f 4.00
f 2.80
m 3.70
m 2.98
f 3.89
m 4.00
f 3.90
m 1.90
m 2.90
f 1.50
f 2.67
m 3.80
m 2.35
然後計算每個性別的平均分(GPA)(M爲男性,F爲女性)
根據根據我的計算,有:
14 fs,f的gpas總和爲46.99,所以f的平均gpa爲46.99/14 = 3.36。
和
14毫秒,平均成績的對於m的總和是46.64,因此對於m的平均值是GPA 46.64/14 = 3.33。
但什麼在新文件中的程序輸出是: 男性平均GPA:3.42 女性平均GPA:3.76
我失去了我的作業什麼?
我的代碼:
頭:
#ifndef header_h
#define header_h
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cstring>
#include <cstdlib>
using namespace std;
void extern initialize(int&, int&, float&, float&, float&, float&);
void extern openFiles(ifstream&, ofstream&);
void extern sumGrades(istream&, ostream&, int&, int&, float&, float&);
void extern averageGrade (float&, float&, float, int, float, int);
void extern printResults (float, float, ostream&);
#endif
主要:
#include "header.h"
int main()
{
char gender;
float gpa, sumFemaleGPA, sumMaleGPA, maleGrade, femaleGrade;
ifstream inData;
ofstream outData;
int countFemale, countMale;
openFiles(inData, outData);
initialize (countFemale, countMale, sumFemaleGPA, sumMaleGPA, maleGrade, femaleGrade);
sumGrades(inData, outData, countFemale, countMale, sumFemaleGPA, sumMaleGPA);
averageGrade (maleGrade, femaleGrade, sumMaleGPA, countMale, sumFemaleGPA, countFemale);
printResults(maleGrade, femaleGrade, outData);
system("PAUSE");
return EXIT_SUCCESS;
}
openFiles散:
#include "header.h"
void openFiles(ifstream& inData, ofstream& outData)
{
inData.open("./Ch7_Ex4Data.txt");
outData.open("./Ch7_Ex4Dataout.txt");
outData << fixed << showpoint << setprecision(2);
}
初始化:
#include "header.h"
void initialize (int& countFemale, int& countMale, float& sumFemaleGPA, float& sumMaleGPA, float& maleGrade, float& femaleGrade)
{
countFemale = 0;
countMale = 0;
sumFemaleGPA = 0;
sumMaleGPA = 0;
maleGrade = 0;
femaleGrade = 0;
}
sumGrades:
#include "header.h"
void sumGrades(istream& inData, ostream& outData, int& countFemale, int& countMale, float& sumFemaleGPA,
float& sumMaleGPA)
{
char gender;
float gpa;
while(inData >> gender >> gpa)
{
inData >> gender >> gpa;
if(gender == 'm')
{
sumMaleGPA += gpa;
countMale++;
}
else if (gender == 'f')
{
sumFemaleGPA += gpa;
countFemale++;
}
}
}
averageGrade:
#include "header.h"
void averageGrade (float& maleGrade, float& femaleGrade, float sumMaleGPA, int countMale, float sumFemaleGPA, int countFemale)
{
maleGrade = sumMaleGPA/countMale;
femaleGrade = sumFemaleGPA/countFemale;
}
個printResults:
#include "header.h"
void printResults(float maleGrade, float femaleGrade, ostream& outData)
{
outData << "average male GPA: " << maleGrade << endl;
outData << "average female GPA: " << femaleGrade << endl;
}
我認爲你在嘗試有點太難以削減成多重e文件,並且難以正確使用返回值,或者嘗試設計一些類。 – 2010-12-19 04:33:25
不要在頂部聲明所有變量。在即將使用它們時聲明(並初始化)它們。 – 2010-12-19 07:33:19