0

我的程序有点卡住了,该程序是读取一组结果,然后构建一个直方图,指示每个十年中有多少标记,即 10-20 之间有多少等。

我有2个问题

  1. 如何编辑我的代码以仅允许 readExamResults 存储 0 -100 范围内的代码
  2. 如何让 PrintHisto 在某个 setw() 处打印 *,具体取决于每个结果所在的十年。例如,如果我输入 3、4、5、11、23 它应该在 <10 十年中显示 3 * , 10-20 年代有 1 个,20-30 年代有 1 个。

任何帮助都感激不尽。

代码:

using namespace std;

 void readExamMarks(int examMarks[], int sizeOfArray){

cout << "Please enter a set of exam marks to see a histogram for:" << endl;
int x = 0;
for( int idx = 0; idx < sizeOfArray; idx++){

    cin >> x;
    examMarks[idx] = x;
}
}

void printExamMarks(int examMarks[], int sizeOfArray){

for(int x = 0; x < sizeOfArray; x++){

    cout << setw(5) << examMarks[x];
}
cout << endl;
}

 void printHisto(int examMarks[], int sizeOfArray){
system("cls");

for( int x = 0; x < 6; x++){
cout << setw(5) << "*" << endl;
}
}

int main() 
{
int examMarks[5];

readExamMarks(examMarks, 5);
printHisto(examMarks, 5);
printExamMarks(examMarks,5);


system("PAUSE");
}
4

2 回答 2

0

基本上,您创建一个新数组,每个十年都有一个条目。然后迭代考试成绩并在直方图中增加相应的十年:

vector<int> calculateHistogram(vector<int> grades) 
{
    vector<int> histogram(10, 0);
    for (int i=0; i<grades.size(); i++) {
        int decade = grades[i]/10;
        histogram[decade] += 1;
    }
    return histogram;
}
于 2013-04-05T16:10:29.537 回答
0

如何编辑我的代码以仅允许readExamResults存储 0 -100 范围内的代码

我猜你的意思是readExamMarks而不是readExamResults。如果是这样,您只需要添加一条if语句来检查输入值是否实际在 [0..100] 范围内。我还将您的循环语句更改for为 a while,因为您只想idx在输入有效数字时增加。

void readExamMarks(int examMarks[], int sizeOfArray)
{
     cout << "Please enter a set of exam marks to see a histogram for:" << endl;
     int x = 0;
     int idx = 0;
     while(idx < sizeOfarray)
          cin >> x;
          if((x >=0) && (x <= 100)){
               examMarks[idx] = x;
               idx++;
          }
          else
               cout << "ERROR: Value must be in range [0...100], please enter a valid value\n"; 
     }
}
于 2013-04-05T15:44:15.957 回答