No.2ベストアンサー
- 回答日時:
目標値の定数1個
入力数字の変数1個
カウンタ用変数1個を用意し、
入力したら1増やすカウンタと20回で抜けるif文と、さらにその内側でif文での目標値の比較を組合せれば、どうってことのない基本ルーチンだと思いますが・・
宿題を丸投げするのは、ここでは禁止です。
自分でコードを考え、どこがうまくいかないかを質問しなおしましょう。
そうすれば親切な回答が得られると思います。
この回答への補足
すいません 丸投げしたわけではないのです。
初めてこのサイトを使うのでいまいち良くわかりませんでした
#include<stdio.h>
int main(void)
{
int a,b,n;
n=0;
a=123;
while(n<22){
printf("Input date:");scanf("%d",&b);n++;
if(a>b) {puts("小さい!"); continue;}
else if(a<b) {puts("大きい!"); continue;}
else if(a=b) {puts("あたり"); break;}
printf("残念",n>20);
}
return 0;
}
こんな感じに作ったんですがどうもうまくいきません
No.9
- 回答日時:
個人的には #6 と同じく continue を使わない方がいいと思います.
おそらく, 「普通レベルのプログラマにおける理解度」は
else > break > continue
だと思います. つまり, 「else の動作についてはほぼ確実に理解できているだろうけど break はちょっとあやしく, continue はますますあやしい」と思った方がいいです.
ついでにいえば, その「スッキリしている」ソースは危険だと思います>#8.
「21 <= iPoint などといった比較は不自然である」という問題もありますが, もっと大きくは「順序を間違えると確実にバグを作り込める」という危険性です. だいたい, その if 文のかたまりを書く人間がそんな else if を書くはずないです. 普通なら
if (iPoint <= 20) iRank = A;
else if (iPoint <= 40) iRank = B;
...
と書くことでしょう. もちろんこれでも「順番を間違えるとバグを作り込める」という危険性はありますが, else が入っているためコンパイラが気付いてくれる可能性があります.
または, 「仕様を正確に記述する」ということを念頭におくなら, 同じ else if を使わないにしても
if (0 <= iPoint && iPoint <= 20) iRank = A;
if (21 <= iPoint && iPoint <= 40) iRank = B;
...
とするでしょう.
ある意味では
int rank[] = { A, A, ..., B, B, ... };
と「得点からランクへの変換表」を用意するのが最も正しいのかもしれませんが.
No.8
- 回答日時:
( else のキライな年寄りが、余分なことまで)
>始めて間もないもので簡単ではありません
どこで「 else if 」の記述法を習得されたのでしょう。
★書籍名等を補足頂けないでしょうか。
No.6 さんの
>それ以外の continue 文は不要のはずです。
「 else は不要のはずです」が私の考え。
-----------------------------------------------
★ソースをスッキリ(?)させてみました。
・ ▼ には、行かないことが判るかと・・。
・ではどうするか、(次の3行《のみ》が「回答」)
「あたり」になったとき、フラグを立てる。
while を抜けた後、フラグを見て、立って
いなかったら、「残念」と出力。
(フラグ:変数を1つ用意し・・)
while( n < 22 ){
printf( "Input date:" );
scanf( "%d", &b );
n++;
if( a > b ){
puts( "小さい!" );
continue;
}
if( a < b ){
puts( "大きい!" );
continue;
}
puts( "あたり" );
break;
printf( "残念", n > 20 ); // ▼ 残念
}
------申し訳ない、以降、ご質問とは離れます---------
★C言語を「難しい」とさせている一因は、else だ。
と、年寄りは思っています。
★ else も goto 文のように・・、と思っています。
---------------------------------------------------
なぜ else が使われるのか・・ちょこっと思考。
・if(else) 文についての、固定観念(?)がある?。
・これは、C言語入門における「悪書」の影響?。
・悪書は、おつりを「引き算」で求めず◆「積み上げ」で
求める人により書かれた???。
(一度判定したものに、いつまでも◆囚われている?)
---------------------------------------------------
例)0点から100点までを、次のように5分するとき、
A:0-20, B:21-40, C:41-60, D:61-80, E:81-100
---------区分から、そのまんま忠実(固定観念?)に
if( 0 <= iPoint && iPoint <= 20 ) iRank = A;
else if( 21 <= iPoint && iPoint <= 40 ) iRank = B;
else if( 41 <= iPoint && iPoint <= 60 ) iRank = C;
else if( 61 <= iPoint && iPoint <= 80 ) iRank = D;
else if( 81 <= iPoint && iPoint <= 100 ) iRank = E;
---------とするより、ひねくれて(?)
iRank = A;
if( 21 <= iPoint ) iRank = B;
if( 41 <= iPoint ) iRank = C;
if( 61 <= iPoint ) iRank = D;
if( 81 <= iPoint ) iRank = E;
----------の方がスッキリしている。ただし、
☆スッキリか否かはソースレベルのことで、コンパイラにより「最適化」は行われると思います。
☆スッキリしないソースの方が、場合によっては「実行速度」で優れる場合も考えられます。
☆スッキリしないソースの方が、「知的財産の保全」に有利です。
以上3点は、・・・蛇に足6本???。
--------------------------
(年寄りの考えの根底)
・スッキリしている → ミスの入り込む余地が小さい。
↑えっ?これを言いたいだけでダラダラと・・?。
No.7
- 回答日時:
> else if(a=b) {puts("あたり"); break;}
> printf("残念",n>20);
「等しい」ことの比較の文法は?
教科書を見直してみましょう。
No.6
- 回答日時:
>#include<stdio.h>
>int main(void)
>{
> int a,b,n;
> n=0;
> a=123;
> while(n<22){
> printf("Input date:");scanf("%d",&b);n++;
> if(a>b) {puts("小さい!"); continue;}
> else if(a<b) {puts("大きい!"); continue;}
> else if(a=b) {puts("あたり"); break;}
> printf("残念",n>20);
> }
> return 0;
>}
>このように作ったのですが、20回で止まるのですが、残念と表示されません
いろいろ書いてみよう。
1. 変数には意味のある名前をつけましょう。
例) a が「あらかじめ設定した目標値」なんですよね。target_value とかにしましょう。
2. 定数は、C 言語であれば、#define あるいは enum で定義しましょう。
例) #define LOOP_COUNT 20
3. n がループのカウントのようですが、なぜ 22 と比較しているのですか?
n が 0からスタートして 21まで、22回ループしていませんか?
また、単純なループであれば for ループを使いましょう。
4. 一行にコードを詰め込みすぎです。基本的に一行に書くのは一文にしましょう。
5. "Input date: " は "Input data" の typo?
6. scanf() を使うのはやめましょう。エラーの時の処理ができません。
ユーザからの入力を受け取る場合は、文字列として入力を受け取って、数値かどうかなどを自前で確認しましょう。
7. なるべく、continue や break の類いは使用しないようにしましょう。
今回の場合、正解した場合に break してループを抜けるのは止むを得ませんが、それ以外の continue 文は不要のはずです。
8. printf() の書き方が間違っています。マニュアルを読みましょう。
また、「残念」と出力するのはループを抜けた後ですね。
No.5
- 回答日時:
がると申します。
んと…ちと、順を追って。
#4さんも書かれてますが。まず「一つずつ分解して」書いていくほうがよいと思います。
ステップアップの方向としては…
・とりあえず20回ループ(ループするだけ
・20回ループして、数値を入力(入力されただけ:確認用に表示してもよいかも
・ループの前に数字を決めておいて、入力された値によって「小さい/あたり/大きい」と出力(あたりのあともループしっぱなし
・あたりになったときはループから抜けるようにする
・ループから抜けた時に、あたりがでていなかったら「残念」って表示する
くらいに細かく砕くと、途中までは出来て、途中から出来なくなる、んではないかと思います。
また経過とか教えていただければコメント出来るかと思います ^^
No.1
- 回答日時:
> なるべく早い回答を望んでいます。
宿題の丸投げは、ここでは禁止事項です。
> なかなかつくれない問題があります
ということは、全くできないわけではないのですね。
でしたら、作成されたソースコードを見せてください。
この回答への補足
#include<stdio.h>
int main(void)
{
int a,b,n;
n=0;
a=123;
while(n<22){
printf("Input date:");scanf("%d",&b);n++;
if(a>b) {puts("小さい!"); continue;}
else if(a<b) {puts("大きい!"); continue;}
else if(a=b) {puts("あたり"); break;}
printf("残念",n>20);
}
return 0;
}
このように作ったのですが、20回で止まるのですが、残念と表示されません
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 3つの倍精度浮動小数点値の平均を求めて、3つの引数全てを平均値に変更するメソッドを作成し、キーボード 1 2022/07/13 16:04
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Java Java 南京錠 2 2023/02/04 11:46
- Java Java 年数計算 3 2023/01/28 10:52
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- その他(データベース) Accessフォームにて指定のフィールドの平均値を小数点第一位で表示できない 2 2022/08/30 17:19
- Java Java モンスターブリーダー 1 2023/02/05 09:44
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
入力した数値を倍々するプログラム
-
break文でループを一気に抜ける...
-
do-while文が禁止される理由
-
clock関数を利用した時間計測法...
-
ループを途中で抜けたいのですが。
-
C言語forループが完結した場合...
-
PIC のプログラムについて ど...
-
線形探索(番兵法)のプログラ...
-
While文の終わりにセミコロンが...
-
独立係数について教えて下さい。
-
Enterキーを押されたら次の処理...
-
信頼区間の1.96や1.65ってどこ...
-
2÷3などの余りについて
-
マイナスからプラスへ転じた時...
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語について。
-
「Aに対するBの割合」と「Aに対...
-
正負を反転させて出力するプロ...
-
EXCELの分散分析表のP-値が....
-
大学数学の問題です。 加法群Z/...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
break文でループを一気に抜ける...
-
ループを途中で抜けたいのですが。
-
入力した文字列から母音だけを...
-
do-while文が禁止される理由
-
入力した数値を倍々するプログラム
-
C言語forループが完結した場合...
-
if文の中にfor文なのか、for文...
-
プログラミングC言語についての...
-
エクセルVBAで Do While (1)って?
-
For文の終了値を関数にしても問...
-
エクセルでC言語のfor文と同じ...
-
Delphiで・・・
-
ループの特定入力終了
-
UWSCにてある一定の動作を無限...
-
C言語、自己参照構造体のプログ...
-
C言語 数字を削除する関数
-
Cプログラムが終了しない
-
Excel VBAで年度をまたぐ期間の...
-
プログラムで関数は使わない方...
-
VBScriptでSQLに接続し、CSV出...
おすすめ情報