プロが教えるわが家の防犯対策術!

年齢と身長,体重を保存する変数をメンバにもつ構造体を作成し、この構造体を利用して標準入力 ( キーボード )から入力された 5 人分の年齢,身長,体重をもとに,最も身長が高かった人の年齢,身長,体重と最も体重が軽かった人の年齢,身長,体重を表示するプログラムの作成。

途中まで作成したプログラム
#include<stdio.h>

typedef struct person{
int age;
double height;
double weight;
}person;

int main(void){
person num1,num2,num3,num4,num5,height1,height2,height3,height4,height5,weight1,weight2,weight3,weight4,weight5;
int i,j;

for (i=0; i<5; i++){
printf("1人目の年齢を入力してください。\n");
scanf("%d", &num1.age);

printf("1人目の身長を入力してください。\n");
scanf("%lf", &height1.height);

printf("1人目の体重を入力してください。\n");
scanf("%lf", &weight1.weight);

printf("2人目の年齢を入力してください。\n");
scanf("%d", &num2.age);

printf("2人目の身長を入力してください。\n");
scanf("%lf", &height2.height);

printf("2人目の体重を入力してください。\n");
scanf("%lf", &weight2.weight);

printf("3人目の年齢を入力してください。\n");
scanf("%d", &num3.age);

printf("3人目の身長を入力してください。\n");
scanf("%lf", &height3.height);

printf("3人目の体重を入力してください。\n");
scanf("%lf", &weight3.weight);

printf("4人目の年齢を入力してください。\n");
scanf("%d", &num4.age);

printf("4人目の身長を入力してください。\n");
scanf("%lf", &height4.height);

printf("4人目の体重を入力してください。\n");
scanf("%lf", &weight4.weight);

printf("5人目の年齢を入力してください。\n");
scanf("%d", &num5.age);

printf("5人目の身長を入力してください。\n");
scanf("%lf", &height5.height);

printf("5人目の体重を入力してください。\n");
scanf("%lf", &weight5.weight);


}

printf("最も身長が高い人は年齢:%d才,身長:%lfcm,体重%lfkgです。\n",num,height,weight);
printf("最も体重が軽い人は年齢:%d才,身長:%lfcm,体重%lfkgです。\n",num,height,weight);

return 0;

}
最も身長が高い人の年齢、身長、体重、最も体重が低い人の年齢、身長、体重の表示のさせ方が分かりません。
よろしくお願い時ます。

質問者からの補足コメント

  • 回答ありがとうございます。
    配列から一人を探す所がまだよく分かりません。
    if (人物列[h].身長 < 人物列[i].身長) h = i;
    のあとは else ifを使うのですか?

    No.3の回答に寄せられた補足コメントです。 補足日時:2022/07/05 21:57

A 回答 (3件)

人数分に配列化して情報を一つに纏めましょう


例)
person 人物列[人数];

似たような処理は繰り返しで処理しましょう
例)
for (i=0; i<人数; i++) {
_ printf("%d人目の身長", i+1);
_ scanf("%d", &(人物列[i].身長));
}

配列から一人を探すならば、端から比べていきましょう
例)
h = 0;
for (i=0; i<人数; i++) {
_ if (人物列[h].身長 < 人物列[i].身長) h = i;
}
printf("一番背が高いのは%d人目", h);
この回答への補足あり
    • good
    • 2
この回答へのお礼

ご回答ありがとうございます。
配列や配列から一人を探す方法についての細かい記述が分かりやすかったです!ベストアンサーに選ばせていただきました。

お礼日時:2022/07/06 23:09

これはちょっとひどいね。



①せっかく構造体を作ったのに、年齢、体重、身長を別々の
構造体に入れるのは何故?
構造体を何の目的で使うのか解ってないようなので
まずそこから学習しよう。

②5個のデータをバラバラの変数に入れるのは
5個くらいならまあ間違いじゃ無いが、データの入力にも
最大値を取り出すのにも長いコードが必要になり手間がかかる。

配列の使い方を覚えよう。

③複数のデータから最大値や最小値を取り出す手順は
基礎の基礎だ。

例えば身長が3個有って最大を求めるなら

身長max=身長1;
if (身長max<身長2) {
身長max=身長2
}
if (身長max<身長3) {
身長max=身長3
}

printf("身長max=%lf\n", 身長max);

これを5個や任意個に拡張するのは簡単。
配列を使えばループを使ってとてもシンプルに書ける。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
自分のどこが悪いのかがよく分かりました。データの取り出し方の記述もありがとうございました。

お礼日時:2022/07/06 23:06
    • good
    • 2
この回答へのお礼

ご回答ありがとうございます。
参考資料としてとても為になりました。

お礼日時:2022/07/06 23:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています