プログラミング基礎(4) :繰り返し

C プログラミング 入門
第6回
— C 言語の初歩 (4):繰り返し (2) —
早稲田大学
創造理工学部
–建築・経営・資源–
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
1 / 22
本日の目標
繰り返し文が適切に使える.
for 文の復習
while, do while
break, continue
多重ループ
(小レポート課題)
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
2 / 22
前回の復習:for 文
for 文の使い方
for(初期設定式;条件式;繰り返し式){
繰り返し実行させたいこと
}
【for 文の流れ】
初期設定式
繰り返し式
for 文は( )の中に,2つの
「;」で区切り3つの式を記述
実行させたい事
Yes
第 6 回— C 言語の初歩 (4) —
注意:
条件式
No
初期設定式は最初に1回だけ
実行される(通常,最初の値
を代入しておく)
C プログラミング 入門
3 / 22
for 文使用プログラム例1
1から 100 までの合計を求める
#include <stdio.h>
int main(void){
int Sum = 0, i;
/*Sum に入っている値を出力*/
printf("Sum=%dYn",Sum);
for (i=1; i<=100; i=i+1){
Sum = Sum+i ; /*1つ1つ加算する*/
printf("+[%d] =%d Yn",i,Sum);
/*足されている?*/
}
printf("Answer is %d.Yn", Sum);
return 0;
}
変数の宣言は最初にまとめて,初期化もやってよい
for 後の {} 内は,i = 1, 2, ..., 100 と繰り返し実行
「i=i+1」は「i++」と書いても同じ意味
繰り返し実行させたいことが1つだけの場合,{} は省略可
「Sum=Sum+i」は「Sum+=i」としてもよい
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
4 / 22
for 文使用プログラム例2
1から 100 までの合計を求める
#include <stdio.h>
int main(void){
int Sum =0, i;
printf("Sum=%dYn",Sum);
for (i=100; i>=1; i--){
Sum = Sum+i ; /*1つ1つ加算する*/
printf("+[%d] =%d Yn",i,Sum);
}
printf("Answer is %d.Yn", Sum);
return 0;
}
for 後の {} 内は,i = 100, 99, · · · , 1 と繰り返し実行
「i--」は「i=i-1」と書いても同じ意味
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
5 / 22
便利な演算子
複合代入演算子:代入とセットになっている四則
演算
「a+=b:
「a=a+b」と同じ意味.
「a-=3」
:
「a=a-3」と同じ意味.
インクリメント・デクリメント
「i++」
:
「i=i+1」と同じ意味(インクリメント)
「i--」
:
「i=i-1」と同じ意味(デクリメント)
例:インクリメント
for(i=1; i<=100; i++)
printf("%dYn",i);
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
6 / 22
第 5 回小レポート課題
問題:次のファイルを作成し,Course N@vi から提出せよ.
SN を以下で定義する:
SN
N
∑
(−1)k
=4∗
2k + 1
k=0
自然数 N を入力し,SN を計算するプログラムを作れ.
表示は小数第 6 位まで出力せよ.
表示は以下のようにする:
Input positive integer:1000【Enter】
Sum is 3.14????.
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
7 / 22
第 5 回小レポートの解答例(1)
pifor1.c
#include<stdio.h>
int main(void){
int N,k;
double Sum = 0.0;
printf("Input positive integer:");
scanf("%d",&N);
for(k=0; k<=N; k++){
if (k%2) Sum -= 1.0/(2*k+1);
else Sum += 1.0/(2*k+1);
}
Sum *= 4;
printf("Sum is %.6f\n",Sum);
return 0;
}
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
8 / 22
第 5 回小レポートの解答例(2)
pifor2.c
#include<stdio.h>
int main(void){
int N,k;
double Sum = 0.0, t=-1.0;
printf("Input positive integer:");
scanf("%d",&N);
for(k=0; k<=N; k++){
t *= -1.0;
Sum += t/(2*k+1);
}
Sum *= 4;
printf("Sum is %.6f\n",Sum);
return 0;
}
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
9 / 22
本日の目標
繰り返し文が適切に使える.
for 文の復習
while, do while
break, continue
多重ループ
(小レポート課題)
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
10 / 22
while 文
sum4.c
#include <stdio.h>
int main(void){
int Sum =0, i;
i=1; /* 初期設定が必要 */
while (i<=100){
/* while 文による繰り返し */
Sum +=i; /* 繰り返し式も必要 */
i++; }
printf("Answer is %d.Yn", Sum);
return 0;
}
プログラムを写し,実行せよ.プログラム名は sum4.c とせよ.
while 文は,for 文の初期設定式,繰り返し式がないもの
次のように書いても1から 100 までの合計を求めることができる
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
11 / 22
do while 文(参考)
sum5.c
#include <stdio.h>
int main(void){
int Sum =0, i=1;
do {
Sum +=i; /* 1つ1つ加算する */
i++;
} while(i<=100);
/* while() の後の「;」を忘れずに */
printf("Answer is %d.Yn", Sum);
return 0;
}
do while 文は,条件式が最初はチェックされない
do の後の{ }の中身が,最初は無条件で実行される
while の後の( )内の条件式が真なら,
{ }内が繰り返し実行さ
れる.
最初の1回は条件が必ず真と分かっている場合
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
12 / 22
while, do while 文のまとめ
while 文の使い方
while (条件式){
繰り返し実行させたいこと
}
条件式がチェックされ,偽なら while 文が終了
{ }内の命令が実行される
条件チェックに戻る
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
13 / 22
while, do while 文のまとめ
do while 文の使い方
do {
繰り返し実行させたいこと
} while(条件式);
{ }内の命令が実行される
条件式がチェックされ,偽なら do while 文を終了
{ }内の命令の実行に戻る
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
14 / 22
演習1
課題:以下のプログラムを作れ.
先週作った下記のプログラムを while 文を用いて書き直せ.SN を以下で
定義する:
SN
N
∑
(−1)k
=4∗
2k + 1
k=0
自然数 N を入力し,SN を計算するプログラムを作れ.
表示は小数第 6 位まで出力せよ.
ファイル名は “piwhile.c” とすること.
表示は以下のようにする:
Input positive integer:1000【Enter】
Sum is 3.14????.
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
15 / 22
break
プログラム例
for (i=1; i<=100; i++){
if(i==5) break;
printf("%d,",i);
}
ループまたは switch 文から脱出する文
ループの中で,break を実行すると,そのループを強制的に終了する
多重ループの場合は,break 文が存在するループのみを終了する
このプログラムでは以下のように表示される
1,2,3,4,
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
16 / 22
continue
プログラム例
for (i=1; i<=100; i++){
if(i==2) continue;
if(i==5) break;
printf("%d,",i);
}
ループにおいて,その回のみスキップさせる文
ループの中で,countinue を実行すると,そのループを繰り返す {
} 内の残りの命令を実行せず,繰り返し式にジャンプする
このプログラムでは以下のように表示される
1,3,4,
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
17 / 22
演習2
課題:以下のプログラムを作れ.
SN を以下で定義する:
SN = 4 ∗
N
∑
(−1)k
2k + 1
k=0
誤差 error を入力し,|SN − 3.1415| < error となるような最小の N を表
示するプログラムを作れ.
ファイル名は”piwhile2.c”とすること.
表示は以下のようにする:
Input error :0.01【Enter】
N is 99.
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
18 / 22
演習のヒント
piwhile.c をコピーして編集すること
条件が満たされるまでループを回すには無限ループを用いるのが一
般的である.無限ループは例えば,以下のようにして使うこと:
while(1){
やりたいことをかく.
}
|SN − 3.1415| < error は
−error < SN − 3.1415 < error
と同じ意味であることに注意せよ.
最小の N を表示するには最終的に何を表示させればよいか?
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
19 / 22
第 6 回小レポート
レポート提出について
次の指示されたプログラムを作成せよ
ソースファイルは「06-1W1XXXXXX.c」とせよ
タイトルは「第 06 回小レポート」とする
本文には(必要があれば)講義内容や成績に対する質問を書くこと
課題を提出するときには Course N@vi から提出(課題のソースファ
イルを添付)せよ
提出するソースファイルはコンパイルが成功し所望の結果を得られ
ることを確認してから提出すること
提出期限:5/19 14:00 ∼ 5/23 17:00
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
20 / 22
本日のレポート課題
問題:次のファイルを作成し,Course N@vi より提出せよ
九九の表の中身を計算して,表示させるプログラムを作れ
表示は以下のようにする
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
4
8
12
16
20
24
28
32
36
第 6 回— C 言語の初歩 (4) —
5
10
15
20
25
30
35
40
45
6
12
18
24
30
36
42
48
54
7
14
21
28
35
42
49
56
63
8
16
24
32
40
48
56
64
72
9
18
27
36
45
54
63
72
81
C プログラミング 入門
21 / 22
本日のレポート課題(ヒント)
二重ループを使う.変数は2つ必要になる.
int i, j;
for (i=1;...;...){
for(j=1;...;...){
....
}
....
}
整数の桁を揃えて表示するには,printf で”%3d”
はじめは1行目を出力するプログラムを作り,それができたら2行
目を出力するプログラムを作ろう
123456789
第 6 回— C 言語の初歩 (4) —
C プログラミング 入門
22 / 22