2C while文

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年度実施する