C++编程学习(第14天)
循环结构
循环结构主要由while语句、do...while语句和for语句构成。
while语句
while语句的一般形式为 while(表达式)语句
当指定的表达式为真(表达式为非0)时,执行while语句中的内嵌语句,即循环体。特点是先判断表达式,后执行语句,while循环成为当型循环。
使用while语句求1-100的和。
#include <iostream>
using namespace std;int main()
{int i = 1, sum = 0;while (i<=100){sum = sum + i;i++;}cout << "sum = " <<sum<< endl;
}//结果为:sum = 5050
需要注意的是,循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。如果不用花括号,则while语句的范围只到while后面的第一个分号处。
在循环体中应有使循环体趋向于结束的语句,没有结束语句,循环将永不结束。
do...while语句
do...while语句的特点是先执行循环体,然后判断循环条件是否成立,一般形式为 do 语句 while(表达式);
其先执行一次指定的语句,即循环体,然后判别表达式,当表达式的值为真(非0)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。
使用do...while语句求1-100的和。
#include <iostream>
using namespace std;int main()
{int i = 1, sum = 0;do{sum = sum + i;i = i + 1;} while (i <= 100);cout << "sum = " << sum << endl;
}//结果为:sum = 5050
for语句
C++中的for语句使用最为广泛和灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。
for语句的一般形式为 for(表达式1;表达式2;表达式3)语句
执行过程为
1、先求解表达式1
2、求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后求解表达式3,循环继续,求解表达式2的值。
3、求解表达式2,若其值为假(值为0),则结束循环,执行for语句下面的一个语句。
for语句最容易理解的格式为 for(循环变量赋初值;循环条件;循环变量增值)语句
其中的语句就是循环体,可以是一个简单的语句,也可以是一个用花括号抱起来的复合语句。
需要注意的是
1、for语句的一般格式中的表达式1可以省略,此时应在for语句之前给循环变量赋初值,省略表达式1时,其后的分号不能省略。
2、如果表达式2省略,即不判断循环条件,循环无终止的执行下去,也就是认为表达式2始终为真。
3、表达式3也可以省略,但此时应另外设法保证循环能正常结束。
4、可以省略表达式1和表达式3,只保留表达式2,即只给循环条件。
5、表达式一般是关系表达式(如i<=100)或逻辑表达式(如a<b && x<y),但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。
使用for语句求1-100的和。
#include <iostream>
using namespace std;int main()
{int sum = 0;for (int i = 1; i <= 100; i++) sum = sum + i;cout << "sum = " << sum << endl;
}//结果为:sum = 5050
循环的嵌套
一个循环体内又包含另一个完整的循环结构,成为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环
while循环、do...while循环和for循环可以互相嵌套
提前结束循环
有时需要在某种条件下使循环提早结束,这时可以用break语句和continue语句。
1、用break语句提前结束循环过程
一般格式为 bereak;
break语句用于循环体内,其作用是使流程从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。
需要注意的是,break语句只能用于循环语句和switch语句内,不能单独使用或用于其它语句中。
2、用continue语句提前结束本次循环
一般格式为 continue;
其作用为结束本次循环,即跳出循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。
区别:continue语句只结束本次循环,而不是终止整个循环的执行,而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
实例
1、用公式求圆周率Π的近似值:Π/4=1-1/3+1/5-1/7+...,直到最后一项的绝对值小于10的负七次方为止。
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;int main()
{int s = 1;double n = 1, t = 1, pi = 0;while (fabs(t) > 1e-7){pi = pi + t;n = n + 2;s = -s;t = s / n;}pi = pi * 4;cout << "pi = " << setiosflags(ios::fixed) << setprecision(8) << pi << endl;return 0;
}//结果为: pi = 3.14159245
2、找出100-200之间的全部素数。
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;int main()
{int n = 101, m, i, j=0;bool b;while (n<=200){m = sqrt(n);b = true;for (i = 2; i <= m; i++)if (n % i == 0){b = false;break;} if (b){cout <<setw(5)<< n;j++;if (j % 3 == 0)cout << '!' << endl;}n += 2;}return 0;
}
结果如下: