このスライドの使い方
第 4 章
「プログラムの
流れの繰返し」
教科書 pp.73–113
§ 4-1「do 文」
(教 pp.74–81)
作業:
List 4-1
を実行する(「もう一度?」に何度か 0 を入力してみる)
do 文
(教 p.74)
do 文1 while ( 式1 ) ;
- まず、文1(ループ本体と呼ばれる)を実行する
- 式1 が非 0(真)である限り、文1 の実行を繰り返す
注: 必ず 1 回はループ本体を実行する
do 文に関する注意
- あとで紹介する while 文や for 文に比べると、
do 文の実際のプログラムでの使用頻度は低い
-
プログラムの実行が止まらなくなったときは、Ctrl-c で強制終了する
複合文(ブロック)内での宣言
(教 p.75)
(do 文に限らず)ブロックの中で宣言された変数は、そのブロックでのみ有効である
読み込む値を制限する
(教 p.76)
List 4-2 は do 文が適している典型的なかたち
作業:
List 4-2
を実行する(入力に最初 0, 1, 2 以外の数を入れてみる)
論理否定演算子とド・モルガンの法則
(教 p.77)
単項演算子の「!
」は、真偽を逆にする演算子で、論理否定演算子とも言う
作業:
List 4-2a
を実行する(入力に最初 0, 1, 2 以外の数を入れてみる)
ド・モルガンの法則については教科書を読むこと
複数の整数値の合計と平均を求める
(教 p.78)
作業:
List 4-3
を実行する(いくつかの入力を試す)
複合代入演算子
(教 p.80)
sum += t
は
sum = sum + t
とほぼ同じ意味
作業:
List 4-4
を実行する(いくつかの入力を試す)
「*=
」, 「/=
」, 「%=
」, 「+=
」, 「-=
」, など
後置増分演算子と後置減分演算子
・前置増分演算子と前置減分演算子
(教 p.81, p.88)
a++ |
a の値を一つだけ増やす |
(式全体の値は、 増やす前の値) |
a-- |
a の値を一つだけ減らす |
(式全体の値は、 減らす前の値) |
++a |
a の値を一つだけ増やす |
(式全体の値は、増やした後の値) |
--a |
a の値を一つだけ減らす |
(式全体の値は、減らした後の値) |
作業:
まとめのプリント Q 4.1.1 をやってみる
§ 4-2「while 文」
(教 pp.82–93)
作業:
List 4-5
を実行する(いくつかの入力を試す)
while 文
(教 p.82)
while ( 式1 ) 文1
式1 が 0(偽)でない限り、
文1 (ループ本体)の実行を繰り返す
注: ループ本体が一度も実行されないことがある。
do 文 |
while 文 |
|
|
減分演算子を用いた手短な表現
~カウントアップ
(pp.84–85)
教科書を読んでおくこと
作業:
List 4-6
を実行する(いくつかの入力を試す)
作業:
まとめのプリント Q 4.2.1 をやってみる
文字定数と putchar 関数
(教 p.86)
文字定数
- 1 文字を一重引用符 「
'
」〜「'
」で囲んだもの
- 「
\n
」や「\t
」などの拡張表記は 1 文字扱い
putchar
関数
作業:
List 4-8
を実行する(いくつかの入力を試す)
do 文と while 文
~整数値を逆順に表示
(教 pp.87–91)
教科書を読んでおくこと
整数値を逆順に
(まとめのプリント)
教科書 List 4-10 に類似
作業:
reverse.c
を実行する(いくつかの入力を試す)
作業:
まとめのプリント Q 4.2.2 をやってみる
break 文
(教 p.92)
(もっとも内側の)繰返し文(do 文, while 文, for 文)を抜け出る
(外側の繰返し文を一気に抜け出ることはできない)
continue文
(教 p.93)
(もっとも内側の)繰返し文のはじめ
(do 文, while 文の場合は条件式、for 文の場合は第 3 式)にもどる
break 文 |
continue 文 |
|
|
作業:
List 4-11
を実行する(いくつかの入力を試す)
§ 4-3「for 文」
(教 pp.94–101)
作業:
List 4-12
を実行する(いくつかの入力を試す)
for 文
(教 p.94)
for ( 式1; 式2; 式3 ) 文1
for ( 宣言1 式2; 式3 ) 文1
注: 「宣言」にはセミコロンが含まれている
-
ループに入る前にまず式1
(または 宣言1)
を実行
-
式2が非0(真)である間、文1(ループ本体)と
式3を繰返し実行
詳細: 式1〜式3は省略可能
式2を省略したときは、1 と書くのと同じ
for 文(続き)
for 文 |
|
for 文(続き)
左の for 文は右の while 文と(ほぼ)等価
for 文 |
(ほぼ)等価な while 文 |
for (A ; B ; C) {
ループ本体
}
|
A ;
while ( B ) {
ループ本体
C ;
}
|
for 文による一定回数の繰返し
(教 p.97)
for 文には、良く使う決まり文句的な形がある。
作業:
List 4-13
を実行する(いくつかの入力を試す)
① for (i = 0; i < n; i++) … |
i が 0 から n - 1 まで n 回 |
② for (i = 1; i <= n; i++) … |
i が 1 から n まで n 回 |
③ for (i = n; i > 0; i--) … |
i が n から 1 まで n 回 |
④ for (i = n - 1; i >= 0; i--) … |
i が n - 1 から 0 まで n 回 |
作業:
まとめのプリント Q 4.3.1, Q 4.3.2 をやってみる
偶数の列挙
(教 p.100)
作業:
List 4-16
を実行する(いくつかの入力を試す)
約数の列挙
(教 p.100)
教科書を読んでおくこと
典型的な for 文
(まとめのプリント)
作業:
fact.c
を実行する(いくつかの入力を試す)
作業:
まとめのプリント Q 4.3.3 をやってみる
典型的な for 文
(まとめのプリント)
作業:
polygon.c
を実行する(いくつかの入力を試す)
gcc
では「gcc polygon.c -lm
」でコンパイルする
式文と空文
(教 p.101)
文 (statement) に以下を追加する。
分類 |
一般形 |
補足説明 |
空文 |
; |
“何もしない”文、{} と書いても同じ。 |
繰返し文
(教 p.101)
do 文、while 文、for 文をまとめて、繰返し文と呼ぶ
§ 4-4「多重ループ」
(教 pp.102–107)
作業:
List 4-18
を実行する
2 重ループ
(教 p.102)
二重・三重・⋯ ループをまとめて、多重ループという。
特別な文法や実行規則があるわけではない。
二重ループ(数の三角形)
(まとめのプリント)
作業:
triangle.c
を実行する(いくつかの入力を試す)
作業:
まとめのプリント Q 4.4.1 をやってみる
解答例: ①②④…
二重ループ(ダイアモンド図形の座標の出力)
(まとめのプリント)
作業:
まとめのプリント Q 4.4.2 をやってみる
解答例: ①②④…
gcc
では「gcc diamond.c -lm
」でコンパイルする
コンマ演算子
(教 p.233)
式1, 式2
という式は、式1 、式2をこの順に評価し、
式1 の値を捨て、
式2 の値(と型)を持つ
注: 関数を呼び出すときに引数を区切るコンマ
(例: printf("%d %d", i, j)
)は
コンマ演算子ではない。
コンマ演算子の例
comma.c
#include <stdio.h>
int main(void) {
int i, j;
for (i = 0, j = 6; i < j; i++, j--) {
printf("i = %d, j = %d\n", i, j);
}
return 0;
}
作業:
comma.c
を実行する(いくつかの入力を試す)
作業:
まとめのプリント Q 4.4.3 をやってみる
多重ループ
(教 p.106)
教科書を読んでおくこと
§ 4-5「プログラムの要素と
書式」
(教 pp.108–111)
キーワード
(教 p.108)
if
や else
など C 言語にとって特別な意味のある単語を
キーワード (keyword) と呼ぶ
- 変数名などに使用することはできない
(ただし、変数名などの一部に使用するのは構わない)
演算子~定数と文字列リテラル
(教 pp.108–109)
教科書を読んでおくこと
自由形式
(教 p.110)
隣接した文字列リテラルの連結
(教 p.111)
教科書を読んでおくこと
インデント
(教 p.111)
字下げのことをインデント、字下げをすることをインデンテーションという
文 (statement)
分類 |
一般形 |
補足説明 |
do 文 |
do 文 while ( 式 ) ; |
(教 p.74) |
while 文 |
while ( 式 ) 文 |
(教 p.82) |
continue 文 |
continue ; |
(教 p.93) |
for 文 |
for ( 式 ; 式 ; 式 ) 文 |
(教 p.94) |
for 文 |
for ( 宣言 式 ; 式 ) 文 |
(教 p.94) |
式 (expression)
分類 |
一般形 |
補足説明 |
後置演算 |
式 後置演算子 |
C の後置演算子は ++ , -- のみ
(教 p.81) |
コンマ演算子 |
式, 式 |
(教 p.233) |