ページ 1 / 1
breakとcontinueを使った問題です
Posted: 2012年10月11日(木) 13:41
by ジョン
今回の問題は実数を7回入力してその合計を表示するという問題です
ただし、負の値が入力された場合は無効として合計の計算に入れない
また、10.0以上の値が入力されたら合計の計算をその場で打ち切る
これをbreakとcontinueを使って作成する
一応ここまで作ってみました↓
コード:
/*EX1*/
#include<stdio.h>
int main(void){
int i;
double x,sum;
sum=0;
for(i=1;i<=7;i++) {
if (i<=10);
break ;
if (x>=0) continue;
printf("%d番目のデータ?",i);
scanf("lf",&x);
sum+=x;
}
printf("合計=%f\n,sum");
return 0;
}
そうすると実行結果が
合計=0.000000
,sum続行するには何かキーを押してください . . .
と初めから表示されて値を入力することすら出来ません
どこがおかしいのか指摘お願いします
Re: breakとcontinueを使った問題です
Posted: 2012年10月11日(木) 13:58
by 翡翠
まず、今の状態では9行目のbreakがループの初めに必ず処理されています
結果、そのあとの入力処理がされずに、16行目の結果だけが表示される、
ということになっています
なので、for文の中身を、
1.xへの入力処理
2.入力されたxの値によって処理を分岐
となるように変更してみてください
あと、16行目のprintfは、現状ではsumの値を参照できていないので、
コード:
printf("合計=%f\n",sum);
とダブルクオーテーションの位置をカンマの前にしてください
Re: breakとcontinueを使った問題です
Posted: 2012年10月11日(木) 14:00
by nil
インデントをしっかり行なってください。
tab一つ(スペース4個分)です。
コード:
for(i=1;i<=7;i++) {
if (i<=10);
break ;
iの中身を頭で考えつつ上から考えていってみてください。
Re: breakとcontinueを使った問題です
Posted: 2012年10月11日(木) 18:24
by ジョン
何をどういじっても実行結果が変わらないです…
Re: breakとcontinueを使った問題です
Posted: 2012年10月11日(木) 18:58
by box
変数 i の役割は、「何個目の入力であるかを管理する」ことですよね。
しかも、7以下と決まっていますね。
ジョン さんが書きました:
10.0以上の値が入力されたら合計の計算をその場で打ち切る
こことは何の関係もないですね。
また、最後にセミコロンがある理由は何ですか?
このコードは、
ジョン さんが書きました:
ただし、負の値が入力された場合は無効として合計の計算に入れない
この仕様を満たしていますか?私には、「正の値または0を入力した場合を無効にしている」ように見えます。
それに、書く場所も正しくなさそうですね。
scanf() で x に値を入れた「後で」、負の値かどうかを判断したいんですよね?
Re: breakとcontinueを使った問題です
Posted: 2012年10月11日(木) 19:00
by とっち
正確なインデントで書いてみました
コード:
#include<stdio.h>
int main(void){
int i;
double x,sum;
sum=0;
for(i=1;i<=7;i++){
if(i<=10)
;
break;
if(x>=0)
continue;
printf("%d番目のデータ?",i);
scanf("lf",&x);
sum+=x;
}
printf("合計=%f\n,sum");
return 0;
}
このプログラムにおいて6~9行目の部分
コード:
for(i=1;i<=7;i++){
if(i<=10)
;
break;
はi=1のときこの部分はどうなるか考えてみてください。
自分の思ったとおりの動きをされているでしょうか
Re: breakとcontinueを使った問題です
Posted: 2012年10月11日(木) 23:30
by ジョン
セミコロンは文を切るためです
iは1?で7回より多く入れなくて一回ずつ増えてくってことじゃないんですか?
意味わかんないです
Re: breakとcontinueを使った問題です
Posted: 2012年10月11日(木) 23:47
by box
ジョン さんが書きました:セミコロンは文を切るためです
ダウト。参考書などで、if文の書き方を基本から勉強してください。
そもそも変数 i を使っている時点でおかしいのですが、
このif文は、i が10以下だったら何もしない、という意味になっています。
Re: breakとcontinueを使った問題です
Posted: 2012年10月12日(金) 01:11
by かずま
ジョン さんが書きました:
コード:
printf("%d番目のデータ?",i);
scanf("lf",&x);
sum+=x;
入力した値をすぐに合計に足していますよね。
問題文をよく読んで理解してください。
次のようにしないとダメなのは自明では?
次のことを 7回繰り返す
x に入力
x が負だったら無効 → continue でループを続ける(回数は増やさない)
x が 10.0以上だったら打ち切る → break でループを抜ける
合計に x を足す (入力が正しかったので回数を増やす)
なんで、変な場所で回数の i を 10 と比較するんですか?
x を 10.0 と比較するんでしょ。
Re: breakとcontinueを使った問題です
Posted: 2012年10月12日(金) 05:06
by てんむすキツネ
まずは、どの変数になんの値が入っているのか考えてみてください。
//
をうつことで、コメントがかけるので、
コード:
int i; //どこまで増えたか
double x; //キーボードから入力された値
double sum; //最後に表示するxの合計の値
みたいな感じで。
forやifの使い方がわかってないのでしょうか?
コード:
max=5;
for( i=0 , i<max; i++ ){
printf("%d",i);
}
これのmaxの値を変えたりして何回か実行してみてください。
maxがどういう役割を果たしていて、
iがどのように、どこまで増えているのか
確認してみてください。
まず、セミコロンや、かっこなどの意味を理解されていないように思えます。
ああいう記号にはひとつひとつに意味があります。
それをまず勉強されるべきだと思います。
1から作らなくても、ぐぐればサンプルコードはでてきます。
それらを組み合わせたり、改造したりして
何がどういう動きをして、どういう書き方が正しいか
調べてみてください。
Re: breakとcontinueを使った問題です
Posted: 2012年10月12日(金) 18:23
by ジョン
先程、ようやくできました!
みなさんありがとうございました
こちらです↓
コード:
#include <stdio.h>
int main(void) {
int count;
double x,sum;
count=0;
sum=0;
while(count<7) {
printf("データを入力して下さい");
scanf_s("%lf",&x);
if (x<=8) continue;
if (10<=x) break;
sum+=x;
count++;
}
printf("合計=%7.3f\n",sum);
return 0;
}
フローチャートとをアバウトに考えて一から書き直すこと数時間…
ようやくです
本当にありがとうございました
Re: breakとcontinueを使った問題です
Posted: 2012年10月12日(金) 18:38
by nil
『負の値が入力された場合は無効として合計の計算に入れない』という処理が見られないのですが……
Re: breakとcontinueを使った問題です
Posted: 2012年10月12日(金) 19:26
by box
ジョン さんが書きました:先程、ようやくできました!
本当ですか?
ここの意味が全くわかりません。何がしたいのでしょうか。
Re: breakとcontinueを使った問題です
Posted: 2012年10月13日(土) 07:47
by てんむすキツネ
breakとcontinueを使うのが条件だから無理やり使ったのでしょうか?
breakは処理を中断するとき、continueは処理を再度やり直す時等に使うと思います。
行うタイミングとしては、
エラーが起きた時、カンストした時 break;(キー入力だと半端じゃない桁も入力できると思うので。)
負の値が入力された時、カウンタも合計も追加しないようにする continue;(ループ内でこれより後の処理そ飛ばします)
等があると思います。