while 文(1)
while 文(1)
• 繰り返しの必要性 hil ⽂の形式と動作 • while ⽂の形式と動作 • 繰り返しにより平⽅根を求める(演習) 繰り返しにより⽅程式の解を求める(課題) • 繰り返しにより⽅程式の解を求める(課題)Hello.をたくさん表示しよう
Hello.を画面に3回表示するには,以下でOK. #i l d < tdi h> #include <stdio.h> int main() { printf("Hello.¥n"); printf("Hello.¥n"); printf("Hello.¥n"); p } は H ll を100回表示するにはどうしたら では,Hello.を100回表示するにはどうしたらいい? 勿論, printf("Hello ¥n"); printf( Hello.¥n ); を100個書けばいいのだが,そんな面倒なことはしたくない! これを実現するためには 繰り返しを使う 1 これを実現するためには,繰り返しを使うwhile 文の形式と動作
形式
while ( 式 ) 文
動作
(1) 式を評価(計算)する.
(2) 式の値が真ならば文を実行し,(1) に戻る.
式の値が偽ならば while 文を終了する.
※ 文が複数の文から構成されるときは, if 文のときと同様に { }で囲む if 文のときと同様に,{ }で囲む.繰り返しの際に良く使う式
変数 = 変数 + 1 ;
・・・ 変数に記憶している値を1増やす
(a)
変数 = 変数 - 1 ;
・・・ 変数に記憶している値を1減らす
(b)
ex. i=i+1; この代入文を実行すると… ① 右辺が計算される ① 右辺が計算される. 現在の i の値(i が記憶している値)に1加えた 値が右辺の値となる. ② 右辺 値を 左辺 変数 i に代入する これらの式はプログラムで非常によく使われるため 専用の表現があり ② 右辺の値を,左辺の変数 i に代入する. 結果として,この文を実行すると i の値が1増える. これらの式はプログラムで非常によく使われるため,専用の表現があり, (a)と同じ結果になるのが 変数++(たとえば i++) (b)と同じ結果になるのが 変数 (たとえば i ) 3 (b)と同じ結果になるのが 変数--(たとえば i--) この他にも,++i, --i があるが,上記との違いは参考テキストを参照.Hello. を100回表示するプログラム(1/8)
#include <stdio h>
#include <stdio.h>
int main()
{
{
int i;
i = 0 ;
変数 i は繰り返しの実行回数を記憶while(i < 100){
printf("Hello.¥n");
この2文を実行すると, 画面 H ll と表 されi=i+1;
}
画面に Hello. と表示され, i の値が1増加.}
Hello. を100回表示するプログラム(2/8)
#include <stdio h>
プログラムの実行過程
i に記憶されている値#include <stdio.h>
int main()
{
0 i に記憶されている値{
int i;
i = 0 ;
画面(Window)while(i < 100){
printf("Hello.¥n");
i=i+1;
}
}
5Hello. を100回表示するプログラム(3/8)
#include <stdio h>
プログラムの実行過程
i に記憶されている値#include <stdio.h>
int main()
{
0 i に記憶されている値{
int i;
i = 0 ;
画面(Window)while(
i < 100
){
printf("Hello.¥n");
i=i+1;
}
}
i=0 ゆえ,繰り返しの条 件 i<100 は真 件 i<100 は真Hello. を100回表示するプログラム(4/8)
#include <stdio h>
プログラムの実行過程
i に記憶されている値#include <stdio.h>
int main()
{
1 i に記憶されている値{
int i;
i = 0 ;
画面(Window)while(i < 100){
printf("Hello.¥n");
Hello.i=i+1;
}
}
7Hello. を100回表示するプログラム(5/8)
#include <stdio h>
プログラムの実行過程
i に記憶されている値#include <stdio.h>
int main()
{
1 i に記憶されている値{
int i;
i = 0 ;
画面(Window)while(
i < 100
){
printf("Hello.¥n");
Hello.i=i+1;
}
}
i=1 ゆえ,繰り返しの条 件 i<100 は真 件 i<100 は真Hello. を100回表示するプログラム(6/8)
#include <stdio h>
プログラムの実行過程
i に記憶されている値#include <stdio.h>
int main()
{
2 i に記憶されている値{
int i;
i = 0 ;
画面(Window)while(i < 100){
printf("Hello.¥n");
Hello. Hello.i=i+1;
}
}
9Hello. を100回表示するプログラム(7/8)
#include <stdio h>
プログラムの実行過程
i に記憶されている値#include <stdio.h>
int main()
{
100 i に記憶されている値{
int i;
i = 0 ;
画面(Window) 100回実行したときwhile(i < 100){
printf("Hello.¥n");
Hello. Hello. Hello. 100回表示i=i+1;
}
Hello. Hello.}
Hello. を100回表示するプログラム(8/8)
#include <stdio h>
プログラムの実行過程
i に記憶されている値#include <stdio.h>
int main()
{
100 i に記憶されている値{
int i;
i = 0 ;
画面(Window)while(
i < 100
){
printf("Hello.¥n");
Hello. Hello. Hello.i=i+1;
}
Hello. Hello.}
i=100 ゆえ,繰り返しの 条件 i<100 は偽 11 while 文終了 条件 i<100 は偽指定数だけ Hello. と表示するプログラム
右のプログラムは,整 数を1つ読み込み,読 #include <stdio.h> int main() 数を1つ読み込み,読 み込んだ数だけ Hello.(+改行) を画面に表示するプロ int main() { int n; /* 表示回数を表わす */ int i; /* 繰り返しのカウント */ を画面に表示するプロ グラム. int i; /* 繰り返しのカウント */ /* 表示回数の入力 */ ri tf("何回表示しますか :"); printf( 何回表示しますか : ); scanf("%d",&n); / 表 / /* 表示 */ i = 0 ; while(i < n){ printf("Hello.¥n"); i=i+1; } }演習: aの平方根を求める(1/2)
次頁の解説を参考にして,実数を1つ読み込み,この数の平方根を繰り 返しを用いて求めるプログラムを作ろう. 本演習では,繰り返しの回数は10回とし,各回で求まった平方根の近 似値を表示するようにすること. 実は,次頁で説明する方法は,ニュートン法という,方程式の数値計算 による一般的な解法を x*x-a=0 に特化したもの による 般的な解法を x*x a 0 に特化したもの. 13演習: aの平方根を求める(2/2)
縦,横の長さがそれぞれ x, y の長方形(面積 a)を考える. • 最初は最初は,x a, y 1 であるとする.x=a y=1 であるとする • 毎回の繰り返しで,縦,横の長さを以下のように変更. このように変更すると,面積は a のままで,x, y は以前より近い値に なる(つまり 正方形に近づく) これを繰り返せば x y の値はそれ なる(つまり,正方形に近づく).これを繰り返せば,x, y の値はそれ ぞれ √a に近づく. a 面積 1√
正方形 a 面積 a 正方形 面積 a√
面積 a a+1 2 abreak 文,continue 文(1/2)
繰り返しの中(以下の図の の部分)で,break 文が実行されると, その時点で,while 文を強制的に終了する.while(条件1) {
…if(条件2) break;
… …}
… [補足] continue 文 繰り返しの中(while文やfor文により繰り返し実行される文の中)で 繰り返しの中(while文やfor文により繰り返し実行される文の中)で, continue 文に出会う(continue 文を実行する)と,それ以降の文を無視 し,while 文であれば,次の繰り返しをするか否かの条件判定,for 文で あれば 次の繰り返しの準備(第6回の資料の「f 文の形式と動作」の 15 あれば,次の繰り返しの準備(第6回の資料の「for文の形式と動作」の 動作(3)のところ)に実行が移る.break 文,continue 文(2/2)
#include <stdio.h> int main() { ex. 「2つの整数を入力し,その割 り算の答えを表示する」という { int x,y; printf("割り算をします¥n"); り算の答えを表示する」という ことを繰り返すプログラム. ただし,二つ目の数が0の場合, printf( 割り算をします¥n ); while(1){ printf("一つ目の数は:"); f("%d" & ); ただし, 目の数が の場合, 繰り返しを終了. scanf( %d ,&x); printf("二つ目の数は:"); scanf("%d",&y); { if(y==0){ printf("二つ目の数が0でしたので終わります¥n"); break; } printf("%d÷%d = %d¥n",x,y,x/y); } }17