循环语句用于将某段代码执行若干次,循环语句有for循环、while循环和do…while循环三种.
6.1 for循环
1)for循环基本形式如下:
for (表达式1;表达式2;表达式3){
语句组;
}
2)执行步骤如下:
(1)计算表达式1.
(2)计算表达式2,若为true,则执行语句组,然后转到3,若为false,for语句结束.
(3)计算表达式3.
(4)转到(2).
(5)从for语句后面继续执行.
例题:连续输出26个字母:
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
for (int i = 0; i < 26; i++)
cout<<char('a' + i)<<" "; //'a' + i强制类型转换为char型
//语句组只有一句不用写{}
return 0;
}
输出:a b c d e f g h i j k l m n o p q r s t u v w x y z
3)如果循环控制变量定义在表达式1中,则其只在for语句内部起作用,不必担心循环控制变量重名.
int i = 5;
for (int i = 0; i < 26; i += 2) //循环控制变量并非每次只能加1
cout<<char('a' + i)<<" ";
cout<<endl;
cout<< i <<endl; //此处的i和for里的i无关
4)for循环里的表达式1和表达式3都可以是逗号连接的若干表达式.
for (int i = 15, j = 0; i > j; i -= 2, j += 3)
cout<< i <<","<< j <<endl;
例题:输入一个正整数,从大到小输出它的所有因子:
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int n;
cin >> n;
for(int i = n; i >= 1; i--){
if( n % i == 0)
cout<< i << " ";
}
return 0;
}
输入:18
输出:18 9 6 3 2 1
和if语句类似,for循环也可以嵌套for循环!!!
如果执行到死循环可以用break退出!!!
6.2 while循环和do…while循环
1)while循环基本形式如下:
while(表达式){
语句组;
}
2)执行步骤如下:
(1)判断"表达式"是否为真,如果为真转到(2)如果不为真则转(4)
(2)执行"语句组"
(3)转(1)
(4)while语句结束,执行while后面的语句
3)死循环形式如下:
while(true){
语句组;
}//死循环可以用break跳出;
例题:输入若干个不超过100的整数,输出其中的最大值,最小值和所有数的和。输入最后一个数为0标志着输入结束.
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int sum = 0, maxN = 0, minN = 1000, n;
cin >> n;
while ( n ){
if ( n > maxN)
maxN = n;
if ( n < minN)
minN = n;
sum += n;
cin >> n;
}
cout<< maxN <<" "<< minN <<" " << sum << endl;
return 0;
}
输入:4 8 13 0
输出:13 4 25
例题:使用牛顿法求一个数a的平方根
迭代公式为:
X1 = a / 2;
Xn+1 = (Xn + a / Xn) / 2;
直到Xn+1 - Xn小于某个数,停止迭代
#include <iostream>
#include <cstdio>
using namespace std;
#define EPS 0.001 //控制精度
int main(){
double a;
cin >> a;
if ( a > 0){
double x = a / 2, lastX = x + 100 + EPS;
while( x - lastX > EPS || lastX - x > EPS){
lastX = x;
x = ( x + a / x) / 2;
}
cout << x <<endl;;
}
else{
cout<<"illegal" <<endl;
}
return 0;
}
输入:2
输出:1.41421
4)do…while循环形式如下:
do{
语句组;
}while(表达式);
5)执行步骤如下:
(1)执行语句组
(2)判断表达式是否为真,如果为真继续执行表达式,否则循环执行结束.
例题:输出所有1-10000以内的2的整数次幂:
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int n = 1;
do {
cout << n <<" ";
n = n * 2;
}while(n < 10000);
return 0;
}
6.4 循环结构中的break和continue
6.4.1 break关键字
1)break关键字用来跳出循环,如果是嵌套循环,则退出直接包含它的那一重循环.
int n = 0;
while(true){
if( n > 100)
break;
++n;
}
cout<< n <<endl; //输出101
6.4.2 continue关键字
1)continue关键字用来立即结束本次循环,并回到循环开头判断是否要执行下一次循环。如果是嵌套循环,则结束直接包含它的那一重循环.
for( int i = 1; i <= 10; i++){
if( i % 2 == 0)
continue; //如果判断为真不执行后面的语句
cout << i <<" ";
}
输出:2 4 6 8 10
例题:求斐波那契数列的第k个数
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int k;
cin >> k;
int current = 1, last = 1, temp;
for(int i = 2 ; i < k; ++i){
temp = current;
current = current + last;
last = temp;
}
cout << current <<endl;
return 0;
}
输入:4
输出:3