main()
{
float weight,height,s_weight,fatness;
int sex,count,keisu,y_cnt,f_cnt,k_cnt,c_cnt,n_cnt;
y_cnt=f_cnt=k_cnt=c_cnt=n_cnt=0;
printf("*** 肥満度プログラム ***\n");
for(count=1;count<=10;count++)
{
printf("あなたの体重(Kg単位)=\n");
scanf("%f",&weight);
printf("あなたの身長(m単位)=\n");
scanf("%f",&height);
printf("あなたの性別(男=0/女=1)=\n");
scanf("%d",&sex);
if(sex==0)
keisu=22;
else
keisu=20;
if(height>0 && weight>0)
{
s_weight=height*height*keisu;
printf("標準体重=%fKg\n",s_weight);
fatness=(weight-s_weight)/s_weight*100;
printf("肥満度=%f%\n",fatness);
if(fatness<-10.0)
{
printf("やせすぎです。\n");
y_cnt++;
}
else
if(-10.0<=fatness && fatness<10.0)
{
printf("標準です。\n");
f_cnt++;
}
else
if(10.0<=fatness && fatness<20.0 )
{
printf("過体重です。\n");
k_cnt++;
}
else
if(20.0<=fatness)
{
printf("あなたは超過体重ですわ!\n");
c_cnt++;
}
else
printf("計算できません。\n");
n_cnt++;
}
}
printf("*** 肥満度統計結果 ***\n");
printf("やせすぎ=%d人\n",y_cnt);
printf("普通=%d人\n",f_cnt);
printf("過体重=%d人\n",k_cnt);
printf("超過体重=%d人\n",c_cnt);
printf("計算できない人=%d人\n",n_cnt);
}
これを実行すると、10回それぞれ身長や体重を入力していくのですが、”計算できない人”が毎回加算されてしまい、”計算できない人=10”と出てしまします。他のやせすぎとか過体重などはちゃんと計算してくれるんです。どのようにしたら、ちゃんと”計算できない人”を計算してくれるのでしょうか?
No.1ベストアンサー
- 回答日時:
ぱっと見ただけなので、違っていたらごめんなさい。
たぶん、後半にある
printf("あなたは超過体重ですわ!\n");
c_cnt++;
}
else
printf("計算できません。\n");
n_cnt++;
}
}
printf("*** 肥満度統計結果 ***\n");
の、最後のelseのところが問題ではないかと思います。
この書き方だと、elseに続くのは
>printf("計算できません。\n");
の1文だけであり、その下の
>n_cnt++;
は、elseと関係ない文になっています。
全体のif文の外側になってます。
これを直すには、{}を使い、
printf("あなたは超過体重ですわ!\n");
c_cnt++;
}
else
{
printf("計算できません。\n");
n_cnt++;
}
}
}
printf("*** 肥満度統計結果 ***\n");
として
printf("計算できません。\n");
と
n_cnt++;
をグループにまとめてやります。
No.2
- 回答日時:
問題はもう少し根深いようです。
以下で正しいハズです。
あと、
if(fatness<-10.0)
{
printf("やせすぎです。\n");
は、
if(fatness<=10.0)
の間違いでは?
なるべく丁寧に見直すようにして下さい。
あるいは、カッコの大枠を先に書いてから中身を書くようにするのも一つの手です。もちろんインデントは必須。
main()
{
float weight,height,s_weight,fatness;
int sex,count,keisu,y_cnt,f_cnt,k_cnt,c_cnt,n_cnt;
y_cnt=f_cnt=k_cnt=c_cnt=n_cnt=0;
printf("*** 肥満度プログラム ***\n");
for(count=1;count<=10;count++)
{
printf("あなたの体重(Kg単位)=\n");
scanf("%f",&weight);
printf("あなたの身長(m単位)=\n");
scanf("%f",&height);
printf("あなたの性別(男=0/女=1)=\n");
scanf("%d",&sex);
if(sex==0)
keisu=22;
else
keisu=20;
if(height>0 && weight>0)
{
s_weight=height*height*keisu;
printf("標準体重=%fKg\n",s_weight);
fatness=(weight-s_weight)/s_weight*100;
printf("肥満度=%f%\n",fatness);
if(fatness<-10.0)
{
printf("やせすぎです。\n");
y_cnt++;
}
else
if(-10.0<=fatness && fatness<10.0)
{
printf("標準です。\n");
f_cnt++;
}
else
if(10.0<=fatness && fatness<20.0 )
{
printf("過体重です。\n");
k_cnt++;
}
else
if(20.0<=fatness)
{
printf("あなたは超過体重ですわ!\n");
c_cnt++;
}
}
else
{
printf("計算できません。\n");
n_cnt++;
}
}
printf("*** 肥満度統計結果 ***\n");
printf("やせすぎ=%d人\n",y_cnt);
printf("普通=%d人\n",f_cnt);
printf("過体重=%d人\n",k_cnt);
printf("超過体重=%d人\n",c_cnt);
printf("計算できない人=%d人\n",n_cnt);
}
No.3
- 回答日時:
if~elseのネストが深くなると対応関係が分かりにくくなります。
if と else のあとは必ず{ を入れるようにすると間違いを減らせると思います。ネストさせないようにこんな書き方もできます。。参考まで
#define KUBUN 4
float limit[KUBUN-1]={-10.0,10.0,20.0};
char *mes[KUBUN+1]={"やせすぎです。",
"標準です。",
"過体重です。",
"あなたは超過体重ですわ!",
"計算できません。"};
char *mes2[KUBUN+1]={"やせすぎ",
"普通",
"過体重",
"超過体重",
"計算できない人"};
int main(void)
{
float weight,height,s_weight,fatness;
int sex,count,keisu;
int i,p;
int cnt[KUBUN+1];
/* カウンタクリア */
for (i=0; i<=KUBUN; i++) cnt[i]=0;
printf("*** 肥満度プログラム ***\n");
for(count=1;count<=10;count++)
{
printf("あなたの体重(kg単位)=\n");
scanf("%f",&weight);
printf("あなたの身長(m単位)=\n");
scanf("%f",&height);
printf("あなたの性別(男=0/女=1)=\n");
scanf("%d",&sex);
keisu = (sex==0)?22.0:20.0;
if(height>0 && weight>0)
{
s_weight=height*height*keisu;
printf("標準体重=%fKg\n",s_weight);
fatness=(weight-s_weight)/s_weight*100.0;
printf("肥満度=%f%\n",fatness);
/* 基準値と比較してメッセージ表示&カウントアップ */
for (p=0,i=0; i<KUBUN-1; i++) {
if (fatness>=limit[i]) {
p++;
}
}
printf("%s\n",mes[p]);
cnt[p]++;
} else {
printf("%s\n",mes[KUBUN]);
cnt[KUBUN]++;
}
}
printf("*** 肥満度統計結果 ***\n");
for (i=0; i<=KUBUN; i++) {
printf("%s=%d人\n",mes2[i],cnt[i]);
}
return 0;
}
No.4
- 回答日時:
if文の入れ子は間違いやすいので、{ } を使って明確にすると良いです。
if(sex==0){keisu=22;}
else{keisu=20;}
if(height>0 && weight>0){
s_weight=height*height*keisu;
printf("標準体重=%fKg\n",s_weight);
fatness=(weight-s_weight)/s_weight*100;
printf("肥満度=%f%\n",fatness);
if(fatness<-10.0){y_cnt++; printf("やせすぎです。\n");}
else{
if(-10.0<=fatness && fatness<10.0){f_cnt++; printf("標準です。\n");}
else{
if(10.0<=fatness && fatness<20.0 ){k_cnt++; printf("過体重です。\n");}
else{
if(20.0<=fatness){c_cnt++; printf("あなたは超過体重ですわ!\n");}
else{n_cnt++; printf("計算できません。\n");}
}
}
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- C言語・C++・C# C言語: ポインタ 5 2022/06/01 08:33
- Excel(エクセル) マクロ(データ取得と転記)について教えてください 3 2022/12/24 12:18
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- C言語・C++・C# C言語 3 2022/10/04 15:07
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- Visual Basic(VBA) vbaの計算 if elseと範囲について 6 2022/11/26 01:49
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
既約分数の表示プログラム
-
10個出力で改行したいのですが...
-
ホームページをC言語で作りたい...
-
コンパイルエラーについて
-
8人分のテストの点数を入力し、...
-
%P と %X の違い
-
c言語でAからZまでを表示する...
-
Cのdoubleの浮動小数点表示につ...
-
三角形の判別
-
printf で二進表示を行いたい。
-
入力したお金の金額からお札の...
-
分数を表示するプログラム(長...
-
strcmp
-
4の倍数を論理演算で表す。。
-
アドレスの比較について
-
再帰処理 変換
-
C++ 二次関数の重解、虚数解が...
-
球の体積と表面積を表示するプ...
-
C言語で連立一次方程式
-
なぜgccはstdio.hをインクルー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語について
-
printf で二進表示を行いたい。
-
cshの文字列操作(0埋め)
-
10個出力で改行したいのですが...
-
コンパイルエラーについて
-
テキストカーソル位置の取得
-
strcmp
-
unsigned int型について
-
c言語でAからZまでを表示する...
-
printf( " %2d", p * q );
-
コマンドラインに出力した文字...
-
printfの出力内の文字をdefine...
-
ホームページをC言語で作りたい...
-
コマンドプロンプトがすぐ消える
-
小数点切捨て表示
-
【C言語教えてください】sin波...
-
switch分のケースを範囲数?に...
-
二つの整数値の大小比較
-
4の倍数を論理演算で表す。。
-
defineで定数が置き換えられな...
おすすめ情報