在c中生成直方图

时间:2018-03-24 18:46:12

标签: c

我很难在C中创建这个直方图。事情是,分配是计算每个用户输入发生的频率。

For:1 0 6 1 5 0 7 9 0 7 - >有3x 0,2x 1等

然后,必须将事件转换为星号而不是出现次数。我想我已经完成了第一步和第三步,但我很难将数字转换成星星。我是否必须创建一个新循环,还是使用当前的嵌套循环?我会永远感激能为我提供一些见解的人。

所以我的练习是:

  1. 询问用户输入并存储在数组中
  2. 处理数组并生成直方图数组
  3. 将直方图显示为星星
  4. 我的代码

    #include <stdio.h>
    
    void printHistogram ( int *hist, int n );
    
    int main() {
       int i, j;
       int inputValue;
    
       printf("Input the amount of values: \n");  
       scanf("%d", &inputValue);
       int hist[inputValue];
    
       printf("Input the values between 0 and 9 (separated by space): \n");
       for (i = 0; i < inputValue; ++i) {
        scanf("%d", &hist[i]);  
       }
    
        int results[10] = {0};
    
        // Processing data to compute histogram, see 5.17
        for (i = 0; i < 10; ++i) {   
          for(j = 0; j < inputValue; j++) {
             if ( hist[j] == i){
                results[i]++;
             }
          } 
       }
    
        printf("\n");
        printHistogram(hist, 10);
    
        return 0;
    }
    
    void printHistogram(int *hist, int n) {
          int i, j;
          for (i = 0; i < n; i++) {
          printf("[%d] ", i);
          for ( j = 0; j < hist[i]; ++j) {
          printf("*");
          }
          printf("\n");
       }
    }
    

    输入

    10
    1 0 6 1 5 0 7 9 0 7
    

    输出

    Input the amount of values: 
    Input the values between 0 and 9 (separated by space): 
    
    [0] *
    [1] 
    [2] ******
    [3] *
    [4] *****
    [5] 
    [6] *******
    [7] *********
    [8] 
    [9] *******
    

    输出应为:

    Input the amount of values: 10
    Input the values between 0 and 9 (separated by space):
    
    [0] ***
    [1] **
    [2] 
    [3] 
    [4] 
    [5] *
    [6] *
    [7] **
    [8] 
    [9] *
    

1 个答案:

答案 0 :(得分:1)

在@ rafix07发表评论时,您只需拨打printHistogram(results, 10)而不是printHistogram(hist, 10)

已经编译和测试......工作