バイオプログラミング第一(第4回)...バイオプログラミング第一(第4回)...
TRANSCRIPT
バイオプログラミング第一 (第4回)
榊原 康文、佐藤 健吾
慶應義塾大学理工学部 生命情報学科
処理の流れ (繰り返し)
処理を繰り返す
◆1から10まで合計する
◆1番から100番までの体重の平均を求める
◆1番から100番までの点数の最高点を求める
◆ファイルの先頭から最後まで文字を読み込む
◆ ・・・
インクリメント・デクリメント演算子①インクリメント演算子
◆ 変数に1を加える演算子
◆ 【変数名】++ または ++【変数名】
例) x++ ++y
例) int main(void)
{
int n;
n=1;
n++;
return 0;}
n=2となる
インクリメント・デクリメント演算子①インクリメント演算子
◆ 変数の前に付けた場合と後に付けた場合の違い
b=++a; ⇔ a=a+1;
b=a;
(aの値がbに代入される前に,aに1が加わる)
b=a++; ⇔ b=a;
a=a+1;
(aの値がbに代入された後に,aに1が加わる)
インクリメント・デクリメント演算子②デクリメント演算子
◆ 変数から1を引く演算子
◆ 【変数名】 -- または -- 【変数名】
例) x-- --y
例) int main(void)
{
int n;
n=1;
n--;
return 0;}
n=0となる
処理の流れ (繰り返し)
(1) for 文① for (【式1】; 【式2】 ; 【式3】 )
{
【文】;
・ ・ ・
【文】;
}
②
【式1】が繰り返しの前に処理され,
【式2】が真の間, 【文】が繰り返し実行され,
繰り返しの最後に,【式3】が実行される
【式2】
【文】
真
偽
【式1】
【式3】
プログラム例 (1から10まで合計)
#include <stdio.h>int main(void){int i,total;
total=0;for (i=1; i<=10; i++){total=total+i;
}printf(”total= %d¥n”,total);
return 0;
}
制御変数
初期値
最終値
インクリメント
プログラム例
#include <stdio.h>int main(void){int i,total;
total=0;for (i=1; i<=10; i++){total=total+i;
}printf(”total= %d¥n”,total);
return 0;
}
total=0
i=1, i<=10,
total=total+i
=0+1=1
i++,i=2, i<=10,
total=3
i=3, total=6
i=4, total=10
i=5, total=15
i=6, total=21
i=7, total=28
i=8, total=36
i=9, total=45
i=10,total=55
for 文(1) for 文
③
◆ forループのインデックス(制御変数)や限界値
(最終値)は,ループ内で変更できる
◆ forループの制御変数が数値的に増えないと
いけないという制限もない
→ 極端な例
for (;;) {【文】}
は,文を永久に実行する(無限ループ)
◆ for (i=11; i<=10; i++) {【文】}
では,文は一回も実行されない
プログラム例 (1から10まで合計)
#include <stdio.h>int main(void){int i,total;
total=0;for (i=10; i >=1; i--){total=total+i;
}printf(”total= %d¥n”,total);
return 0;
}
初期値
最終値
デクリメント
プログラム例
#include <stdio.h>int main(void){int i,total;
total=0;for (i=10; i >=1; i--){total=total+i;
}printf(”total= %d¥n”,total);
return 0;
}
total=0
i=10,i>=1,
total=total+i
=10
i--,i=9,i>=1,
total=19
i=8, total=27
i=7, total=34
i=6, total=40
i=5, total=45
i=4, total=49
i=3, total=52
i=2, total=54
i=1, total=55
プログラム例 (階乗の計算)
#include <stdio.h>int main(void){int i,total;
total=1;for (i=1; i<=10; i++){total=total*i;
}printf(”total= %d¥n”,total);
return 0;
}
プログラム例 (平均を求める)#include <stdio.h>int main(void){int i,num=10 ;float x,total;
total=0;
for (i=1; i<=num; i++)
{scanf(”%f”,&x);total=total+x;
}
printf(”average= %f¥n”,total/num);
return 0;
}
プログラム例 (最大値を求める)
#include <stdio.h>
int main(void)
{int i,x,num=10 ,max;
max=0 ;
for (i=1; i<=num; i++)
{scanf(”%d”,&x);if (max<x) {max=x;}
}
printf(”maximum= %d¥n”,max);
return 0;
}
while 文
(2) while 文
① while (【式】 )
{
【文】;
・ ・ ・
【文】;
}
【式】
【文】
真
偽
②
【式】が真の間, 【文】を繰り返し実行
プログラム例 (1から10まで合計)
#include <stdio.h>int main(void){int i,total;total=0;
i=1;
while (i<=10)
{total=total+i;i++;
}
printf(”total= %d¥n”,total);
return 0;
}
制御変数
初期値
最終値
インクリメント
プログラム例
#include <stdio.h>
int main(void)
{int i,total;
total=0;
for (i=1; i<=10; i++)
{total=total+i;
}
printf(”total= %d¥n”,total);
return 0;
}
#include <stdio.h>
int main(void)
{int i,total;
total=0;
i=1;
while (i<=10)
{total=total+i;i++;
}
printf(”total= %d¥n”,total);
return 0;
}
do-while 文
(6) do-while 文
① do
{
【文】;
・ ・ ・
【文】;
} while (【式】 ) ;
【式】
【文】
真
偽
② 【式】が真の間, 【文】を繰り返し実行
する点は,whileと同じ
do-whileは,繰り返し処理の後で,
式を判定
セミコロン
do-while 文
(6) do-while 文
③
◆ for (i=11; i<=10; i++) {【文】}
◆ i=11;
while (i<=10) {【文】}
では,文は一回も実行されない
◆ i=11;
do {【文】} while (i<=10);
では,文は一回実行される
プログラム例 (1から10まで合計)
#include <stdio.h>
int main(void)
{int i,total;total=0;
i=1;
do
{total=total+i;i++;
} while (i<=10);
printf(”total= %d¥n”,total);
return 0;
}
break 文
(7) break 文
① break文は,繰り返しから抜け出し,次の処理へ移る
② 例えば,
for (・・・)
{
・・・
break;
・・・
};
【次の文】
外へ抜け出す
continue 文
(8) continue 文
① continue文は,繰り返しを中断し,繰り返しの先頭へ
② 例えば,
for (・・・)
{
・・・
continue;
・・・ (残り)
};
残りを飛ばして先頭へ戻る
プログラム例#include <stdio.h>
int main(void)
{int i,x;
for (i=1; i<=10; i++)
{scanf(”%d”,&x);
if (x==0) {break;}
if (x<0) {continue;}
printf(”positive %d¥n”,x);
}
printf(”End!¥n” );
return 0;
}
goto 文
(9) goto 文
① goto 【ラベル】;
ラベル付き文とは,
【ラベル】: 【文】
② 例えば,
int main(void)
{
・・・
if (n>0) {goto next;}
・・・
next:x=100;
・・・
}
直接ジャンプ
プログラム例 (素数の判定)
#include <stdio.h>
int main(void)
{int i,num;
scanf(”%d”,&num);
for (i=2; i<num; i++)
{if ((num % i) == 0) {break;}
}
if (i == num) {printf(”%d is prime¥n”,num);}
else {printf(”%d is not prime¥n”,num);}
return 0;
}