我还是C语言的新手,我需要找到一种方法来打印与频率相同数量的星星。

这是我的代码:

int arrayHistogram(int array[]){
    int i;
    int j;
    int count=0;
    int freq[SIZE];
    char stars[SIZE];
    for(i = 0; i < SIZE; i++){
        count =1;
        for(j = i+1; j < SIZE; j++){
            if(array[i]==array[j]){
                count++;
                freq[j]=0;
            }
        }
        if(freq[i] != 0){
            freq[i] = count;
        }
    }
    //for ( i = 0; i < SIZE; i++){
        //int num = freq[i];
        //stars[i]= '*'*num;
    }
    printf("Value ");
    printf("Frequency ");
    printf("Histogram\n");
    for(i = 0; i < SIZE; i++){
        if(freq[i] != 0){
            printf("%5d%10d%10d\n", array[i], freq[i], stars[i]);
        }
    }
}


我知道我不能在这里用char乘以int来打印星星,但是我放在这里只是为了显示需要打印那些星星的位置(即直方图)。

My Output:

    Value Frequency Histogram
        7         4       -46
        8         3       126
        4         6        84

Expected output:

      Value Frequency Histogram
          7         4      ****
          8         3       ***
          4         6    ******

最佳答案

好吧,您已经知道要做这件事的一切,即循环。

只需简单地循环一个频率并打印那么多星星。

这样的东西(伪代码):

loop until freq[i]
    print '*'
end loop


这只是一个主意。您知道循环是如何工作的。只需在需要打印星星的地方放置一个嵌套循环(即for循环)即可。注意换行符。在打印星号后,您需要在每行末尾添加换行符。



更新:

观察到,您的频率最高为10,即您已经知道的固定大小。您可以简单地使用一串星号,然后使用printf()%.*s格式说明符(具有字段宽度和字符串长度)来打印它。

这是一个示例(live code):

#include <stdio.h>

#define SIZE 10

int main(void)
{
    const char* stars = "**********";

    const int freqs[ SIZE ] = { 3, 5, 6, 2, 0, 7, 10, 9, 4, 8 };

    for ( int i = 0; i < SIZE; i++ )
    {
        printf("%5d \t %10.*s\n", freqs[i], freqs[i], stars);
    }

    return 0;
}


输出:

    3           ***
    5         *****
    6        ******
    2            **
    0
    7       *******
   10    **********
    9     *********
    4          ****
    8      ********

关于c - 以阵列中特定数量的频率打印星号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52570161/

10-09 08:37
查看更多