またまた質問です。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sweden

またまた質問です。

#1

投稿記事 by sweden » 15年前

学校の宿題をやっているのですが、aをn回足すってどういう風に書けばいいんでしょうか??初歩的ですいません。

御津凪

Re:またまた質問です。

#2

投稿記事 by 御津凪 » 15年前

どこまで習っているのかは質問から汲み取れませんが、
for 文を使えば可能です。

sweden

Re:またまた質問です。

#3

投稿記事 by sweden » 15年前

すいません。まだfor文は習っていない状態です。for文を使わなくでできる方法はあるのでしょうか?

御津凪

Re:またまた質問です。

#4

投稿記事 by 御津凪 » 15年前

他の方法には
・while 文
・goto 文
・再帰処理
がありますが、多分習っていないと思いますし。

もしかしたら、「aをn回足す」の部分の表現を言い換えたものが答えなのでは?

sweden

Re:またまた質問です。

#5

投稿記事 by sweden » 15年前

レスありがとうございます。while文、if文は習いました。具体的な数字は出ないのでアルファベットa,nとおいたのですが・・・。これがどうしてもわかりません。while文で考えたのですがどうしてもひらめきません。どう書けばよいのでしょうか??

御津凪

Re:またまた質問です。

#6

投稿記事 by 御津凪 » 15年前

基本的なC言語の構文の意味で出題されているのであれば、
「aをn回足す」の答えは、「a×n」と同じなので、これと同等の命令文が答えなのかもしれません。

sweden

Re:またまた質問です。

#7

投稿記事 by sweden » 15年前

すいません、説明不足でした。今サイコロをn回振り、出た目の平均を出す問題をやっていいるのですが、出た目をaとおいてやっているのでaはランダムに1~6まで出てくるんです。なので、出た目の合計の出し方がわからなくて困っている状態です。

御津凪

Re:またまた質問です。

#8

投稿記事 by 御津凪 » 15年前

では、おおよそ以下のような順序になります。

1. 合計を格納する変数を用意しておく。(0で初期化、ここでは仮に x とする)
2. while 文で n 回ループさせる。
3. その中で 1 ~ 6 のランダムの数値を出し、その値を x に足す。
4. x を n で割れば出た目の平均が算出される。

この方法であれば、 while 文から出た時に x は出た目の合計となるはずです。


※ところで、http://dixq.net/board/board.htmlを読みましたか?

sweden

Re:またまた質問です。

#9

投稿記事 by sweden » 15年前

ありがとうございます。その方法でやっているんですが、n回ループさせるってのはそうやるんでしょうか??たびたびすいません。
読んでませんでした。迷惑かけてすいません。

御津凪

Re:またまた質問です。

#10

投稿記事 by 御津凪 » 15年前

> 2. while 文で n 回ループさせる。
// 1. の処理部分
while(n > 0){
    // ループ内の処理(3. の処理部分)
    n--;
    // n--; (--n;)を習っていないのなら、
    // n -= 1; か、 n = n - 1; でも可
}
// 4. の処理部分
だいたいこんな感じです。

sweden

Re:またまた質問です。

#11

投稿記事 by sweden » 15年前

何回もありがとうございます!!やってみます。

sweden

Re:またまた質問です。

#12

投稿記事 by sweden » 15年前

やってみましたが上の方法だと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);
}

toyo

Re:またまた質問です。

#13

投稿記事 by toyo » 15年前

nは繰り返したい回数で初期化しないといけませんよ
100回繰り返したいなら
n = 100;
while ( n > 0) ...

sweden

Re:またまた質問です。

#14

投稿記事 by sweden » 15年前

レスありがとうございます。繰り返す回数はいちばん最初にscanfで入力することになってるんです。なので困っています・・・・。

御津凪

Re:またまた質問です。

#15

投稿記事 by 御津凪 » 15年前

scanf で数字を読み込む方法は理解していますか?
scanf("%d", &n); // 入力した数字を数値として n に読み込む
あと、while 文で n を変更している( 1 ずつ引いている)ので、
ループを抜けた後は n は 0 になってしまいます。
ので、 while 文に入る前に別の変数に退避し、
平均の計算時に退避した変数を使用すると良いでしょう。

また、 S/n としていると、整数の結果を返してしまう(小数点以下が切り捨てられる)ので、
浮動小数点型(float か double)に変換して割る必要があります。
例: (double)S / n
(どちらかが浮動小数点値なら、浮動小数点として計算されます)

sweden

Re:またまた質問です。

#16

投稿記事 by sweden » 15年前

どうしても警告が出てしまってできません・・・・。プログラムはこんな感じです・・・。
#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);
}

MNS

Re:またまた質問です。

#17

投稿記事 by MNS » 15年前

n=kaisuu;
これは逆ではありませんか?
kaisuu = n;

sweden

Re:またまた質問です。

#18

投稿記事 by sweden » 15年前

できました~~!!ありがとうございます!ほんとに迷惑かけてすいませんでした。また疑問が出たらよろしくです。

閉鎖

“C言語何でも質問掲示板” へ戻る