ループで実行する文が一つならこれでもOK

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.
次ページに関数の解答例 課題12-1 (問題と解答) 複素数xとして, 実部を入力してください.10 虚部を入力してください.20
プログラミング作法と デバッグ ― VC++ 編 ―.
7/10 if 文課題 力作が多くて感心! 演習1:キーボードから2つの整数を入力し、小さい方の数字を 表示せよ。
4章 制御の流れ-3.
プログラミング入門2 第4回 配列 for文 変数宣言 初期化
計算技術研究会 C言語講座 第3回 Loops (for文 while文).
第2章 数値の入力と変数 scanfと変数をやります.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
6/19 前回復習 for文による繰り返し計算 演習1:1から10まで足して画面に結果を表示する 提出者: 1人
多重ループ 繰り返し構造:補足事項 第8回目 [6月8日、H.16(‘04)] 本日のメニュー 1)前回の課題について
多重ループ 繰り返し構造:補足事項 第8回目 [6月12日、H.15(‘03)] 本日のメニュー 1)前回の課題について
プログラミング入門 第5回講義 第5回講義 制御の流れ(1) ループ(その1) - while - インデント(3) ループとは(7)
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
第6章 2重ループ&配列 2重ループと配列をやります.
プログラミング入門2 第2回 複合文、繰り返し 情報工学科 篠埜 功.
プログラミング入門2 第3回 繰り返し文 芝浦工業大学情報工学科 青木 義満
配列(1) 第9回目 [6月15日、H.16(‘04)] 本日のメニュー 1)前回の課題について 2)前回の宿題について 3)配列 4)課題
第7回 条件による繰り返し.
第2回 Microsoft Visual Studio C++ を使ってみよう
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
繰り返し計算 while文, for文.
プログラミング入門 電卓を作ろう・パートIV!!.
アルゴリズムとプログラミング (Algorithms and Programming)
高度プログラミング演習 (03).
Structured programming
04: 式・条件分岐 (if) C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
indentについて forやifの「中身」を右に寄せる. forやifの「外枠」は右に寄せない. int x; x = 3;
第7回 条件による繰り返し.
岩村雅一 知能情報工学演習I 第10回(後半第4回) 岩村雅一
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
プログラムの制御構造 配列・繰り返し.
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
復習 一定回数を繰り返す反復処理の考え方 「ループ」と呼ぶ false i < 3 true i をループ変数あるいはカウンタと呼ぶ
オブジェクト プログラミング 第2回 プログラムの基本.
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
第4章 反復作業を楽にする方法!! ~繰り返しその1 while~
復習 2次元配列 4列 j = 0 j = 1 j = 2 j = 3 i = 0 i = 1 i = 2 3行
情報処理Ⅱ 第3回 2007年10月22日(月).
プログラミングⅡ 第2回.
vc-2. Visual Studio C++ のデバッガー (Visual Studio C++ の実用知識を学ぶシリーズ)
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
Indent.
C#プログラミング実習 第2回.
地域情報学 C言語プログラミング 第4回 while文、do~while文、switch文、 2次元配列、ポインタ 2017年11月10日
復習 if ~ 選択制御文(条件分岐) カッコが必要 true 条件 false 真(true)なら この中が aを2倍する 実行される
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
地域情報学 C言語プログラミング 第3回 入力、if文、for文 2016年11月25日
プログラミング基礎演習 第4回.
ループだよ!難しいよ! 第5章 while(ループ);.
岩村雅一 知能情報工学演習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日(金).
分岐(If-Else, Else if, Switch) ループ(While, For, Do-while)
知能情報工学演習I 第10回( C言語第4回) 課題の回答
プログラミング演習I 補講用課題
= 55 課題6-1 #define _CRT_SECURE_NO_WARNINGS
Presentation transcript:

ループで実行する文が一つならこれでも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の時,ループを終了してこの文を一度だけ実行! セミコロンだけでも一つの文!(空文)

復習 ループ変数の利用(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

復習 while文(2) カッコが必要 条件 真(true)なら この中が繰り返し 実行される 【注意】初めからaが0だと 一度も実行されない カッコが必要 int a = 1; while ( a != 0 ) { printf("整数値を入力してください: "); scanf("%d", &a); } printf("終了します"); 条件 真(true)なら この中が繰り返し 実行される 整数値を入力してください:5 整数値を入力してください:6 整数値を入力してください:10 整数値を入力してください:15 整数値を入力してください:0 終了します

意図的な無限ループ プログラムミスによる無限ループの例 Cで意図的に無限ループを作る書き方 条件が 初期値も条件も何も書かない 常に真(1) while ( 3 >= 2 ) { printf("A\n"); } while (1) { printf("A\n"); } Cで意図的に無限ループを作る書き方 for( ; ; ) { printf("A\n"); } while (1) { printf("A\n"); } 初期値も条件も何も書かない 条件が 常に真(1)

無限ループの利用とbreak文による脱出 0が入力されるまで2乗を計算するプログラム float x = 1; while(x != 0) { printf("x = ?"); scanf("%f", &x); printf("%fの2乗は%f\n", x, x*x); } x = ? 3 3.000000の2乗は9.000000 x = ? 2.5 2.500000の2乗は6.250000 x = ? 0 0.000000の2乗は0.000000 続行するには何かキーを押して . . . この行を出さないためには? 無限ループ if文を挿入 float x; while(1) { printf("x = ?"); scanf("%f", &x); if (x == 0.0) break; printf("%fの2乗は%f\n", x, x*x); } x = ? 3 3.000000の2乗は9.000000 x = ? 2.5 2.500000の2乗は6.250000 x = ? 0 続行するには何かキーを押して . . . break文を実行すると強制的にループを終了する

Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue 現在のループ処理を終了し,そのループの次の周回を始める.if文と組み合わせて利用するのが一般的. goto 任意の場所へジャンプし,そこから文を実行する.C言語においては使用しないことが望ましい(従って説明略).

breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・ 処理1 i <= 100 true false i = 1 i の値を1増加 条件1 break 処理2 条件2 continue 処理3 printf(・・・) int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・ if (条件1) break; ・・・処理2・・・・ if (条件2) continue; ・・・処理3・・・・ } printf(・・・);

この処理全体が3回実行される 内側と外側では別の ループ変数が必要 多重ループ 4回ループ j < 4 Yes No 外側のループ 何かの処理2 j < 4 Yes No j = 0 j の値を1増加 外側のループ 内側のループ i = 0 No i < 3 Yes 何かの処理 i の値を1増加 何かの処理2が3×4回実行される 「何かの処理」がループ処理の場合 → 多重ループ

2重のループ(その1) 外側のループ 内側のループ ループ の ネスト ここがi=0からi=4まで 5回反復される int i, j; for (i = 0; i < 5; i++) { printf("%d: ", i); for (j = 0; j <= 9; j++) printf("%d,", j); } printf("\n"); ここがj=0からj=9まで反復される 外側のループ 内側のループ j = 0,1,2,・・ ループ の ネスト i = 0 i = 1 i = 2 i = 3 i = 4 0: 0,1,2,3,4,5,6,7,8,9, 1: 0,1,2,3,4,5,6,7,8,9, 2: 0,1,2,3,4,5,6,7,8,9, 3: 0,1,2,3,4,5,6,7,8,9, 4: 0,1,2,3,4,5,6,7,8,9,

ここがi=1からi=5まで5回反復される 2重のループ(その2) *印で三角形を描く ここがj=1からj=iまでi回反復される 外側のループ int i, j; for (i = 1; i <= 5; i++) { for (j = 1; j <= i; j++) printf("*"); } printf("\n"); 外側のループ i = 1 i = 2 i = 3 i = 4 i = 5 * ** *** **** ***** j = 1 j = 1, 2 j = 1, 2, 3 j = 1, ~, 4 j = 1, ~, 5 内側のループ

プログラミング ≒ デバッグ デバッガの利用(1) 虫のこと プログラムのミス → バグ バグを見つけて修正すること → デバッグ → バグ バグを見つけて修正すること → デバッグ バグを発見する道具 → デバッガ どんな優秀なプログラマーでも、初めからバグのない完全なプログラムは作れない! ⇒ プログラムを完成させることはデバッグを完了すること! 自分で考え抜いてデバッグすることが重要 プログラミング ≒ デバッグ

デバッガの利用(2) [A] ツールバーでデバッグを始める手順 ツールボタンで右クリックして,デバッグを選ぶ デバッグツールバーからボタンを選ぶ (3) (2) (1) (1)ステップオーバー 次の行を実行 (2) ステップイン 次の行を実行(今回は使わない) (3) デバッグの中止 デバッグをやめる [B] メニューでデバッグを始める手順 デバッグメニューで,ステップオーバーを選ぶ