- 締切済み
C言語の演習ですが全く分かりません。
(while文/do-while文の問題です)どんな高さから落としても、元の高さの0.65倍の高さまで跳ね返るボールをhメートルの高さから落としたら、何度目で1メートル以下になるかを求めるプログラムを完成せよ。 出来るだけ簡単な文で、詳しい解説付だと非常に助かります。
- みんなの回答 (9)
- 専門家の回答
みんなの回答
今更ですが、、、 >printf内どうやって出力したらいいのか分からなくて空欄です。 googleとかで、 "printf c言語"とすると、色々と参考例があります。 その辺で勉強/調べる事をお奨めします。 ## printf( フォーマット文字列, データ...) ### printf("回数 = %d\n", h); // %d : 整数指定, \n 改行コード >最初から1m以下なら1回と表示出来ればいいのですが。 最初から、1m未満なら、0回と思いますが、、。 その場合、 do {} while() --> while() {} にするだけかと。 >getchは指定です。 c言語なので、 "getch()" と括弧付きにしましょう。 意味は、検索すれば、容易に分かると思いますが、、、 ## エコー無しの文字入力 ... 何かのキー待ちに(昔は)良く使った。 まだ、解決していないようでしたら、検索すれば、参考例は一杯あると思います。 あと、手元のPCでテストしてみる事をお奨めします。
急いで書いたら、間違えた。 > 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が何回跳ね返ったか */
- Tacosan
- ベストアンサー率23% (3656/15482)
Xn = 0.65^n X0 ですな>#6. で対数を取ってほげほげすると n = ceil(-log(X0)/log(0.65)) くらい, と.
計算式 Xn = X (n-1) x 0.65 X0 : 初期値 ですかね。 もっともこの式、ループしなくても Xn = 0.65 ^ n で一発なんですが、、、 で、両辺の対数をとって、、、、 n = (log(Xn) / log(0.65)) で良かったか?
- TreatMeGently
- ベストアンサー率18% (27/147)
答えは何度目で良いんでしょうか?そうすると自然数という事になります。 1÷0.65とか無いですよね。 又、初期条件と判定後の実行条件が有ると思います。それを教えて下さい。 例えば、最初は10mで1mずつ引いて行くとか、 何mでも構わないがその値での1mの判定後に次の比較値を半分の加減値 で行うとか。(2分法で近似してい行く。) 何か条件が有るはずです。
- Tacosan
- ベストアンサー率23% (3656/15482)
何が「1メートル以下」になればいいんだろうか. あと, 最初から 1メートル以下, 例えば 0.3メートルとか -16メートルとかだったらどうするんだろう.
- yama1718
- ベストアンサー率41% (670/1618)
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; } こんな感じになるかと思いますが、詳しい補足をいただけませんか?
- wormhole
- ベストアンサー率28% (1626/5665)
数学として解くのならできますか?
- maiko0318
- ベストアンサー率21% (1483/6969)
フローチャートも書けないの? フローチャートを先に書きましょう。 どういう処理をしたいのかわかっていますか? 国語力も必要ですよ。
補足
printf内どうやって出力したらいいのか分からなくて空欄です。 最初から1m以下なら1回と表示出来ればいいのですが。 getchは指定です。