max の出し方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
team f

max の出し方

#1

投稿記事 by team f » 15年前

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 の出し方

#2

投稿記事 by パコネコ » 15年前

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

ookami

Re:max の出し方

#3

投稿記事 by ookami » 15年前

nin ++;

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

--- 追記

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

box

Re:max の出し方

#4

投稿記事 by box » 15年前

ざっと見たところの問題点。

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

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

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

パコネコ

Re:max の出し方

#5

投稿記事 by パコネコ » 15年前

よく読んでみるとちょっと勘違いしてました
最後の人数に入るのが嫌だったんですね
ookamiさんのやり方のほうがよかったですね…残念

パコネコ

Re:max の出し方

#6

投稿記事 by パコネコ » 15年前

ほんとだ
やってみたら間違ってた…下は問題ないと思ってたから見てなかった…
===============================
ループ自体はしてるから…でもどうせなら無限ループのほうがいいのかな? 画像

パコネコ

Re:max の出し方

#7

投稿記事 by パコネコ » 15年前

if(bmi <25 && bmi>=18.5)
printf("**.* \n");
}
ちなみにこれは**.*はどういう意味ですか?
ワイこれだったけど…普通ぐらいって意味?

シエル

Re:max の出し方

#8

投稿記事 by シエル » 15年前

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

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

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

team f

Re:max の出し方

#9

投稿記事 by team f » 15年前

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

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

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

パコネコ

Re:max の出し方

#10

投稿記事 by パコネコ » 15年前

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

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

asdf

Re:max の出し方

#11

投稿記事 by asdf » 15年前

>while (cm=999,kg=999){

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



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

パコネコ

Re:max の出し方

#12

投稿記事 by パコネコ » 15年前

つまり毎回代入してくれるということでしょうか?
うまく使えば便利かもしれませんね。
無限ループの1つ下に書いてもいいけど…短くなりますし
asdsさんありがとうございます
ためになりました。

asdf

Re:max の出し方

#13

投稿記事 by asdf » 15年前

一応・・・

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

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

結局、

if (kg == -999)

と同じです。

理由は上記の通りです。

パコネコ

Re:max の出し方

#14

投稿記事 by パコネコ » 15年前

なるほど
つまり1つ目は代入されず最後のものだけ実行&考慮するということでいいですか?

asdf

Re:max の出し方

#15

投稿記事 by asdf » 15年前

ちょっと違います。

まず、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 の出し方

#16

投稿記事 by パコネコ » 15年前

>if(cm == -999,kg == -999)
この場合cm==-999を行う意味はありますか
もしくはどういう時ならこれを使うことができますか?
たびたびすいません

asdf

Re:max の出し方

#17

投稿記事 by asdf » 15年前

>この場合cm==-999を行う意味はありますか
上の回答を参照してください。

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

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

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

パコネコ

Re:max の出し方

#18

投稿記事 by パコネコ » 15年前

なるほどfor文で使うとおっしゃっていた意味がわかりました。
これなら何度か見たことがあるのでなんとなく両方「行うのか」っと思っていましたが
これは応用に過ぎなかったんですね
もう少し読んで勉強してきます
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る