c
1 2 3 int money = 1, month = 1; 4 5 while (money < 1000000) { 6 printf("%02d 月目 : %7d 円\n",month,money); 7 money *= 2; 8 month++; 9 } 10 printf("%02d 月目 に %d 円となり、100万円を超える。\n",month,money); 11
苦しんで覚えるc言語というサイトでわからないなりに進めていってるんですが
回数が決まっている繰り返しでfor文
回数がわからない繰り返しでwhile文の説明がありました
while文はfor文にも直せるみたいなんですが
このwhile文の例をfor文に直そうと色々やってみたんですが
わからなくて(エラー出たり明らかに間違ってそうだった) これは問題じゃないから答えもないからわからなくてなので教えてください
答え見たら公式?みたいになんとなくわかって似たような問題解けるかもだし
for文にするには初期化と更新の文を省略するだけです。って書いてたけどわからない
言い訳をいっぱいしたのは問題丸投げ批判されるのが怖かったからです
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答6件
0
ベストアンサー
答えを書いてしまいますと、こうなります。
c
1int money, month = 1; 2for(money = 1; money < 1000000; money*=2) { 3 printf("%02d 月目 : %7d 円\n",month,money); 4 month++; 5}
while文からfor文に直す問題をやるより前に、for文とはこう書くんだ、ということを学習していないんですか?
問題を解く以前に基礎がわかっていないと、「苦しんで覚える」という苦しむ意味が違ってしまうと思いますよ。
投稿2016/06/28 07:24
総合スコア16998
0
質問者さまのいう「for文にするには初期化と更新の文を省略するだけです」というのは、以下のような形を指します。
Java
1while(money < 1000000) { 2} 3 4for(;money < 1000000;){ 5}
このwhileとforは全くの同じ意味です。初期化文、更新文を省略というのは、これら2つの文は「書かなくても構文エラーではない」ので、省略することが可能です。極論を言うとforは「条件文」すら省略できます。while文とfor文の構成は以下のようになっていることはすでに学習済みですか?
Java
1while(/*条件文*/) { // ←構文エラー。whileの条件文は必ず書かなければならない 2} 3 4for( /*初期化文*/ ; /*条件文*/ ; /*更新分*/ ) { // ←構文エラーではない。forはそれぞれ省略可 5 // breakしないかぎり無限にループする、全てを省略したfor文「for(;;){}」 6}
投稿2016/06/28 07:32
総合スコア9206
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
C言語の場合、for
とwhile
は、書き方の違いでしかありません。
C
1/* forでの書き方 */ 2for(式1; 式2; 式3){ 3 ループの文; 4} 5 6/* whileでの書き方 */ 7式1; 8while(式2){ 9 ループの文; 10 式3; 11}
ここで、for
の場合の式1、式2、式3はいずれも省略できますので、for(; 式2; )
のようにすれば、while
のときと一致することがわかると思います。
なお、forで式2を省略した場合、条件は真であるとみなされます。そのため、for(;;)
とwhile(1)
はどちらも無限ループになります。
投稿2016/06/28 07:27
総合スコア145184
0
forとwhileは本質的には同じもので、少しforの方が一度に書けることが多い、というだけです。
forの方が書けることが多いと言っても、forの中に書く式は省略できますので、
C/C++
1while(1){ 2 ~~~ 3}
と
C/C++
1for(;;){ 2 ~~~ 3}
は全く同じ意味になります(実際全く同じようにコンパイルされます)。
ループなのでどちらも条件式を書けますが、条件式のみ書けるのがwhile、条件式に加え初期処理と更新処理も一度に書けるのがforというだけです。
まあ、もし分かりにくければ、とりあえずwhile(1)やfor(;;)というように無限ループにしてしまって、if文で条件式を中に書いてbreak;するというのもアリかもしれません(効率は悪いですが、理解はしやすいと思います)。
以下のような感じで。
C/C++
1int i=0; 2while(1){ 3 if(i<100){ 4 break; 5 } 6 i++; 7}
C/C++
1int i=0; 2for(;;){ 3 if(i<100){ 4 break; 5 } 6 i++; 7}
とりあえずこういうやり方でループに慣れたら、forやwhileのありがたみが分かると思うので、そうなったらもう大丈夫でしょう。
投稿2016/06/28 08:39
総合スコア20
0
for 文の基本形は次のようなものです。
C
1int i; 2for (i = 0; i < 100; i++) 3{ 4 //ループする内容 5}
最初のi=0
は初期化です。
ループが始まる前に変数 i に 0 を代入しています。
次のi < 100
は継続条件です。
ループの先頭で評価して、これが真でない場合、ループを終了します。
最後のi++
はループ毎に行う処理です。
以上を while で表すと、次のようになります。
C
1int i = 0; 2while (i < 100) 3{ 4 //ループする内容 5 i++; 6}
投稿2016/06/28 07:31
編集2016/06/28 07:33総合スコア28660
0
whileはbool型引数がtrueである場合、内部に指定された処理を実行する特性があります。
今回、質問者さんの投稿だと「moneyが1000000未満である場合」が真の条件で、それ以外が偽の条件となります。
一方、forに関しては「初期値を定義し、条件を満たすまでループする」という特性があります。
そのため、記述としては今回moneyは1からスタートなので、初期値1からスタートとし、特定の変数に演算処理を加え、条件を満たしていれば終了する、といった内容になります。
for(初期;条件;更新){ ここに処理 }
whileの場合だと
while( 条件 ){ ここに処理 }
あとは質問者さんの本文に答えはありますので、その点は考えてみてください。
###余談
めちゃくちゃ細かいことですが、
while (money < 1000000) {
と
printf("%02d 月目 に %d 円となり、100万円を超える。\n",month,money);
ここで少し内容が食い違っていると思います。
必要なことではないと思いますが、気になりました。
投稿2016/06/28 07:28
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/28 09:42
退会済みユーザー
2016/06/28 10:00
2016/06/29 16:32
退会済みユーザー
2016/06/30 01:22 編集
2016/07/25 08:48 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/28 09:42
2016/06/28 12:06
2016/06/29 16:33