こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

C言語の演習ですが全く分かりません。

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

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

投稿日時 - 2014-12-08 22:08:33

QNo.8851854

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

15人が「このQ&Aが役に立った」と投票しています

回答(9)

今更ですが、、、

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

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

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

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

投稿日時 - 2014-12-14 23:22:29

急いで書いたら、間違えた。
> 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が何回跳ね返ったか */

投稿日時 - 2014-12-11 00:11:25

補足

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

投稿日時 - 2014-12-11 11:03:14

ANo.7

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

投稿日時 - 2014-12-10 15:58:57

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

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

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

投稿日時 - 2014-12-10 07:16:21

 答えは何度目で良いんでしょうか?そうすると自然数という事になります。
 1÷0.65とか無いですよね。
 又、初期条件と判定後の実行条件が有ると思います。それを教えて下さい。

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

投稿日時 - 2014-12-09 12:55:34

ANo.4

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

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

投稿日時 - 2014-12-09 10:10:27

ANo.3

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

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

投稿日時 - 2014-12-08 23:20:33

補足

#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:36

ANo.2

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

投稿日時 - 2014-12-08 22:52:13

ANo.1

フローチャートも書けないの?
フローチャートを先に書きましょう。

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

投稿日時 - 2014-12-08 22:12:54

あなたにオススメの質問