• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:プログラミング構造体について。)

プログラミング構造体について

このQ&Aのポイント
  • プログラミング構造体とは、C言語で使用されるデータ構造の一種です。構造体は複数の異なる型を持つメンバー変数をひとまとめにして扱うことができます。
  • プログラミング構造体を使用することで、関連する変数をまとめて扱ったり、複数の値を返すことができます。また、構造体を配列として使用することもできます。
  • プログラミング構造体を使用することで、データの構造を明確に表現することができます。また、関数の引数として構造体を渡したり、構造体を返す関数を定義することもできます。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

・メンバーgenderはintよりenumの方がいい。あるいはMALE、FEMALEという定数定義をdefineする手もある ・動的配列ではなく線形リスト構造なら関数にサイズを渡す必要がなくなり、不正サイズによるメモリアクセスエラーの可能性も配列アクセスよりは低くなる。もっとも今回なら全部に入力値を使うだけなのであまり違いはないとも言える という「そもそもの部分」は書くだけ書いておいて。 printPersonList、outputPersonListで「入力データの最初から最後までアクセスする」部分は出ています。 AverageOfAge、つまり「年齢の平均」は「全ての入力データの合計/人数」です。 countMale/Femaleは男女それぞれの人数、つまりgenderの値が男(女)を示す要素の総数です。 これだけ書けばここまでプログラムが書けている人なら普通はわかると思いますが、わからなければ「どこがわからないのか」を明確にした上で補足してください。 なお「全部わからない」というのは「自分で考える気がない」というのと同義なので無視します。あしからず。

bewitch66
質問者

補足

回答ありがとうございます。 とりあえず書いてみたんですけど、printfのところはどぅやってかけばいいのかよくわからなかったんですが、以下のような書き方は間違ってますか?あと、もし男性なら0を数える、女性なら1を数えるやり方なんですが、gender++はダメですよね? double getAverageOfAge(struct person *person_p, int size){ int i, count, sum, average, age; sum = sum + age; average = sum / count; for(i=0; i < size; i++){ printf("%f, &average\n", (person_p + i) -> name, (person_p + i) -> gender, (person_p + i) -> age); } } int countMales(struct person *person_p, int size){ int i, gender; if(gender == 0){ pintf("gender++\n", (person_p + i) -> name, (person_p + i) -> gender, (person_p + i) -> age); } } } int countFemales(struct person *person_p, int size){ int i, gender; if(gender == 1){ printf("gender++\n", (person_p + i) -> name, (person_p + i) -> gender, (person_p + i) -> age); } } }

その他の回答 (1)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

それらの関数が何をどうするのかさっぱりわかりませんけど。 例えば、言葉の違う国のレストランに入って、日本語で「ただ腹減った」とだけしか言わないのと全く同じです。 想像はできますけど、プログラムは想像ではできませんので。 まず問題なのは、 >strcpy((person_p + i) -> name, name); 構造体のnameのサイズを無視してコピーしてます。典型的なメモリ破壊と脆弱性と言う弱点です。

関連するQ&A