• 締切済み

C言語について教えてください。

名前、身長、体重をメンバとする構造体オブジェクトを要素とする配列を宣言・定義する。 (1)名前、身長、体重を構造体オブジェクトのメンバに格納する関数 (2)平均身長を計算する関数 (3)平均体重を計算する関数 をそれぞれ定義し、その関数の機能を確認するプログラムを作成する。 構造体オブジェクトの各メンバは以下の値をもつとする。 Name Height(cm) Weight(kg) Tom 174.2 72.3 Jerry 152.3 49.2 Spike 168.6 84.8 ただし、平均身長と平均体重は呼び出し元の関数(関数main())で表示する。 また(2)(3)については、生徒の人数が変更されても処理できる関数を作成する。 [実行結果の例] 平均身長:165.0cm 平均体重: 68.0kg [ヒント] 構造体の配列でまとめられたデータから平均身長あるいは平均体重を計算する関数 <返却値型><関数名>(構造体の配列の受け渡しに対応した仮引数の宣言、生徒の人数) この問題について教えてください。 下のプログラムは自分でつかりかけたプログラムです。 #include <stdio.h> #include <string.h> struct student { char name[6]; double height; double weight; }; struct student set_student(char *n, double h, double w) { struct student ss; strcpy(&ss.name[0], n); ss.height = h; ss.weight = w; return ss; } int main(void) { struct student seito[3]; seito[0] = set_student("Tom", 174.2, 72.3); seito[1] = set_student("Jerry", 152.3, 49.2); seito[2] = set_student("Spike", 168.6, 84.8); return 0; } (2)(3)計算の計算する関数を定義し、表示させる方法がよく分かりません。具体的に教えてもらえませんか。よろしくお願いします。

みんなの回答

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

まず、関数を使わずに平均体重と平均身長を出すプログラムを書いてみてください。それが書けないC言語の理解力なら答えに導くヒントを与えることが出来ませんので、C言語を勉強しなおしてください。

  • asuncion
  • ベストアンサー率33% (2126/6287)
回答No.1

ヒントの内容は理解できていますか?

cutebut
質問者

補足

理解できてません。教えてください。

関連するQ&A

  • C言語の構造体

    組込み系でマイコンにソフトをプログラミングの仕事をしています。 C言語は初心者です。 http://www9.plala.or.jp/sgwr-t/c/sec15.html のページの冒頭に、 「構造体は幾つかの異なる型のデータをまとめて 1つのデータ型として扱うものなのです。」と書かれています。 1つのデータ型として扱うとどのようなメリットがあるのでしょうか? 例えば、 struct seiseki seito1; のように対象が1つ(seito1)なら int seito1_no; char  seito1_name[20]; double seito1_average; と変数を確保すれば済むのに、 何故、構造体で宣言するのでしょうか? 例えば、 struct seiseki seito2[20]; のように、似たものが複数ある場合は(seito2が20人分なるなら、) 構造体で宣言する意味があるとはなんとなくわかります。 後ページの http://www9.plala.or.jp/sgwr-t/c/sec15-4.html では、関数でのやり取りが書かれています。 関数で引数や返値で扱うときに構造体にしておいた方が良いからでしょうか? 構造体のメリットというのが今一わかりません。 対象が1つでも構造体で書いた方がいろんな意味で良いのでしょうか? 如何せん、初心者なので質問がうまく書けませんがご了承ください。 ※上から目線的な回答はご遠慮願います。

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

  • C言語のプログラムで...

    下のプログラムは参考書にあったサンプルプログラムなのですが /* 関数の宣言 */ int print_struct(struct person dat); のところはなぜint型なのですか? #include <stdio.h> #include <string.h> /* 構造体の定義 */ struct person { char name[20]; /* 名前 */ double height; /* 身長 */ double weight; /* 体重 */ int bpl; /* 最低血圧 */ int bph; /* 最高血圧 */ }; /* 関数の宣言 */ int print_struct(struct person dat); /* main関数 */ int main(void) { /* 変数の宣言 */ struct person dat; /* 構造体のメンバーに値を代入 */ strcpy(dat.name,"山田太郎"); dat.height = 173.5; dat.weight = 63.0; dat.bpl = 98; dat.bph = 113; /* struct person関数を実行 */ print_struct(dat); return 0; } /* print_struct関数 */ int print_struct(struct person dat) { /* 画面に出力 */ printf("%s\n",dat.name); printf("%f\n",dat.height); printf("%f\n",dat.weight); printf("%d\n",dat.bpl); printf("%d\n",dat.bph); return 0; }

  • [C言語]ソート関数の作成

    現在受け取った構造体を受け取ってソートしてポインタで書き換える関数を作成しています。 構造体の配列 typedef struct{ char name[50]; int age; }member; member seito[10] strcpy(seito[0].name,"yamada") seito[0].age = 15; strcpy(seito[2].name,"ito") seito[2].age = 17; strcpy(seito[3].name,"saito") seito[3].age = 19; こちらの構造体は例です。 seito[2]の情報を[1]に seito[3]の情報を[2]に移動させたいのですが、上手くいきません。 構造体配列を、1引いてあげれば良いと思ったのですが、そうすると[0]までマイナスしてしまい上手く判定が出来ません。 どうかアドバイスお願いいたします。

  • プログラミング言語C

    名前(char name[20]),年齢(intage),身長(double height),体重(double weight)の4つのメンバを持つ構造体であるperson型を宣言し,以下のようなプログラムを作成せよ. 1.1つの構造体変数を宣言し,それぞれのメンバの値を入力させ表示する. 2.構造体person型の配列を作成し,3人分のデータを入力して表示する. 3.BMIを求める関数double bmi(person *p) を作成し,入力した3人分のデータからそれぞれのBMIを求め表示する. BMIとはBody Mass Indexのことで肥満度を表す指数 体重をw(kg),身長をt(m)とすると,BMI = w/t2 解答お願いします。

  • C言語 構造体配列について

    6人分の小テストの点数を記録し,平均値などを計算するプログラムを作成している. 以下の手順と条件に従ってプログラムを作成. 手順 (1) 氏名(name[100], char 型) と点数( score , int 型) をメンバにもつ構造体「struct_TEST」を(main 関数の外で)定義. (2) struct _TEST 型構造体配列 element[6] を定義. (3) キーボードから氏名(ローマ字でよい)と点数を入力する処理を6 回繰り返す. (4) 平均点を計算して画面表示. (5) 最高点を出した人の名前と点数を画面表示. (6) 平均点に満たない人の名前と点数を画面表示. 条件 (3)~(6)の処理には以下に示す関数を利用する. (3) ・・・ 氏名と点数を入力する処理をn 回繰り返す関数 void input_score( struct _TEST *a, int n ) (4) ・・・ n 個の構造体配列に対して平均を計算し,平均点を返す関数 double calc_ave( struct _TEST *a, int n ) (5) ・・・ n 個の構造体配列に対して最高点を算出し,そのユーザの配列番号を返す関数 int calc_max( struct _TEST *a, int n ) (6) ・・・ n 個の構造体配列に対して平均点に満たない人の名前と点数を画面表示する関数 void show_under_ave( struct _TEST *a, int n ) C言語の構造体が良く分かっていません。 こういった条件が多いと考えづらく分からなくなります。 考えても分かっていないので困っています。 誰かすみませんが解答を教えて下さい。

  • C言語の構造体についてです。

    構造体employee 型の変数を配列で5つ宣言し、BMI 値、肥満率、理想体重を求めた後、BMI 値の昇順でソートをかけ、表示をするというプログラムを作成したいのですが、うまくいきません。 ・引数は、配列(構造体employee []型 または、構造体employee *型) ・戻り値は、なし。 ・関数名は、sort ・番号はint型 ・名前はchar型 ・身長・体重・BMI値・肥満率・理想体重はdouble型 という指定があります。 #include <stdio.h> #define N 5 struct employee{ int number; char name[20]; double height; double weight; double bmi; double fat; double ideal; }; void bmi_fat(struct employee *); void sort(struct employee []); int main(void) { int i; struct employee std[N]={ {1, "oohata", 173.0, 60.0, 0.0, 0.0, 0.0},{2, "suzuki", 168.8, 60.2, 0.0, 0.0, 0.0}, {3, "satou", 168.2, 80.5, 0.0, 0.0, 0.0},{4, "tanaka", 162.5, 45.2, 0.0, 0.0, 0.0}, {5, "yamada", 155.3, 55.7, 0.0, 0.0, 0.0} }; for(i=0; i<N; i++){ sort(std); bmi_fat(&std [i]); } for(i=0; i<N; i++){ sort(std); printf("社員番号:%d番\n", std[i].number); printf("名前:%s\n", std[i].name); printf("身長:%2.1lfcm\n", std[i].height); printf("体重:%2.1lfkg\n", std[i].weight); printf("BMI:%2.1lf\n", std[i].bmi); printf("肥満率:%2.1lf%\n", std[i].fat); printf("理想体重:%2.1lfkg\n", std[i].ideal); } return 0; } void sort(struct employee a[]) { int i, j; struct employee x; a->bmi=a->weight/((a->height/100.0)*(a->height/100.0)); a->ideal=(a->height-100)*0.9; a->fat=a->weight/a->ideal*100.0; for(i=0; i<N-1; i++){ for(j=0; j<N-i-1; j++){ if(a[j].bmi>a[j+1].bmi){ x=a[j]; a[j]=a[j+1]; a[j+1]=x; } } } } 以上が作成済みのプログラムなのですが、「外部シンボル'_bmi_fat'が未解決」と出てしまいます。 どこを直してよいのかが全く分かりません。 ご教授お願い致します。

  • C言語について質問です。

    C言語についての質問です。 C言語の問題で、 キーボードから氏名・身長・体重の値を受け取り、受け取った身長からもとめられる標準体重を受け取った体重から差し引いた値を計算する。 入力したデータと標準体重のデータを次のように表示するプログラムを作成せよ。 入力データ数は3件として、氏名、身長、体重、標準体重のデータは構造体に格納して、表示する際にデータの入った構造体を読み出すようにしなさい。 という問題があり、苦戦しております。 サンプルソースとして以下があり、 #include <stdio.h> #define NUMBER 3 typedef struct { char name[20]; float weight; float height; float diff; }MEMBER; int main(void){ int i; MEMBER member[NUMBER]; puts("氏名をおわすれなく"); /*構造体への入力部分*/ for(i=0;i<NUMBER;i++){ /*ここに追加*/ } /*構造体データを読み出して画面に表示する部分*/ printf("氏名\t身長[cm]\t体重[kg]\t体重-標準体重[kg]\n"); puts("--------------------------------------------------------"); for(i=0;i<NUMBER;i++){ printf("%s\t%8.1f\t%8.1f\t%8.1f\n", member[i].name,member[i].height, member[i].weight, member[i].diff); } puts("--------------------------------------------------------"); } 中央あたりの「構造体への入力部分」の書き方が分かりません。 どなたか手助けしていただけないでしょうか。

  • 構造体について

    凄く初歩的な質問で申し訳ありませんが… 入門書の構造体のところで 以下のようなプログラムの例がありました。 #include <stdio.h> struct seiseki { /* 構造体の宣言 */ int no; char name[20]; double average; }; int main(void) { int i; struct seiseki seito1, seito2[20]; /* 構造体変数と構造体配列の宣言 */ >char name[20] というのは、NAMEの領域を20文字 確保すると言うことですよね? >struct seiseki seito1, seito2[20] ここの箇所が分からないのですが seito2[20]の20というのは どうして20なのですか? NAMEだけではないので もっと大きな数字になるような気がするのですが… またseito1の方は どうして数字が何もないんですか? 考え違いをしているところを ご指摘して頂ければ幸いです。

  • C言語構造体についてです。

    C言語、π=PI 3.14159265で構造体を用いてmensekiを呼び出して 半径と面積を計算して出力するプログラムです。下の空白を埋めてもらえますか? /* 構造体のプログラム */ #include <stdio.h> #include <math.h> #define PI 3.14159265 struct Data { /* 半径rと面積areaをdoubleで宣言 */ }; void menseki(struct ... 構造体のポインタを引数とする ){ /* 面積を計算する際に構造体のアドレスから計算する */ circle->area=PI* .....; } main(){ struct Data example[2]; //構造体配列 int i; /* 半径rを構造体配列を用いて2例入力する */ /* 2例の各々について mensekiを呼び出して 半径と面積を計算して出力する */ } よろしくお願いします。

専門家に質問してみよう