プログラミング演習

プログラミング演習
初級編
2004年7月8日(木)
奈良先端科学技術大学院大学
情報科学研究科
猿渡 洋 斎藤 将人 新保 仁
構造体
異なる型のデータをひとまとめにして管理.
 配列は同じ型のデータのみをまとめられる.
 以下の形式で「宣言」する。

struct 構造体名 {
型
メンバ名;
型
メンバ名;
…
};

「構造体名.メンバ名」で参照.
プログラム例1
(構造体を使わない場合)
#include <stdio.h>
main()
{
char name[100];
int age;
printf("Enter your name.\n");
scanf("%s", name);
printf("How old are you?\n");
scanf("%d", &age);
printf("%s is %d years old.\n", name, age);
}
例2:例1を構造体で書く
#include <stdio.h>
struct person {
char name[100];
int age;
};
次ページへつづく
使用する関数 (この場合main())
の前で、構造体を宣言
例2:例1を構造体で書く(つづき)
前ページのつづき
main()
{
struct person x;
構造体変数を確保
printf("Enter your name.\n");
scanf("%s", x.name);
構造体内のメンバは
printf("How old are you?\n"); 「構造体変数名.メンバ名」
scanf("%d", &(x.age));
で参照する
printf("OK. %s is %d years old.\n",
x.name, x.age);
}
構造体の配列
#include <stdio.h>
struct person {
char name[100];
int age;
};
次ページへつづく
構造体の配列(つづき)
main()
{
struct person man[5];
構造体変数を配列で確保
int i;
for (i = 0; i < 5; i++) {
printf("Enter name and age (%d of 5)\n", i+1);
scanf("%s", man[i].name);
scanf("%d", &(man[i].age));
}
for (i = 0; i < 5; i++) {
printf("%s: %d\n", man[i].name, man[i].age);
}
}
定数による構造体メンバの初期化
struct date {
int year, month, day;
};
struct person {
char name[100];
struct date birthday;
};
struct person beatles[4] = {
{"John Lennon", {1940, 10, 9}},
{"Paul McCartney", {1942, 6, 18}},
{"George Harrison", {1943, 2, 25}},
{"Ringo Starr", {1940, 7, 7}}
};
演習問題
演習4-1 商品データベース管理
以下のデータを格納する構造体を定義し、以下の値
をプログラム中で代入し、その内容を出力するプログ
ラムを作成せよ。
(ヒント:商品IDを配列の添字にしてよい)
商品名
商品ID
単価(円)
Pencil
0
60
Eraser
1
50
Ruler
2
120
演習問題(2)
演習4-2 (演習4-1の続き)
複数の商品のIDと個数を入力として、その内訳と合計金額を計
算するレジ計算プログラムを作成せよ.
 商品IDと個数は、IDとして -1 が入力されるまで読み込む
こと.(for や while を使う)上限は 10 とする.

内訳と合計を以下のような形式で出力すること.
item
unit price
qty
sub-total
------------------------------------------Ruler
120
2
240
Eraser
50
5
250
------------------------------------------total
490