またまた質問です。
Re:またまた質問です。
他の方法には
・while 文
・goto 文
・再帰処理
がありますが、多分習っていないと思いますし。
もしかしたら、「aをn回足す」の部分の表現を言い換えたものが答えなのでは?
・while 文
・goto 文
・再帰処理
がありますが、多分習っていないと思いますし。
もしかしたら、「aをn回足す」の部分の表現を言い換えたものが答えなのでは?
Re:またまた質問です。
レスありがとうございます。while文、if文は習いました。具体的な数字は出ないのでアルファベットa,nとおいたのですが・・・。これがどうしてもわかりません。while文で考えたのですがどうしてもひらめきません。どう書けばよいのでしょうか??
Re:またまた質問です。
すいません、説明不足でした。今サイコロをn回振り、出た目の平均を出す問題をやっていいるのですが、出た目をaとおいてやっているのでaはランダムに1~6まで出てくるんです。なので、出た目の合計の出し方がわからなくて困っている状態です。
Re:またまた質問です。
では、おおよそ以下のような順序になります。
1. 合計を格納する変数を用意しておく。(0で初期化、ここでは仮に x とする)
2. while 文で n 回ループさせる。
3. その中で 1 ~ 6 のランダムの数値を出し、その値を x に足す。
4. x を n で割れば出た目の平均が算出される。
この方法であれば、 while 文から出た時に x は出た目の合計となるはずです。
※ところで、http://dixq.net/board/board.htmlを読みましたか?
1. 合計を格納する変数を用意しておく。(0で初期化、ここでは仮に x とする)
2. while 文で n 回ループさせる。
3. その中で 1 ~ 6 のランダムの数値を出し、その値を x に足す。
4. x を n で割れば出た目の平均が算出される。
この方法であれば、 while 文から出た時に x は出た目の合計となるはずです。
※ところで、http://dixq.net/board/board.htmlを読みましたか?
Re:またまた質問です。
ありがとうございます。その方法でやっているんですが、n回ループさせるってのはそうやるんでしょうか??たびたびすいません。
読んでませんでした。迷惑かけてすいません。
読んでませんでした。迷惑かけてすいません。
Re:またまた質問です。
> 2. while 文で n 回ループさせる。
// 1. の処理部分 while(n > 0){ // ループ内の処理(3. の処理部分) n--; // n--; (--n;)を習っていないのなら、 // n -= 1; か、 n = n - 1; でも可 } // 4. の処理部分だいたいこんな感じです。
Re:またまた質問です。
やってみましたが上の方法だとnが0として定義されちゃいませんか??
答えがでません。while文の中身をのせるのでコメントお願いします。
while(n>0){
z=rand()/R15; //[0,1)-一様乱数
me=(int)(z*6)+1; //さいころの目
S=S+me;
n=n-1;
}
printf("平均は%lfです。",S/n);
}
答えがでません。while文の中身をのせるのでコメントお願いします。
while(n>0){
z=rand()/R15; //[0,1)-一様乱数
me=(int)(z*6)+1; //さいころの目
S=S+me;
n=n-1;
}
printf("平均は%lfです。",S/n);
}
Re:またまた質問です。
scanf で数字を読み込む方法は理解していますか?
ループを抜けた後は n は 0 になってしまいます。
ので、 while 文に入る前に別の変数に退避し、
平均の計算時に退避した変数を使用すると良いでしょう。
また、 S/n としていると、整数の結果を返してしまう(小数点以下が切り捨てられる)ので、
浮動小数点型(float か double)に変換して割る必要があります。
scanf("%d", &n); // 入力した数字を数値として n に読み込むあと、while 文で n を変更している( 1 ずつ引いている)ので、
ループを抜けた後は n は 0 になってしまいます。
ので、 while 文に入る前に別の変数に退避し、
平均の計算時に退避した変数を使用すると良いでしょう。
また、 S/n としていると、整数の結果を返してしまう(小数点以下が切り捨てられる)ので、
浮動小数点型(float か double)に変換して割る必要があります。
例: (double)S / n(どちらかが浮動小数点値なら、浮動小数点として計算されます)
Re:またまた質問です。
どうしても警告が出てしまってできません・・・・。プログラムはこんな感じです・・・。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
main(){
int n,me,kaisuu;
double avereage,z,S,R15=RAND_MAX+1;//R15=2^15
srand((unsigned int) time(NULL)*314159265);
printf("さいころを振る回数を入力してください。");
scanf("%d",&n);
n=kaisuu;
S=0;
while(n>0){
z=rand()/R15; //[0,1)-一様乱数
me=(int)(z*6)+1; //さいころの目
S=S+me;
n=n-1;
}
avereage=S/kaisuu;
printf("平均は%lfです。",avereage);
}
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
main(){
int n,me,kaisuu;
double avereage,z,S,R15=RAND_MAX+1;//R15=2^15
srand((unsigned int) time(NULL)*314159265);
printf("さいころを振る回数を入力してください。");
scanf("%d",&n);
n=kaisuu;
S=0;
while(n>0){
z=rand()/R15; //[0,1)-一様乱数
me=(int)(z*6)+1; //さいころの目
S=S+me;
n=n-1;
}
avereage=S/kaisuu;
printf("平均は%lfです。",avereage);
}