Document

プログラミング工学 II
第 7 回 (2015/ 5/ 28) 担当 八嶋
プログラミング工学 II 課題 (5 月 28 日分)
構造体
課題 1
氏名 name と年齢 age , 身長 height , 体重 weight の 4 つのメンバで構成される構造体
taikaku を宣言する. その構造体の配列 person[3] を宣言して、Table 1 の構造を持つ氏名,
年齢, 身長, 体重の値をキーボード上から入力し, 表示させるプログラムを作成する.
なお, 下記のコード例にある 空白 を埋めて, プログラムを作成しても良い.
Table 1: 体格データ
氏名
Yamada
Sato
Suzuki
年齢
22
31
24
身長 (cm)
168.2
175.4
158.7
[実行例]
1 人目の名前を入力してください > Yamada
Yamada さんの年齢を入力してください > 22
Yamada さんの身長を入力してください > 168.2
Yamada さんの体重を入力してください > 60.2
2 人目の名前を入力してください > Sato
Sato さんの年齢を入力してください > 31
Sato さんの身長を入力してください > 175.4
Sato さんの体重を入力してください > 74.4
3 人目の名前を入力してください > Suzuki
Suzuki さんの年齢を入力してください > 24
Suzuki さんの身長を入力してください > 158.7
Suzuki さんの体重を入力してください > 49.8
氏名
年齢 身長 体重
Yamada 22
168.2 60.2
Sato
31
175.4 74.4
Suzuki 24
158.7 49.8
体重 (kg)
60.2
74.4
49.8
プログラミング工学 II
第 7 回 (2015/ 5/ 28) 担当 八嶋
#include <stdio.h>
/* 体格データを格納する構造体 */
struct taikaku{
名前, 年齢, 身長, 体重
};
int main()
{
struct taikaku person[3];
int i;
for( 空白; 空白; 空白 ){
printf("%d 人目の名前を入力してください > ", i+1);
scanf ("%s", 名前 );
printf("%s さんの年齢を入力してください > ", 名前 );
scanf ("%d", 年齢 );
printf("%s さんの身長を入力してください > ", 名前 );
scanf ("%lf", 身長 );
printf("%s さんの体重を入力してください > ", 名前 );
scanf ("%lf", 体重 );
}
printf("¥n 氏名¥t 年齢¥t 身長¥t 体重¥n");
for( 空白; 空白; 空白 ){
printf("%s¥t %d¥t %.1lf¥t %.1lf¥n",
氏名, 年齢, 身長, 体重 );
}
return 0;
}
プログラミング工学 II
第 7 回 (2015/ 5/ 28) 担当 八嶋
課題 2
課題 1 の 4 つのメンバにボディマス指数 bmi を加えた構造体 Taikaku を定義し, 体格デー
タを基に個人毎のボディマス指数を計算して画面に表示するプログラムを作成しなさい.
この時, 構造体 Taikaku の配列 p が持つ size 人のデータに対し, キーボード上から身長と
体重を入力させる関数, 体格データの身長と体重から bmi を算出する関数, データを出力さ
せる関数をそれぞれ作成し, これらの関数を用いること.
なお, ボディマス指数 BMI は体重 w[kg], 身長 t[m] とすると,
BMI =
w
t2
で表せる
課題 1 と同様に, 下記のプログラムを埋めることでプログラムが完成するため, これを参考
にしても良い.
ヒント:配列名は配列の要素 0 を指すポインタの意味になります.
したがって, 下記の記述はどれも同じ要素へのアクセスとなります.
1. data[0].bmi = xx;
2. (data+0)->bmi = xx;
3. data->bmi = xx;
4. (*data).bmi = xx;
各関数の引数 p は配列のポインタが渡されており, 上記の方法によるアクセスが必要です.
[実行例]
人数を入力してください 3
1 人目の名前を入力してください > Yamada
yamada さんの年齢を入力してください > 22
yamada さんの身長を入力してください > 168.2
yamada さんの体重を入力してください > 60.2
2 人目の名前を入力してください > Sato
Sato さんの年齢を入力してください > 31
Sato さんの身長を入力してください > 175.4
Sato さんの体重を入力してください > 74.4
3 人目の名前を入力してください > Suzuki
Suzuki さんの年齢を入力してください > 24
Suzuki さんの身長を入力してください > 158.7
Suzuki さんの体重を入力してください > 49.8
氏名
年齢 身長
Yamada 22 168.2
Sato
31 175.4
Suzuki 24 158.7
体重 BMI
60.2 21.3
74.4 24.2
49.8 19.8
プログラミング工学 II
第 7 回 (2015/ 5/ 28) 担当 八嶋
#include <stdio.h>
#include <math.h>
/* 体格データを格納する構造体 */
struct Taikaku{
名前, 年齢, 身長, 体重
double bmi;/*ボディマス指数*/
};
void readTaikaku(struct Taikaku *p, int size);
void calcbmi(struct Taikaku *p, int size);
void showTaikaku(struct Taikaku *p, int size);
void readTaikaku(struct Taikaku *p, int size)
{
埋める
calcbmi(p, size);
}
void calcbmi(struct Taikaku *p, int size)
{
埋める
}
void showTaikaku(struct Taikaku *p, int size)
{
埋める
}
int main()
{
struct Taikaku person[100]; /* 配列 person を宣言 */
int size;
printf("人数を入力してください");
scanf ("%d", &size);
readTaikaku(person, size);
showTaikaku(person, size);
return 0;
}