我还是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 ******
答案 0 :(得分:1)
好吧,您已经知道要执行此操作的所有内容,即循环。
简单地,按频率循环并打印那么多星星。
类似的东西(伪代码):
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 ********
答案 1 :(得分:0)
如何通过循环构建char stars[SIZE]
?
int nStars = freq; // in you situation.
for(int i=0; i < nStars;++i)
{
stars[i] = '*'; // set char i to be '*'
}
stars[nStars] = '\0'; // don't forget to terminate your string
您可以为其制作一个简单的实用程序功能void fillChar(char* buff, char ch, int count);
。
注意,不要超过分配的字符串的大小,否则可能会发生不好的事情。
干杯。