精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)

Slides:



Advertisements
Similar presentations
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
Advertisements

アルゴリズムとデータ構造 第2回 線形リスト(復習).
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
プログラミング入門2 第10回 動的な領域確保 情報工学科 篠埜 功.
第13回構造体.
課題解説: 関数の引数にポインタを使って2数を入れ替える
データ構造とアルゴリズム 第10回 mallocとfree
第12回構造体.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
基礎プログラミングおよび演習 第9回
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
第8回 プログラミングⅡ 第8回
構造体.
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
情報処理Ⅱ 2007年12月10日(月).
プログラミング入門2 第12回 データ型 関数のプロトタイプ宣言 動的な記憶域確保 芝浦工業大学情報工学科 青木 義満
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
ファイル操作と文字列の利用.
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
構造体 プログラミング入門2 芝浦工業大学情報工学科 青木 義満
精密工学科プログラミング基礎Ⅱ 第3回資料 今回の授業で習得してほしいこと: 2次元配列の使い方 (前回の1次元配列の復習もします.)
構造体 構造体, 構造体とポインタの組み合わせ,.
第10回 プログラミングⅡ 第10回
C言語講座 第3回 ポインタ、配列.
ネットワークプログラミング 第4回「C言語の基礎~ポインタと配列」
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
精密工学科プログラミング基礎 第10回資料 (12/18実施)
プログラミング 4 記憶の割り付け.
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
第10章 これはかなり大変な事項!! ~ポインタ~
ネットワークプログラミング 第3回「C言語の基礎~コマンドライン引数・構造体・ポインタ」
メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言
プログラミング入門2 第11回 情報工学科 篠埜 功.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
第11回 プログラミングⅡ 第11回
プログラミング入門2 第12回 データ型 関数のプロトタイプ宣言 動的な記憶域確保 芝浦工業大学情報工学科 青木 義満
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
配列変数とポインタ 静的確保と動的確保 ポインタ配列 2次元配列 時間計測 第1回レポートの課題
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
構造体と共用体.
データ構造とアルゴリズム 第11回 リスト構造(1)
プログラミング入門2 第9回 ポインタ 情報工学科 篠埜 功.
11: 動的メモリ確保 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
11: 動的メモリ確保 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページを開いておく こと
ネットワーク・プログラミング Cプログラミングの基礎.
精密工学科プログラミング基礎 第7回資料 (11/27実施)
11: 動的メモリ確保 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
11: 動的メモリ確保 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
精密工学科プログラミング基礎Ⅱ 第2回資料 今回の授業で習得してほしいこと: 配列の使い方 (今回は1次元,次回は2次元をやります.)
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
プログラミング言語論 第九回 理工学部 情報システム工学科 新田直也.
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
プログラミング演習II 2003年11月19日(第6回) 木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング入門2 第5回 配列 変数宣言、初期化について
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
C言語講座第5回 2017 構造体.
プログラミング演習II 2003年10月29日(第2,3回) 木村巌.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ) 構造体 (教科書 91 ページ) 定義の方法 宣言と参照 構造体の配列 動的な配列・メモリの確保 (教科書98ページ) 資料のURL : http://www.den.t.u-tokyo.ac.jp/prog 1

semi-metal-conductor 構造体 (structure) とは 異なる型 (int, float, char等) をまとめて扱う. 例えば,以下のような原子に関するデータなど name (char 型) group (char 型) atomic mass (double 型) Hydrogen non-metal 1.00797 Helium 4.0026 Lithium metal 6.939 Berylium 9.0122 Boron semi-metal-conductor 10.811 各原子を表す 構造体 struct atom{ char name[64]; char group[64]; double mass; }; 文字列

構造体の定義 main 関数の外で, 以下のように行う. プログラムの例 #include <stdio.h> struct atom{ char name[64]; char group[64]; double mass; }; int main(void){ ・・・ } struct 構造体名{ データ型1 メンバ名1: データ型2 メンバ名2; ・・・ };

構造体の宣言と参照 宣言 参照 プログラムの例 ・・・ int main(void){ struct 構造体名 変数名; struct atom a; a.name = “Helium”; strcpy(a.name, “Helium”); a.mass = 4.0026; printf(“%s\n”,a.name); printf(“%lf\n”,a.mass); } struct 構造体名 変数名; 参照 変数名.メンバ名 ピリオド (ドット演算子)

構造体の配列 struct 構造体名 配列名[長さ]; プログラムの例 struct atom c[128]; c[0].name = “Helium”; strcpy(c[0].name, “Helium”); c[0].mass = 4.0026; c[1].name = “Hydrogen”; strcpy(c[1].name, “Hydrogen”); c[1].mass = 1.00797;

動的配列とは プログラム実行時に,長さを決める配列 例えば,以下のような時に使う 効率がよくない。 64個の三角形で表された形 13,000個の三角形で表された形 以下のようにプログラムを書けば,どちらも扱えるが・・・ struct triangle tris[20000]; 効率がよくない。

n 個分の int 型データ領域を 確保 (memory allocation) する 動的配列の確保 注意 : 古いC 言語の規格では,配列の長さに変数は使用不可 できないことがある例 int n; scanf(“%d”,&n); int a[n]; n 個分の int 型データ領域を 確保 (memory allocation) する int * a = (int *)malloc( n * sizeof(int) ); 動的配列の宣言 : ( * は,配列へのポインタ ) 型 * 配列名; 動的配列の確保 : 配列名 = (型 *) malloc( 長さ * sizeof(型) );

動的配列の例 確保: malloc 参照: 配列と同じ 解放: free (使い終わったら行う) int n, i; double * a; double s = 0; scanf(“%d”,&n); a = (double*)malloc( n * sizeof(double) ); for(i=0; i<n; i++) s += a[i]; free(a); 宣言 (double 型の動的配列) 確保 (double 型を n 個分) 参照 (配列の i 番目) 解放

2次元の動的配列 動的配列の動的配列を使う サイズが n × m の int 型の場合 宣言 (int*)* a; 確保 /* n 個の int* 型を確保する */ a = ((int*)*) malloc( n * sizeof(int*) ); for(i=0; i<n; i++) /* m 個の int 型を確保する */ a[i] = (int*) malloc( m * sizeof(int) ); 解放 for(i=0; i<n; i++) free( a[i] ); free( a );