後々大事になってくる 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
© Copyright 2024 ExpyDoc