• 検索結果がありません。

Taro-C言語の基礎Ⅰ(公開版).j

N/A
N/A
Protected

Academic year: 2021

シェア "Taro-C言語の基礎Ⅰ(公開版).j"

Copied!
24
0
0

読み込み中.... (全文を見る)

全文

(1)

C 言 語 の 基 礎 Ⅰ

0 . 目 次

1 . は じ め に 1 . 1 簡 単 な 例 1 . 2 C 言 語 プ ロ グ ラ ム の 翻 訳 と 実 行 2 . 条 件 分 岐 2 . 1 i f 文 2 . 2 s w i t c h 文 3 . 制 御 構 造 3 . 1 w h i l e 文 3 . 2 f o r 文 3 . 3 d o 文 3 . 4 c o n t i n u e 文 , b r e a k 文 4 . 変 数 、 配 列 4 . 1 変 数 4 . 2 1 次 元 配 列 4 . 3 2 次 元 配 列 4 . 4 局 所 変 数 の 有 効 範 囲

(2)

1 . は じ め に

1 . 1

簡 単 な 例

簡 単 な 例 ( ソ ー ス プ ロ グ ラ ム ) で C 言 語 を 紹 介 す る 。 [ 例 1 ] 出 力 プ ロ グ ラ ム 解 説 1 /* << a001.c >> */ ・注 釈は /*と */で 囲 み 、 2 行 以 上 に わ た っ て も よ い 。 ・ 空 行 は プ ロ グ ラ ム 中 ど こ に で も 入 れ る こ と が で き 、 プ ロ グ ラ ム を 見 や す く す る た め に 使 わ れ る 。

2 #include <stdio.h> ・ st dio .h と い う 名 前 の フ ァ イ ル を プ ロ グ ラ ム 中 に 取 り 込 む 。 ・ こ の フ ァ イ ル に は 入 出 力 関 係 の 規 則 な ど が 書 か れ て お り 、 プ ロ グ ラ ム 中 で 使 う 命 令 が う ま く 動 作 す る よ う に 設 定 す る 。 stdio.hの よ う に 「 .h」 を つ け た フ ァ イ ル を ヘ ッ ダ フ ァ イ ルと い う 。 3 int main() { ・ C の プ ロ グ ラ ム は い く つ か の 関 数 か ら 構 成 さ れ 、実 行 は mainと い う 名 前 の 関 数 か ら 始 ま る。 ・ 関 数 を 構 成 す る 文 ( コ ン ピ ュ ー タ に 指 示 を 与 え る 基 本 単 位 で 、 必 ず セミコロンで 区 切 る ) は {と }で 囲 む 。 こ の 部 分 を 関 数 の 本 体 と い う 。 4 printf("sample\n"); ・ 画 面 に 文 字 列 sampleと 出 力 す る 。 5 } \nは 改 行 を 意 味 す る 。printfも 関 数 の ひ と つ 。 ソ ー ス プ ロ グ ラ ム の 作 成 /* << a001.c >> */ #include <stdio.h> int main() { printf("sample\n"); } ソ ー ス プ ロ グ ラ ム の コ ン パ イ ル % cc a001.c ソ ー ス プ ロ グ ラ ム の 実 行 % ./a.out sample

(3)

[ 例 2 ] 計 算 処 理 プ ロ グ ラ ム 解 説 1 /* << a002.c >> */ 2 #include <stdio.h> 3 int main() { 4 int a,b; ・ プ ロ グ ラ ム 実 行 中 に 値 が 変 わ る デ ー タ を 変 数と い う 。 変 数 に は 名 前 を つ け る こ と が で き 、 そ れ を 変 数 名 と い う 。 ・ プ ロ グ ラ ム 中 の 変 数 は 、 す べ て 関 数 の 本 体 の 始 め で 宣 言 し て お か な け れ ば な ら な い 。 そ の た め の 文 を 宣 言 文 と い う 。 ・ 変 数 が と る 値 は 決 め ら れ て お り 、 整 数 型 と 浮 動 小 数 点 型 が あ る 。 整 数 型 に は int型 ,short型 ,long型 が あ る 。 int型 は 、 -32768~ 32767 ま た は -2147483648~ 2147483647 short型 は 、 -32768~ 32767 long型 は 、 -2147483648~ 2147483647 5 a = 123; ・ 代 入 文 ( 変 数 = 式 ) と い う 。 6 b = 2 * a; ・ = は 、 右 辺 の 計 算 結 果 を 左 辺 の 変 数 に 代 入 す る 。 7 printf("%d %d\n",a,b); ・ %dは 対 応 す る 変 数 の 値 を 出 力 す る た め の 形 式 で 変 換 仕 様 と い う 。 変 換 仕 様 %dは 対 応 す る 整 数 型 の 変 数 と 同 じ 桁 数 の 欄 が と 8 } ら れ 、 そ の 中 に 値 が 出 力 さ れ る 。 ソ ー ス プ ロ グ ラ ム の 作 成 /* << a002.c >> */ #include <stdio.h> int main() { int a,b; a = 123; b = 2 * a; printf("%d %d\n",a,b); } ソ ー ス プ ロ グ ラ ム の コ ン パ イ ル % cc a002.c ソ ー ス プ ロ グ ラ ム の 実 行 % ./a.out 123 246

(4)

[ 例 3 ] 入 力 プ ロ グ ラ ム 解 説 1 /* << a003.c >> */ 2 #include <stdio.h> 3 #define MAX 1000 ・ 記 号 名 ま た は 記 号 変 数 を 定 義 す る 。 プ ロ グ ラ ム 中 の MAXと い う 文 字 列 を す べ て 1000に 置 き 換 え る 。 ・ 記 号 名 は 大 文 字 を 使 う 習 慣 が あ る 。 こ の 機 能 に よ り 、 プ ロ グ ラ ム が 分 か り や す く な る 。 ま た 、 プ ロ グ ラ ム の 変 更 が 容 易 に で き る 4 int main() { 5 int a; 6 scanf("%d",&a); ・ %dは 対 応 す る 変 数 の 値 を 入 力 す る た め の 形 式 で 変 換 仕 様 と い う 。 変 換 仕 様 %dは 、 入 力 を 整 数 と み な し 、 対 応 す る 整 数 型 の 変 数 に 値 を 代 入 す る 。 &aと 書 く こ と に 注 意。 7 a = MAX * a; 8 printf("a=%8d \n",a); ・ 変 換 仕 様 %8dは 8桁 の 欄 を と り 、 9 } 右 寄 せ で 変 数 の 値 を 出 力 す る 。 ソ ー ス プ ロ グ ラ ム の 作 成 /* << a003.c >> */ #include <stdio.h> #define MAX 1000 int main() { int a; scanf("%d",&a); a = MAX * a; printf("a=%8d \n",a); } ソ ー ス プ ロ グ ラ ム の コ ン パ イ ル % cc a003.c ソ ー ス プ ロ グ ラ ム の 実 行 % ./a.out 123 a= 123000

(5)

[ 例 4 ] 計 算 処 理

プ ロ グ ラ ム 解 説

1 /* << a004.c >> */ 2 #include <stdio.h> 3 int main() {

4 float x,y; ・ 浮 動 小 数 点 型 に は 、 float型 と double型 が あ る 。 float型 は 、 有 効 数 字 が お よ そ 10進 6桁 ぐ ら い で 10の -37乗 か ら 10の 38乗 の 範 囲 の 数 を 扱 う こ と が で き る 。 double型 は 、 有 効 数 字 の 桁 数 お よ び 範 囲 が float型 よ り も 大 き い 。 5 scanf("%f",&x); ・ %fは 対 応 す る 変 数 の 値 を 入 力 す る た め の 形 式 で 変 換 仕 様 と い う 。 変 換 仕 様 %fは 、 入 力 を 10進 浮 動 小 数 点 数 と み な し 、 対 応 す る 浮 動 小 数 点 型 の 変 数 に そ の 値 を 代 入 す る 。 6 y = x * x; 7 printf("x=%f\n",x); ・ 変 換 仕 様 %fは 、 浮 動 小 数 点 数 を 10進 数 に 変 換 し 、 小 数 点 以 下 6桁 で 表 す の に 必 要 な 欄 を と り 、 そ こ に 出 力 す る 。 8 printf("y=%10.3f\n",y); ・ 変 換 仕 様 %10.3fは 、 浮 動 小 数 点 数 を 10進 数 に 変 換 し 、 10桁 の 欄 を と り 、 小 数 点 以 9 } 下 3桁 で 出 力 す る 。 ソ ー ス プ ロ グ ラ ム の 作 成 /* << a004.c >> */ #include <stdio.h> int main() { float x,y; scanf("%f",&x); y = x * x; printf("x=%f\n",x); printf("y=%10.3f\n",y); } ソ ー ス プ ロ グ ラ ム の コ ン パ イ ル % cc a004.c ソ ー ス プ ロ グ ラ ム の 実 行 % ./a.out 1.2 x=1.200000 y= 1.440

(6)

1 . 2

C 言 語 プ ロ グ ラ ム の 翻 訳 と 実 行

ccコ マ ン ド で ソ ー ス プ ロ グ ラ ム の 翻 訳 と リ ン ク ま で 行 い 、 実 行 可 能 プ ロ グ ラ ム を 作 成 す る 。 手 順 は 次 の よ う に な る 。 ( 1 ) プ リ プ ロ セ ス プ リ プ ロ セ ッ サ が 起 動 さ れ 、 #で 始 ま る 行 が 処 理 さ れ る 。 #で 始 ま る 行 は プ リ プ ロ セ ッ サ へ の 指 示 で あ る 。 #で 始 ま る 行 は ソ ー ス プ ロ グ ラ ム の ど こ に 現 れ て も よ い 。 #includeや #defineな ど の 文 が 展 開 さ れ る 。 入 力 ソ ー ス プ ロ グ ラ ム ( x.c) 出 力 標 準 出 力 (通 常 画 面 ) コ マ ン ド % cc -E フ ァ イ ル 名 ( 2 ) コ ン パ イ ル コ ン パ イ ラ を 起 動 す る 。 入 力 ソ ー ス プ ロ グ ラ ム ( x.c) 出 力 ア セ ン ブ ラ プ ロ グ ラ ム ( x.s) コ マ ン ド % cc -S フ ァ イ ル 名 ( 3 ) ア セ ン ブ ル ア セ ン ブ ラ を 起 動 す る 。 入 力 ソ ー ス プ ロ グ ラ ム ( x.c) 出 力 オ ブ ジ ェ ク ト プ ロ グ ラ ム ( x.o) コ マ ン ド % cc -c フ ァ イ ル 名 ( 4 ) リ ン ク ロ ー ダ を 起 動 す る 。 作 成 さ れ た オ ブ ジ ェ ク ト プ ロ グ ラ ム と 、 C 言 語 ラ イ ブ ラ リ を 連 結 し て 実 行 可 能 プ ロ グ ラ ム を 作 成 す る 。 入 力 ソ ー ス プ ロ グ ラ ム ( x.c) 出 力 実 行 可 能 プ ロ グ ラ ム ( a.out) コ マ ン ド % cc フ ァ イ ル 名

(7)

● d e f i n e 文

define文 で 、 文 字 列 や 式 の 置 換 が 行 え る 。 1 /* << dp111.c >> */

2 #include <stdio.h>

3 #define MAX 1000 /* 文 字 列 の 置 換 */

4 #define INPUT(a,b) scanf("%d%d",&a,&b) /* 式 の 置 換 */ 5 #define OUTPUT(a,b) printf("%d %d\n",a,b) /* 式 の 置 換 */ 6 main() { 7 int a,b; 8 INPUT(a,b); 9 OUTPUT(a+b,MAX); 10 } 実 行 結 果 % cc -E dp111.c < < 途 中 省 略 > > main() { int a,b; scanf("%d%d",&a,&b); printf("%d %d\n",a+b,1000); } % cc dp111.c % ./a.out 12 345 357 1000 コ ン パ イ ラ の オ プ シ ョ ン か ら 、「 #define 名 前 値 」 と 同 等 の こ と が で き る 。 %cc -D名 前 =値 フ ァ イ ル 名 1 /* << dp112.c >> */ 2 #include <stdio.h> 3 main() { 4 int a=234; 5 printf("%d \n",a+MAX); 6 } 実 行 結 果 % cc dp112.c dp112.c: In function ‘ main’ :

dp112.c:5: error: ‘ MAX’ undeclared (first use in this function) dp112.c:5: error:(Each undeclared identifier is reported only once dp112.c:5: error: for each function it appears in.)

% cc -DMAX=1000 dp112.c % ./a.out

(8)

● i n c l u d e 文 include文 で ヘ ッ ダ フ ァ イ ル の 取 り 込 み を 行 う 。 ヘ ッ ダ フ ァ イ ル に は 定 数 や 型 の 宣 言 な ど が 記 述 さ れ 、 複 数 の ソ ー ス プ ロ グ ラ ム か ら 参 照 さ れ る 。 フ ァ イ ル 名 に は 拡 張 子 と し て .hが つ け ら れ る 。 <フ ァ イ ル 名 >の 場 合 : 標 準 の デ ィ レ ク ト リ (/usr/include)か ら 探 す 。 "フ ァ イ ル 名 "の 場 合 : (1)ソ ー ス フ ァ イ ル の あ る デ ィ レ ク ト リ 、 (2)-Iオ プ シ ョ ン で 指 定 し た デ ィ レ ク ト リ 、 (3)標 準 の デ ィ レ ク ト リ の 順 に 探 さ れ 初 め て 見 つ か っ た も の が 採 用 さ れ る 。 1 /* << dp121.c >> */ 2 #include <stdio.h> 3 #include "dp121.h" 4 main() { 5 int a; 6 scanf("%d",&a);

7 printf("a = %d MAX = %d \n",a,MAX); 8 }

実 行 結 果

標 準 デ ィ レ ク ト リ の 確 認 。 % cd /usr/include

% ls -l stdio.h

-rw-r--r-- 1 root root 31568 11月 21 13:09 2012 stdio.h ホ ー ム デ ィ レ ク ト リ に 移 動 。 % cd % ls dp121.c % cc dp121.c dp121.hが 見 つ か ら な い と い う エ ラ ー メ ッ セ ー ジ が で る 。 dp121.c:3:19: error: dp121.h: そ の よ う な フ ァ イ ル や デ ィ レ ク ト リ は あ り ま せ ん dp121.c: In function ‘ main’ :

dp121.c:7: error: ‘ MAX’ undeclared (first use in this function) dp121.c:7: error: (Each undeclared identifier is reported only once dp121.c:7: error: for each function it appears in.)

ヘ ッ ダ フ ァ イ ル (dp121.h)の 作 成 。 % cat > dp121.h #define MAX 1000 ^d % cat dp121.h #define MAX 1000 ヘ ッ ダ フ ァ イ ル (dp121.h)の 確 認 。 % ls dp121.c dp121.h % cc dp121.c % ./a.out 123 a = 123 MAX = 1000

(9)

2 . 条 件 分 岐

2 . 1

i f 文

if文 は 一 般 に つ ぎ の よ う に 書 く 。 書 き 方 if(条 件 ) 文 意 味 条 件 が 真 の 場 合 、 文 が 実 行 さ れ る 。 真 条 件 偽 文 書 き 方 if(条 件 ) 文 1 else 文 2 意 味 条 件 が 真 な ら ば 文 1が 、 偽 な ら ば 文 2が 実 行 さ れ る 。 真 条 件 偽 文 2 文 1 書 き 方 if(条 件 1) 文 1 else if(条 件 2) 文 2 else 文 3 意 味 条 件 1が 真 な ら ば 文 1が 実 行 さ れ 、 条 件 1が 偽 で し か も 条 件 2が 真 の と き 、 文 2が 実 行 さ れ る 。 条 件 1も 条 件 2も 偽 の と き 、 文 3が 実 行 さ れ る 。

(10)

偽 条 件 1 真 偽 文 1 条 件 2 真 文 2 文 3 [ 例 ] 1+2+… +10を 求 め る 。 1 #include <stdio.h> 2 int main() {

3 int i,s; ( 注 意 ) 文 に は loopの よ う な 名 札 を

4 s = 0; i = 1; つ け る こ と が で き る 。

5 loop: goto文 で 、 名 札 ( loop) の

6 if( i <= 10 ) { つ い た 文 へ 飛 び 越 す 。 7 s = s + i; i = i + 1; 8 goto loop; 9 } 10 printf("s=%d\n",s); 11 } 条 件 に は 値 の 大 小 を 比 較 す る 関 係 式 や 論 理 式 が よ く 用 い ら れ る 。 た と え ば 、 a==b, a*b<=c*d, (1<=a)&&(a<=n) な ど で あ る 。 ==や <=を 関 係 演 算 子 と い い 、 つ ぎ の 6種 類 あ る 。 a < b aが bよ り 小 さ い a <= b aが bよ り 小 さ い か 等 し い a == b aが bと 等 し い a != b aが bと 等 し く な い a >= b aが bよ り 大 き い か 等 し い a > b aが bよ り 大 き い &&を 論 理 演 算 子 と い い 、 つ ぎ の 3種 類 あ る 。 a && b 条 件 a,bが と も に 真 の と き に 限 り 真 に な り 、 他 の 場 合 は 偽 に な る 。 a || b 条 件 a,bが と も に 偽 の と き に 限 り 偽 に な り 、 他 の 場 合 は 真 に な る 。 !a 条 件 aが 真 の と き 偽 、 偽 の と き 真 に な る 。 ( 注 意 ) 論 理 演 算 子 は 関 係 演 算 子 よ り も 先 に 評 価 さ れ る 。

(11)

2 . 2

s w i t c h 文

switch文 は 一 般 に つ ぎ の よ う に 書 く 。 分 岐 が 多 く な る と 便 利 で あ る 。 書 き 方 switch(式 ) { case 定 数 1: 文 1 ; break; case 定 数 2: 文 2 ; break; … … case 定 数 n: 文 n ; break; default: 文 n + 1 ; break; } 意 味 式 の 値 に 応 じ て 、 定 数 i( 1≦ i ≦ n ) の と こ ろ へ 分 岐 し 文 i を 実 行 す る 。 break文 を 実 行 す る と 、 switch文 は 終 了 す る 。 式 の 値 が ど の 定 数 iと も 一 致 し な い と き 、 defaultの と こ ろ へ 分 岐 し 、 文 n + 1 を 実 行 す る 。 式 定 数 1 定 数 2 定 数 n default 文 1 文 2 文 n 文 n + 1 [ 例 ] 1,2,3の 数 値 を 読 み 込 み 、 そ れ ぞ れ の 英 単 語 を 表 示 す る 。 1,2,3以 外 の 数 値 の 場 合 は 、 ?を 表 示 す る 。 1 #include <stdio.h> 2 int main() { 3 int a; 4 scanf("%d",&a); 5 switch( a ) {

6 case 1: printf("one \n"); break; 7 case 2: printf("two \n"); break; 8 case 3: printf("three \n"); break; 9 default: printf("? \n"); break;

10 }

(12)

3 . 制 御 構 造

3 . 1

w h i l e 文

while文 は 一 般 に つ ぎ の よ う に 書 く 。 書 き 方 while(条 件 ) 文 意 味 条 件 が 真 の 間 、 文 を 実 行 し 偽 に な る ま で 繰 り 返 す 。 最 初 か ら 条 件 が 偽 の 場 合 に は 、 文 は 1 回 も 実 行 さ れ な い 。 こ の よ う な 構 造 を whileル ー プ と い う 。 偽 条 件 真 文 [ 例 ] 1+2+… +10を 求 め る 。 1 #include <stdio.h> 2 int main() { 3 int i,s; 4 s = 0; i = 1; 5 while( i <= 10 ) { 6 s = s + i; i = i + 1; 7 } 8 printf("s=%d\n",s); 9 }

(13)

3 . 2

f o r 文

for文 は 一 般 に つ ぎ の よ う に 書 く 。 書 き 方 for(初 期 設 定 ; 条 件 ; 更 新 ) 文 意 味 ま ず 初 期 設 定 が 行 わ れ る 。 そ し て 条 件 が 真 な ら ば 文 が 実 行 さ れ 更 新 が 実 行 さ れ る 。 そ の 後 条 件 が 真 の 間 、 文 と 更 新 が 実 行 さ れ 条 件 が 偽 に な る と 文 を 実 行 せ ず に for文 の つ ぎ の 文 を 実 行 す る 。 最 初 か ら 条 件 が 偽 の 場 合 、 文 は 1 回 も 実 行 さ れ な い 。 こ の よ う な 構 造 を forル ー プ と い う 。 初 期 設 定 偽 条 件 真 文 更 新 [ 例 ] 1+2+… +10を 求 め る 。 1 #include <stdio.h> 2 int main() { 3 int i,s; 4 s = 0;

5 for( i=1; i<=10; i++ ) { 6 s = s + i;

7 }

8 printf("s=%d\n",s); 9 }

(14)

3 . 3

d o 文

do文 は 一 般 に つ ぎ の よ う に 書 く 。 書 き 方 do 文 while(条 件 ); 意 味 ま ず 、 文 が 1 回 実 行 さ れ る 。 条 件 が 真 の 間 、 文 を 実 行 し 偽 に な る ま で 繰 り 返 す 。 文 は 少 な く と も 1 回 実 行 さ れ る 。 こ の よ う な 構 造 を 、 do-whileル ー プ と い う 。 文 真 条 件 偽 [ 例 ] 1+2+… +10を 求 め る 。 1 #include <stdio.h> 2 int main() { 3 int i,s; 4 s = 0; i = 1; 5 do { 6 s = s + i; i = i + 1; 7 } 8 while( i<=10 ); 9 printf("s=%d\n",s); 10 }

(15)

3 . 4

c o n t i n u e 文 , b r e a k 文

whileや forな ど の ル ー プ か ら 抜 け 出 す と き に 、 break文 や continue文 を 使 う 。 break文 を 実 行 す る と 、 こ の break文 を 含 む 最 も 内 側 の ル ー プ を 終 了 し 、 つ ぎ の 文 を 実 行 す る 。 書 き 方 while(条 件 1 ) { 文 1 ; while(条 件 2 ) { 文 2 ; if(条 件 3 ) { break; } 文 3 ; } 文 4 ; } 意 味 条 件 3 が 真 に な る と 、 break文 が 実 行 さ れ 文 4 が 実 行 さ れ る 。 偽 条 件 1 真 文 1 偽 条 件 2 最 真 も 内 文 2 側 の 真 ル 条 件 3 | 偽 プ 文 3 文 4

(16)

● break文 の 例

1 /* << ba341a.c >> */ 2 #include <stdio.h> 3 int main() {

4 int i,j;

5 for( i=1; i<=3; i++ ) { 6 for( j=1; j<=3; j++ ) {

7 printf("(1) i=%d j=%d\n",i,j);

8 if( i+j == 5 ) { printf("break\n"); break; }

9 }

10 printf("(2) i=%d j=%d\n",i,j);

11 }

12 printf("(3) i=%d j=%d\n",i,j); 13 } 実 行 結 果 % cc ba341a.c % a.out (1) i=1 j=1 (1) i=1 j=2 (1) i=1 j=3 (2) i=1 j=4 (1) i=2 j=1 (1) i=2 j=2 (1) i=2 j=3 break (2) i=2 j=3 (1) i=3 j=1 (1) i=3 j=2 break (2) i=3 j=2 (3) i=4 j=2

(17)

● goto文 で 一 気 に 複 数 の ル ー プ を 抜 け る こ と が で き る 。 1 /* << ba341b.c >> */

2 #include <stdio.h> 3 int main() {

4 int i,j;

5 for( i=1; i<=3; i++ ) { 6 for( j=1; j<=3; j++ ) {

7 printf("(1) i=%d j=%d\n",i,j);

8 if( i+j == 5 ) { printf("goto next\n"); goto next; }

9 }

10 printf("(2) i=%d j=%d\n",i,j);

11 }

12 next:

13 printf("(3) i=%d j=%d\n",i,j); 14 } 実 行 結 果 % cc ba341b.c % a.out (1) i=1 j=1 (1) i=1 j=2 (1) i=1 j=3 (2) i=1 j=4 (1) i=2 j=1 (1) i=2 j=2 (1) i=2 j=3 goto next (3) i=2 j=3

(18)

continue文 が 実 行 さ れ る と 、 こ の continue文 を 含 む 最 も 内 側 の ル ー プ の 残 り の 部 分 を 無 視 し て 、 条 件 の 部 分 を 調 べ る 。 書 き 方 while(条 件 1 ) { 文 1 ; while(条 件 2 ) { 文 2 ; if(条 件 3 ) { continue; } 文 3 ; } 文 4 ; } 意 味 条 件 3 が 真 に な る と 、 continue文 が 実 行 さ れ 文 3 は 実 行 さ れ ず 条 件 2 が 調 べ ら れ る 。 偽 条 件 1 真 文 1 偽 条 件 2 最 真 も 内 文 2 側 の 真 ル 条 件 3 | 偽 プ 文 3 文 4

(19)

● continue文 の 例

1 /* << ba341c.c >> */ 2 #include <stdio.h> 3 int main() {

4 int i,j;

5 for( i=1; i<=3; i++ ) { 6 for( j=1; j<=3; j++ ) {

7 printf("(1) i=%d j=%d\n",i,j);

8 if( i+j == 5 ) { printf("continue\n"); continue; }

9 }

10 printf("(2) i=%d j=%d\n",i,j);

11 }

12 printf("(3) i=%d j=%d\n",i,j); 13 } 実 行 結 果 % cc ba341c.c % a.out (1) i=1 j=1 (1) i=1 j=2 (1) i=1 j=3 (2) i=1 j=4 (1) i=2 j=1 (1) i=2 j=2 (1) i=2 j=3 continue (2) i=2 j=4 (1) i=3 j=1 (1) i=3 j=2 continue (1) i=3 j=3 (2) i=3 j=4 (3) i=4 j=4

(20)

4 . 変 数 、 配 列

4 . 1

変 数

int a で 変 数 aの 宣 言 を す る 。 変 数 aの 値 を 保 存 す る 記 憶 領 域 の 位 置 ( 番 地 ) が 決 定 さ れ る 。 変 数 aに 対 応 づ け ら れ る 番 地 を 参 照 す る に は 、 &a と す る 。 番 地 記 憶 領 域 &a aの 値 1 #include <stdio.h> 2 int main() { 3 int a; 4 a = 123; 5 printf(" a = %d \n",a); 6 printf("&a = %x \n",&a); /* 16進 数 で 出 力 。 */ 7 a = -a; 8 printf(" a = %d \n",a); 9 printf("&a = %x \n",&a); 10 } 実 行 結 果 a = 123 &a = effffb84 a = -123 &a = effffb84

(21)

4 . 2

1 次 元 配 列

変 数 を 多 く 使 う と き 、 そ の つ ど 名 前 を 考 え な け れ ば な ら な い と し た ら 困 っ て し ま う 。 そ こ で 、 数 学 で 使 わ れ る 数 列 と 同 様 の 記 法 を 考 え る 。 同 じ 型 の デ ー タ を 順 に 並 べ た も の を 配 列 と い う 。 配 列 は ひ と つ の 名 前 ( 配 列 名 ) を も つ 。 各 デ ー タ を 配 列 要 素 と い い 、 配 列 名 の 後 に 添 字 を [と ]で 囲 ん で 示 す 。 添 字 は 0 か ら 始 ま る 。 配 列 要 素 a[i]の 番 地 は &a[i]で 参 照 す る 。 1 /* << ba421.c >> */ 2 #include <stdio.h> 3 int main() { 4 int i;

5 int a[9]; /* 配 列 名 を aと し 、 9個 の 配 列 要 素 6 a[0],a[1],...,a[8]を 宣 言 す る 。 */ 7 a[0] = 1; a[1] = 1;

8 for( i=2; i<=8; i++ ) { 9 a[i] = a[i-1] + a[i-2];

10 }

11 for( i=0; i<=8; i++ ) {

12 printf("a[%2d] = %3d ",i,a[i]); 13 printf("&a[%2d] = %x \n",i,&a[i]); 14 } 15 } 実 行 結 果 % cc ba421.c % ./a.out ( 注 意 ) int型 は 4 バ イ ト a[ 0] = 1 &a[ 0] = e2a59eb0 必 要 と す る こ と a[ 1] = 1 &a[ 1] = e2a59eb4 か ら 番 地 は 4 ず つ a[ 2] = 2 &a[ 2] = e2a59eb8 増 加 す る 。 a[ 3] = 3 &a[ 3] = e2a59ebc a[ 4] = 5 &a[ 4] = e2a59ec0 a[ 5] = 8 &a[ 5] = e2a59ec4 a[ 6] = 13 &a[ 6] = e2a59ec8 a[ 7] = 21 &a[ 7] = e2a59ecc a[ 8] = 34 &a[ 8] = e2a59ed0 実 行 ご と に 割 り 当 て ら れ る 番 地 は 異 な る 。 % ./a.out a[ 0] = 1 &a[ 0] = f3419ed0 a[ 1] = 1 &a[ 1] = f3419ed4 a[ 2] = 2 &a[ 2] = f3419ed8 a[ 3] = 3 &a[ 3] = f3419edc a[ 4] = 5 &a[ 4] = f3419ee0 a[ 5] = 8 &a[ 5] = f3419ee4 a[ 6] = 13 &a[ 6] = f3419ee8 a[ 7] = 21 &a[ 7] = f3419eec a[ 8] = 34 &a[ 8] = f3419ef0

(22)

4 . 3

2 次 元 配 列

int a[m][n]と 宣 言 す る と 、 a[0][0],a[0][1],...,a[0][n-1] a[1][0],a[1][1],...,a[1][n-1] ... a[m-1][0],a[m-1][1],...,a[m-1][n-1] の mn個 の 配 列 要 素 が 決 定 さ れ る 。 配 列 要 素 a[i][j]の 番 地 は &a[i][j]で 参 照 す る 。 1 /* << ba431.c >> */ 2 #include <stdio.h> 3 int main() {

4 int a[3][3],i,j; /* 配 列 aの 宣 言 。 */ 5 a[0][0]=0; a[0][1]=1; a[0][2]=2; 6 a[1][0]=10; a[1][1]=11; a[1][2]=12; 7 a[2][0]=20; a[2][1]=21; a[2][2]=22; 8 for( i=0; i<=2; i++ ) {

9 for( j=0; j<=2; j++ ) { 10 printf("a[%d][%d]=%d ",i,j,a[i][j]); 11 printf("&a[%d][%d]=%x \n",i,j,&a[i][j]); 12 } 13 } 14 } 実 行 結 果 a[0][0]=0 &a[0][0]=effffb64 a[0][1]=1 &a[0][1]=effffb68 a[0][2]=2 &a[0][2]=effffb6c a[1][0]=10 &a[1][0]=effffb70 a[1][1]=11 &a[1][1]=effffb74 a[1][2]=12 &a[1][2]=effffb78 a[2][0]=20 &a[2][0]=effffb7c a[2][1]=21 &a[2][1]=effffb80 a[2][2]=22 &a[2][2]=effffb84 ( 注 意 ) 行 優 先 で 番 地 が 割 り 当 て ら れ て い る 。

(23)

4 . 4

局 所 変 数 の 有 効 範 囲

ブ ロ ッ ク ({}で 囲 ま れ た 部 分 )内 で 宣 言 さ れ た 変 数 ( 局 所 変 数 ) は そ の 内 部 で の み 有 効 で あ る 。 す な わ ち 、 ブ ロ ッ ク 1 内 に ブ ロ ッ ク 2 が 定 義 さ れ て い る と き 、 { ブ ロ ッ ク 1 { ブ ロ ッ ク 2 } } ( 1 ) ブ ロ ッ ク 1 で 宣 言 さ れ た 変 数 は 、 ブ ロ ッ ク 2 で 同 じ 名 前 で 宣 言 さ れ な い 限 り 有 効 で あ る 。 ( 2 )ブ ロ ッ ク 2 で 同 じ 名 前 で 宣 言 さ れ る と 、新 た に 宣 言 さ れ た 方 が 優 先 す る 。 ● ( 1 ) の 例 1 /* << ba441a.c >> */ 2 #include <stdio.h> 3 int main() { 4 int a; 5 a = 111; 6 printf("mainブ ロ ッ ク 内 : a=%d\n",a); 7 { 8 printf(" サ ブ ブ ロ ッ ク 内 : a=%d\n",a); 9 a = 222; 10 printf(" サ ブ ブ ロ ッ ク 内 : a=%d\n",a); 11 } 12 printf("mainブ ロ ッ ク 内 : a=%d\n",a); 13 } 実 行 結 果 mainブ ロ ッ ク 内 : a=111 サ ブ ブ ロ ッ ク 内 : a=111 サ ブ ブ ロ ッ ク 内 : a=222 mainブ ロ ッ ク 内 : a=222

(24)

● ( 2 ) の 例 1 /* << ba441b.c >> */ 2 #include <stdio.h> 3 int main() { 4 int b; 5 b = 111; 6 printf("mainブ ロ ッ ク 内 : b=%d\n",b); 7 { 8 int b; 9 printf(" サ ブ ブ ロ ッ ク 内 : b=%d\n",b); 10 b = 222; 11 printf(" サ ブ ブ ロ ッ ク 内 : b=%d\n",b); 12 } 13 printf("mainブ ロ ッ ク 内 : b=%d\n",b); 14 } 実 行 結 果 mainブ ロ ッ ク 内 : b=111 サ ブ ブ ロ ッ ク 内 : b=0 サ ブ ブ ロ ッ ク 内 : b=222 mainブ ロ ッ ク 内 : b=111

参照

関連したドキュメント

本県は、島しょ県であるがゆえに、その歴史と文化、そして日々の県民生活が、

Guasti, Maria Teresa, and Luigi Rizzi (1996) &#34;Null aux and the acquisition of residual V2,&#34; In Proceedings of the 20th annual Boston University Conference on Language

②上記以外の言語からの翻訳 ⇒ 各言語 200 語当たり 3,500 円上限 (1 字当たり 17.5

今回の調査に限って言うと、日本手話、手話言語学基礎・専門、手話言語条例、手話 通訳士 養成プ ログ ラム 、合理 的配慮 とし ての 手話通 訳、こ れら

2 保健及び医療分野においては、ろう 者は保健及び医療に関する情報及び自己

●加盟団体・第一陣として、 地域 創造基金さなぶり(宮城)、ちばの

本研究科は、本学の基本理念のもとに高度な言語コミュニケーション能力を備え、建学

本研究科は、本学の基本理念のもとに高度な言語コミュニケーション能力を備え、建学