こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

C言語の構造体の配列の扱い方

#include <stdio.h>

struct record {
char name[10];
float height;
float weight; };

/* 各データを、長さ 5 の record 構造体の配列に代入 */
struct record records[5] = {
{ "yasuo", 170.5, 70.5 },
{ "hideaki", 176.5, 65.8 },
{ "nobu", 166.5, 58.2 },
{ "yuichi", 168.0, 65.4 },
{ "nori", 152.7, 68.6 }
};


float std_weight(struct record r){
/* 標準体重 = (身長 - 100) * 0.9 */
return (r.height - 100.0) * 0.9;
}
float std_weight(struct record r);

となっている時に、メイン関数にて、5人の身長をもとめる方法と適正標準体重を求める方法を教えてください。構造体の配列を一括で扱うコードがいまいちわかりません。おねがいします。

投稿日時 - 2006-06-13 19:16:30

QNo.2213463

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

#include <stdio.h>

#define NAME_LENGTH(10)
#define PERSON_COUNT (5)

#ifndef NULL
#define NULL((void *)0)

struct TRecord {
char name[NAME_LENGTH];
float height;
float weight;
};

/* 各データを、長さ 5 の record 構造体の配列に代入 */
struct TRecord records[PERSON_COUNT] = {
{ "yasuo",170.5, 70.5 },
{ "hideaki",176.5, 65.8 },
{ "nobu",166.5, 58.2 },
{ "yuichi",168.0, 65.4 },
{ "nori",152.7, 68.6 }
};

/* 標準体重 = (身長 - 100) * 0.9 */
float std_weight(struct record r)
{
return( (r.height - 100.0) * 0.9 );
}

//------------------------------------------------
//指定された氏名の構造体レコードポインタを返す
TRecord *GetRecordPointer( che *name )
{
struct TRecord*recp;
intct;
intfound;

found = 0;
recp = records; //recp = &records[0]; と同じ
for(ct=0; ct<PERSON_COUNT; ct++) {
if( !strcmp( name, recp->name ) ) {
found = 1;
break;
}
recp++;
}

if( !found ) {
recp = (TRecord*)NULL;
}

return( recp );
}

//------------------------------------------------
//身長を返す
float GetHeight( char *name )
{
struct TRecord*recp;
floatHeight;

Height = 0.0;
recp = GetRecordPointer( name );
if( recp != NULL ) {
Height = ercp->height;
}

return( Height );
}

//------------------------------------------------
//体重を返す
float GetHeight( char *name )
{
struct TRecord*recp;
floatWeight;

Weight = 0.0;
recp = GetRecordPointer( name );
if( recp != NULL ) {
Weight = ercp->weight;
}

return( Weight );
}

//------------------------------------------------
//標準体重を返す
float StdWeight( char *name )
{
floatHeight;
floatWeight;

Weight = 0.0;
Height = GetHeight( name );
if( Height > 0.0 ) {
/* 標準体重 = (身長 - 100) * 0.9 */
Weight = (Height - 100.0) * 0.9;
}

return( Weight );
}

//------------------------------------------------
//メイン
int main(void)
{
charnamebuf[NAME_LENGH+1];
intct;
floatHeight, Weight;

do {
printf("Plsease type your name.\n");
scanf("%s", namebuf );

/* 名前が入力されなかったら終了する */
if( strlen(namebuf) <= 0) ) {
break;
}

Height = GetHeight( namebuf );
Weight = StdWeight( namebuf );
if( Weight == 0.0 ) {
printf("\n%s is no registerd.\n", name);
} else {
printf("\n%s\' Height = %f cm standard wight = %f kg\n",
name, Height, Weight);
}

} while( strlen(namebuf) > 0 );

return( 0 );
}

指定された名前の身長と、標準体重を、表示すると言う風にしてみました。

※OKWaveは、インデント(字下げ)ができないので、プログラムが読みにくくなりますね。 必要でしたら、メールで送りますよ(^-^)

投稿日時 - 2006-06-14 11:02:50

ANo.1

int main(void)
{
 size_t array_size = sizeof(records) / sizeof(records[0]);
 int i;

 puts("name\theight\tweight\tdef_weight");

 for (i = 0; i < array_size; ++i)
  printf("%s\t%f\t%f\t%f\n", records[i].name, records[i].height, records[i].weight, std_weight(records[i]));

 return 0;
}

身長を『もとめる』というのが良く分からんけど、
こういうこと?

投稿日時 - 2006-06-13 19:49:58