課題を解いているのですが考えが煮詰まってしまいました、助言の方、おろしくお願いします
環境 OS:WindowsXP
コンパイラ名とバージョン: visualc++2005
入力した0以上の整数値の2倍を計算して表示することを繰り返し行う。
負の整数値が2回連続入力されたらプログラムが終了する
ただし、無限ループ、breakを使用せずに、for文 while文で実現せよ
(数字以外は入力されないものとする)
(for文とwhile文をわけて実現と、一つの関数(main関数)にfor文とwhile文で実現せよ
#include <stdio.h> /*まずはwhile文から*/
int main()
{
int i;
int n;
int flag=0;
scanf("%d",&n) /*入力*/
while(flag==0) /*flagが0の間ループ
{
/*ループを抜けるフラグとマイナスの値が入力された場合のフラグを
立てたいと思っています*/
printf("%d",2*n) /*2倍を計算して表示*/
}
まだ全然なのでここまでしか考えれませんでした、他にどのような処理が
必要なのか教えて頂ければ嬉しいです。(文章変でスイマセン)
自分の中ではwhileのループを抜けるために
ループの中でflagに1を入れようかなと考えています。
Cのアルゴリズムで煮詰まっています
Re:Cのアルゴリズムで煮詰まっています
while(flag==0) /*flagが0の間ループ { /* 数値を入力 */ /* 入力値が負の場合もう一度入力 */ /* 入力値が0以上の場合2倍して表示 */ /* そうでない場合flag = 1 */ }こんな感じでしょうか
Re:Cのアルゴリズムで煮詰まっています
>toyoさん
負の整数を入力したとき、それが1回目なのか2回目なのかを
どこで判断していますか?
また、負の整数を1回入力した直後にゼロ以上の整数を入力したとき、
負の整数の入力回数をゼロにもどす必要はありませんか?
負の整数を入力したとき、それが1回目なのか2回目なのかを
どこで判断していますか?
また、負の整数を1回入力した直後にゼロ以上の整数を入力したとき、
負の整数の入力回数をゼロにもどす必要はありませんか?
Re:Cのアルゴリズムで煮詰まっています
</*ループを抜けるフラグとマイナスの値が入力された場合のフラグを
立てたいと思っています*/
この考えでいいと思いますよ。
あとは負の数かどうかを判定してあげればいいです。
if文を使いましょう。
できるだけ簡単に、基本に即してサンプルを作ってみたので、よければ参考にしてください。
立てたいと思っています*/
この考えでいいと思いますよ。
あとは負の数かどうかを判定してあげればいいです。
if文を使いましょう。
できるだけ簡単に、基本に即してサンプルを作ってみたので、よければ参考にしてください。
#include <stdio.h> int main() { int i=0; int number; int flag=0; while(flag==0) { printf("Enter the number:"); scanf("%d", &number); if(number < 0) { printf("Enter the number:"); //1度負の整数が入力された時の処理 scanf("%d", &number); if(number < 0) flag = 1; //2回連続で負の整数が入力されたのでフラグを立てる } printf("%d\n",2*number); } printf("Exit\n"); }あとプログラムはプレタブで囲むと見やすくなりますよ^^
Re:Cのアルゴリズムで煮詰まっています
ダッシュで作ったのにもう回答なさっている方がいる^^;
初級者さんのおっしゃる通り、ポイントはタイミングですかね。
負の数が1度入力されたときにどういった処理をしてあげればよいか、
もう一度よく考えてみてくださいね。
もうサンプルは提示してしまいましたが^^;
初級者さんのおっしゃる通り、ポイントはタイミングですかね。
負の数が1度入力されたときにどういった処理をしてあげればよいか、
もう一度よく考えてみてくださいね。
もうサンプルは提示してしまいましたが^^;
Re:Cのアルゴリズムで煮詰まっています
ところで、「煮詰まる」の本来の意味は
「議論や検討などを重ねて、結論に近づく」です。
どうにもならなくなる(行き詰まる)の意味で
煮詰まるというのは、
本来は正しくありません。
俗語のような形で認めている場合はあるみたいですけれど。
「議論や検討などを重ねて、結論に近づく」です。
どうにもならなくなる(行き詰まる)の意味で
煮詰まるというのは、
本来は正しくありません。
俗語のような形で認めている場合はあるみたいですけれど。
Re:Cのアルゴリズムで煮詰まっています
whileとforを使用した両バージョンのサンプルです。
そんなに大きな違いはありませんが…(^_^;)
そんなに大きな違いはありませんが…(^_^;)
int main(void) { int flag = 0, number = 0; while (flag < 2) { /* 値の入力 */ scanf("%d", &number); if (number < 0) { /* 負数の場合はflagをインクリメントする */ ++flag; } else { /* 正数の場合はflagをゼロクリアする */ flag = 0; /* 入力値の2倍の値を表示する */ printf("%d * 2 = %d\n", number, number * 2); } } /* プログラムの終了を表示する */ printf("Program End\n"); return 0; } int main(void) { int flag, number = 0; for (flag = 0; flag < 2; ) { /* 値の入力 */ scanf("%d", &number); if (number < 0) { /* 負数の場合はflagをインクリメントする */ ++flag; } else { /* 正数の場合はflagをゼロクリアする */ flag = 0; /* 入力値の2倍の値を表示する */ printf("%d * 2 = %d\n", number, number * 2); } } /* プログラムの終了を表示する */ printf("Program End\n"); return 0; }
Re:Cのアルゴリズムで煮詰まっています
みなさんありがとうございました
おかげさまでなんとか完成しました
サンプルやタイミング、「煮詰まる」の意味など貴重なご意見参考になりました
今回は一つの関数の中でwhile forを一緒に使いたいと思ったので
whileを使ったあと変数を初期化してfor文を使うこうとにしました。
一つ気になったのが
考えてはみましたが思いつきませんでした
もし、何かあれば教えて下さい。そんな重要な事でもないので・・・。
おかげさまでなんとか完成しました
サンプルやタイミング、「煮詰まる」の意味など貴重なご意見参考になりました
今回は一つの関数の中でwhile forを一緒に使いたいと思ったので
whileを使ったあと変数を初期化してfor文を使うこうとにしました。
一つ気になったのが
printf("入力して下さい\n"); scanf("%d",&n); if(n<0) { printf("入力して下さい\n") scanf("%d",&n); if(n<0)で、これを効率化できないのかなと思いまして・・・
考えてはみましたが思いつきませんでした
もし、何かあれば教えて下さい。そんな重要な事でもないので・・・。
Re:Cのアルゴリズムで煮詰まっています
こんな感じかな?
負の数が入力された際にフラグの値を1増やして、2になった時点でループを抜けるようになっています。
正の数が入力された場合にはフラグを0にリセットしてやることで、負の数が連続で入力場合の判定を行っています。
負の数が入力された際にフラグの値を1増やして、2になった時点でループを抜けるようになっています。
正の数が入力された場合にはフラグを0にリセットしてやることで、負の数が連続で入力場合の判定を行っています。
#include <stdio.h> void inputNumber(int* flag, int* number) { printf("入力してください\n"); scanf("%d", number); if (*number < 0) { /* 負数が入力されたので、flagの値を1増やす */ ++(*flag); } else { /* 正数が入力されたので、flagの値をリセットする */ *flag = 0; /* 入力値の2倍の値を表示する */ printf("%d * 2 = %d\n", *number, *number * 2); } } int main(void) { int flag = 0, number = 0; /* whileループバージョン */ while (flag < 2) { /* 数値の入力 */ inputNumber(&flag, &number); } /* whileループの終了を表示する */ printf("while loop end\n"); /* 変数の初期化 */ flag = 0; number = 0; /* forループバージョン */ for ( ; flag < 2 ; ) { /* 数値の入力 */ inputNumber(&flag, &number); } /* forループの終了を表示する */ printf("for loop end\n"); return 0; }
Re:Cのアルゴリズムで煮詰まっています
フラグの使い方でそのようなやり方があったとは・・・・
全然気づかなかった・・・・orz
バグさん、ありがとうございました、とてもわかりやすかったです
参考にさせてもらいますね。
全然気づかなかった・・・・orz
バグさん、ありがとうございました、とてもわかりやすかったです
参考にさせてもらいますね。