PowerPoint プレゼンテーション - Multi Media Club

後々大事になってくる for 文
while 文との違いに注意してね!
第5章 繰り返し その2
1

反復処理を楽にやるなら while 文が有効

while 文のループから脱出するなら break 文

新しい演算記号『++』や『+=』など、他にも
色々
第5章 繰り返し その2
2

while 文以外の反復処理の方法を知ろう
使い方、注意点
while とどう違うのか

2重ループ
やり方と使いどころ
第5章 繰り返し その2
3

前回やった繰り返し while 文のおさらいをば
while( num < 10){
printf(“オラ”);
num++;
}
上のように、『()』内に条件式を書き、それを
満たす限り『{}』内の処理をループ
 『{}』に条件に入れた変数を変化させる処理を
入れ、やがてループからの脱出をする

第5章 繰り返し その2
4


while に引き続き今回は
for 文で繰り返し
書き方例:
for(num = 0; num < 10; num++){
printf(“オラ”);
}
『()』内に変数の初期値、条件式、変数の変化
を順に書きいれ、『;』で区切る
 『{}』内には相変わらずループさせる処理を入
れる

第5章 繰り返し その2
5

とにもかくにも以下のプログラムを実行してみ
よう
#include <stdio.h>
void main(){
int num, i;
printf(“何個表示する? > ”);
scanf(“%d”,&num);
for(i = 0; i < num; i++){
printf(“★”);
}
printf(“\n”);
while 文でも似た
ようなことやっ
たなあ・・・、と
思いつつ
}
第5章 繰り返し その2
6



ざっとこんな感じ
while 文では『{}』内に変数の変化を書いてい
た
『num++;』とかのこと
for 文では『()』の中で変数の初期化も再初期化
(変数の変化)もやってしまう
初期化は『num = 0;』とかのこと
第5章 繰り返し その2
7
以下の実行結果と同じようなものが出るよう階
乗計算のプログラムを書いてみよう
 自然数以外が入力されたら計算しないように、
プログラムを工夫しよう

ヒント:if 文を使って
処理を分岐させては?
第5章 繰り返し その2
8
#include <stdio.h>
void main(){
int num;
int ans = 1;
printf(“自然数を入力してください > ”);
scanf(“%d”,&num);
ここで変数を宣言してもいい
if( num > 0){
for(int i = 1; i < num; i++) ←『{}』なしで処理を
ans *= i;
書くときは1つの文のみ

テンプレ
printf(“%d! = %d\n”, num, ans);
}
else
printf(“想定されていない数値です\nプログラムを終了します\n”);
}
第5章 繰り返し その2
9

さっき説明した for 文の中にさらに for 文を書
き入れることで、2重のループを作ることがで
きる
書き方は単純に for 文の中に for 文を入れる
for(i = 0; i < num1; i++){
 例:
for(n = 1; n < num2; n++){
}

}
第5章 繰り返し その2
10

2重ループでは一体どんな風に処理が進んでい
るかというと、↓こんな感じ
1つ目の for 文が
1ループしてる間に
2つ目の for 文が
ループをすべて行う
そしてまた同じこと
を繰り返す
第5章 繰り返し その2
11

では実際にプログラムを実行してみよう
#include <stdio.h>
void main(){
int height,width;
printf(“縦の長さは? > ”); scanf(“%d”,&height);
printf(“横の長さは? > ”); scanf(“%d”,&width);
for(int i = 0; i < height; i++){
for(int n = 0; n < width; n++) printf(“★”);
printf(“\n”);
}
}
第5章 繰り返し その2
12


実行結果例はこれ
こういう2次元的なことをしたいとき、2重ルー
プが有効(と思われる)
第5章 繰り返し その2
13

以下のように、辺の長さを入力させ、直角三角
形に★を表示させるプログラムを作ってみよう
時間余ったらこちらもどうぞ↓
第5章 繰り返し その2
14
#include <stdio.h>
void main(){
int length;
printf(“2辺の長さは? > ”);
 テンプレ
scanf(“%d”,&length);
なかなか手強い
暇な人用問題は
for(int i = 1; i <= length; i++ ){
次のスライドに
for(int n = 1; n <= i; n++) 回答例
printf(“★”);
printf(“\n”);
}
}
第5章 繰り返し その2
15
『>』なのか
『>=』なのか
『i』や『n』の
初期化の値は何に
すべきか
#include <stdio.h>
void main(){
int length;
printf(“2辺の長さは? > ”);
scanf(“%d”,&length);
for(int i=length; i>0; i--){
for(int n=i; n>0; n--)
printf(“★”);
一筋縄ではいかな
い問題だと思う
printf(“\n”);
}
}
第5章 繰り返し その2
16

スライドでは for 文のみを使った2重ループを
作ったが、
for(){
while(){
while(){
}
}

while(){
for(){
}
}
while(){
}
}
for の中に while、while の中に for、while の
中に while も勿論できる
練習問題2を上のいずれかで書き改めても
面白いと思う
第5章 繰り返し その2
17

一度にいくつもの変数をつくる方法
やり方、諸注意
作った変数に一気に値を入れる方法
きっとよく使う 配列 の登場
第5章 繰り返し その2
18

以下のように、入力した辺の長さを持つ直角三
角形を右下に表示するプログラムを作ってみよ
う
時間余ったらこちらもどうぞ↓
ヒント:for 文は計3つ使う
第5章 繰り返し その2
19
先に空白を表示した後、★を表示している
 ここでは『n』を2回初期化しているので注意

#include <stdio.h>
void main(){
int length,i,n;
printf(“2辺の長さは? > ”); scanf(“%d”,&length);
for(i = 1; i >= length; i++){
for(n = 1; n <= length – i; n++) printf(“
”);
for(n = 1; n <= i; n++) printf(“★”);
printf(“\n”);
}
}
ピラミッドは次頁です
第5章 繰り返し その2
20

その1の回答例の、表示する★の数をいじった
だけ(思ったより難しくはないんじゃないかな)
#include <stdio.h>
void main(){
int length,i,n;
printf(“2辺の長さは? > ”); scanf(“%d”,&length);
for(i = 1; i >= length; i++){
for(n = 1; n <= length – i; n++) printf(“
”);
for(n = 1; n <= i * 2 - 1; n++) printf(“★”);
printf(“\n”);
}
}
時間があったらじっくり説明したい(できたら)
第5章 繰り返し その2
21

テンプレ
第5章 繰り返し その2
22