ここから本文です

defineと多次元配列を用いた問題

yuu********さん

2010/5/2213:17:33

defineと多次元配列を用いた問題

問題が解けません。
どなたか教えてください。
問題:
1. 人数をdefine で定義
2. キーボードから人数分の身長(cm)と体重(kg)を整数型の2 次元配列に入力
3. 各人のBMI(肥満度)を計算し、その結果を別の実数型の1 次元配列に入力
BMIの計算式:
BMI = 体重(kg)/身長(m)/身長(m) ※単位に注意
4. 全員分の計算が終了後、番号、身長、体重、BMI を出力

実行例:
1 人目の身長を入力(cm):165
体重を入力(kg):58
2 人目の身長を入力(cm):188
体重を入力(kg):85
3 人目の身長を入力(cm):152
体重を入力(kg):43
番号 身長 体重 BMI
1 165 58 21.30
2 188 85 24.05
3 152 43 18.61

ソース
#include <stdio.h>
#define NUM 3 /* この行にdefineを利用して人数(NUM)を定義する。 */

int main(void)
{
int data[3][2]; /* ここで身長と体重を保存する2次元配列『data』を用意する */
int i,max,no;
double bmi[3]; /* ここでbmiを保存する実数型の1次元配列『bmi』を用意する */

for(i=0;i<NUM;i++){
printf("%d人目の身長を入力(cm):",i+1); scanf("%d",&data[i][0] ); /* scanfの()の中を完成する */
printf("体重を入力(kg):"); scanf("%d",&data[i][1] ); /* scanfの()の中を完成する */
}

for(i=0;i<NUM;i++)
bmi[i]=(double)date[i][1]/deta[i][0]/date[i][0]; /* bmiの計算式を完成させる */


printf("\n番号 身長 体重 BMI\n");
for(i=0;i<NUM;i++)
printf(" %d %d %d %.2f\n",i + 1, data[i][0], data[i][1], bmi[i] ); /* 実行例のような出力が得られるように()の中を完成する */

return(0);
}

よろしくおねがいします。

補足とりあえずエラーはなくなりました。
でもbmiの計算がうまくできません。
bmi=体重(kg) ÷ {身長(m) X 身長(m)}はわかりました。
どなたか教えてください。
ソース
for(i=0;i<NUM;i++)
bmi[i]=(double)(data[i][1] / ((data[i][0] / 10) * (data[i][0] / 10)));

閲覧数:
1,024
回答数:
2
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

mah********さん

編集あり2010/5/2319:33:58

型変換(キャスト)の練習問題でしょうか?

bmiの計算式の変数名がタイプミスかな?
このキャストではint型の計算結果をdouble型に
変換していますよ

こんな感じでいかがでしょう

#include <stdio.h>
#define NUM 3

int main(void)
{
int data[NUM][2];
int i;
double bmi[NUM];

for(i=0;i<NUM;i++){
printf("%d人目の身長を入力(cm): ", i+1);
scanf("%d", &data[i][0] );
printf("体重を入力(kg):");
scanf("%d", &data[i][1] );
}

for(i=0;i<NUM;i++)
//身長をセンチからメートルに変換して計算する。問題文の仕様での計算式
bmi[i] = (double)data[i][1] / ( (double)data[i][0] / 100.0 ) / ( (double)data[i][0] / 100.0 );
//下の書き方でもキャストしてくれます
//bmi[i] = data[i][1] / ( data[i][0] / 100.0 ) / ( data[i][0] / 100.0 );
//この計算式でもいけます、ただ問題文の仕様とはちがいますけど・・・
//bmi[i] = data[i][1] / ( ( data[i][0] / 100.0 ) * ( data[i][0] / 100.0 ) );


printf("\n番号 身長 体重 BMI\n");
for(i=0;i<NUM;i++)
//bin[]はdouble型なので%lfにしました
printf(" %d %d %d %.2lf\n",i + 1, data[i][0], data[i][1], bmi[i] );

return(0);
}

質問した人からのコメント

2010/5/28 23:15:36

ありがとうございます。
無事に出来ました。

ベストアンサー以外の回答

1〜1件/1件中

RainySeasonさん

2010/5/2213:58:31

>問題が解けません。
の「解けない」は「コンパイルができない」ですか?
でしたら、いろいろと文法エラーがあるのでそちらを片づけることが先です。
コンパイルエラーが取れればbmiの表示でしょうが、問題の計算式の「単位」をよく確認し直してください。


それと
>int data[3][2]; /* ここで身長と体重を保存する2次元配列『data』を用意する */
>double bmi[3]; /* ここでbmiを保存する実数型の1次元配列『bmi』を用意する */
はdefine定義の意味がありません。
>int data[NUM][2];
>double bmi[NUM];
です。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる