プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)

Slides:



Advertisements
Similar presentations
第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
Advertisements

C 言語講座 第 7 回 ポインター. メモリとアドレス(ポインターの前 に) コンピュータのメモリには 1 バイトずつ 0 番地、 1 番地、 2 番地・・・というように 住所が割り当てられている この住所をアドレスという。 メモリはデータをしまうもので それを引き出すためには メモリに番号(アドレス)を振っておけばよいな.
1 第5回 配列. 2 今回の目標 マクロ定義の効果を理解する。 1次元配列を理解する。 2次元配列を理解する。 ☆2 × 2の行列の行列式を求めるプログラ ムを作成する.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
情報処理演習 (9)グラフィックス システム科学領域 日浦 慎作.
C言語によるプログラミングスタイル 制御システム工学科 山北 昌毅.
プログラミング入門2 第1回 導入 情報工学科 篠埜 功.
応用理工学情報処理 第1回(2015年10月 5日) 月曜日担当 前島展也 Manaba
プログラミング入門2 第1回 導入 情報工学科 篠埜 功.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
第2章 数値の入力と変数 scanfと変数をやります.
第13回構造体.
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第7回 データの基本型 情報・知能工学系 山本一公
課題解説: 関数の引数にポインタを使って2数を入れ替える
第12回構造体.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
プログラミング入門2 第1回 導入 情報工学科 篠埜 功.
OSとコマンド OS:コンピュータを使うための基本プログラム コマンド:OS上で使用できる命令 OS本体であるカーネルの内部コマンド
プログラミング演習II 2004年10月19日(第1回) 理学部数学科・木村巌.
C言語講座 第4回 ポインタ.
条件式 (Conditional Expressions)
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
数値解析シラバス C言語環境と数値解析の概要(1回) 方程式の根(1回) 連立一次方程式(2回) 補間と近似(2回) 数値積分(1回)
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
プログラミング論 関数ポインタ と 応用(qsort)
関数とポインタ 値呼び出しと参照呼び出し swapのいろいろ 関数引数 数値積分
東京工科大学 コンピュータサイエンス学部 亀田弘之
#include <stdio. h> int main() { /. 表示をする
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
プログラミング演習I 2003年6月25日(第10回) 木村巌.
プログラミング演習I 2003年5月7日(第4回) 木村巌.
知能情報工学演習I 第12回(後半第6回) 課題の回答
メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言
講義では、Cプログラミングの基本を学び 演習では、やや実践的なプログラミングを通して学ぶ
第9回関数Ⅰ (簡単な関数の定義と利用) 戻り値.
第7回 プログラミングⅡ 第7回
高度プログラミング演習 (08).
プログラミング演習I ―数値解析― 平成16年度 前期 上 村 佳 嗣.
プログラミング入門2 第11回 共用体、列挙体 情報工学科 篠埜 功.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
岩村雅一 知能情報工学演習I 第12回(C言語第6回) 岩村雅一
C言語 はじめに 2016年 吉田研究室.
参照されないリテラル 長谷川啓
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
第5回 プログラミングⅡ 第5回
C プログラミング入門 基幹7 (水5) 14: 発展事項
モジュール分割.
岩村雅一 知能情報工学演習I 第12回(後半第6回) 岩村雅一
PROGRAMMING IN HASKELL
プログラミング演習I 2003年6月11日(第9回) 木村巌.
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
情報処理Ⅱ 第9回:2003年12月16日(火).
14: 発展事項 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
第4回 配列.
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
第2章 数値の入力と変数 scanfと変数をやります.
C言語講座 四則演算  if ,  switch 制御文.
第5回 配列.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)
プログラミング 3 ポインタ(1).
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
C プログラミング入門 総機1 (月1) 14: 発展事項
プログラミング 2 静的変数.
Presentation transcript:

プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。) C言語入門 第11週 プログラミング言語Ⅰ(実習を含む。), 計算機言語Ⅰ・計算機言語演習Ⅰ, 情報処理言語Ⅰ(実習を含む。)

いろいろなプログラム 

名前付きの定数 列挙子

定数の種類 リテラル 列挙定数 数値リテラル 文字列リテラル マジックナンバーになると分かり辛いので、マクロか const 変数にして名前付の定数にする。 自動的に名前付定数の数値を割り振ってくれる

列挙(enumeration) 列挙子(enumerator) 書式: enum 列挙名 {列挙定数名 [= 定整数値], ...} 値を設定しないと 0から開始 前の値から+1ずつ増加 #define の代わりに使える

列挙(enumeration) 列挙子(enumerator) 例: NO = 0 YES = 1 JAN = 1 FEB = 2 MAR = 3 ... DEC = 12 enum boolean {NO, YES}; enum escape { BELL = '\a', BACKSPACE = '\b', TAB = '\t', NEWLINE = '\n', VTAB = '\v', RETURN = '\r'}; enum month { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC};

列挙(enumeration) 列挙子(enumerator) #define で書き変えた場合の例: #define NO 0 #define YES 1 #define BELL '\a' #define BACKSPACE '\b' #define TAB '\t' #define NEWLINE '\n' #define VTAB '\v' #define RETURN '\r' #define JAN 1 #define FEB 2 #define MAR 3 // ... #define DEC 12

関数のようなマクロ パラメータ付きのマクロ

パラメータ付きのマクロ #define で定義するマクロに ( ) を付けるとパラメータを与えることが出来る。 1 2 3 4 5 6 7 macro_ex1.c 1 2 3 4 5 6 7 8 #include <stdio.h> #define MIN(X,Y) (X<Y?X:Y) void main() { printf("min: %d\n", MIN(1,2)); } コンパイル前 プリプロセッサにより (1<2?1:2)で置換される

パラメータ付きのマクロの注意点 マクロは単純な置換なので置換結果がどうなるか注意する必要がある。 1 2 3 4 5 6 7 8 macro_ex2_1.c 1 2 3 4 5 6 7 8 #include <stdio.h> #define POW2(X) (X*X) void main() { printf("pow2: %d\n", POW2(2)); } コンパイル前 プリプロセッサにより (2*2)と置換される

パラメータ付きのマクロの注意点 マクロは単純な置換なので置換結果がどうなるか注意する必要がある。 1 2 3 4 5 6 7 8 macro_ex2_1.c (2+1)*(2+1)=9 ではなく 2+(1*2)+1=5 になってしまう 1 2 3 4 5 6 7 8 #include <stdio.h> #define POW2(X) (X*X) void main() { printf("pow2: %d\n", POW2(2+1)); } コンパイル前 プリプロセッサにより (2+1*2+1)と置換される

パラメータ付きのマクロの注意点 マクロは単純な置換なので置換結果がどうなるか注意する必要がある。 1 2 3 4 5 6 7 8 macro_ex2_2.c パラメータはなるべく括弧で括る 1 2 3 4 5 6 7 8 #include <stdio.h> #define POW2(X) ((X)*(X)) void main() { printf("pow2: %d\n", POW2(2+1)); } コンパイル前 プリプロセッサにより ((2+1)*(2+1))と置換される

パラメータ付きのマクロの注意点 マクロは単純な置換なので置換結果がどうなるか注意する必要がある。 1 2 3 4 5 6 7 8 9 macro_ex2_3.c マクロのパラメータに 副作用を伴う演算を用いては駄目 1 2 3 4 5 6 7 8 9 #include <stdio.h> #define POW2(X) ((X)*(X)) void main() { int x=2; printf("pow2: %d\n", POW2(++x)); } コンパイル前 プリプロセッサにより ((++x)*(++x))と置換され 結果として 3*4 になってしまう

swap 値の交換

値の交換 以下のケースで x,y の値を交換するにはどうしたら良いか? int x = 10; int y = 20; y = x; こうするとxは既に 20で上書きされているので、 両方20になってしまう。

値の交換 中間変数を用いると良い int x = 10; int y = 20; int tmp; // 以下で x,y の値を入れ替えたい y = tmp; こうやると中間変数tmpに保存された xの値10をyに入れることで x,yの値を入れ替える事が出来る。

値の交換 マクロにしてみる macro_ex3.c #define SWAP(TYPE,X,Y) {TYPE SWAP_tmp=X; X=Y; Y=SWAP_tmp;} int x = 10; int y = 20; // 以下で x,y の値を入れ替えたい SWAP(int, x, y); ブロック内のローカル変数として 中間変数を作成 プリプロセッサにより 以下のように置換される // 以下で x,y の値を入れ替えたい {int SWAP_tmp=x; x=y; y=SWAP_tmp;};

参考文献 [1] B.W.カーニハン/D.M.リッチー著 石田晴久 訳、プログラミング言語C 第2版 ANSI 規格準拠、共立出版(1989)