プログラミング基礎演習

鹿児島大学
プログラミング基礎演習
第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
理化学研究所