復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
1 繰り返し処理 while 文 と do 文 所定回反復(特定回数の繰り返し)には for 文を用いた while( 式 ) 文 式が真であるかぎり、文を繰り返し実行する 繰り返す回数が不定の場合に用いる 繰り返し回数が明示的に決まらない場合には while 文、 do 文を用いる ある手順を、例えば.
情報処理演習 (秋学期・樋口担当) 2回目 10/1 日本工業大学 コンピュータリテラシーII.
7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
ループで実行する文が一つならこれでもOK
4章 制御の流れ-3.
基礎プログラミングおよび演習 第4回 担当:花岡 5階522/520.
計算技術研究会 C言語講座 第3回 Loops (for文 while文).
第2章 数値の入力と変数 scanfと変数をやります.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
6/19 前回復習 for文による繰り返し計算 演習1:1から10まで足して画面に結果を表示する 提出者: 1人
プログラミング論 I 講義,テスト C言語復習
多重ループ 繰り返し構造:補足事項 第8回目 [6月8日、H.16(‘04)] 本日のメニュー 1)前回の課題について
多重ループ 繰り返し構造:補足事項 第8回目 [6月12日、H.15(‘03)] 本日のメニュー 1)前回の課題について
プログラミング入門 第5回講義 第5回講義 制御の流れ(1) ループ(その1) - while - インデント(3) ループとは(7)
C言語 配列 2016年 吉田研究室.
コンピュータープログラミング (C言語)(6) 1.条件分岐2(switch文、復習) 2.繰り返し処理(for文、while文)
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
第6章 2重ループ&配列 2重ループと配列をやります.
情報理論2 第6回 小林 学 湘南工科大学 2011年11月15日 〒 神奈川県藤沢市辻堂西海岸1-1-25
プログラミング入門2 第2回 複合文、繰り返し 情報工学科 篠埜 功.
プログラミング入門2 第3回 繰り返し文 芝浦工業大学情報工学科 青木 義満
配列(1) 第9回目 [6月15日、H.16(‘04)] 本日のメニュー 1)前回の課題について 2)前回の宿題について 3)配列 4)課題
第7回 条件による繰り返し.
繰り返し計算 while文, for文.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
繰り返し計算 while文, for文.
第10回関数 Ⅱ (ローカル変数とスコープ).
アルゴリズムとプログラミング (Algorithms and Programming)
Structured programming
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラムの制御構造 配列・繰り返し.
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
プログラムの基本構造と 構造化チャート(PAD)
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
第4章 反復作業を楽にする方法!! ~繰り返しその1 while~
プログラミングⅡ 第2回.
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
C言語,ソースファイルの作成,コンパイル,実行
C言語復習 来週もこの資料を持参してください.
C#プログラミング実習 第2回.
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
地域情報学 C言語プログラミング 第3回 入力、if文、for文 2016年11月25日
プログラミング基礎演習 第4回.
Cプログラミング演習 ニュートン法による方程式の求解.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
地域情報学 C言語プログラミング 第3回 入力、if文、for文 2017年11月1日
プログラミング1 プログラミング演習I 第2回.
湘南工科大学 2013年10月22日 情報理論2 湘南工科大学情報工学科 准教授 小林 学.
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
第2章 数値の入力と変数 scanfと変数をやります.
復習 いろいろな変数型(2) char 1バイト → 英数字1文字を入れるのにぴったり アスキーコード → 付録 int
情報処理Ⅱ 第3回 2004年10月19日(火).
情報処理Ⅱ 2006年10月20日(金).
C言語講座 四則演算  if ,  switch 制御文.
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
知能情報工学演習I 第10回( C言語第4回) 課題の回答
プログラミング演習I 補講用課題
アルゴリズム ~すべてのプログラムの基礎~.
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
情報処理技法(Javaプログラミング)1 第8回 同じ処理を何回も繰り返すには?
Presentation transcript:

復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ i = 0 「ループ」と呼ぶ i = 0 false i < 3 「何かの処理」 を3回反復する場合 true 何かの処理 i の値を1増加 i = 1 i = 2 i = 3

for文のパターン(ある回数だけ文を実行する場合) 復習 キーワード セミコロン int i; for ( i = 0 ; i < 3 ; i++ ) { printf("A"); } カッコが必要 注意! この三つの項目に複雑な式は書かない i = 0 この中が3回 実行される false i < 3 AAA true ループ変数 i = 0 でスタートして i < 3 の間は反復 何かの処理 何かの処理は3回実行される i の値を1増加 int a; for (a = 0; a < 5; a++) { printf("B\n"); } B

復習 ソース中の実行順のイメージ i = 0 False false True i < 3 true int i; for ( i = 0 ; i < 3 ; i++ ) { printf("A"); } ➋ ➊ i = 0 ➊ ➍ False ➌ True false i < 3 ➋ true ➌ 何かの処理 ➍ i の値を1増加 AAA

復習 ループ変数(1) i = 0 false i < 5 true ループ変数iの値を表示 初期値 繰り返しの条件 (反復条件) int i; for (i = 0; i < 5; i++) { printf("%d\n", i); } 1 2 3 4 false i < 5 ループ 変数の 値は1 づつ増加 true ループ変数iの値を表示 何かの処理 int i; for (i = 2; i < 5; i++) { printf("%d\n", i); } 2 3 4 i の値を1増加 初期値 int i; for (i = 3; i < 7 ; i++) { printf("%d\n", i); } 3 4 5 6 繰り返しの条件 (反復条件)

ループ変数が3より大きいか等しい間は繰り返す! i >= 3 true false i = 7 i の値を1減少 何かの処理 復習 ループ変数(3) ループ変数の値が減っていく反復は どう書く? ループ変数の 初期値は7 int i; for (i = 7; i >= 3; i--) { printf("%d\n", i); } 7 6 5 4 3 ループ変数が3より大きいか等しい間は繰り返す! a++; a=a+1; a++ → 変数aの値を1増やす a-- → 変数aの値を1減らす 全く同じ結果 a--; a=a-1;

i=i+1は変数iの値を1増やす.i++と同じ. 復習 i=i+1は変数iの値を1増やす.i++と同じ. ループ変数(4) int i; for (i = 3; i <= 7; i=i+1) { printf("%d\n", i); } 3 4 5 6 7 ちょっと応用問題 次のプログラムの実行結果はどうなる? int i; for (i = 3; i <= 10; i=i+2) { printf("%d\n", i); } 3 5 7 9 ループ変数の ステップ値は2 i=i+2は変数iの値を2増やす

ループで実行する文が一つならこれでもOK for文の文法 これ自体も一つの文! for文の文法のまとめ for (初期値設定 ; 反復条件 ; ステップ値設定) 文 文 → 単文 or 複文 単文 printf("負の数です\n"); 複文 { b = 10; a = 2*b; if (a > 5) printf("aは%dである\n",a); } a = 2*a; 復習 複数の文を ひとまとめ if文も一つの文 文 文 文 int i; for (i = 3; i <= 7; i=i+1) printf("%d\n", i); 問題:このプログラムは誤り? ループで実行する文が一つならこれでもOK

i=8の時,ループを終了してこの文を一度だけ実行! 3 4 5 6 7 続行するには . . . こうなるはずでは? よくある間違い 問題:この実行結果は? 違います! int i; for (i = 3; i <= 7; i++); printf("%d\n", i); 8 続行するには . . . 実際にはこうなる! int i; for (i = 3; i <= 7; i++) ; printf("%d\n", i); わかりやすくソースを書き直すと この空文をi=3~7まで繰り返し実行! 単文 printf("負の数です\n"); a = 2*a; ; i=8の時,ループを終了してこの文を一度だけ実行! セミコロンだけでも一つの文!(空文)

ソースプログラムにおける段付け 段付け Tab キーの活用 段付けしたいところで Tabキーを押す ⇒ 4文字分の段がつく int main(void) { int i, x; printf("整数値xを入力してください:"); scanf("%d", &x); for (i = 0; i < x; i++) printf ("i = %d\n",i ); if (i < 5) printf("5未満です\n"); printf("まだ小さいです\n"); } else printf("5以上です\n"); printf("大きくなりました\n"); int main(void) { int i, x; printf("整数値xを入力してください:"); scanf("%d", &x); for (i = 0; i < x; i++) printf ("i = %d\n",i ); if (i < 5) printf("5未満です\n"); printf("まだ小さいです\n"); } else printf("5以上です\n"); printf("大きくなりました\n"); カッコの位置は好みの問題 Tab キーの活用 段付けしたいところで Tabキーを押す ⇒ 4文字分の段がつく 注)これはVisual Studioの標準設定の場合 int i; for (i = 3; i <= 10; i=i+2){ printf("%d\n", i); }

ループ変数の利用(1) 1から5の整数値の和を求める 1+2+3+4+5=15 aの値 代入前のsumの値 int a,sum = 0; for (a = 1; a <= 5; a++) { sum = sum + a; printf("a=%d sum=%d\n", a, sum); } printf("和は%d\n", sum); この例では,ループを始める前にsumが0であることが重要 大原則 初期化(代入)されていない変数の値は不定である. ゼロとは限らない どんな値が入っているか決まっていない 実行するたびに異なった値になることも 代入前のsumの値 aの値 足し算の結果 a=1 sum=1 a=2 sum=3 a=3 sum=6 a=4 sum=10 a=5 sum=15 和は15 sum ← 0 + 1 sum ← 1(=0+1) + 2 sum ← 3(=0+1+2) + 3 sum ← 6(=0+1+2+3) + 4 sum ← 10(=0+1+2+3+4)+ 5 sum=(0+1+2+3+4)+5

ループ変数の利用(2) 2から10の偶数の和を求める 代入前のsumの値 aの値 int a,sum = 0; for (a = 2; a <= 10; a = a+2) { sum = sum + a; printf("a=%d sum=%d\n", a, sum); } printf("和は%d\n", sum); 代入前のsumの値 aの値 a=2 sum=2 a=4 sum=6 a=6 sum=12 a=8 sum=20 a=10 sum=30 和は30 sum ← 0 + 2 sum ← 2(=0+2) + 4 sum ← 6(=0+2+4) + 6 sum ←12(=0+2+4+6) + 8 sum ←20(=0+2+4+6+8) + 10

ループ変数を利用しない計算 入力された5個の整数の和を求める 代入前のsumの値 xの値 int i, x, sum = 0; for (i = 0; i < 5; i++) { printf("値は?"); scanf("%d", &x); sum = sum + x; } printf("合計は%dです\n", sum); 代入前のsumの値 xの値 値は? 3 値は? 2 値は? 7 値は? 1 値は? 12 合計は25です sum ← 0 + 3 sum ← 3(=0+3) + 2 sum ← 5(=0+3+2) + 7 sum ← 12(=0+3+2+7) + 1 sum ← 13(=0+3+2+7+1) + 12

(a) ある処理を定められた回数繰り返す処理 (b) 一定の条件を満たすまで繰り返す処理 反復処理(反復制御文) プログラムにおける反復処理→ (a) ある処理を定められた回数繰り返す処理 (b) 一定の条件を満たすまで繰り返す処理 ループ変数を利用するループ ループ変数を利用しないループ C言語における反復処理 → 3種類 (a) ある定められた回数だけ反復処理を行う for 文 (b) ある条件が成り立つ間だけ反復処理を行う i) 反復処理の初めに条件を調べる場合 while 文 ii) 反復処理の終わりに条件を調べる場合 do while 文

while文(1) カッコが必要 偽 条件 真 キーワード 文 while ( 条件 ) 文 while ( 条件 ) 文 ・ 条件が真の間ずっと文(複文も可)を反復する ・ ループ変数は必要ない

while文(2) 条件 条件が真(true)なら この中が繰り返し 実行される 【注意】初めからaが0だと 一度も実行されない ユーザーが0を入力するまで繰り返す int a = 1; while ( a != 0 ) { printf("正の整数を入力してください: "); scanf("%d", &a); } printf("終了します"); 条件 int a = 0; 一度も実行されない 条件が真(true)なら この中が繰り返し 実行される int a; 実行するたびに異なった結果! 正の整数を入力してください:5 正の整数を入力してください:6 正の整数を入力してください:10 正の整数を入力してください:15 正の整数を入力してください:0 終了します

プログラムミスによる無限ループからの強制脱出 → Ctrl-C ( Ctrl キーを押しながら C キーを押す) 無限ループ(1) int i, j = 1; while ( j != 0) { printf("i = ? "); scanf("%d", &i); } i = ? 10 i = ? 5 i = ? 6 i = ? 15 i = ? 0 ループが終了しない! 常に真! プログラムミスによる無限ループの例 C言語では 0以外の定数値は真を意味する while ( 3 >= 2 ) { printf("A\n"); } while (1) { printf("A\n"); } プログラムミスによる無限ループからの強制脱出 →  Ctrl-C ( Ctrl キーを押しながら C キーを押す)