質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

0回答

530閲覧

構造体配列の代入、計算問題に関して

Takumi092519191

総合スコア2

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2023/04/21 13:54

編集2023/04/22 01:55

実現したいこと

BMIの計算結果を表示させる。
ここに実現したいことを箇条書きで書いてください。

  • ▲▲機能を動作するようにする

前提

ここに質問の内容を詳しく書いてください。
(例)
/100をして単位を合わせて計算するとBMIに表示させたが、体重が表示され、計算結果が表示されない。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

実際は、BMIの計算の値が反映されればよいのですが、いまは、体重がそのまま代入されている

該当のソースコード

ソースコード ```/* 身体検査データ用構造体の配列 */ #include <stdio.h> #define VMAX 21 /* 視力の最大値2.1×10 */ /*--- 身体検査データ型 ---*/ typedef struct { char name[20]; /* 氏名 */ int height; /* 身長 */ double vision; /* 視力 */ int weight; /* 体重 ← 追加したメンバ */ double bmi; /* BMI ← 追加したメンバ */ } PhysCheck; /*--- BMIを求める ---*/ void calc_bmi(PhysCheck dat[], int n) { for(n = 0; n < 8; n++){ dat[n].bmi = (dat[n].weight) / ((dat[n].height / 100) * (dat[n].height / 100)); } } /*--- 身長の平均値を求める ---*/ double ave_height(const PhysCheck dat[], int n) { int i; double sum = 0; for (i = 0; i < n; i++) { sum += dat[i].height; } return sum / n; } /*--- 視力の分布を求める ---*/ void dist_vision(const PhysCheck dat[], int n, int dist[]) { int i; for (i = 0; i < VMAX; i++) { dist[i] = 0; } for (i = 0; i < n; i++) { if (dat[i].vision >= 0.0 && dat[i].vision <= VMAX / 10.0) { dist[(int)(dat[i].vision * 10 + 0.5)]++; } } } int main(void) { int i; PhysCheck x[] = { {"AKASAKA Tadao", 162, 0.3, 50, 0}, {"KATOH Tomiaki", 173, 0.7, 75, 0}, {"SAITOH Syouji", 175, 2.0, 95, 0}, {"TAKEDA Shinya", 171, 1.5, 60, 0}, {"NAGAHAMA Masaki", 168, 0.4, 55, 0}, {"HAMADA Tetsuaki", 174, 1.2, 100, 0}, {"MATSUTOMI Akio", 169, 0.8, 88, 0}, }; /* BMIの初期値はゼロ */ int nx = sizeof(x) / sizeof(x[0]); /* 人数 */ int vdist[VMAX]; /* 視力の分布 */ calc_bmi(x, nx); /* BMIを計算する */ puts("■□■ 身体検査一覧表 ■□■"); puts(" 氏名 身長 視力 体重 BMI"); puts("---------------------------------------"); for (i = 0; i < nx; i++) { printf("%-18.18s%4d%5.1f%5d%6.1f\n", x[i].name, x[i].height, x[i].vision, x[i].weight, x[i].bmi); } printf("\n平均身長:%5.1fcm\n", ave_height(x, nx)); dist_vision(x, nx, vdist); /* 視力の分布を求める */ printf("\n視力の分布\n"); for (i = 0; i < VMAX; i++) { printf("%3.1f~:%2d人\n", i / 10.0, vdist[i]); } return 0; }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2023/04/21 14:18

c言語のコードの一番最初の行のすぐ上に ```c だけの行を追加してください また、c言語のコードの一番最後の行のすぐ下に ``` だけの行を追加してください または、 https://teratail.storage.googleapis.com/uploads/contributed_images/e378967f71829feb9e6187e5be60349f.gif を見て、そのようにしてみてください 現状、コードがとても読み辛いです 質問にコードを載せる際に上記をやってくれたら、他人がコードを読みやすくなり、コードの実行による現象確認もやりやすくなるので、回答されやすくなります
jbpb0

2023/04/21 15:52

> /100をして単位を合わせて計算 「100」で割るのではなく、「100.0」で割ったら、どうでしょうか?
y_waiwai

2023/04/21 16:21

実際の表示内容を提示しましょう また、それがどうなればいいのか説明も提示しよう
jimbe

2023/04/21 16:27 編集

teratail はデバッグしてもらう所ではありません。 calc_bmi() 内の for ループ、おかしくないですか。
Takumi092519191

2023/04/22 01:57

それぞれのBMI値を求めたいと思い、for文を使いましたが、おかしい部分がありましたか?
jimbe

2023/04/22 02:11

視界が狭まっているようですが…。 何故 8 回固定でループしているのでしょうか。
otn

2023/04/22 02:36 編集

173 / 100 の結果を 1.73 だと思っていませんか? 1 ですよ。 173.0 / 100.0 だと 1.73 です。
jbpb0

2023/04/22 02:43

forは、他の関数では「(i = 0; i < n; i++)」なのに、なぜ「calc_bmi」は「(n = 0; n < 8; n++)」なのでしょう?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問