• ベストアンサー

n^kのwhile文のプログラムについて

下のプログラムを実行すると無限に計算されるのはなぜですかどこがおかしいか教えてください /* while1.c---for bun* n no jou*/ main() { int n,k,m,i; printf("Input n\n"); scanf("%D",&n"); printf("Input k\n"); scanf("%d",&k"); m=1; while (i<=5) { m=m*n; printf("%d no %d jou =%D\n",n,i,m); i++; } } あとこれをdo while文にするにはどうすればいいんですか

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

  • ベストアンサー
  • rara_sun
  • ベストアンサー率50% (271/539)
回答No.3

恐らく 変数iを初期化していないための 不具合と考えられます。 C言語のようですので、変数宣言しただけでは、値を入れるiという箱を用意しただけになります。 その箱は、空(0)とは限りません。極端な話、以前、その箱をだれかが使っていれば、その使いまわしになる可能性があります。 ですから、宣言をして直ぐに参照するのは、 C言語ではタブーです。 というか・・・ > scanf("%d",&k"); こんな入力をしているのに、kを使わないのはなぜ? って話になるので、きっと、whileの前に i=k; と入れたかったのでは? nのi乗を計算して、mに入れたいんですよね? あと、while文にこだわりたいのということみたいなので・・(私ならfor文使っちゃうけど・・・) こうなればよいのかな? i=1; m=1; while( i <= k ) { m=m*n; printf("%d no %d jou =%D\n",n,i,m); i++; } > あとこれをdo while文にするにはどうすればいいんですか whileは、判定が先、 do while は、判定が後、 の違いだけですので・・・ こうなるんでしょうかね。 i=0; m=1; do{ m=m*n; i++; printf("%d no %d jou =%D\n",n,i,m); }while( i < k );

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

>無限に計算されるのはなぜですかどこがおかしいか教えてください 本当に無限に計算されていますか。ソースを見た感じでは、そうはなりそうも無いですが。 勿論、iが初期化されていないので、意図した結果にはなりませんが。 >あとこれをdo while文にするにはどうすればいいんです現在は、前判定法式ですよね。同じ処理にするには、do whileの前に、繰り返しの継続判定を入れれば良いです。

すると、全ての回答が全文表示されます。
  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

>無限に計算されるのはなぜですかどこがおかしいか ループを制御するiの値が初期化されていませんよね。 int n,k,m,i=0; のように記述するか、 while の前までに i=0; を入れてください。 (現在は多分、i の値が 負になっているのでは?) こういう繰り返しの場合は、for 文の方がわかりやすいかもしれませんね。 こちらのサイトが役に立つと思います。 とりあえず「4.制御文その1-while文」をどうぞ。 http://homepage1.nifty.com/toshio-k/prog/c/

参考URL:
http://homepage1.nifty.com/toshio-k/prog/c/
すると、全ての回答が全文表示されます。

専門家に質問してみよう