アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語初心者です。
以下課題に躓いていまして解答コードをご教示いただきたく存じます。
よろしくお願いいたします。

課題内容 次の構造体を typedef を使用して定義せよ。

構造体名 S_Human
データ型 名前 説明
char name[32] 氏名
short age 年齢
double height 身長(cm)
double weight 体重(kg)

次の構造体変数を定義し、指定した値で初期化を行いなさい。
データ型 変数名 初期値
S_Human people[] 下記に従う
■初期値
氏名 年齢 身長 体重
Jack 34 168.5 56.4
George 43 183.6 98.8
Leonardo 30 179.2 68.5
Gabriel 7 120.6 24.7
Henry 18 175.6 63.5

彼らの中から次の条件を満たす人物を抽出し、画面に氏名を表示せよ。複数いた場
合は合致した全ての人を表示せよ。

■抽出対象①
身長が 170cm 以上で体重が 60kg 以上の人
■抽出対象②
年齢が 30 歳未満で身長が 170cm 以上の人

出力期待値 抽出対象①
George
Leonardo
Henry
抽出対象②
Henr

ーーーーーーーーーーーーーーーーーーー
#include <stdio.h>

typedef struct
{
char name[32];
short age;
double height;
double weight;
}S_Human;

S_Human people[] =
{
{jack,34,168.5,56.4}
{George,43,183.6,98.8}
{Leonardo,30,179.2,68.5}
{Gabriel,7,120.6,24.7}
{Henry,18,175.6,63.5}
};


int main(void)
{


return 0;
}

A 回答 (1件)

構造体変数 people の宣言の際に、要素数を指定する必要があります。

また、構造体変数 people の初期化の際、各要素の間にカンマが必要です。さらに、氏名を文字列として扱う場合はダブルクオーテーションで囲む必要があります。これらの修正点を踏まえた、正しい解答例を以下に示します。

#include <stdio.h>

typedef struct
{
char name[32];
short age;
double height;
double weight;
} S_Human;

S_Human people[] =
{
{"Jack", 34, 168.5, 56.4},
{"George", 43, 183.6, 98.8},
{"Leonardo", 30, 179.2, 68.5},
{"Gabriel", 7, 120.6, 24.7},
{"Henry", 18, 175.6, 63.5}
};

int main(void)
{
int i;

// 抽出対象①:身長が 170cm 以上で体重が 60kg 以上の人
printf("抽出対象①:\n");
for(i = 0; i < sizeof(people) / sizeof(S_Human); i++)
{
if(people[i].height >= 170.0 && people[i].weight >= 60.0)
{
printf("%s\n", people[i].name);
}
}

// 抽出対象②:年齢が 30 歳未満で身長が 170cm 以上の人
printf("\n抽出対象②:\n");
for(i = 0; i < sizeof(people) / sizeof(S_Human); i++)
{
if(people[i].age < 30 && people[i].height >= 170.0)
{
printf("%s\n", people[i].name);
}
}

return 0;
}
    • good
    • 1
この回答へのお礼

修正点、ご回答いただきありがとうございます。
とても助かりました。
まだまだ勉強中の身なのでまた質問ありました際はよろしくお願いいたします。

お礼日時:2023/03/10 19:46

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

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


このQ&Aを見た人がよく見るQ&A