6. 循环语句


循环语句用于将某段代码执行若干次,循环语句有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 = 0whiletrue{
	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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值