プロが教えるわが家の防犯対策術!

(while文/do-while文の問題です)どんな高さから落としても、元の高さの0.65倍の高さまで跳ね返るボールをhメートルの高さから落としたら、何度目で1メートル以下になるかを求めるプログラムを完成せよ。

出来るだけ簡単な文で、詳しい解説付だと非常に助かります。

A 回答 (9件)

今更ですが、、、



>printf内どうやって出力したらいいのか分からなくて空欄です。
googleとかで、 "printf c言語"とすると、色々と参考例があります。
その辺で勉強/調べる事をお奨めします。
## printf( フォーマット文字列, データ...)
### printf("回数 = %d\n", h); // %d : 整数指定, \n 改行コード

>最初から1m以下なら1回と表示出来ればいいのですが。
最初から、1m未満なら、0回と思いますが、、。
その場合、 do {} while() --> while() {} にするだけかと。

>getchは指定です。
c言語なので、 "getch()" と括弧付きにしましょう。
意味は、検索すれば、容易に分かると思いますが、、、
## エコー無しの文字入力 ... 何かのキー待ちに(昔は)良く使った。

まだ、解決していないようでしたら、検索すれば、参考例は一杯あると思います。
あと、手元のPCでテストしてみる事をお奨めします。
    • good
    • 0

急いで書いたら、間違えた。


> Xn = 0.65 ^ n で一発なんですが、、、
Xn = h * 0.65 ^n (h: 最初の高さ)
で、Tacosan さんの通りに、目標が、1mなんで、
> n = ceil(-log(X0)/log(0.65))
  ただし、 X0 = h

あっと、補足がありました、
幾つか、注意点、
* セミコロンが落ちている箇所あり。
* 関数は、最後に括弧 () が付きますが、、、getch は、最近は非推奨かと。
* scanf() .. 最近の Visual stdio だと警告が出るはず。(scanf_s() 使えって)
* 計算結果を出力して無いですが、良いですか? printf() ... 何も出力してませんが。
* h が、1m未満の場合、どうするか? do {} while()でなく、while() {} の方が、、

ついでなので、h > 1.0 と決め付けると、
/* double h; */
int count = 1; /* h > 1.0 なので、1回は跳ね返る。初期値 1とする */
while ((h *= 0.65) > 1.0) count++;
/* この時の countが何回跳ね返ったか */

この回答への補足

printf内どうやって出力したらいいのか分からなくて空欄です。
最初から1m以下なら1回と表示出来ればいいのですが。
getchは指定です。

補足日時:2014/12/11 11:03
    • good
    • 0

Xn = 0.65^n X0


ですな>#6. で対数を取ってほげほげすると
n = ceil(-log(X0)/log(0.65))
くらい, と.
    • good
    • 0

計算式


Xn = X (n-1) x 0.65
X0 : 初期値
ですかね。

もっともこの式、ループしなくても
Xn = 0.65 ^ n で一発なんですが、、、

で、両辺の対数をとって、、、、
n = (log(Xn) / log(0.65)) で良かったか?
    • good
    • 0

 答えは何度目で良いんでしょうか?そうすると自然数という事になります。


 1÷0.65とか無いですよね。
 又、初期条件と判定後の実行条件が有ると思います。それを教えて下さい。

 例えば、最初は10mで1mずつ引いて行くとか、
 何mでも構わないがその値での1mの判定後に次の比較値を半分の加減値
 で行うとか。(2分法で近似してい行く。)
 何か条件が有るはずです。
    • good
    • 0

何が「1メートル以下」になればいいんだろうか.



あと, 最初から 1メートル以下, 例えば 0.3メートルとか -16メートルとかだったらどうするんだろう.
    • good
    • 0

1.高さを入力する


2.カウントを0に初期化する
3.高さが1メートルより低くなれば7.に抜ける
4.高さを0.65倍にする
5.カウントを+1する
6.3.に戻る
7.カウントを表示する

これをそのままCにしたらいいですね

この回答への補足

#include<stdio.h>
int main(void){
int count;
double h;
count=0;
printf("高さを入力して下さい")
scanf("%lf",&h)
do{
h*=0.65;
count++;
printf();
}while(h>1.0);
getch;
return 0;
}

こんな感じになるかと思いますが、詳しい補足をいただけませんか?

補足日時:2014/12/09 11:15
    • good
    • 0

数学として解くのならできますか?

    • good
    • 0

フローチャートも書けないの?


フローチャートを先に書きましょう。

どういう処理をしたいのかわかっていますか?
国語力も必要ですよ。
    • good
    • 0

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