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

終了~。

ドキュメント内 スライド 1 (ページ 77-115)

条件分岐、理解できましたか??

小技??

 ここで、

C

言語の小技??

と言うんでしょうか、

知ってて得する情報を紹介します。

インクリメント演算子 デクリメント演算子

Ans = Ans + 1;

とかって、

なんかスッキリしませんよね。

こういうときは

インクリメント演算子と デクリメント演算子

を利用するとスッキリします。

インクリメント演算子

++

こいつがインクリメント演算子。

Ans++;

のように書くと、

Ans = Ans + 1;

と同じ意味を持ちます。

この方がちょっと楽ですね。

デクリメント演算子

--同様にこいつがデクリメント演算子。

Ans--;

で、

Ans = Ans - 1;

と同じ意味を持ちます。

複合代入演算子

 お次は複合代入演算子を使って、

Ans = Ans * 3;

のようなヤツをスッキリさせてやりま しょう。

複合代入演算子

 加算代入演算子

Ans += 3; ⇒ Ans = Ans + 3;

 減算代入演算子

Ans -= 3; ⇒ Ans = Ans – 3;

 乗算代入演算子

Ans *= 3; ⇒ Ans = Ans * 3;

 除算代入演算子

Ans /= 3; ⇒ Ans = Ans / 3;

複合代入演算子

 あと余剰もできます。余りを代入。

 余剰代入演算子

Ans %= 3; ⇒ Ans = Ans % 3;

第 3.5 章はここまで。

インクメント・デクリメント、複合演算子。

ぜひ活用してみてください。

繰り返し文

 プログラムには、

何度か同じ処理を繰り返す必要が ある場合が出て来ます。

ここでは繰り返されるプログラムを 書く方法を見ていきましょう。

while 文

while

文を使うとプログラムの同じ部分を

繰り返して実行させることが出来ます。

 論理式が真である間、

{ }

の中が繰り返されます。

 英語の

while

、「~のあいだ」。そのままですね。

while( 論理式 ){

}

while 文

{ }

の中を

10

回通って、

num

10

になります。

num < 10

が真になる場合は

num

0, 1, 2, 3, 4, 5, 6, 7, 8, 9

のときなので

10

回の繰り返しになりますね。

int num=0;

while( num < 10 ){

num = num+1;

}

printf(“num = %d ¥n”,num);

実行結果

num = 10

while 文

 この流れのイメージが掴めれば

OK

論理式

while( 論理式 ){

}

while 文

 論理式が最初から偽ならば、

{ }

内は一回も実行されません。

int Num=30;

while( Num < 10 ){

Num = Num+1;

}

printf(“Num = %d ¥n”,Num);

実行結果

Num = 30

while 文のカタチ

while

文を書く上で考えるものは

1.論理式

2.論理式に使う変数の最初の値(初期値)

3.論理式に使う変数の増減・変化 この

3

点の関係ですね。

1と2が合わなければそもそも

{ }

内は無視され実行されませんし、

3によって1が偽になることがなければ・・・

そう、無限ループが発生します。

num = 0;

while( num < 10 ){

num = num + 1;

}

カウンタ

先ほどの

2.論理式に使う変数の最初の値(初期値)

の「論理式に使う変数」の部分。

これ専用の変数はカウンタと呼ばれます。

具体的には

「今が何回目かを格納しておく変数」

というニュアンスですね。

必ずしもそのループの回数に対応してはいません。

2づつ増えたりとか、逆に減らしていくケースがあります。

カウンタ

とくに他の変数との違いはなく、

単純にそう呼ばれるだけです。

カウンタの変数名には

i , j , k

がよく使われます。

別にそう行った決まりはありませんが、

言わば「お約束」なのです。

単純に言ってしまえば、

数学の

Σ

における

i

と一緒ですね。

カウンタを用いたプログラム

 さて、これはどんなプログラムでしょう??

n

回、「

MMC

」を出力するプログラムです。

 カウンタのイメージ、掴めましたでしょうか?

int n, i ;

printf(“数字を入力してください: ”);

scanf(“%d” , &n);

i = 0;

while( i < n ){

printf(“MMC¥n”);

i = i + 1;

}

while 文の演習

 問題です。

自然数

n

を入力すると、

n

から

0

までのカウントダウンを出力する プログラムを作ってください。

while 文の演習その2

 問題です。

自然数

a

を入力すると、

a

の階乗を「

a! =

○○」

のように出力するプログラムを 作ってください。

頭の中で流れが描けるかな??

解答例 a の階乗

]

 青字部分の書き方で2パターン。

int a, i, Ans = 1;

printf("aを入力: ");

scanf("%d",&a);

i = a;

while( i > 0){

Ans = Ans * i;

i = i - 1;

}

printf("%d! = %d¥n",a,Ans);

int a, i, Ans = 1;

printf("aを入力: ");

scanf("%d",&a);

i = 1;

while( i <= a){

Ans = Ans * i;

i = i + 1;

}

printf("%d! = %d¥n",a,Ans);

while 文の演習その 3

 問題です。

自然数

a

n

を入力すると、

a

n

乗を「

a^n =

○○」

のように出力するプログラムを 作ってください。

解答例 a の n 乗

int a, n, i, Ans = 1;

printf("aを入力: ");

scanf("%d",&a);

printf("nを入力: ");

scanf("%d",&n);

i = 0;

while( i < n ){

Ans = Ans * a;

i = i + 1;

} int a, n, i, Ans = 1;

printf("aを入力: ");

scanf("%d",&a);

printf("nを入力: ");

scanf("%d",&n);

i = n;

while( i > 0 ){

Ans = Ans * a;

i = i - 1;

}

printf("%d ^ %d = %d ¥n“ ,a,n,Ans);

do while 文

 最初の1回を無条件で実行。

論理式

do{

} while( 論理式 );

ここだけ 違う。

do while 文

 最初の1回のみ

{ }

内が実行されます。

int num=30;

do{

num = Num+1;

} while( num < 10 );

printf(“num = %d ¥n”,num);

実行結果

num = 31

for 文

さて、繰り返しにはもう

1

for

文というものがあります。

{ }

内を繰り返す

という点では

while

文と同じなんですが、

なにやら

( )

内に3つも出てきましたね。

また覚えることがいっぱい~

X_X

そうでもありません~ここで

while

文で大切な 3要素を思い出してみましょう。

for( 初期化 ; 論理式 ; 変数の増分 ){

}

for 文と while 文のカンケイ

1.論理式

2.論理式に使う変数の最初の値(初期化)

3.論理式に使う変数の増減・変化 この3つでしたね。

もう一度

for

文を見て見ましょう。

対応してくれていることが分かると思います。

for( 初期化 ; 論理式 ;変数の増減){

}

for 文と while 文のカンケイ

N

乗の問題の解答例の繰り返し部です。

 これを先ほどの対応に倣えば、

for

文を使って書き換えられるハズ!!

Ans = 1 ; i = n;

while( i > 0 ){

Ans = Ans * A ; i = i – 1;

}

for 文と while 文のカンケイ

1.論理式

2.論理式に使う変数の最初の値(初期化)

3.論理式に使う変数の増減・変化

3要素を抜き出して、

for

文に書き換えてみます。

i = n;

while( i > 0 ){

Ans = Ans * A ; i = i – 1;

for( 初期化 ; 論理式 ;変数の増減){

}

for( i = n ; i > 0 ; i = i - 1){

Ans = Ans * A ; }

なんということでしょう!

 とてもスッキリしましたね。

 このように

for

文を使った方が 見やすくなる場合があるので、

while

文 と

for

うまく使い分けていきましょう!!

for( i = n ; i > 0 ; i = i - 1){

Ans = Ans * A ; }

for 文のまとめ

for

文の流れをまとめると、

for( 初期化 ; 論理式 ; 変数の増減 ){

} 初期化

論理式

変数の増減

真 偽

ちなみに

for

文も一行だけなら

{ }

が省略できます。

 さらにスッキリしましたね。

 デクリメント演算子と 複合代入演算子を使うと さらにさらにスッキリ。

for( i = n ; i > 0 ; i = i - 1)Ans = Ans * A ;

for( i = n ; i > 0 ; i-- )Ans *= A ;

for 文の演習

 問題です。

自然数

A

を入力すると、

A

の階乗を「

A! =

○○」

のように出力するプログラムを 今度は

for

文で書いてください。

ちなみに

A

N

乗のときはこうでしたね。

i = n;

while( i > 0 ){

Ans = Ans * A ;

for( i = n ; i > 0 ; i = i - 1){

Ans = Ans * A ;

for( 初期化 ; 論理式 ;変数の増減){

}

解答例 階乗 for 文 Ver.

int i, a, Ans = 1;

printf("aを入力: ");

scanf("%d",&a);

for( i=1 ; i<=a ; i=i+1 ){

Ans=Ans*i;

}

printf("%d! = %d ¥n“ , a, Ans);

int i, a, Ans = 1;

printf("aを入力: ");

scanf("%d",&a);

for( i=a ; i>0 ; i=i-1 ){

Ans=Ans*i;

}

printf("%d! = %d ¥n“ , a, Ans);

繰り返し文の演習

 問題です。

初めに

n

を入力し、

n

回、自然数を入力すると

n

の最大値と最小値を

出力するプログラムを 書いてください。

実行例

nを入力してください : 5 0個目 : 10

1個目 : 3 2個目 : 5 3個目 : 2 4個目 : 7

繰り返し文のテンプレ問題・素数判定

 問題です。

自然数

n

を入力すると、

n

が素数かどうかを判定する

プログラムを書いてください。

余剰演算子% 活用すべし。

ドキュメント内 スライド 1 (ページ 77-115)

関連したドキュメント