ページ 11

max の出し方

Posted: 2010年6月20日(日) 00:10
by team f
maxを出したいのですが、終了に-999を入力をするようにしています。その-999がデーターとして数えれております。よろしくお願いします。


#include<stdio.h>
main(void)
{
float cm,kg,m,bmi,max;
int nin;
cm=kg=nin=0;
max=-100;

printf("身長(cm)と体重を入力してください。\n");
while (cm=999,kg=999){

scanf("%f %f",&cm , &kg);
nin ++;
if(cm>max) {
max=cm;
}
if(cm == -999,kg == -999)
break; /*-999で終了 */
m=cm/100.0 ; /* Mに変換 */
bmi=kg / m / m; /* BMIの計算 */


printf("身長%5.1f ",cm);
printf("体重%5.1f ",kg);
printf("BMI値%7.1f",bmi );


if(bmi>=25)
printf("肥満です。\n");

if(bmi<18.5)
printf("低体重です。\n");

if(bmi <25 && bmi>=18.5)
printf("**.* \n");
}

printf("総人数%d\n",nin-1);
printf("最大身長%f",cm);

return 0;
}

Re:max の出し方

Posted: 2010年6月20日(日) 00:20
by パコネコ
scanf("%f %f",&cm , &kg);
nin ++;
if(cm>max) {
max=cm;
}
if(cm == -999,kg == -999)
break; /*-999で終了 */
scanfでcmとkgに入れてますからですね
めんどうだけどなんかの変数に先に値を入れてそれがー999出ないならcmとkgに入れる、というのはダメですか?

Re:max の出し方

Posted: 2010年6月20日(日) 00:20
by ookami
nin ++;

if(cm == -999,kg == -999)
break; /*-999で終了 */
の後に移動してはどうですか?

--- 追記

あぁっ こんどはパコネコさんとかぶりました...;; スルーしてください; 画像

Re:max の出し方

Posted: 2010年6月20日(日) 00:23
by box
ざっと見たところの問題点。

1)意味不明なwhile文
while (cm=999,kg=999){

2)最大でない値を出力している
printf("最大身長%f",cm);

3)字下げが乱れていて、コードが読みづらい

Re:max の出し方

Posted: 2010年6月20日(日) 00:27
by パコネコ
よく読んでみるとちょっと勘違いしてました
最後の人数に入るのが嫌だったんですね
ookamiさんのやり方のほうがよかったですね…残念

Re:max の出し方

Posted: 2010年6月20日(日) 00:31
by パコネコ
ほんとだ
やってみたら間違ってた…下は問題ないと思ってたから見てなかった…
===============================
ループ自体はしてるから…でもどうせなら無限ループのほうがいいのかな? 画像

Re:max の出し方

Posted: 2010年6月20日(日) 00:35
by パコネコ
if(bmi <25 && bmi>=18.5)
printf("**.* \n");
}
ちなみにこれは**.*はどういう意味ですか?
ワイこれだったけど…普通ぐらいって意味?

Re:max の出し方

Posted: 2010年6月20日(日) 00:36
by シエル
if(cm == -999,kg == -999) を

if(cm == -999 || kg == -999)にすれば、とりあえずループからは抜けます。

それ以外に問題が山ほどありますが。。

Re:max の出し方

Posted: 2010年6月20日(日) 06:53
by team f
> ざっと見たところの問題点。
>
> 1)意味不明なwhile文
> while (cm=999,kg=999){
>
> 2)最大でない値を出力している
> printf("最大身長%f",cm);
>
> 3)字下げが乱れていて、コードが読みづらい

素人の質問にありがとうございます。
1) 自分もわかりません。ただ、ネットであったのをいれるとなんとなく動いたのです。
どうすればいいんでしょうね。
2) 理解しました。
3) そのとおりかと。

パコネコさんの回答は当たりです。LOTO買ってはどうでしょう。
プログラマーさん、そのとおりでした。
シエルさん、山ほどなんですよね。

Re:max の出し方

Posted: 2010年6月20日(日) 22:21
by パコネコ
>1) 自分もわかりません。ただ、ネットであったのをいれるとなんとなく動いたのです。
どうすればいいんでしょうね。
特に使わないならwhile(1)でいいと思います
無限ループになります。
どういう意味なんだろ~
だれかわかります?

>LOTO買ってはどうでしょう
何ですか?それ?

Re:max の出し方

Posted: 2010年6月20日(日) 23:19
by asdf
>while (cm=999,kg=999){

これは、コンマ演算子です。まず、cmに999を代入し、続いてkgに999を代入します。
そして、式全体の評価値は、kgすなわち999となります。
よって、これは無限ループとなります。



くわしくは、ググってください。

Re:max の出し方

Posted: 2010年6月20日(日) 23:30
by パコネコ
つまり毎回代入してくれるということでしょうか?
うまく使えば便利かもしれませんね。
無限ループの1つ下に書いてもいいけど…短くなりますし
asdsさんありがとうございます
ためになりました。

Re:max の出し方

Posted: 2010年6月21日(月) 00:00
by asdf
一応・・・

if(cm == -999,kg == -999)

でのcm == -999は全くの無意味です。

結局、

if (kg == -999)

と同じです。

理由は上記の通りです。

Re:max の出し方

Posted: 2010年6月21日(月) 00:13
by パコネコ
なるほど
つまり1つ目は代入されず最後のものだけ実行&考慮するということでいいですか?

Re:max の出し方

Posted: 2010年6月21日(月) 00:29
by asdf
ちょっと違います。

まず、1番目の式を評価し、2番目の式を評価します。そして、式全体の評価値は、2番目の式の型と値となります。
例えば、i = 0, j=1(両方int型)とします。

i++, j

という式は、まず、iをインクリメントします。(つまり、i=1)そして、この式全体の評価値は、int型の1(jの型と値)となります。

上で述べたif(cm == -999,kg == -999) は、1番目の式が代入でなく、==となっています。
この場合、まずcm==-999の判定を行います。続いて、kg==-999の判定を行います。
式全体の評価値は、2番目の式のみに依存するので、結局、kg==-999しか判定されていないことになります。

Re:max の出し方

Posted: 2010年6月21日(月) 00:33
by パコネコ
>if(cm == -999,kg == -999)
この場合cm==-999を行う意味はありますか
もしくはどういう時ならこれを使うことができますか?
たびたびすいません

Re:max の出し方

Posted: 2010年6月21日(月) 00:48
by asdf
>この場合cm==-999を行う意味はありますか
上の回答を参照してください。

>もしくはどういう時ならこれを使うことができますか?
コンマ演算子のことですよね。
例えば、for文です。

ちょうど良いサイトがありました。
http://www7b.biglobe.ne.jp/robe/cpphtml ... 03006.html

ここで勉強なさってください。

Re:max の出し方

Posted: 2010年6月21日(月) 01:02
by パコネコ
なるほどfor文で使うとおっしゃっていた意味がわかりました。
これなら何度か見たことがあるのでなんとなく両方「行うのか」っと思っていましたが
これは応用に過ぎなかったんですね
もう少し読んで勉強してきます
ありがとうございました。