重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

C言語でのプログラミングの問題が分かりません。
課題で出た問題なのですがわからないのでおしえてください。
問題は
値を入力します(nとします)
nが1でない間、以下の処理を繰り返します。
 (1)nが偶数のとき、nを2で割り、その答えを新しいnとします。
 (2)nが奇数のとき、nを3倍してから1を加え、その答えを新しいnとします。
というものです。
if文を使い計算はできたのですが、「繰り返し」と「新しいnとする」部分が分かりませんでした。作成したプログラムを載せるので手直しお願いいたします。
int n,x,y;
printf("整数を入力");
scanf("%d",&n);
while (n>1)
if (n%2)
printf("%d",x=n*3+1);
else
printf("%d",y=n/2);
putchar('\n');
return(0);

です。このままだと無限ループしてしまうので繰り返しの条件が悪いみたいです。
それと、答えをnに入れたいのにx、yを使ってしまっています。
回答お願いします。

A 回答 (5件)

http://ideone.com/8CumH

source codeがソースコード
inputが試しに入力した数値
outputがそのinputで出力された結果。
    • good
    • 0
この回答へのお礼

まとめてのお礼で申し訳ありません。
回答ありがとうございました。

お礼日時:2010/05/14 20:27

まずループの導入部の問題


nが1で無い間ループするのですね。貴方の表記ではnが1より大きければループするですよね。だから条件は本来n!=1で無ければならないはず。!=の意味わかります?

新しいnにするは他の方も書いているけど、代入のやり直しでしょ?Cの面白い表記知ってます?
(1)のときの表記 n /= 2;
(2)は普通に書くしかないか n = n*3 + 1;
    • good
    • 0

>答えをnに入れたいのにx、yを使ってしまっています。



ならば、計算結果をnに代入すればよいだけのことです。

C言語における
i = i + 2;
という式の意味を日本語で説明できますか?
    • good
    • 0
    • good
    • 0

まず、while()、for()等のリファレンスを調べて下さい。


http://www9.plala.or.jp/sgwr-t/c/sec06-3.html
http://www9.plala.or.jp/sgwr-t/c/sec06-2.html

中括弧{}で、囲んだ部分が繰り返されるのです。

後、代入文は、
n = n*3 + 1;
と、ちゃんと書けば代入出来ます。
print文の引数で代入するとか、変な癖は付けない方が身の為です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!