鹿児島大学 プログラミング基礎演習 第6回 for文とwhile文 半田利弘 鹿児島大学 大学院理工学研究科 物理・宇宙専攻 理化学研究所 同じ動作を繰り返す ▶ 機械の制御 ▶ 多数に対する計算 理化学研究所 例:何行も表示する(1) ▶ 繰り返す数だけプログラム行を書く #include <stdio.h> int main(void); int main(void) { printf("Hello, world.\n"); printf("Hello, world.\n"); printf("Hello, world.\n"); printf("end\n"); return(0); } 理化学研究所 もっと能率的に… ▶ for文を使う #include <stdio.h> int main(void); int main(void) { int ii; for(ii=0; ii<3; ii=ii+1) { printf("Hello, world.\n"); } printf("end\n"); return(0); } 理化学研究所 例:何行も表示する(2) ▶ 書くことがちょっとずつ変わる場合 List 6-1 #include <stdio.h> int main(void); int main(void) { int ii; ii=0; printf("%d\n",ii); ii=1; printf("%d\n",ii); ii=2; printf("%d\n",ii); printf("end\n"); return(0); } 理化学研究所 もっと能率的に… ▶ for文を使うと List 6-2 #include <stdio.h> int main(void); int main(void) { int ii; for(ii=0; ii<3; ii++) { printf("%d\n",ii); } printf("end\n"); return(0); } 理化学研究所 for文 はじめに 続ける条件 1回ごとに変えること ▶ 指定条件だけ繰り返す for(ii=0; ii<10; ii=ii+1) { printf("now ii=%d.\n",ii); 繰り返し対象 } ▶ 増加演算子、減少演算子 ■ ++ 整数変数の値を1つ増やす ■ - 整数変数の値を1つ減らす 理化学研究所 繰り返しとは… ▶ 同じ部分をまとめて書く ■ ■ 小学生の硬筆習字 「この漢字を10回ずつ書きなさい。」 理化学研究所 繰り返し部分を長く List 6-3 #include <stdio.h> int main(void); int main(void) { int ii; for(ii=0; ii<10; ii++) { printf("%dの2乗は%d、",ii,ii*ii); printf("3乗は%dです。\n",ii*ii*ii); } return(0); } 理化学研究所 2重のfor List 6-4 #include <stdio.h> int main(void); int main(void) { int ii,jj; for(ii=0; ii<10; ii++) { printf("%d ",ii); for(jj=0;jj<ii;jj++) { printf("*"); } printf("\n"); } return(0); } 理化学研究所 Advanced:自作コマンドの引数 ▶ コマンド実行の際に値を決める ▶ main(argc, argv) ■ ■ argc: 引数の数(コマンド名自体も含む) argv[]: 引数の文字列 理化学研究所 Advanced:自作コマンドの引数 List 6-6 #include <stdio.h> int main(int argc, char *argv[]); int main(int argc, char *argv[]) { int ii; printf("argcの値は %d です。\n",argc); for(ii=0; ii<argc; ii++) { printf("argv[%d]の値は \"%s\" です。 ",ii, argv[ii]); } return(0); } 理化学研究所 for文(復習) はじめに 続ける条件 1回ごとに変えること ▶ 指定条件だけ繰り返す for(ii=0; ii<10; ii++) { printf("now ii=%d.\n",ii); 繰り返し対象 } 理化学研究所 while文 続ける条件 ▶ 条件を満たしている間、繰り返す while(xx>yy) { printf("still small. y=%d\n",yy); 繰り返し対象 xx++; } printf("now, we did it.\n");} 理化学研究所 while文の例 List7-1(教科書p.149) #include <stdio.h> int main(void); int main(void) { 続ける条件 int cc; cc=getchar(); while(cc != '.') { printf(" '%c'\n",cc); 繰り返し対象 cc=getchar(); } return(0); } 理化学研究所 List7-1を分析 ▶ 続ける条件 (cc != '.') ■ 意味… 「ccが'.'と等しくない」って? ‘c’とは、「文字cを意味するデジタルデータ値」のこと ▶ 繰りかえし対象 { printf(" '%c'\n",cc) cc=getchar(); } 読むごとに毎回異なる 理化学研究所 List7-1をコンパイルして実行 List7-1(教科書p.149) #include <stdio.h> int main(void); int main(void) { int cc; cc=getchar(); while(cc != '.') { printf(" '%c'\n",cc); cc=getchar(); } return(0); } 理化学研究所 forとwhile はじめに 続ける条件 1回ごとに変えること ▶ 比較:どちらもループを作る for(ii=0; ii<10; ii++) { printf("now ii=%d.\n",ii); } 繰り返し対象 続ける条件 ii=0; while(ii<10) { printf("now ii=%d\n",ii); ii++; } 繰り返し対象 理化学研究所 例1:入力を出力にコピーする ■ 1文字ずつ読み込んで1文字ずつ書く List7-3(教科書p.158)を修正 #include <stdio.h> int main(void); int main(void) { int cc; cc=getchar(); while(cc != EOF) { putchar(cc); cc=getchar(); } return(0); } 理化学研究所 入出力のリダイレクション ▶ OSの機能の1つ Windowsや Linuxで使用可 ■ ■ ■ キーボードの代わりにファイルから入力 画面の代わりにファイルに出力 どんなコマンドでも使える コマンド <入力ファイル コマンド >出力ファイル コマンド <入力ファイル >出力ファイル 理化学研究所 例2:行数を数える long型(4バイト整数) ■ 行数=改行文字の個数 List7-5(教科書p.163) 初期化(最初に代入) #include <stdio.h> int main(void); int main(void) { int cc; long lines=0L; cc=getchar(); while(cc != EOF) { if(cc=='\n') { lines++; } long型定数 cc=getchar(); } printf("Lines=%ld\n", lines); long型として表示 return(0); } 理化学研究所 do-while文 忘れずに ▶ 条件を満たしている間、繰り返す do { printf("still small. y=%d\n",yy); 繰り返し対象 xx++; } while(xx>yy); printf("now, we did it.\n");} 続ける条件 理化学研究所 ■ 繰り返し条件と対象の配置がwhile文と異なる 課題:ゲームのコマンド待ち ▶ キーボードから入力した文字 ■ 各自の「ゲーム」を改良せよ 存在しない命令である場合は再度聞く 選択肢の簡単なリストを表示 正しくない間は、何度でも繰り返す 妥当な範囲の値でなければ再度聞く 妥当な値の範囲を表示 妥当でなければ、何度でも繰り返す ■ 例:bby01bdg2.c 理化学研究所
© Copyright 2024 ExpyDoc