演算増幅器

Similar documents
Microsoft PowerPoint - handout07.ppt [互換モード]

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

Microsoft PowerPoint - 12.ppt [互換モード]

Microsoft PowerPoint - 12.ppt [互換モード]

プログラミング基礎

Microsoft PowerPoint - 13.ppt [互換モード]

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

Microsoft Word - no13.docx

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

Microsoft PowerPoint - 12Chap16.ppt

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

02: 変数と標準入出力

Prog1_15th

Microsoft Word - no12.doc

演習課題No12

02: 変数と標準入出力

PowerPoint Presentation

PowerPoint プレゼンテーション

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

PowerPoint プレゼンテーション

プログラミングI第10回

1. 関数 scanf() 関数 printf() は変数の値を画面に表示しますが それに対し関数 scanf() はキーボードで入力した値を変数に代入します この関数を活用することで対話式 ( ユーザーの操作に応じて処理を行う ) プログラムを作ることができるようになります 整数の和

Microsoft Word - Cプログラミング演習(7)

Microsoft Word - no15.docx

Microsoft Word - 3new.doc

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

Microsoft PowerPoint - lec10.ppt

PowerPoint プレゼンテーション

cp-7. 配列

Taro-ポインタ変数Ⅰ(公開版).j

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Microsoft PowerPoint - 説柔5_間勊+C_guide5ï¼›2015ã•’2015æŒ°æŁŽæš’å¯¾å¿œç¢ºèª“æ¸‹ã†¿ã•‚.pptx

プログラミング基礎

gengo1-11

Microsoft Word - no202.docx

Microsoft PowerPoint - 説明2_演算と型(C_guide2)【2015新教材対応確認済み】.pptx

Microsoft PowerPoint - 13th.ppt [互換モード]

Microsoft Word - no204.docx

Microsoft Word - no103.docx

プログラミング実習I

memo

プログラミング基礎

プログラミング実習I

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

講習No.12

第1回 プログラミング演習3 センサーアプリケーション

memo

配列, 関数, 構造体

PowerPoint Presentation

Prog1_10th

解答編 第 9 章文字データの取り扱い 演習問題 9.1 文法事項 1 ) コンピュータにおける 文字データの取り扱いについて説明しなさい コンピュータでは 文字に整数の番号を割り当てて ( コード化して ) 文字コードとして扱います 実際に用いられる文字コードとして ASCII コード EUC コ

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

gengo1-2

Microsoft PowerPoint - 11.pptx

program7app.ppt

Microsoft Word - Cプログラミング演習(12)

PowerPoint プレゼンテーション

Microsoft PowerPoint - program.ppt [互換モード]

C 資料 電脳梁山泊烏賊塾 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に

02: 変数と標準入出力

Microsoft Word - Cプログラミング演習(11)

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft Word - no11.docx

kiso2-09.key

PowerPoint プレゼンテーション

Microsoft Word - no15.docx

gengo1-12

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

PowerPoint Presentation

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

4 分岐処理と繰返し処理 ( 教科書 P.32) プログラムの基本的処理は三つある. (1) 順次処理 : 上から下に順番に処理する ぶんきそろ (2) 分岐処理 : 条件が揃えば, 処理する はんぷく (3) 反復処理 : 条件が揃うまで処理を繰り返す 全てのプログラムは (1) から (3) の

講習No.9

また 初期化について 以下のサンプルコードのように指定すれば 定義時に値を代入できます * オマケ配列は同名で複数個の箱を用意出来ます 同名ではありますが それぞれは別々の個体であるわけです また この複数個の変数は メモリ上に連続で確保されます 2. 文字と文字列 C 言語では文字と文字列は異なる

JavaプログラミングⅠ

概要 プログラミング論 構造体 構造体 複数の変数を組合わせて, ひとまとめにしたもの 簡単 重要 自己参照型, リスト 重要, 難しい S-1 S-2 新しい構造体の宣言 struct 構造体名 { データ型メ

02: 変数と標準入出力

基礎プログラミング2015

Microsoft PowerPoint - 5Chap15.ppt

gengo1-12

演算増幅器

Microsoft PowerPoint pptx

Prog1_6th

gengo1-8

Microsoft PowerPoint - C1(演算と変数).ppt

Microsoft Word - Training10_プリプロセッサ.docx

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C 言語講座 Vol 年 5 月 29 日 CISC

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

目次

初歩のC言語ターミナル_2014_May.pages

Microsoft PowerPoint - 計算機言語 第7回.ppt

概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要.

C-programming_kouza4(2007)

DVIOUT

Transcription:

構造体 ここまでに char int doulbe などの基本的なデータ型に加えて 同じデータ型が連続している 配列についてのデータ構造について習った これ以外にも もっと複雑なデータ型をユーザが定義 することが可能である それが構造体と呼ばれるもので 異なる型のデータをひとかたまりのデー タとして扱うことができる 異なるデータをまとめて扱いたい時とはどんな場合だろうか 例えば 住民データを管理したい 場合を考える 個人を識別するデータとして 識別番号 氏名 年齢 住所 電話番号 などな ど 多くのデータが挙げられる これらは文字列であったり 数値であったりする このデータを 元にして 管理台帳プログラムを作成する場合には これらのデータはひとまとまりとして扱った 方がすっきりするし 便利である 実際に異なるデータをまとめて扱いたい機会というのは 非常 に多い 識別番号 123456789 氏名 佐藤太郎 年齢 24 住所 秋田県秋田市 電話番号 018-847-XXXX 図 1 データの管理例構造体の使用手順サンプルプログラムを見ながら構造体の使用手順を説明していく 以下は学生の平均点を管理し 表示するプログラムである 構造体に含まれるデータは学籍番号 名前 平均点としている 基本的な使用は以下に示す通り 1 構造体のテンプレート ( 枠型 ) の宣言 2 構造体の宣言 初期化 3 構造体メンバの参照 プログラム例 1 // 構造体のテンプレート ( 枠型 ) の宣言 int number; // 番号 double average; // 平均点 int i; - 1 -

// 構造体の宣言と初期化 student1 = 1, "Satou", 90.2 student2[3] = 2, "Suzuki", 77.3, 3, "Takahashi", 59.1, 4, "Tanaka", 64.9 // 構造体メンバの参照 printf("%d %s %.1f\n", student1.number, student1.name, student1.average); for(i = 0; i < 3; i++) printf("%d %s %.1f\n", student2[i].number, student2[i].name, student2[i].average); 実行結果 1 Satou 90.2 2 Suzuki 77.3 3 Takahashi 59.1 4 Tanaka 64.9 それでは個別に説明をしていく 1 構造体のテンプレート ( 枠型 ) の宣言最初に構造体のテンプレートを宣言する必要がある この処理ではひとまとめにするデータを記述していく 書式と使用例を以下に示す struct は構造体という意味である またタグ名というのは構造体の枠型に付ける名前である データ型は今までに習った int や char などを使うことができ 配列やポインタも利用できる 構造体を構成するデータとして定めた変数 ( 使用例での変数 number name average に当たる ) のことを構造体のメンバと呼ぶ 1の宣言自体は単に構造体の枠型を作ったにすぎず メモリ上に実際のデータを格納する領域が割り当てられてはいない状態である 書式 struct タグ名 データ型変数名 ; データ型変数名 ; 使用例 int number; // 学籍番号 - 2 -

double average; // 平均点 2 構造体の宣言と初期化 1で作ったテンプレートを使って実際に構造体を宣言し メモリ上に領域を確保する これを構造体の宣言という 構造体は使用例に示すように 変数 ( student1;) や配列 (struct record student2[4];) で扱うことができる また ポインタで扱うこともできるが これについては後で述べる 書式 struct タグ名変数名 ; 使用例 student1; student2[3]; また 構造体は通常の変数や配列同様にして 以下に示すようにして初期化を行うことができる student1 = 1, "Satoh", 90.2 student2[3] = 2, "Suzuki", 77.3, 3, "Takahashi", 59.1, 4, "Tanaka", 64.9, 3 構造体メンバの参照 構造体の各メンバを利用する場合には以下に示すようにして利用する ここで使用しているピリ オド (.) はドット演算子と呼ぶ 書式構造体変数名. メンバ名使用例 student1.number = 1; scanf("%s", student2[0].name); 使用例に示したように記述することによって 各メンバは変数や配列の場合と同様に 値の代入 や計算に利用することができる 構造体の使用例 ここまでに構造体の使用手順について説明した ここでは構造体の使用例として scanf( ) での データ入力 構造体の一括代入 構造体のネスト ( 入れ子 ) について説明する (1)scanf( ) を用いてのデータ入力 構造体に scanf( ) でデータを入力する場合も通常の変数への入力の場合と変わらない 各メン - 3 -

バのデータ型を考えて引数を指定して行う 変数のアドレスをとりだすには '&' を変数の前に付 ける 配列のアドレスをとりだすには '&' は不要である プログラム例 2 // 構造体のテンプレート ( 枠型 ) の宣言 int number; // 番号 double average; // 平均点 int i; // 構造体の宣言 student1, student2[3]; // 構造体 student1 のメンバへの入力 printf(" 学生 1\n"); printf(" 学籍番号 "); scanf("%d", &student1.number); printf(" 名前 "); scanf("%s", student1.name); printf(" 平均値 "); scanf("%lf", &student1.average); // 構造体配列 student2 のメンバへの入力 for(i = 0; i < 3; i++) printf(" 学生 %d\n", i+2); printf(" 学籍番号 "); scanf("%d", &student2[i].number); printf(" 名前 "); scanf("%s", student2[i].name); printf(" 平均値 "); scanf("%lf", &student2[i].average); // 構造体メンバの参照 printf("\n 入力結果 \n"); printf("%d %s %.1f\n", student1.number, student1.name, student1.average); for(i = 0; i < 3; i++) printf("%d %s %.1f\n", student2[i].number, student2[i].name, student2[i].average); - 4 -

実行結果例学生 1 学籍番号 1 名前 Satou 平均値 90.2 学生 2 学籍番号 2 名前 Suzuki 平均値 77.3 入力結果 1 Satou 90.2 2 Suzuki 77.3 (2) 構造体の代入同じ型を持った構造体は一括して代入することが可能である 以下の例では student1 の内容が student2 と student3[0] に代入されている 構造体のメンバへの代入で用いている関数 strcpy は文字列のコピーを行う この関数は string.h をインクルードすることで利用する プログラム例 3 #include <string.h> // 構造体のテンプレート ( 枠型 ) の宣言 int number; // 番号 double average; // 平均点 // 構造体の宣言 student1; student2, student3[3]; // 構造体のメンバへの代入 student1.number = 1; strcpy(student1.name, "Satou"); student1.average = 90.2; // 構造体の一括代入 student2 = student1; student3[0] = student1; // 構造体メンバの参照 printf("%d %s %.1f\n", student1.number, student1.name, student1.average); - 5 -

printf("%d %s %.1f\n", student2.number, student2.name, student2.average); printf("%d %s %.1f\n", student3[0].number, student3[0].name, student3[0].average); 実行結果 1 Satou 90.2 1 Satou 90.2 1 Satou 90.2 (3) 構造体のネスト構造体はそのメンバに構造体を持つことが出来る これを構造体のネストという 以下のプログラム例では学生の平均点を扱う部分を数学と英語の点数に置き換えたものである 数学と英語は一般科目という枠組みでまとめている プログラム例 4 #include <string.h> // 構造体のテンプレート ( 枠型 ) の宣言 struct subject // 科目 int mathematics; // 数学 int english; // 英語 int number; char name[20]; struct subject general; // 番号 // 名前 // 一般科目 // 構造体の宣言と初期化 // student1 = 1, "Satou", 90, 80 student1 = 1, "Satou", 90, 80 // 中括弧を付けたほうがより明示的 student2; // 構造体のメンバへの代入 student2.number = 2; strcpy(student2.name, "Suzuki"); student2.general.mathematics = 59; student2.general.english = 97; // 構造体メンバの参照 printf("%d %s %d %d\n", student1.number, student1.name, student1.general.mathematics, student1.general.english); printf("%d %s %d %d\n", student2.number, student2.name, student2.general.mathematics, student2.general.english); - 6 -

実行結果 1 Satou 90 80 2 Suzuki 59 97 record number name general mathematics english 図 2 構造体のネストのイメージ ここでの大事な点は構造体テンプレートの宣言の順番である 2 つ目のテンプレートのメンバでは struct subject general; を宣言している この宣言の前に struct subject のテンプレートの宣言が必要となる つまり 構造体テンプレートの宣言の順番を逆にするとコンパイルエラーが起きる 構造体のネストは以下のようにしてまとめて記述することも可能である 使用例 int number; char name[20]; struct subject int mathematics; int english; general; // 番号 // 名前 // 一般科目 // 数学 // 英語 typedef について typedef は型の定義という意味があり 既にあるデータ型に対して 新しい名前を付けて利用す るもので 以下のように記述する 書式 typedef 既にある型新しい名前使用例 typedef unsigned int UINT; UINT data; - 7 -

data = 10; typedef で宣言される新しい名前は プログラム中で区別しやすいように一般的には大文字を使用する typedef は #define とよく似ており 新しい型を作り出すのではなく 文字列の置き換えを行っている ただし 型だけに限定しているために目的がはっきりしている 使用例の場合には unsigned int 型を新しい名前 UINT として typedef 宣言した この宣言以降 UINT という型を利用することができる unsigned は符号無し変数を宣言する場合に利用し 通常の符号有りの場合に比べて 利用できる正の数の最大値を大きくしたい場合に用いる このデータ型は変数の宣言の記述が長いので より短い名前に置き換えて利用することが好まれる場合がある 構造体の宣言では struct が付くため 型名が長くなる 構造体の宣言を簡潔にするための typedef は非常に良く使われる プログラム例 1で用いたプログラムを typedef を用いて書き直すと次のようになる また 構造体のテンプレートの宣言に用いたタグ名 record は typedef を用いた場合に省略することができる その際にはコンパイラによって適当なタグ名が割り振られる プログラムする上では typedef 以降 データ型を RECORD として構造体の宣言をするので コンパイラによって付けられた 適当なタグ名 を意識することはない プログラム例 5 // 構造体のテンプレート ( 枠型 ) の宣言 typedef int number; // 番号 char name[20]; // 名前 double average; // 平均点 RECORD; int i; // 構造体の宣言と初期化 RECORD student1 = 1, "Satou", 90.2 RECORD student2[3] = 2, "Suzuki", 77.3, 3, "Takahashi", 59.1, 4, "Tanaka", 64.9 // 構造体メンバの参照 printf("%d %s %.1f\n", student1.number, student1.name, student1.average); for(i = 0; i < 3; i++) printf("%d %s %.1f\n", - 8 -

student2[i].number, student2[i].name, student2[i].average); 実行結果プログラム例 1と同じ 補足 以下は構造体のネストとプログラム例 5の typedef で紹介した構造体テンプレートの宣言例である ここで一つ確認したいことがある 構造体ネスト使用例の general と typedef 使用例の RECORD は同じものだろうか? 構造体ネスト使用例 int number; // 番号 struct subject // 一般科目 int mathematics; // 数学 int english; // 英語 general; typedef 使用例 typedef int number; char name[20]; double average; RECORD; // 番号 // 名前 // 平均点 確かに両方とも 直後の位置に書いてあるが これは別物である 構造体ネスト使用例の general は struct subject という構造体の枠型に対して宣言した 変数名 であり typedef 使用例の RECORD は typedef によって に対応付けられた 型 である この違いを理解していないとプログラム作成時の混乱の原因になるので気を付けたい 最後に構造体ネスト使用例のプログラムの subject 構造体を typedef で型の宣言をして書き直したものを以下に示す typedef と構造体ネスト使用例 typedef struct subject // 一般科目 int mathematics; // 数学 int english; // 英語 SUBJECT; int number; // 番号 SUBJECT general; // 一般科目 - 9 -

演習プログラム例 1~5 を作成し 実行結果を確認しなさい 課題 4 Kadai4-1 自分の身の回りのことについて構造体を利用したプログラムを考え 作成しなさい このプログラムの頭の部分にはコメント文で簡単なプログラムの説明を記述すること 課題の続きは後で示す - 10 -