breakとcontinueを使った問題です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ジョン

breakとcontinueを使った問題です

#1

投稿記事 by ジョン » 7年前

今回の問題は実数を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続行するには何かキーを押してください . . .

と初めから表示されて値を入力することすら出来ません
どこがおかしいのか指摘お願いします

翡翠
記事: 6
登録日時: 9年前

Re: breakとcontinueを使った問題です

#2

投稿記事 by 翡翠 » 7年前

まず、今の状態では9行目のbreakがループの初めに必ず処理されています
結果、そのあとの入力処理がされずに、16行目の結果だけが表示される、
ということになっています

なので、for文の中身を、
1.xへの入力処理
2.入力されたxの値によって処理を分岐
となるように変更してみてください

あと、16行目のprintfは、現状ではsumの値を参照できていないので、

コード:

printf("合計=%f\n",sum);
とダブルクオーテーションの位置をカンマの前にしてください

nil
記事: 428
登録日時: 8年前

Re: breakとcontinueを使った問題です

#3

投稿記事 by nil » 7年前

インデントをしっかり行なってください。
tab一つ(スペース4個分)です。

コード:

for(i=1;i<=7;i++) { 
if (i<=10);
 break ;
iの中身を頭で考えつつ上から考えていってみてください。

ジョン

Re: breakとcontinueを使った問題です

#4

投稿記事 by ジョン » 7年前

何をどういじっても実行結果が変わらないです…

box
記事: 1746
登録日時: 9年前

Re: breakとcontinueを使った問題です

#5

投稿記事 by box » 7年前

ジョン さんが書きました:

コード:

if (i<=10);
変数 i の役割は、「何個目の入力であるかを管理する」ことですよね。
しかも、7以下と決まっていますね。
ジョン さんが書きました: 10.0以上の値が入力されたら合計の計算をその場で打ち切る
こことは何の関係もないですね。
また、最後にセミコロンがある理由は何ですか?
ジョン さんが書きました:

コード:

 if (x>=0) continue;
このコードは、
ジョン さんが書きました: ただし、負の値が入力された場合は無効として合計の計算に入れない
この仕様を満たしていますか?私には、「正の値または0を入力した場合を無効にしている」ように見えます。
それに、書く場所も正しくなさそうですね。
scanf() で x に値を入れた「後で」、負の値かどうかを判断したいんですよね?
最後に編集したユーザー box on 2012年10月11日(木) 19:07 [ 編集 1 回目 ]
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

とっち
記事: 56
登録日時: 8年前
住所: 岡山

Re: breakとcontinueを使った問題です

#6

投稿記事 by とっち » 7年前

正確なインデントで書いてみました

コード:

#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を使った問題です

#7

投稿記事 by ジョン » 7年前

セミコロンは文を切るためです

iは1?で7回より多く入れなくて一回ずつ増えてくってことじゃないんですか?

意味わかんないです

box
記事: 1746
登録日時: 9年前

Re: breakとcontinueを使った問題です

#8

投稿記事 by box » 7年前

ジョン さんが書きました:セミコロンは文を切るためです
ダウト。参考書などで、if文の書き方を基本から勉強してください。

コード:

    if (i <= 10);
そもそも変数 i を使っている時点でおかしいのですが、
このif文は、i が10以下だったら何もしない、という意味になっています。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

かずま

Re: breakとcontinueを使った問題です

#9

投稿記事 by かずま » 7年前

ジョン さんが書きました:

コード:

 printf("%d番目のデータ?",i);
 scanf("lf",&x);
 sum+=x;
入力した値をすぐに合計に足していますよね。

問題文をよく読んで理解してください。
次のようにしないとダメなのは自明では?

次のことを 7回繰り返す
  x に入力
  x が負だったら無効 → continue でループを続ける(回数は増やさない)
  x が 10.0以上だったら打ち切る → break でループを抜ける
  合計に x を足す (入力が正しかったので回数を増やす)

なんで、変な場所で回数の i を 10 と比較するんですか?
x を 10.0 と比較するんでしょ。

アバター
てんむすキツネ
記事: 88
登録日時: 9年前
住所: 岡山

Re: breakとcontinueを使った問題です

#10

投稿記事 by てんむすキツネ » 7年前

まずは、どの変数になんの値が入っているのか考えてみてください。
//
をうつことで、コメントがかけるので、

コード:

int i;            //どこまで増えたか
double x;     //キーボードから入力された値
double sum; //最後に表示するxの合計の値
みたいな感じで。

forやifの使い方がわかってないのでしょうか?

コード:

max=5;
for( i=0 , i<max; i++ ){
    printf("%d",i);
}
これのmaxの値を変えたりして何回か実行してみてください。
maxがどういう役割を果たしていて、
iがどのように、どこまで増えているのか
確認してみてください。


まず、セミコロンや、かっこなどの意味を理解されていないように思えます。
ああいう記号にはひとつひとつに意味があります。
それをまず勉強されるべきだと思います。

1から作らなくても、ぐぐればサンプルコードはでてきます。
それらを組み合わせたり、改造したりして
何がどういう動きをして、どういう書き方が正しいか
調べてみてください。
MLP!MLP!

ジョン

Re: breakとcontinueを使った問題です

#11

投稿記事 by ジョン » 7年前

先程、ようやくできました!
みなさんありがとうございました

こちらです↓

コード:

#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;
}
フローチャートとをアバウトに考えて一から書き直すこと数時間…
ようやくです

本当にありがとうございました

nil
記事: 428
登録日時: 8年前

Re: breakとcontinueを使った問題です

#12

投稿記事 by nil » 7年前

『負の値が入力された場合は無効として合計の計算に入れない』という処理が見られないのですが……

box
記事: 1746
登録日時: 9年前

Re: breakとcontinueを使った問題です

#13

投稿記事 by box » 7年前

ジョン さんが書きました:先程、ようやくできました!
本当ですか?
ジョン さんが書きました:

コード:

		if (x<=8) continue;
ここの意味が全くわかりません。何がしたいのでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
てんむすキツネ
記事: 88
登録日時: 9年前
住所: 岡山

Re: breakとcontinueを使った問題です

#14

投稿記事 by てんむすキツネ » 7年前

breakとcontinueを使うのが条件だから無理やり使ったのでしょうか?

breakは処理を中断するとき、continueは処理を再度やり直す時等に使うと思います。

行うタイミングとしては、
エラーが起きた時、カンストした時 break;(キー入力だと半端じゃない桁も入力できると思うので。)
負の値が入力された時、カウンタも合計も追加しないようにする continue;(ループ内でこれより後の処理そ飛ばします)

等があると思います。
MLP!MLP!

閉鎖

“C言語何でも質問掲示板” へ戻る