C言語講座第5回 2017 構造体.

Slides:



Advertisements
Similar presentations
構造体 構造体とは? 複数のデータをパックしたもの。 新しい “ 型 “ として使用できる. 構造体 キーワード struct strcut は構造体を宣言する命令。 struct { double x,y; }a,b,c; ↑ ここまでが宣 言 ← この形式で、構造体 a,b,c, を定 義.
Advertisements

第 10 回 宿題 出題日: 12 月 14 日 締切日: 12 月 21 日. 提出について 以下の場合は、出題日の出席を欠席とする 締切日を過ぎた場合 正解率が 7 割未満の場合 提出は、 PDF ファイルを印刷して、それに答 えを書いて提出すること。
プログラミング入門2 芝浦工業大学情報工学科青木 義満 第11回構造体. プログラミング入門2 2 構造体 5 人分のサッカー選手データ 全てのデータを関数に渡して,処理する場合 char name[5][256]; int assist[5]; int score[5]; void func( char.
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
アルゴリズムとデータ構造 第2回 線形リスト(復習).
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
プログラミング演習(1組) 第7回
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
プログラミング基礎I(再) 山元進.
第2章 数値の入力と変数 scanfと変数をやります.
第12回新しい型と構造体.
第13回構造体.
データ構造とアルゴリズム 第10回 mallocとfree
第12回構造体.
プログラミング入門2 ポインタについて補足 構造体 第11回 芝浦工業大学情報工学科 青木 義満、篠埜 功
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
基礎プログラミングおよび演習 第9回
プログラミング演習(2組) 第12回
C言語講座 第4回 ポインタ.
第5回C言語講座 ~ポインタと配列.
第6章 2重ループ&配列 2重ループと配列をやります.
構造体.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
構造体 プログラミング入門2 芝浦工業大学情報工学科 青木 義満
プログラミング 3 構造体(1).
第10回 プログラミングⅡ 第10回
第16章 構造体 16.1 構造体の定義と構造体変数 16.2 構造体の配列.
C言語講座 第3回 ポインタ、配列.
暗黙的に型付けされる構造体の Java言語への導入
プログラミング応用 printfと変数.
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
Cプログラミング演習 第7回 メモリ内でのデータの配置.
精密工学科プログラミング基礎 第10回資料 (12/18実施)
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
第7回 プログラミングⅡ 第7回
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
第11回 プログラミングⅡ 第11回
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
疑似乱数, モンテカルロ法によるシミュレーション
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
C#プログラミング実習 第3回.
ネットワーク・プログラミング Cプログラミングの基礎.
プログラミング入門2 第5回 配列 for文 変数宣言 初期化
プログラミング論 構造体
ループだよ!難しいよ! 第5章 while(ループ);.
標準入出力、変数、演算子、エスケープシーケンス
知能情報工学演習I 第8回(後半第2回) 課題の回答
cp-15. 疑似乱数とシミュレーション (C プログラミング演習,Visual Studio 2019 対応)
フレンド関数とフレンド演算子.
プログラミング入門2 第6回 関数 情報工学科 篠埜 功.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング1 プログラミング演習I 第2回.
プログラミング入門2 第5回 配列 変数宣言、初期化について
情報処理Ⅱ 小テスト 2005年2月1日(火).
第2章 数値の入力と変数 scanfと変数をやります.
知能情報工学演習I 第9回(後半第3回) 課題の回答
C言語講座 四則演算  if ,  switch 制御文.
岩村雅一 知能情報工学演習I 第13回(後半第7回) 岩村雅一
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
第13章 構造体 講習最後だよ!.
Presentation transcript:

C言語講座第5回 2017 構造体

構造体とは... 異なる型の値をまとめて 1つの新しい型とする機能. 次ページの例を見てみよう. ポイント: •複数の変数を1つのまとまりにできる. •同じ型の変数をまとめる配列と違って, 異なる型のデータをまとめられる. 次ページの例を見てみよう.

例えば, … 車のナンバー(int)やガソリン(double) といった異なる型のものをまとめ, 車という新しい型とする. (構造体の要素/メンバ) ナンバー(int) 車という構造体 ガソリン(double) 車種(char) …

構造体の書き方 struct 構造体の名前{ }; mainの外で定義する.(大抵mainの上) 構造体の名前は何でもよい. メンバ変数(作りたい型の中身) };  mainの外で定義する.(大抵mainの上) 構造体の名前は何でもよい. セミコロンをつける.

独自に定義したstruct car型の変数を 構造体の例 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; } ここで実際にstruct car型の benzという構造体を作っている. ドット演算子を使うと, 構造体の各要素に アクセスできる. 構造体変数名.メンバ ※ 独自に定義したstruct car型の変数を 簡単に量産できる.

typedef struct car Car; ※ 前ページの※において, 毎回struct carと書くと大変なので, struct carの定義後に, typedef struct car Car; のように書いて, struct carをCarで代用しましょう.

typedef使用例 struct car{ int num; //車のナンバー double gas; //車のガソリン }; typedef struct car Car; int main(){ Car benz; benz.num=3421; benz.gas=18.5; Car audi; audi.num=5786; audi.gas=23.4; }

演習1 名前(char),歳(int),体重(int),身長(double)を要素にもつ 構造体struct humanを定義し, human型配列hito[3]を宣言したのち, 名前にはそれぞれa,b,cを, それ以外の要素には乱数を代入しなさい. また,次ページの実行結果のように a,b,cの全要素を表示させるプログラムを作成しなさい. (hito[3]の各要素への代入はfor文を使い, nameの代入はname=‘a’+i;とするとよい. また,0以上1以下の一様乱数(double)は (double)rand()/RAND_MAX)で作成できる.)

実行結果 このような 実行結果にしてください. 乱数の値の範囲は 自由に設定してOKです.

解答例 #include<stdio.h> #include<stdlib.h> #define N 3 struct human{ char name; int age; int weight; double height; }; typedef struct human Human; int main(){ Human hito[N]; int i; for (i = 0; i < N; i++){ hito[i].name = 'a' + i; hito[i].age = rand() % 101; hito[i].weight = 40 + rand() % 51; hito[i].height = 120 + 80 * (double)rand() / RAND_MAX; } printf("%cさん,%d歳,%dkg,%.1lfcm\n", hito[i].name,hito[i].age,hito[i].weight,hito[i].height); return 0;

演習2 演習1で作成したプログラムに, 一番背の高い人を調べる関数を追加し, その結果をmain()内で表示させなさい.

解答例 int main(){ ・ ・(演習1と同じなので割愛) printf("\n"); Human x; tall(hito, &x); printf("一番背が高いのは,%cさん,%d歳,%dkg,%.1lfcm\n", x.name, x.age, x.weight, x.height); return 0; } void tall(Human *p, Human *max){ (*max).height = 0; for (int i = 0; i < N; i++){ if ((*max).height < p[i].height){ *max = p[i]; #include<stdio.h> #include<stdlib.h> #define N 3 struct human{ char name; int age; int weight; double height; }; typedef struct human Human; void tall(Human *p, Human *max);

最後に struct human{ char name; int age; int weight; double height; }; struct student{ struct human who; char num[8]; 構造体の要素に 構造体を入れることもできる. (右の例でstruct studentは struct humanの要素の他に char[8]の学生証番号をもつ) C++では「クラス継承」によって より楽で安全に 同様(orそれ以上)の仕様を定義できる. お楽しみに? お疲れさまでした!!!