こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語でこのプログラムを完成させるには

C言語でこのプログラムを完成させるには

C言語初心者です。

1~6の乱数を100回発生させて、それぞれの出現回数をカウントし、ヒストグラムとして表示するプログラムを作成したいのですが上手くいきません。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

int rnd(int m, int n)
{
return (int)(n-m+1)*(rand()/(RAND_MAX+0.1))+m;
}

int main(void)
{
int i, j, r;
int hist[7];

for (i=1; i<7; i++)
hist[i]=0;

srand((unsigned)time(NULL));

for (i=0; i<100; i++) {
r=6;
while (6-- > 0)
putchar('*');
putchar('\n');
}

for (i=1; i<7; i++) {
printf("%2d:", i);

for (j=0; j<hist[i]; j++)
printf("*");

printf("\n");
}
return 0;
}

何がいけないのでしょうか?

よろしくお願いします。

投稿日時 - 2010-05-19 23:41:06

QNo.5907509

すぐに回答ほしいです

質問者が選んだベストアンサー

まずここ。whileの継続条件が常に真なので無限ループになりますね。
r=6;
while (6-- > 0)
putchar('*');

正しくは、
r=6;
while (r-- > 0)
putchar('*');
でしょうけど、何をしたいのかわかりません。1行にアスタリスクが6個ずつ、100行並ぶだけです。
意図としては、ここでrnd関数を呼んで乱数値を取得、区間で分類してhist[]の値を加算していくことになるかと思います。

もう一点気になるのが、hist[0]を無視していることです。
配列の仕様を確認してみてください。

投稿日時 - 2010-05-19 23:50:21

お礼

回答有難うございます。

投稿日時 - 2010-06-06 12:29:06

ANo.2

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

私もC言語初心者です。下の説明文がやくにたちますか。

参考URL:http://gh33-it.blogspot.com/

投稿日時 - 2010-05-23 11:53:47

ANo.3

for (i=0; i<100; i++) {
r=6;
while (6-- > 0)
putchar('*');
putchar('\n');
}

だけど、

for (i=0; i<100; i++) {
printf(" %d", rand());
//hist[rand()%6+1] +=1;
}
putchar('\n');

どうやれば、hist[] に入れることができるかを考えてみると良いんじゃないかな。
http://www2.ocn.ne.jp/~mochi/menu/c/c14.html

投稿日時 - 2010-05-20 21:15:01

お礼

回答有難うございます。

投稿日時 - 2010-06-06 12:28:41

ANo.1

「上手くいかない」とは, 何がどう「上手くいかない」のですか?

投稿日時 - 2010-05-19 23:47:52

あなたにオススメの質問