HOME->講習会->プログラミングセミナー->C++セミナー(初級)
繰り返す回数が予想することができるような処理にはfor文がありましたが,繰り返す回数が予想することができない場合にはwhile文というものがあります.
目次
・while文
・do-while文
・ループの中断とスキップ
・演習
while文
while文の基本文法は以下のようになっています.
while(条件式){
処理;
}
for文に比べて,シンプルな形をしています.while文は,条件式を満たすとき処理を繰り返すような動きをします.例えば,数学の未解決問題であるコラッツ予想(任意の自然数\(n\)に対して,奇数時\(3n+1\)をする,偶数時\(n/2\)を繰り返すと必ず1になる)というものがありますが,これを確かめるプログラムを書いてみます.
#include <iostream>
int main()
{
int n;
std::cin >> n;
while(n>1){
if(n%2==0){
n=n/2;
}
else{
n=3*n+1;
}
std::cout << n << std::endl;
}
}
こちらの実行して,好きな整数を入力してみましょう.そうすると,最後の行に1が出力されると思います.このように,処理が繰り返される回数が不明な場合にwhile文が用いられます.また,条件式を「n>1」のようにしていますが,「n!=1」でもよいと思われる方もいるかもしれません.0や負の整数を入力された場合に,「n!=1」では処理が行われてしまいますが,「n>1」にすると処理を行わないようにできます.本セミナーを終えて,実際にプログラミングをしていくときにはこのように,想定していない動作を回避するようにコードを書いていくことを心がけましょう.
do-while文
while文と似たようなもので,do-while文と呼ばれるものがあります.基本文法は以下のようになっています.
do {
処理;
} while(条件式);
while文と比べると,whileの部分が下の方に来ただけのように見えますが,do-while文は,条件式のチェックがwhile文が処理を実行する前に行われるのに対して,処理を実行した後に行われます.そのため,どのくらい繰り返されるかわからないけど,必ず1回は処理をしたいときに用いられます.例えば,負の値が入力されるまで,入力の2倍の数値を出力するプログラムを考えてみましょう.
#include <iostream>
int main()
{
double n;
do{
std::cin >> n;
std::cout << 2*n << std::endl;
} while(n<0);
}
ループの中断とスキップ
while文,do-while文はfor文と同様にcontinue文とbreak文が使用することができます.
演習
・do-while文を利用して,入力された2以上整数が素数であるか判定するプログラムを作成してください.