課題)どこが間違っているのでしょうか?

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

課題)どこが間違っているのでしょうか?

#1

投稿記事 by ゆうさん » 13年前

数値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);
}
}

この様なプログラムを自分で組んでみたのですが上手くできません。
どこが間違っているのでしょうか?
誰か知恵をお貸しください。

box
記事: 2002
登録日時: 15年前

Re: 課題)どこが間違っているのでしょうか?

#2

投稿記事 by box » 13年前

ぱっと見、printf()の第2引数に&は不要ではないか、と思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: 課題)どこが間違っているのでしょうか?

#3

投稿記事 by beatle » 13年前

xやyに入る値を紙に書きながら、プログラムの動作の流れを追ってみてはいかがでしょうか。
特にfor文の動作を紙面上でチェックしてみるってのは効果があると思いますよ。

それから、「上手くできません」というのはフォーラムルールの「回答者が困る質問例」にもあります通り、良くない言い方です。
なぜなら上手くできない、というのは以下のとおり意味がたくさんあって曖昧だからです。
  • ソースコードをコンパイルする段階でエラーがでて、コンパイルが完了しない
  • コンパイルは何とか成功するが、警告(warning)が沢山でてくる
  • コンパイルエラーも警告もないが、プログラムが起動できない
  • プログラムは起動する。しかし望んだ動きをしてくれない
これらをはっきりさせ、その上で具体的な問題点を書くと良いと思います。

kurain
記事: 12
登録日時: 14年前

Re: 課題)どこが間違っているのでしょうか?

#4

投稿記事 by kurain » 13年前

for(y=x;y<=10;y=x+x)
これだと基準は「y(出力値)が10以下かどうか」なので初めに11以上を入力すると出力無しになってしまいますよ。
継続条件でyを使用するならばもう少し工夫が必要ですね。

アバター
asd
記事: 319
登録日時: 15年前

Re: 課題)どこが間違っているのでしょうか?

#5

投稿記事 by asd » 13年前

既にいくつか指摘がありますので、それ以外の指摘として、

まずコードを貼り付けるときは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);
      }
}
ゆうさん さんが書きました: 数値xを入力し、xの1倍、2倍、3倍、・・・・、10倍まで出力するプログラムを求めよ。
プログラムを見る限り、変数yにxの1倍、2倍・・・の値を入れていくようですが、
このままだとyの値は常にxの2倍(y=x+x)になるので、xが5未満の場合、無限ループに陥る気がします。
y自身にxを加算することで2倍、3倍を表現するのであれば、

コード:

y+=x;
y=y+x;
のいずれかのような式になると思います。

後は終了判定として、
1.別にカウンタ変数を用意して、11回目のループで終了
2.計算結果が入力値の11倍になったら終了
のいずれかで判定する必要があります。
0を入力された場合を考えると、1の方法の方が安全でしょうね。

少なくとも現在のような終了判定

コード:

y<=10;
では、yにはxのN倍の値が入るので2以上が入力された場合、10倍の値を出す前に終了してしまうでしょう。
0以下の値が入力された場合、無限ループになります。

[追記]終了判定の説明を加筆
Advanced Supporting Developer
無理やりこじつけ(ぉ

閉鎖

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