我刚刚使用数组完成了我的第一个任务,我觉得它比它必须要复杂一点.该程序读取与分数它一个文件,并计数在一定范围内的分数的发生,然后输出出现的次数.
我想知道是否有更有效的方法来完成此任务(仅使用数组).我理解数组使我不必制作8个单独的变量,但仍有很多if语句!
头
#ifndef HEADER_H_INCLUDED
#define HEADER_H_INCLUDED
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cctype>
#include <cstdlib>
using namespace std;
void extern input(ifstream&, ofstream&, int&, int*);
void extern calculate (int, int*);
void extern output (ofstream&, int*);
#endif // HEADER_H_INCLUDED
Run Code Online (Sandbox Code Playgroud)
主要
#include "header.h"
int main()
{
int grade;
int array[8] = {0};
ifstream inData;
ofstream outData;
inData.open("Ch9_Ex4Data.txt");
if (!inData)
{
cout << "Cannot open the input file."
<< endl;
return 1;
}
outData.open("DataOut.txt");
while (inData)
{
input(inData, outData, grade, array);
}
output (outData, array);
system("PAUSE");
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
输入
#include "header.h"
void input(ifstream& inData, ofstream& outData, int& grade, int array[])
{
while(inData >> grade) // while a grade is read
{
calculate(grade, array);
}
}
Run Code Online (Sandbox Code Playgroud)
计算
#include "header.h"
void calculate (int grade, int array[])
{
int index;
if (grade >= 0 && grade < 25)
{
index = 0;
array[index]++;
}
else if (grade >= 25 && grade < 50)
{
index = 1;
array[index]++;
}
else if (grade >= 50 && grade < 75)
{
index = 2;
array[index]++;
}
else if (grade >= 75 && grade < 100)
{
index = 3;
array[index]++;
}
else if (grade >= 100 && grade < 125)
{
index = 4;
array[index]++;
}
else if (grade >= 125 && grade < 150)
{
index = 5;
array[index]++;
}
else if (grade >= 150 && grade < 175)
{
index = 6;
array[index]++;
}
else if (grade >= 175 && grade <= 200)
{
index = 7;
array[index]++;
}
}
Run Code Online (Sandbox Code Playgroud)
产量
#include "header.h"
void output (ofstream& outData, int array [])
{
outData << "number of students with score of 0-24 is " << array[0] << endl;
outData << "number of students with score of 25-49 is " << array[1] << endl;
outData << "number of students with score of 50-74 is " << array[2] << endl;
outData << "number of students with score of 75-99 is " << array[3] << endl;
outData << "number of students with score of 100-124 is " << array[4] << endl;
outData << "number of students with score of 125-149 is " << array[5] << endl;
outData << "number of students with score of 150-174 is " << array[6] << endl;
outData << "number of students with score of 175-200 is " << array[7] << endl;
}
Run Code Online (Sandbox Code Playgroud)
Ben*_*igt 12
你是对的,因为它们间隔均匀,可能比较短,例如
void calculate (int grade, int array[])
{
if (grade >= 0 && grade < 200) {
index = grade / 25;
array[index]++;
}
else if (grade == 200)
array[7]++;
}
Run Code Online (Sandbox Code Playgroud)
output() 可以变成一个循环,每个bin的高和低的计算是直截了当的(使用乘法).
如果垃圾箱的间隔不均匀,则需要使用像Serge建议的查找表.
由于所有等级都相邻,您可以使用另一个数组来查找数组索引.
void calculate (int grade, int array[])
{
int indexMap[] = {25,50,75,100,125,150,175,201};
int i;
for(i = 0; i < 8 ; i++) {
if(grade < indexMap[i]) {
array[i]++;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)