ここから本文です

c言語初心者です。

アバター

ID非公開さん

2018/11/610:04:24

c言語初心者です。

次の問題が分からないので教えていただきたいです。
よろしくお願いします。
標準入力から実数rを読み込み、それを2で割る。これを5回繰り返し、それらの値を表示させなさい。例えばr=4.0なら2.000 1.000 0.500 0.250 0.125と表示。なお、繰り返しにはwhileを用いること。

次のように考えたのですが、上手くいきませんでした。
#include <stdio.h>
int main(void){

int i =1;
double r,db;
scanf("%lf",&r);
do{
r/2=db;
}while(i<=5);
printf("%.4f\n",db);
return 0;
}

閲覧数:
46
回答数:
4

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

nan********さん

2018/11/610:39:13

ちょと間違っていますね。
それから、while を使えという問題の場合は、
前に while を書かないと怒られますね。
こんな感じで良いと思います。

#include <stdio.h>
int main(void){

int i =1;
double r,db;
scanf("%lf",&r);
while(i++<=5){
r=r/2;
printf("%.4f ",r);
}
printf("\n");
return 0;
}

アバター

質問した人からのコメント

2018/11/6 14:46:34

ありがとうございました!
勉強し直します!

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

aki********さん

2018/11/613:28:23

C言語では、=は、数学の様な等号ではありません。
代入演算子と呼ばれるもので、右辺の式の値を左辺の変数に代入せよという命令です。
a = b;
と書いた場合
a ← b
のような意味になります。
そういう構造上、左辺には単体の変数でないと置けません。
なので、計算結果を得たい場合には
db = r / 2;
となります。

ただし、その場合、ループの度にr/2が計算される事になりますが
r=4.0だったとして
1度目は r/2 なので、4.0/2 → 2.0 がdbに入ります。
2度目も r/2 なので、4.0/2 → 2.0 がdbに入ります。
3度目も r/2 なので、4.0/2 → 2.0 がdbに入ります。
4度目も r/2 なので、4.0/2 → 2.0 がdbに入ります。
:
となります。
どんどん半分にするには計算式を工夫する必要があります。

次にwhile文は()の中の式が真である間繰り返すという命令ですが
このコードでは、初めにi=1としてiが1になったまま
i<=5 つまり、1<=5 を繰り返しの度に延々と比較し続けます。
何度比べても、iが変わらないので、無限ループになります。
5回繰り返したい場合は、ループのなかでiの値を更新して下さい。
i = i + 1; もしくは i++; をループの中に入れます(2つは同じ意味です)

さらに、今の状態だと
printfが実行されるのは、ループが終わった後なので、1度きりです。
途中の計算結果を得たい場合には、ループの中に入れてください。

nyo********さん

編集あり2018/11/610:58:43

r/2=db;
右辺と左辺が逆なんじゃないでしょうか?
もっと違う箇所がありそうですが、ぱっと見そこですかね

プロフィール画像

カテゴリマスター

edo********さん

2018/11/610:35:52

do{
r/2=db;
}while(i<=5);

iの値が更新されないから、永久ループ。
「r/2=db;」意味不明な式。


do{
r=r/2;
printf("%.4f\n",r);
i++;
}while(i<=5);

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる