2C while文 例) データ 入力:0と入力するまでの数値 出力:入力した数の合計 ☆例.前判定繰り返しの例 • 上の記号 に相当する機能を’前判定型繰 り返し’という。C言語では”while文”により実現 される。 上のsum1wのCプログラムは次の通り。 #include <stdio.h> main() { int x,sum; scanf("%d",&x); sum=x; while(x!=0){ scanf("%d",&x); sum=sum+x; } printf("%d",sum); } 文法「while文」は次で定められる。 形式: while(反復条件){ 繰り返し実行文 } 意味: 反復条件を満たしている間、繰り返し実行文を 実行する while文というのは、反復条件の値が真の間、繰り返し 、論理式が偽になったら、繰り返しをやめて次に進 む。 即ち、「反復の打ち切り条件」ではなく、「継続条件」で ある事に注意が必要。 FOR文は、何回繰り返すかわかっているときに使い、 わからないときはwhile文を使うと便利である。 while文は、反復条件を満たさないときには、1回も 繰り返さないでその後に進む。 例題1 1から100までの整数の和を計算する #include <stdio.h> main() { int i,s ; s=0; i=1; while(i<=100){ s+=i; ++i; } printf("%d\n",s); } 演習課題6 次のプログラムを作れ(最小解演算子の例) 入力 a>0, b, c : 2次方程式の係数。 2 ただし、ax +bx+c = 0 は正の解を二つ持つとする。 出力 X0 : x を0, 1, 2, … と増やしていくときの、y = a x^2 + b x + c = 0 が一つ目の解に なる直前の x の値 X を0, 1, 2, … と増やしていったときの x とy の値の組 出力形式を工夫すること(グラフがある方が良い) 方法 解の公式を使わないで、xを0から増やして解を求める 提出物 – ①仕様書K1 – ②プログラムリスト、 – ③実行例(適宜表示する) – 学生番号、氏名、提出日を明示 – 2枚以上の場合は1/2、2/2などと右肩に記入 – 提出先 教室または8号館メールボックス – 締め切り この授業終了の日 方法 (最小解) a, b, c x←0 sum1w f(x) > 0の 間 反復 解は (x-1, x] の中にある a, b, c x, x+1 f(x) = ax2+bx+c = 0は正の解を2つ 持つと仮定 x←x+1 出力の例 /*以下のように印刷*/ 0 f(0) 1 f(1) 2 f(2) ・・・ x-1 x f(x-1) f(x) ax2 + bx + c = 0 の解は (x, x+1] の中にある /* a, b, c, x 等は変数の値を入れる */ 理論コンピュータ科学の話題 関数f を入力して、f(x)=0 の最小解の値x0を出力する 演算子: 最小解演算子:{関数}又は集合→{関数}又は集合 (μ演算子ともいう) 計算可能性理論で重要な役割 For文とwhile文で関数記述能力に差があることに関係 する →”一般的に“最小解演算子は while文で実現できる がfor文では実現できない(詳細は計算理論で) Ackermann関数(2重帰納法の例) 次の関数 ack を Ackerman関数 : /ack(0, y) = y + 1 ・ ack(x+1, 0) = ack(x, 1) \ack(x+1, y+1) = ack(x, ack(x+1, y)) 定理(非公式) Ackerman関数は代入文+while文で記述可能だ が代入文+for文だけでは記述不可能(配列を除 く) Ackermann関数の一部 ack(0,y)=y+1 ack(1,y)=y+2 ack(2,y)=2y+3 ↑ ack(3,y)=2↑(y+3)-3 (?) ack(4,y)=2↑2↑・・・↑2-3 ↓ ・・・・・・・・・ y+3 ack(5,y)=2↑2↑・・・↑2-3 ・・・・・・・・・ / 2↑2↑・・・↑2 \ 〔 ・・・・・・・・・ 〕 \ y+3 / (例) ack(5,1) =2↑2↑・・・↑2-3=2↑2↑・・・↑2-3 ・・・・・・・・ ・・・・・・・・ 2↑2↑2↑2 65536 ”基礎論的数” 試験 • 期末試験:2008年度実施する
© Copyright 2024 ExpyDoc