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

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

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

演算増幅器

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

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

memo

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

02: 変数と標準入出力

02: 変数と標準入出力

プログラミング基礎

C 言語第 7 回 掛け算 (multiply number) ìz1 = x1 + iy1 í îz = x + iy 割り算 (devide number) ( )( ) ( ) Þ z z = x + iy x + iy = x x - y y + i y x + x y

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

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

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

PowerPoint プレゼンテーション

演習課題No12

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

Prog1_15th

memo

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

kiso2-09.key

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

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

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

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

PowerPoint プレゼンテーション

プログラミング基礎

プログラミング基礎

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

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

PowerPoint Presentation

Microsoft PowerPoint - lec10.ppt

memo

基礎プログラミング2015

講習No.10

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

PowerPoint Presentation

プログラミング実習I

Microsoft PowerPoint pptx

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

Microsoft Word - no13.docx

講習No.12

Microsoft Word - no02.doc

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

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

配列, 関数, 構造体

DVIOUT

株式会社アルウィン C 言語コーディング規約 ver.0.1

Taro-リストⅠ(公開版).jtd

Microsoft Word - 3new.doc

講習No.9

Microsoft PowerPoint - 11.pptx

PowerPoint プレゼンテーション

講習No.8

プログラミング実習I

Microsoft Word - no15.docx

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

Prog1_6th

講習No.12

PowerPoint Presentation

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

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - class2-OperatorOverLoad.pptx

第3回 配列とリスト

Microsoft PowerPoint - prog08.ppt

Microsoft Word - no11.docx

Microsoft PowerPoint - 12Chap16.ppt

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

第2回講義:まとめ

講習No.1

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

Microsoft Word - no204.docx

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

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

2006年10月5日(木)実施

cp-7. 配列

ポインタ変数

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

6 関数 6-1 関数とは少し長いプログラムを作るようになると 同じ処理を何度も行う場面が出てくる そのたびに処 理を書いていたのでは明らかに無駄であるし プログラム全体の見通しも悪くなる そこで登場す るのが 関数 である 関数を使うことを 関数を呼び出す ともいう どのように使うのか 実際に見て

Prog1_10th

プログラミング基礎

Microsoft PowerPoint ppt

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

program7app.ppt

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

02: 変数と標準入出力

関数の中で宣言された変数の有効範囲はその関数の中だけです さっきの rectangle _s で宣言されている変数 s は他の関数では使用できません ( 別の関数で同じ名前の変数を宣言することはできますが 全く別の変数として扱われます このように ある関数の中で宣言されている変数のことをその関数の

Prog1_12th

計算機プログラミング

gengo1-2

gengo1-8

Microsoft PowerPoint - prog13.ppt

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

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

Slide 1

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

Microsoft Word - no103.docx

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

Transcription:

第 12 回新しい型と構造体 1

今回の目標 新しい型の定義法を理解する 構造体を理解する 複素数同士を足し算する関数を作成し その関数を利用するプログラムを作成する 2

複素数の足し算 複素数は実部と虚部の2つの実数で 表現される z = a+ bi z = a + bi z = a + b i 2 つの複素数 1 1 1 と 2 2 2 の和 z = a + bi は 次式で与えられる 3 3 3 z = z + z 3 1 2 = ( a + a ) + ( b + b ) i 1 2 1 2 3

typedef 文 ( 型の別名の付け方 ) C 言語では いろいろなデータ型に自分の好きな名前をつけることができる 宣言 typedef 既に使える型別名 ; 例 typedef int Count; Count i; int,double,charや int *,double *,char* や既に定義した型 この宣言で Count 型 (int 型 ) の変数 iが用意される 参考 int i; セミコロンを忘れずに 新しい型名は 大文字 + 小文字で命名すること ( スタイル規則参照 ) 4

練習 1 /*newtype.c 新しい型実験コメント省略 */ #include <stdio.h> #define SIZE 5 typedef int Count; ;/* 序数を表す型 */ typedef double Real; /* 実数を表す型 */ int main() { /* ローカル変数宣言 */ Count i; /* カウンタ */ Real x[size]; /* 実数データ */ /* 次に続く */ 5

} /* 続き */ /* ローカル変数の初期化 */ i=0; for(i=0;i<size;i++) { x[i]=(real) i; /* 全て異なる値にするため インデックスで初期化 カウント型から実数型へキャストしている */ } /* 出力処理 */ for(i=0;i<size;i++) { printf("x[%d] = %6.2f n",i,x[i]); } return 0; 6

構造体 ( レコード型と呼ぶこともある ) 構造体とは いくつかのデータを 1つのまとまりとして扱うデータ型 プログラマが 定義してから使う 一まとまりのデータ例 複素数 : 実部と虚部点 :x 座標 y 座標 2 次元ベクトル :x 成分 y 成分 名刺 : 所属 名前 連絡先日付 : 年 月 日 曜日 曜本 : 題名 著者 ISBN 7

構造体テンプレートの宣言 ( 構造体の定義 ) 構造体を構成する要素を 宣言 struct 構造体タグ名 { 型 1 メンバ名 1; 型 2 メンバ名 2; 型 3 メンバ名 3; : }; 例 struct complex { double real; double imag; }; メンバといいます これを構造体テンプレートという int,double,char や int *,double *,char* や既に定義した構造体型等 関数の記述と似ているがセミコロンを忘れずに 8

構造体の宣言 ( 構造体型の変数の用意の仕方 ) 宣言 struct 構造体タグ名変数名 ; 例 ここに空白がある struct complex z; 参考 int i; double x; この2つで 一つの型を表わしているので注意すること 9

typedef 文と構造体 ( 構造体型の変数の用意の仕方 2) 構造体型の宣言は 2つの文字列で一つの型を意味するので紛らわしいつの型を意味するので紛らわしい typedef 文を使うとすっきりする 宣言 typedef struct 構造体タグ別名 ; 例 これ 2 つで 一つの型 typedef struct complex Complex; Complex z; 別名 参考 この宣言で,Complex 型 ( 複素数型 ) int i; の変数 zが用意される 10

構造体のイメージ char int double 構造体テンプレート struct complex { double real; double imag; }; 既存の型雛形の作成 struct complex 型の雛形 セミコロンを忘れずに 11

別名の定義 typedef struct t complex Complex; struct complex 型の雛形 2つの文字列で 一つの型を表すと 間違えやすい Complex 型の雛形 12

構造体型の変数宣言 Complex z1; Complex z2; Complex 型の雛形 雛形を用いて プレスする z1 Complex 型の変数 (struct complex 型の変数 ) z2 Complex 型の変数 13

構造体のイメージ 2 char int double struct card { char int double }; initial; age; weight; 雛形の作成 struct card 型の雛形 いろいろな型のデータを一まとまりであつかうときには 構造体はとくに便利 14

別名の定義 typedef struct t card Card; struct card 型の雛形 Card 型の雛形 15

構造体型の配列宣言 #define MAXCARD 3 Card x[maxcard]; Card 型の変数 x[0] x[1] x[2] 16

構造体のメンバの参照 struct 型の変数のメンバの参照の仕方 書式 変数名. メンバ名 例 ドット ( 演算子の一つ ) これらを メンバ名を定義している型の変数として扱える z1.real これはdouble 型の変数である x[0].inital これは char 型の変数である 17

参照のイメージ Complex z1; Complex 型の雛形 Complex 型の変数 real imag real imag z1 real z1.real imag z1.imag 18

演算子. の結合力演算子. の結合力は他のどの演算子よりも強い x[0].age++;. > は ++ -- (x[0].age)++; > * & の意味 Complex * p; のとき *p.real; は *(p.real); の意味になってしまう 両方間違い ( メンバ real は ポインタではない ) (*p).real; 型的には これが正しい ( ソースの可読性の向上のため ) 他の演算子と一緒に使うときには 括弧を用いて意図を明確にすること 19

構造体と代入演算子 1 ( 構造体への値の入れ方 1) 全てのメンバに値を代入する Complex z1; (z1.real)=1.0; (z1.imag)=2.0; 間違い例 z1=1.0+2.0i; z1=(1.0,2.0); 複素数だからってこんなふうにはかけない ベクトル風にもかけない 20

イメージ Complex z1; real imag z1 (z1.real)=1.0; 1.0; (z1.imag)=2.0; real z1.real imag z1.imag real imag z1 21

構造体と代入演算子 2 ( 構造体への値の入れ方 2) 同じ型の構造体同士で代入する Complex z1; Complex z2; (z1.real) real)=1.0; (z1.imag)=2.0; z2=z1; 22

イメージ Complex z1; Complex z2; 構造体の値設定 (z1.real)=1.0; (z1.imag)=2.0; ( 各メンバへの代入 z2 real imag real imag z1 構造体の代入 z2=z1; z2 real imag real imag z1 23

練習 2 /*test_struct.c 構造体実験コメント省略 */ #include <stdio.h> struct complex { double real; double imag; }; typedef struct complex Complex; /* 次に続く */ 24

int { main() Complex z1; Complex z2; printf(" メンバの読み込み n"); printf("z1= (real?) + (imag?)i "); scanf( %lf %lf",&(z1.real),&(z1.imag)); printf(" 読み込み後 n"); printf("z1=%4.2f+(%4.2f)i n", ( z1.real,z1.imag); printf("z2=%4.2f+(%4.2f)i n", z2.real,z2.imag); 2 /* 続く */ 25

/* 続き */ printf( z2=z1 実行中 n"); z2=z1; printf(" 代入後 n"); pritnf("z1=%4.2f +(%4.2f)i n", z1.real,z1.imag); pritnf("z2=%4.2f +(%4.2f)i n", z2.real,z2.imag); } return 0; 26

複素数の和を求めるプログラム /* 作成日 :yyyy/mm/dd 作成者 : 本荘太郎学籍番号 :B0zB0xx ソースファイル :pluscomp.c 実行ファイル :pluscomp 説明 : 構造体を用いて 2つの複素数の和を求めるプログラム 入力 : 標準入力から 2つの複素数 z1とz2を入力 z1 の ( 実部 虚部 ) z2 の ( 実部 虚部 ) の順で4つの実数を入力する 出力 : 標準出力にその2つの複素数の和を出力する */ /* 次に続く */ 27

/* 続き */ #include <stdio.h> /* 構造体テンプレート */ struct t complex /* 複素数を表わす構造体 */ { double real; /* 実部 */ double imag; /* 虚部 */ }; /* 新しい型名 */ typedef struct t complex Complex; /* 複素数型 */ /* プロトタイプ宣言 */ Complex plus_complex(complex,complex); /*2つの複素数の和を求める関数*/ /* 次に続く */ 28

/*main 関数 */ int main() { /* ローカル変数宣言 */ Complex z1; /* 複素数 1*/ Complex z2; /* 複素数 2*/ Complex sum; ;/* 複素数の和を蓄える変数 */ /* 入力処理 */ printf("2つの複素数 z1,z2を入力して下さい n"); printf("z1 の実部は?"); scanf("%lf",&(z1.real)); printf("z1 の虚部は?"); scanf("%lf",&(z1.imag)); printf("z2 の実部は?"); scanf("%lf",&(z2.real)); printf("z2の虚部は?"); scanf("%lf",&(z2.imag)); /* 次に続く */ 29

/* 続き */ /* 計算処理 */ sum=plus_complex(z1,z2); /* 出力処理 */ printf( sum=z1+z2 n"); printf("(%4.2f+(%6.2f)i (%6 2f)i )=", sum.real,sum.imag); printf("(%4 (%4.2f+(%4.2f)i)+ 2f)i)+", z1.real,z1.imag); printf("(%4.2f+(%4.2f)i) n", ( ( ) z2.real,z2.imag); return 0; /* 正常終了 */ } /*main 関数終了 */ 30

/*2つの複素数の和を求める関数仮引数 z1,z2:2z2:2 つの複素数 戻り値 :2つの複素数の和(z1+z2) */ Complex plus_complex(complex z1,complex z2) { /* ローカル変数宣言 */ Complex sum; /*2つの複素数の和を蓄える*/ /* 命令記述 */ (sum.real)=(z1.real)+(z2.real); /* 実部の計算 */ (sum.imag)=(z1.imag)+(z2.imag);/* 虚部の計算 */ return sum; } /* 関数 plus_complexの終了 */ /* プログラム pluscomp.c の終了 */ 31

実行結果 $make gcc pluscomplex.c p -o pluscomplex p $./pluscomplex 2つの複素数 z1,z2を入力して下さい z1の実部は? 1.0 z1の虚部は? 2.0 z2 の実部は? 3.0 z2の虚部は? 4.0 sum=z1+z2 (4.00+(6.00)i)=(1.00+(2.00)i)+(3.00+(4.00)i) $ 32