Microsoft Word - 3new.doc

Similar documents
PowerPoint プレゼンテーション

Microsoft PowerPoint - 11.pptx

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

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

cp-7. 配列

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

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

Prog1_10th

プログラミング実習I

02: 変数と標準入出力

PowerPoint Presentation

02: 変数と標準入出力

スライド 1

プログラミング基礎

Microsoft Word - no202.docx

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

Java講座

情報処理演習 B8クラス

kiso2-09.key

物質工学科 田中晋

02: 変数と標準入出力

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

PowerPoint Presentation

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

ポインタ変数

02: 変数と標準入出力

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

memo

Microsoft PowerPoint - kougi7.ppt

gengo1-2

PowerPoint プレゼンテーション

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

< F2D837C E95CF CF68A4A94C5816A2E6A>

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

PowerPoint Presentation

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

gengo1-8

本サンプル問題の著作権は日本商工会議所に帰属します また 本サンプル問題の無断転載 無断営利利用を厳禁します 本サンプル問題の内容や解答等に関するお問 い合わせは 受け付けておりませんので ご了承ください 日商プログラミング検定 STANDARD(C 言語 ) サンプル問題 知識科目 第 1 問 (

ポインタ変数

今までの復習 プログラムで最低限必要なもの 入力 ( キーボードから ファイルから ) 出力 ( 画面へ ファイルへ ) 条件分岐 : 条件の成立 不成立により 異なる動作をする 繰り返し : 一定の回数の繰返し 条件成立の間の繰返し 関数の定義 関数の呼び出し C ではそれ以外に ポインタ データ

プログラミング及び演習 第1回 講義概容・実行制御

Microsoft PowerPoint - lec10.ppt

ポインタ変数

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

プログラミング基礎

Microsoft Word - no103.docx

C言語7

PowerPoint プレゼンテーション

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

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

講習No.9

Microsoft Word - no11.docx

コマンドラインから受け取った文字列の大文字と小文字を変換するプログラムを作成せよ 入力は 1 バイトの表示文字とし アルファベット文字以外は変換しない 1. #include <stdio.h> 2. #include <ctype.h> /*troupper,islower,isupper,tol

プログラミング基礎

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

デジタル表現論・第6回

Microsoft PowerPoint - C4(反復for).ppt

第2回講義:まとめ

Java プログラミング Ⅰ 3 回目変数 変数 変 数 一時的に値を記憶させておく機能型 ( データ型 ) と識別子をもつ 2 型 ( データ型 ) 変数の種類型に応じて記憶できる値の種類や範囲が決まる 型 値の種類 値の範囲 boolean 真偽値 true / false char 2バイト文

情報処理Ⅰ演習

02: 変数と標準入出力

プログラミングI第5回

ゲームエンジンの構成要素

02: 変数と標準入出力

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

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 条件判断文 3 switch 文 switch 文式が case の値と一致した場合 そこから直後の break; までを処理し どれにも一致しない場合 default; から直後の break; までを処理する 但し 式や値 1

演算増幅器

Microsoft PowerPoint - kougi6.ppt

02: 変数と標準入出力

Java プログラミング Ⅰ 7 回目 switch 文と論理演算子 今日の講義講義で学ぶ内容 switch 文 論理演算子 条件演算子 条件判断文 3 switch 文 switch 文 式が case のラベルと一致する場所から直後の break; まで処理しますどれにも一致致しない場合 def

memo

演算増幅器

memo

02: 変数と標準入出力

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

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

PowerPoint プレゼンテーション

program7app.ppt

gengo1-12

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

目次

Microsoft Word - 05

講習No.8


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

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

Microsoft PowerPoint - 5Chap15.ppt

今回のプログラミングの課題 ( 前回の課題で取り上げた )data.txt の要素をソートして sorted.txt というファイルに書出す ソート (sort) とは : 数の場合 小さいものから大きなもの ( 昇順 ) もしくは 大きなものから小さなもの ( 降順 ) になるよう 並び替えること

3,, となって欲しいのだが 実際の出力結果を確認すると両方の配列とも 10, 2, 3,, となってしまっている この結果は代入後の配列 a と b は同じものになっていることを示している つまり 代入演算子 = によるの代入は全要素のコピーではなく 先をコピーする ため 代入後の a と b は

プログラミング入門1

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

メソッドのまとめ

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

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


Microsoft PowerPoint - kougi9.ppt

Microsoft PowerPoint - prog13.ppt

Transcription:

プログラミング演習 II 講義資料 3 ポインタ I - ポインタの基礎 1 ポインタとは ポインタとはポインタは, アドレス ( データが格納されている場所 ) を扱うデータ型です つまり, アドレスを通してデータを間接的に処理します ポインタを使用する場合の, 処理の手順は以下のようになります 1 ポインタ変数を宣言する 2 ポインタ変数へアドレスを割り当てる 3 ポインタ変数を用いて処理 ( 演算 ) を行う 4 結果を表示する 1.1 ポインタ変数を宣言する す ポインタ変数を使用する場合, 一般の変数と同様に使用に先立って, その宣言を行いま ポインタ変数の宣言の仕方ポインタ変数の宣言の仕方は, これまでの変数の場合と少し異なります ポインタ変数は, データの記憶されているアドレスを参照するためのもので, 参照するデータの種類によって次のように宣言します 参照するデータ型 * ポインタ変数 例えば, 以下のようになります (pi,pf,pd,pc がポインタ変数名 ) 参照するデータがint 型 ( 整数 ) の場合 : int *pi ; 参照するデータが float 型 ( 小数点の付いた数 ) の場合 : float *pf ; 参照するデータが double 型 ( 小数点の付いた数 ) の場合 :double *pd ; 参照するデータが char 型 ( 文字 ) の場合 : char *pc ; ( 文字列を扱う場合も, 同様 ) ポインタ変数の宣言は, ポインタ変数のデータ型を示すものではなくそのポインタ変数で参照できるデータの型を示すものです ポインタ変数を使う場合には, その変数が何型のデータを指しているかを常に念頭におく必要があります プログラミング演習 II 3-1

1.2 ポインタ変数へアドレスを割り当てるポインタ変数は, 宣言しただけではどの場所 ( アドレス ) も指し示していないので, 操作するデータを指し示すようにポインタ変数にデータのアドレスを代入しておかなければなりません 例えば,int 型のデータの格納されている変数 n をポインタ変数 pn によって扱うときには, 変数 n のアドレスを変数 pn に代入します そこで, 変数のアドレスを求めるための演算 & が用意されています &n は変数 n のアドレスを表します (scanf を用いてキーボードからデータを入力するとき, データの格納場所を &n のように指定したのは, そのアドレスを指定するためです ) プログラムで書くと以下のようになります int n ; /* n はint 型データ ( 整数 ) */ int *pn ; /* pn はint 型データへのポインタ変数 */ pn=&n ; /* 変数 n のアドレスを代入 */ ポインタ変数を宣言しただけ 変数 n のアドレスを代入 pn? pn n n のアドレス 1.3 ポインタ変数を用いて処理 ( 演算 ) を行う 演算子 * ポインタ変数の値はアドレスですから, データの内容を扱うことはできません そこで, データの内容を扱うために, アドレスをもとにその中身を表す演算子 * が用意されています 前述の例では,*pn の値はn となります 従って, *(&n ) == n という関係が成り立ちます ポインタ変数と演算ポインタ変数には, 加算, 減算, インクリメント (+1), デクリメント (-1), 関係演算, 論理演算を行うことができます 演算の結果は, ポインタが指す変数などの型のサイズに依存します 例えば, ポインタ変数 pi が int 型 (4 バイト ) のデータを指すポインタ変数であるとき, pi + n (n は整数 ) プログラミング演習 II 3-2

という演算を行うと, 結果は pi + 4 n という値になります すなわち,+1 するごとに その指し示す変数 ( データ ) のサイズ ( バイト数 ) 分単位で変化します これは,+1 する とそのサイズに関係なく次のデータを指し示すように値が変化することを意味します ポインタを用いたプログラム例 int a, b, x ; int *c, *d=&b, *y; *c = 10; *d = 20; *y = *c + *d; printf("a=%d b=%d a+b=%d n", a, b, x) ; c = &a; y = &x; return 0 ; ポインタの演算の例 double a; double *pa; pa = &a; printf("pa=%x n", pa); pa = pa + 1; printf("pa=%x n", pa); pa = pa + 1; printf("pa=%x n", pa); return 0; プログラミング演習 II 3-3

char a; int n; double x,y; char *pa; int *pn; double *px,*py; pa = &a; pn = &n; px = &x, py = &y; printf("pa: %x n", pa); pa = pa + 2 ; printf("pa = pa + 2 n"); printf("pa: %x n", pa); printf("pn: %x n", pn); pn = pn - 2 ; printf("pn = pn - 2 n"); printf("pn: %x n", pn); printf("px: %x n", px); px = px++; printf("px++ n"); printf("px: %x n", px); printf("py: %x n", py); py--; printf("py- printf("py: %x n", py); return 0; 演算前 pa = 0x0DF0 pn = 0x0DF4 px = 0x0E00 py = 0x0E08 とすると, 演算後の値は pa = pn = px = py = プログラミング演習 II 3-4

2 ポインタと文字列 ポインタ変数への文字列の代入文字列を扱うには配列を用いました 配列では, 例えば static char a [] = Hello ; のように, 文字列で初期化を行うことができました しかし, 初期化以外で配列に文字列を代入するということは出来ませんでした 配列に文字列をセットするには繰り返しを用いて一文字ずつ行わなければなりません 文字型へのポインタ変数には, 次のように文字列を代入することが出来ます char *str ; str = Hello ; これは, 実際には, Hello という文字列がメモリのあ る場所に格納され, その先頭のアドレスをstr という変数 が指している ( すなわち, 先頭のアドレスの値がstr にセ ットされる ) ことを意味します Hello という文字列は, int n; メモリのある番地から順に, int *i; H, e, l, l, o, 0 i = &n; と連続して格納されます *i = 10; 従って,*(str+4) の値は o となります printf("%d\n", n); この, Hello という文字列を表示するには return 0; printf( %s n, str) ; とします プログラミング演習 II 3-5

課題 3_1 入力した整数が偶数ならば 偶数 (even number) を奇数ならば 奇数 (odd number) を表示するプログラムをポインタ変数を用いて作成 [ プログラムの説明 ] (1) プログラムで必要な変数やポインタの型を宣言する (2) キーボードから整数を変数 a に入力する (3) 変数 a の内容が偶数か奇数かを判別する (4) 入力された整数が偶数か奇数かを表示する [ プログラム ] #include stdio.h int a ; int *b ; scanf( %d, &a) ; if( ア ) イ ; else ウ ; printf( 入力されたデータは %s です n, b ) ; return 0 ; 課題 3_2 ポインタ変数を用いて, 自分の名前をポインタ変数に代入して, 名前をそのまま表示す る 次に, 名前を逆順に表示するプログラムを作成しなさい /////////////// 前回の課題のプログラム例 課題 2_2 /* program2_2 */ #include<stdio.h> int i,p ; static char season[4][7] = "spring", "summer", プログラミング演習 II 3-6

"autumn", "winter" ; char input[3] ; printf(" 季節を表す英語のスペルのうちどれか最初の 2 文字を入力して下さい \n"); scanf("%s",input); p=0; for(i=0; i<=3; i++) if(input[0]==season[i][0] && input[1]==season[i][1]) printf("%s\n",season[i]); p=1 ; break ; /* 一致するものが見つかったらそれ以上処理を行わない */ if(p==0) printf("not found\n"); return 0 ; プログラミング演習 II 3-7