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