ページ 11

ループを使った課題

Posted: 2006年12月07日(木) 18:04
by mai
以前は課題のアドバイスと回答をいただきありがとうございました。 {無限ループを使って、変数の数に1.5ずつ加算して50をこえたらそこで終了、ただし3の倍数だけを表示する。} という課題で教科書を調べてみたのですが、forをもちいて作成すればいいのでしょうか まったくわからずこまっています どうかおねがいします

Re:課題

Posted: 2006年12月07日(木) 18:37
by keichan
>forをもちいて作成すればいいのでしょうか
forを用いるとこんな感じですね。
#include <stdio.h>

int main()
{
    double sum = 0.0;   /* 初期値が指定されていないのでとりあえず 0 で初期化 */
    for( ; sum < 50.0; ) {
        if( (int)sum % 3 == 0 ) {
            printf([color=#0000ff">"%lf\n"[/color], sum);   /* 最初の加算に入る前に出力をしてもいいのか指定がないのでとりあえず出力 */
        }
        sum += 1.5;
    }
    return 0;
}
これを参考に while を用いて作ってみてください^^

Re:課題

Posted: 2006年12月07日(木) 18:48
by mai
keichanさんアドバイスありがとうございます。教科書をさがしてみたところ for while 2つのやりかたがのっていたのですが、使い分けとかはあるのでしょうか

Re:課題

Posted: 2006年12月07日(木) 19:04
by keichan
言語仕様的に明確な使い分けが規定されているわけではありません。

ただ、一般的とはわかりませんが私がしている使い分け方を載せます。

・for
既定回数の反復処理を行う場合に使用。
例)1~10までprintfで出力を行う
  for( int i=1; i<=10; i++ ) {
    printf("%d\n", i);
  }

・while
反復処理を何回行えばよいか状況によって異なる場合に使用。
例)ある数を2で割り続け、割った後の結果が0になるまで反復
  int a = 100;
  while( a != 0 ) {
    a /= 2;
    printf("%d\n", a);
  }

Re:課題

Posted: 2006年12月07日(木) 19:41
by box
> for while 2つのやりかた
for (A; B; C) {
	何かの処理;
}

と

A;
while (B) {
	何かの処理;
	C;
}
は、「何かの処理」に continue; を含まない場合、全く等価です。
「この場合にはこちらでなければならない」というような
決まり事はありません。
お好きな方をお使いください。

Re:課題

Posted: 2006年12月07日(木) 20:06
by mai
みなさんありがとうございました。これからwhile文に挑戦してみたいとおもいます。 

Re:課題

Posted: 2006年12月07日(木) 23:56
by 管理人
皆様が、丁寧に解説していらっしゃるので、必要ないかと思いますが

・for文 は何回ループさせるか初めにわかっている時使う
・while文は何回ループさせるか初めにわかっていない時に使う

と覚えておくとよいでしょう。