我正在尝试使用来自用户输入的数组输入到我的直方图函数中,并比较数组的每个实例中的值,以便有一个计数器来打印出要显示的“*”数。
随着直方图的打印,我试图把它分成箱子,即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;
}
答案 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";
}
}