数値xを入力し、xの1倍、2倍、3倍、・・・・、10倍まで出力するプログラムを求めよ。
#include<stdio.h>
int main(void)
{
long x,y;
printf("x=");
scanf("%ld",&x);
for(y=x;y<=10;y=x+x)
{
printf("%ld",&y);
}
}
この様なプログラムを自分で組んでみたのですが上手くできません。
どこが間違っているのでしょうか?
誰か知恵をお貸しください。
課題)どこが間違っているのでしょうか?
Re: 課題)どこが間違っているのでしょうか?
ぱっと見、printf()の第2引数に&は不要ではないか、と思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 課題)どこが間違っているのでしょうか?
xやyに入る値を紙に書きながら、プログラムの動作の流れを追ってみてはいかがでしょうか。
特にfor文の動作を紙面上でチェックしてみるってのは効果があると思いますよ。
それから、「上手くできません」というのはフォーラムルールの「回答者が困る質問例」にもあります通り、良くない言い方です。
なぜなら上手くできない、というのは以下のとおり意味がたくさんあって曖昧だからです。
特にfor文の動作を紙面上でチェックしてみるってのは効果があると思いますよ。
それから、「上手くできません」というのはフォーラムルールの「回答者が困る質問例」にもあります通り、良くない言い方です。
なぜなら上手くできない、というのは以下のとおり意味がたくさんあって曖昧だからです。
- ソースコードをコンパイルする段階でエラーがでて、コンパイルが完了しない
- コンパイルは何とか成功するが、警告(warning)が沢山でてくる
- コンパイルエラーも警告もないが、プログラムが起動できない
- プログラムは起動する。しかし望んだ動きをしてくれない
Re: 課題)どこが間違っているのでしょうか?
for(y=x;y<=10;y=x+x)
これだと基準は「y(出力値)が10以下かどうか」なので初めに11以上を入力すると出力無しになってしまいますよ。
継続条件でyを使用するならばもう少し工夫が必要ですね。
これだと基準は「y(出力値)が10以下かどうか」なので初めに11以上を入力すると出力無しになってしまいますよ。
継続条件でyを使用するならばもう少し工夫が必要ですね。
Re: 課題)どこが間違っているのでしょうか?
既にいくつか指摘がありますので、それ以外の指摘として、
まずコードを貼り付けるときはCODEタグで囲んでくださいね。
インデントを含めとても見易くなります。
このままだとyの値は常にxの2倍(y=x+x)になるので、xが5未満の場合、無限ループに陥る気がします。
y自身にxを加算することで2倍、3倍を表現するのであれば、 のいずれかのような式になると思います。
後は終了判定として、
1.別にカウンタ変数を用意して、11回目のループで終了
2.計算結果が入力値の11倍になったら終了
のいずれかで判定する必要があります。
0を入力された場合を考えると、1の方法の方が安全でしょうね。
少なくとも現在のような終了判定 では、yにはxのN倍の値が入るので2以上が入力された場合、10倍の値を出す前に終了してしまうでしょう。
0以下の値が入力された場合、無限ループになります。
[追記]終了判定の説明を加筆
まずコードを貼り付けるときはCODEタグで囲んでくださいね。
インデントを含めとても見易くなります。
#include<stdio.h>
int main(void)
{
long x,y;
printf("x=");
scanf("%ld",&x);
for(y=x;y<=10;y=x+x)
{
printf("%ld",&y);
}
}
プログラムを見る限り、変数yにxの1倍、2倍・・・の値を入れていくようですが、ゆうさん さんが書きました: 数値xを入力し、xの1倍、2倍、3倍、・・・・、10倍まで出力するプログラムを求めよ。
このままだとyの値は常にxの2倍(y=x+x)になるので、xが5未満の場合、無限ループに陥る気がします。
y自身にxを加算することで2倍、3倍を表現するのであれば、 のいずれかのような式になると思います。
後は終了判定として、
1.別にカウンタ変数を用意して、11回目のループで終了
2.計算結果が入力値の11倍になったら終了
のいずれかで判定する必要があります。
0を入力された場合を考えると、1の方法の方が安全でしょうね。
少なくとも現在のような終了判定 では、yにはxのN倍の値が入るので2以上が入力された場合、10倍の値を出す前に終了してしまうでしょう。
0以下の値が入力された場合、無限ループになります。
[追記]終了判定の説明を加筆
Advanced Supporting Developer
無理やりこじつけ(ぉ
無理やりこじつけ(ぉ