Download presentation
Presentation is loading. Please wait.
Published byあきとし ごみぶち Modified 約 8 年前
1
C 言語講座第 5 回 構造体
2
構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
3
車のナンバー (int) やガソリン (double) といっ た異なる型のものをまとめ , 車という新しい 型を表せる . 例えば , 車という 構造体 … (構造体の要素) ナンバ -(int) ガソリン (double) 車種 (char)
4
構造体の書き方 struct 構造体の名前 { メンバ変数 ( 作りたい型の中身 ) }; main の外で定義する . ( 大抵 main の上 ) 構造体の名前は何でもよいが , 最初の文字は大文 字でかく . セミコロンをつける .
5
構造体の例 struct Car{ int num; // 車のナンバー double gas; // 車のガソリン }; int main(){ struct Car benz; benz.num=3421; benz.gas=18.5; struct Car audi; audi.num=5786; audi.gas=23.4; } ここで実際に Car 型の benz とい う構造体を作っている. ドット演算子というものを使う と,構造体の各要素にアクセス できる. 構造体変数名. メンバ 構造体を使うと,このように同じよ うなものを簡単に作れる. ※
6
※ 前ページの ※ において , 毎回 struct を書くのがたいへ んなので , typedef struct car Car; のように書くと , struct を省略できます .
7
演習 1 名前 (char) , 歳 (int) , 体重 (int) , 身長 (double) の要素をもった構造体を作成し , その値を乱 数で三人分表示させるプログラムを作成しな さい . ( 名前は a,b,c さんでよいので , for 文で回す際 には n=‘a’; としてやるとよい . また , 小数点以 下の乱数表示は , RAND_MAX を用いる .)
8
実行結果 このような実行結果にし てください. ただし,乱数なので値は 毎回変わりますが,値の 範囲などは自由に設定し て OK です.
9
解答例 #include #define N 3 struct perfect_human{ char name; int age; int weight; double height; }; int main() { struct perfect_human nakata[N]; perfect_human x = { 'a', 0, 0, 0 }; int a, w, i; char n; double h; srand((unsigned int)time(NULL)); for (i = 0; i < N; i++){ n = 'a'; a = rand() % 101; w = rand() % 51 + 40; h = 120 + (double)80 * rand() / RAND_MAX; nakata[i] = { n + i, a, w, h }; printf("%c さん,%d 歳,%dkg,%.1lfcm\n", nakata[i].name, nakata[i].age, nakata[i].weight, nakata[i].height); } }
10
演習 2 演習 1 で作成したプログラムを利用し , 一番 背の高い人を調べる関数を作成して main 文で 表示させなさい .
11
実行結果
12
解答例 #include #define N 3 struct perfect_human{ char name; int age; int weight; double height; }; void tall(perfect_human *p, perfect_human *max); int main() { ・ ・ ( 演習 1 と同じのため略 ) ・ printf("\n"); tall(nakata,&x); printf(" 一番背が高いのは , %c さん,%d 歳,%dkg,%.1lfcm\n", x.name, x.age, x.weight, x.height); } void tall(perfect_human *p,perfect_human *max){ (*max).height = 0; for (int i=0; i < N; i++) { if ((*max).height < p[i].height){ *max = p[i]; } } }
13
今回 visual studio でコードを作ったのですが , ファイ ルを C++ のもので作ってしまい , struct を書かなくて も通る , 配列をそのまま書いているなど , C 言語では エラーが出てしまう解答例になってしまいました . すみません !!! ( 実行してみたい場合は cpp ファイルで実行してみて ください )
14
お疲れさまでした !!!
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.