• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:while文でつまづいています)

C言語で細胞分裂プログラムを作成する方法

このQ&Aのポイント
  • C言語で細胞分裂プログラムを作成していますが、うまく動作しません。
  • プログラムでは、1日目に1個の細胞数になると表示されてしまい、15日目に16384個の細胞数になる結果が得られません。
  • 解決策として、while文の条件を修正するなど、プログラムの改善が必要です。

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

  • ベストアンサー
  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.4

いくつか突っ込みどころがありますのでひとつひとつ行きましょう。 1)条件式が逆 while( n > 10000 ) は、 「nが10000より大きい時に、次の処理を実行せよ」という記述なので、質問者殿の記述では、何もしないで抜けてしまう。(nを初期化していないので、最初のnが不明ですが、恐らく10000より小さい値が入っているのだと思われる) それから、変数は必ず初期化するクセをつけましょう。この記述だと、int n の定義の後、n > 10000 と、初期化されていないnを判定することになります。 これが、根本原因ですね。以下は、補足。 2)while文のbreak条件が冗長 最初のwhile("条件")を書くなら、途中のif文は要りません。 while文の書き方の例: ・条件の判定を最初にする場合     while("条件") {        演算     } ・演算後に条件判定をしたい場合     while( TRUE ) { (もしくは、while( 1 ) でも良い)         演算         if ("条件" ) break;     } ・演算後に条件判定をしたい場合(その2)     do {         演算     } while( "条件" ) 3)なぜpow()? 日ごとに、倍々に増えて行くので、結果は、2の(日数-1)乗 で良いのですが、 毎回、2の(日数ー1)乗を計算するのではなく、 この場合は、nが1ループする度に倍になる記述の方がシンプルで良いと思います。 例) int d = 1; int n = 1; (初期化) while ( n <= 10000 ) {    n = n * 2;    d++; } ご参考に。

usagi-doshi
質問者

お礼

とてもわかりやすく説明してくださり、ありがとうございます。 1週間前に始めましたが、この辺りから難しくなってきました。 もう一度基本を確認します。

その他の回答 (3)

  • jam-best
  • ベストアンサー率27% (94/344)
回答No.3

while()文は「()内が真である場合の間処理を実行」です。 1日目にn=1で 1>10000の処理結果は偽ですのでwhile文が1回で抜けています。 他の方もおっしゃっていますが、nも初期化しましょう。 プログラムの書き方は人それぞれですが、 個人的に、途中でif文で判定してbreakにするのであれば、while(1)で無限ループにするなどのほうがいいのではとも思います。

usagi-doshi
質問者

お礼

ありがとうございます。 もう一度勉強しなおします。 無限ループという方法もあるのですね。参考になります。

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.2

> while(n > 10000) これは、「while (n <= 10000)」では? nに初期値が代入されていないのも、気になります。

usagi-doshi
質問者

お礼

ありがとうございます。 初期化わすれてました。頭が混乱してますね。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

・n を初期化せずに使っているということに気づいてる? ・わざわざ pow を使う理由が分からない. ・while 文の意味を復習してください.

usagi-doshi
質問者

お礼

ありがとうございます。 基本からやり直します。

関連するQ&A