• 締切済み

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人の身長をもとめる方法と適正標準体重を求める方法を教えてください。構造体の配列を一括で扱うコードがいまいちわかりません。おねがいします。

みんなの回答

  • tig33
  • ベストアンサー率50% (6/12)
回答No.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; int ct; int found; 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; float Height; Height = 0.0; recp = GetRecordPointer( name ); if( recp != NULL ) { Height = ercp->height; } return( Height ); } //------------------------------------------------ //体重を返す float GetHeight( char *name ) { struct TRecord *recp; float Weight; Weight = 0.0; recp = GetRecordPointer( name ); if( recp != NULL ) { Weight = ercp->weight; } return( Weight ); } //------------------------------------------------ //標準体重を返す float StdWeight( char *name ) { float Height; float Weight; Weight = 0.0; Height = GetHeight( name ); if( Height > 0.0 ) { /* 標準体重 = (身長 - 100) * 0.9 */ Weight = (Height - 100.0) * 0.9; } return( Weight ); } //------------------------------------------------ //メイン int main(void) { char namebuf[NAME_LENGH+1]; int ct; float Height, 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は、インデント(字下げ)ができないので、プログラムが読みにくくなりますね。 必要でしたら、メールで送りますよ(^-^)

  • ddnp009
  • ベストアンサー率25% (15/58)
回答No.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; } 身長を『もとめる』というのが良く分からんけど、 こういうこと?

専門家に質問してみよう