第2回(10月9日)

プログラミングⅡ
第2回
今日の内容
• 前回の課題説明
• 制御文
– for文
– while文
– do while文
前回の課題
• 10月2日の課題(No.1 – No.3) pdfファイル
前回の課題
• 課題No.1
整数値15から37を引いた値を計算して「15か
ら37を引いた値はー22です.」と表示するプ
ログラムを作れ。
前回の課題
• 課題No.2
x,yをキーボードから入力し,以下の式を計
算・表示するプログラムを作成せよ(演算の
優先順位に注意
y  xy
2
xy  x
3
前回の課題
• 課題No.3
テストの点数をキーボードから入力させて,その値が
100点以下80点以上ならば,「素晴らしい」,
79点以下70点以上ならば,「Goodです」,
69点以下60点以上ならば,「OKです」
60点未満ならば,「がんばりましょう」
と判定・表示するプログラムを作成せよ.
繰り返し制御
• ある処理を繰り返し行う
開始
開始
処理1
処理1
処理2
処理2
処理3
処理3
終了
終了
n回
繰り返す
ある条件
の間,繰
り返す
繰り返し制御の方法
• for文を使う方法
• while文を使う方法
• do-while文を使う方法
for文
• 希望する回数だけ処理を繰り返し行う
for (初期設定式; 継続条件式; 再設定式)
{
文1;
文2;
(例)
…
for ( i = 0; i < 10; i++ )
{
}
文;
}
for文
for (初期設定式; 継続条件式; 再設定式)
•初期設定式:最初のみ実行される式
•継続条件式:繰り返し行うための条件式
(この条件式が真の間は繰り返す)
•再設定式:一回のループ終了時に実行される式
for文
for ( i = 初期値; i < iの上限値; iの増加量)
•初期値:変数iの初期値
•上限値:変数iがこの値になったら繰り返し終了
•増加量:1回のループでの変数iの増加分
for文
次行に書いてもOK
for ( i = 0; i < 3; i++ ) {
文A;
}
3回繰り
返す
文B;
0→ i
i <3
TRUE
文A
iを1増やす
i + 1→ i
文B
FALSE
for文のプログラム
int i;
printf(“--- for文開始\n”);
for (i = 0; i < 10; i++) {
printf(“iの値は%d\n”,i);
}
printf(“--- for文終了\n”);
printf(“iの値は%d\n”,i);
--- for文開始
iの値は0
iの値は1
iの値は2
…
iの値は9
--- for文終了
iの値は10
for文のプログラム
int i;
printf(“--- for文開始\n”); ループが1回増える(11回)
for (i = 0; i <= 10; i++) {
--- for文開始
print(“iの値は%d\n”,i);
iの値は0
iの値は2
}
…
printf(“--- for文終了\n”);
iの値は8
printf(“iの値は%d\n”,i);
iの値は9
iの値は10
--- for文終了
iの値は11
for文のプログラム
int i;
printf(“--- for文開始\n”);
iは2ずつ増えている
for (i = 0; i < 10; i+=2) {
print(“iの値は%d\n”,i);
--- for文開始
iの値は0
}
iの値は2
printf(“--- for文終了\n”);
iの値は4
…
printf(“iの値は%d\n”,i);
iの値は8
--- for文終了
iの値は10
for文のプログラム
int i;
iの初期値は3になった
printf(“--- for文開始\n”);
iは2ずつ増えている
最終的にiは11
for (i = 3; i < 10; i+=2) {
print(“iの値は%d\n”,i);
--- for文開始
iの値は3
}
iの値は5
printf(“--- for文終了\n”);
iの値は7
iの値は9
printf(“iの値は%d\n”,i);
--- for文終了
iの値は11
for文のプログラム
int i;
printf(“--- for文開始\n”);
for (i = 10; i > 0; i--) {
print(“iの値は%d\n”,i);
}
printf(“--- for文終了\n”);
printf(“iの値は%d\n”,i);
iの初期値は10
iは1ずつ減少
最終的にiは0
--- for文開始
iの値は10
iの値は9
…
iの値は1
--- for文終了
iの値は0
1から10までの和を求めよう
開始
0 → sum
1→ i
10回繰り
返す
i <= 10
TRUE
FALSE
sumにiを
加える
sum + i → sum
iを1増やす
i + 1→ i
終了
1から10までの和を求めてみよう
int i;
int sum;
sum = 0;
for ( i = 1; i <= 10; i++ )
sumとiの和を,
{
sumに代入
sum =+=sum
i; + i;
sum
printf(“ i = %d sum = %d\n”,i,sum);
}
printf(“1から10までの和は%dです\n”,sum);
1から10までの奇数だけの和を求め
てみよう
int i;
int sum;
sum = 0;
for ( i = 1; i <= 10; i+=2 )
{
sum += i;
printf(“ i = %d sum = %d\n”,i,sum);
}
printf(“1から10までの奇数の和は%dです\n”,sum);
1から10までの奇数だけの和を求め
てみよう
int i;
int sum;
sum = 0;
for ( i = 1; i <= 10; i++ )
{
if ( i % 2 == 1 )
sum = sum + i;
printf(“ i = %d sum = %d\n”,i,sum);
}
printf(“1から10までの奇数の和は%dです\n”,sum);
多重ループ
• 九九の表を表示するプログラムを作りたい
1の段
問題1:
「1 2 3 4 5 6 7 8 9」
と表示するプログラムをfor文を使って作りなさい.
for ( i = 1; i <= 9; i++) {
printf(“%d ”, i);
}
2の段
問題2:
「2 4 6 8 10 12 14 16 18」
と表示するプログラムをfor文を使って作りなさい.
for ( i = 1; i <= 9; i++) {
printf(“%d ”, i*2);
}
1から3までの段をまとめて表示
問題3:
『1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27』
と表示するプログラムを作りなさい.
多重ループ
int i;
for (i = 1; i <=9; i++) {
printf(“%d “, i);
}
printf(“\n”);
for (i = 1; i <=9; i++) {
printf(“%d “, i*2);
}
printf(“\n”);
for (i = 1; i <=9; i++) {
printf(“%d “, i*3);
}
printf(“\n”);
まとめる!
int i;
for (i = 1; i <= 9; i++) {
printf(“%d “, i*?);
}
printf(“\n”);
×3
「?」は1回目は1,2回目は2,
3回目は3、という具合に変化
すれば良い
多重ループ
for (j = 1; j <= 3; j++)
{
for (i = 1; i <= 9; i++) {
printf(“%d “, i*?);
i*j);
}
printf(“\n”);
}
多重ループ
for (j = 1; j <= 9; j++)
{
for (i = 1; i <= 9; i++) {
printf(“%2d “, i*j);
}
printf(“\n”);
}
多重ループ
for (… ) {
for (…) {
文;
}
}
while文のプログラム
while (継続条件式) {
文1;
文2;
…
}
継続条件式が真(0以外) ⇒ 文1,文2,…を繰り返す
継続条件式が偽にならないと,ループから抜け出せない
while文のプログラム
int n;
n = 1;
while (n < 10) {
printf(“好きな数を入力してください”);
scanf(“%d”,&n);
printf(“入力値は%d\n”,n);
}
printf(“やっとwhile文を抜けましたね\n”);
while文のプログラム(無限ループ)
TRUE
while (1) {
printf(“好きな数を入力してください”);
scanf(“%d”,&n);
printf(“入力値は%d\n”,n);
}
printf(“やっとwhile文を抜けましたね\n”);
無限ループ
(いつまで経っても抜けられないループ)
while文のプログラム(break)
無限ループ
while (1) {
printf(“好きな数を入力してください”);
scanf(“%d”,&n);
printf(“入力値は%d\n”,n);
if ( n == 1192 )
ループを強制
break;
的に抜ける
}
printf(“やっとwhile文を抜けましたね\n”);
while文のプログラム(break)
while (1) {
printf(“暗証番号は?”);
scanf(“%d”,&n);
if ( n == 1192 )
break;
else
printf(“暗証番号が間違っています\n”);
}
printf(“暗証番号を確認しました\n”);
繰り返し制御(1からnまでの和)
開始
0 → sum
1→ i
n回繰り
返す
i <= n
TRUE
FALSE
sumにiを
加える
sum + i → sum
iを1増やす
i + 1→ i
終了
繰り返し制御(1からnまでの和)
n回繰り返す
• for文を使う方法
初期値
(for文実行条件)
sum = 0;
for ( i=1; i <= n; i++ ) {
sum += i; // sum増加量
= sum + iでも同じ
}
繰り返し制御(1からnまでの和)
• while文を使う方法
sum = 0; 初期値
n回繰り返す
i = 1;
(while文実行条件)
while ( i <= n ) {
sum += i; // sum = sum + iでも同じ
i++;
増加量
}
繰り返し制御(1からnまでの和)
• for文を使う方法
for (式1;式2;式3) {
文;
}
• while文を使う方法
式1;
while(式2) {
文;
式3;
}
繰り返し制御(1からnまでの和)
開始
開始
0 → sum
0 → sum
1→ i
i <= n
FALSE
合計
i : 1, 1, n
sum + i → sum
TRUE
sum + i → sum
合計
i + 1→ i
終了
終了
繰り返し制御(1からnまでの和)
開始
0 → sum
ループ端
合計
i : 1, 1, n
増加量
合計
i : 1, 1, n
sum + i → sum
変数名
合計
初期値
終了
n回繰り返す
繰り返し(do-while文)
int main()
{
負の値が入力され
int i, n;
たときは,繰り返す
int sum = 0;
printf(“n = “); scanf(“%d”,&n);
nに負の値を入力されると,計算できない
nに正の値が入力されるまで,入力状態とする
繰り返し(do-while文)
入力部分のフローチャート
nを入力
n <=0
TRUE
FALSE
繰り返し(do-while文)
int main()
nの値によっては,
{
while文に入らない
int i, n;
こともある!
int sum = 0;
while ( n <= 0 ) {
printf(“n = “);
scanf(“%d”,&n);
}
while文 ⇒ ループの最初に条件判定が行われる
繰り返し(do-while文)
int main()
{
int i, n;
int sum = 0;
while ( n <= 0 ) {
printf(“n = “);
scanf(“%d”,&n);
}
do {
printf(“n = “);
scanf(“%d”,&n);
} while (n <= 0);
while文 ⇒ ループの最初に条件判定が行われる
do-while文 ⇒ ループの最後に条件判定が行われる