使用C ++中的数组进行直方图

时间:2016-10-27 02:29:50

标签: c++ arrays function

我正在尝试使用来自用户输入的数组输入到我的直方图函数中,并比较数组的每个实例中的值,以便有一个计数器来打印出要显示的“*”数。

随着直方图的打印,我试图把它分成箱子,即bin 9 | ***对于3个大约90分的实例,bin 8 | *****表示值为80到89点的数组中的5个实例,依此类推。

我已经尝试在我的for循环中使用bin [i]上的指针但是它不能像我试过的那样工作& bins [i]但是这只给出1 bin的地址并且不显示后续的bin或者*来自阵列中的计数器。

以下是我用来尝试创建此直方图的测试。案例1:100,95,90,85,80,75,70,65,60,40,20和5.为了使代码更短,我将发布我的主要和我的直方图功能。谢谢你的时间。

int main()
{
    int scores[100];
    int bins[10];
    int counter[99];
    int count = 0;

    cout << "Enter a score (-1 to stop): ";

    do {
        cin >> scores[count++];
    } while (scores[count - 1] != -1);
    count--;
    Histogram(scores, count, counter);
    int i;
    for (i = 0; i < 10; i++)
        ;
    {
        cout << &bins[i] << "| " << endl;
        for (size_t k = 0; k < counter[i]; k++) {
            cout << "*" << endl;
            break;
        }
    }
    deviation(scores, count);

    return 0;
}

int* Histogram(int scores[], int count, int counter[])
{

    int k = 0;
    for (int i = 0; i < count; i++) {
        if (scores[i] >= 90) {
            counter[k++];
        }

        else if (scores[i] >= 80 && scores[i] < 90) {
            counter[k++];
        }

        else if (scores[i] >= 70 && scores[i] < 80) {
            counter[k++];
        }

        else if (scores[i] >= 60 && scores[i] < 70) {
            counter[k++];
        }

        else if (scores[i] >= 50 && scores[i] < 60) {
            counter[k++];
        }

        else if (scores[i] >= 40 && scores[i] < 50) {
            counter[k++];
        }
        else if (scores[i] >= 30 && scores[i] < 50) {
            counter[k++];
        }
        else if (scores[i] >= 20 && scores[i] < 30) {
            counter[k++];
        }
        else if (scores[i] >= 10 && scores[i] < 20) {
            counter[k++];
        }
        else if (scores[i] < 10) {
            counter[k++];
        }
    }
    return counter;
}

2 个答案:

答案 0 :(得分:0)

k

上述声明没有做任何事情。它会增加counter[index],但不会更改counter[k]++; k++;的值。也许你的意思是if (scores[i] >= 90) counter[k++]; else if (scores[i] >= 80 && scores[i] < 90) counter[k++]; else if (scores[i] >= 70 && scores[i] < 80) counter[k++]; ... else if (scores[i] < 10) counter[k++]; else printf("never reaches here!\n");

if/else

scores[i]条件错误。 k可以是任何值,它始终满足侵权条件for (i = 0; i < 10; i++); <== extra ; { cout << &bins[i] << "| " << endl; ,它永远不会达到最后条件。

#include <vector>
...
std::vector<int> scores;
for (int i = 0; i < 10; i++)
    scores.push_back(rand()%10);

for (int i = 0; i < scores.size(); i++)
{
    for (int k = 0; k < scores[i]; k++)
    {
        cout << "*";
    }
    cout << "\n";
}

还有其他错误,目标尚不清楚。要打印历史记录,您可以尝试以下内容(这将打印旋转90度的直方图,我不知道这是否接近您的想法)

int main()
{
    std::vector<int> scores;
    int max = 10;
    for (int i = 0; i < 20; i++)
        scores.push_back(rand() % max);

    for (auto i : scores)
        cout << i << ", ";
    cout << "\n";

    for (int x = 0; x < max; x++)
    {
        for (int y = 0; y < scores.size(); y++)
        {
            if ((max - scores[y]) > x)
                cout << " ";
            else
                cout << "*";
        }
        cout << "\n";
    }

    return 0;
}

或沿x轴打印直方图

{{1}}

答案 1 :(得分:0)

我希望它有帮助,它用于 10 个输入值,整数范围从 1 到 20!

#include<iostream>
using namespace std;
int main()enter code here
{
    int array[10]={0};
    for(int i=0; i<10; i++)
    {
        cout<<"enter a number ";
        cin>>array[i];
        
    }
    for(int a=0; a<10; a++)
    {
        if(array[a]<=20)
        {
        for(int b=1; b<=array[a]; b++)
        cout<<"#";
        cout<<"\n";
        }
        else 
        cout<<"please enter number less than or equal to 20\n";
    }
}