第3章 (第3章 C++程序设计初步(4)
7 、 循环结构和循环语句
1 用土办法求1+2+3+4+5
int s;
s=1+2+3+4+5;
cout<<s<<endl;
return 0;
2 高级方法求1+2+3+。。。+10(while)
语法
While(表达式)
{
语句;
}
首先计算表达式的值,如果值为非0则执行{}中的语句(如果只有一条语句,可不加{})执行后继续计算表达式的值。直到表达式的值为0,循环结束。
#include
using namespace std;
int main()
{
int s=0,i=1;
while(i<=100)
{
s=s+i;
i++;
}
cout<<s<<endl;
return 0;
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a4e5fb6f2376ef87104bc0a9bf11ece5.png)
循环注意的问题:
循环中语句的顺序有可能影响执行结果。
在循环时特别注意第1次执行与最后一次执行时,每个变量的情况。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d5a833f2ea102936152c9a0405bb3ff9.png)
While循环先判断,后执行。有可能一次循环也不做。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1f0f368a19ff15429d2e55d5bc6f5e05.png)
3 do…while
语法
Do{循环体语句}while(表达式); 最后有一个分号
首先执行一次循环体语句。计算While后表达式的值,如果为真则继续执行循环体语句。否则跳出循环。
先执行后判断。(do…while至少执行一次循环体)
#include
using namespace std;
int main()
{
int s=0,i=1;
do
{
s=s+i;
i++;
}while(i<=100);
cout<<s<<endl;
return 0;
}
4 循环体中可否有多条语句?可以。
如果循环体只有一条语句,不必加{}
如果有多条语句,必须使用{}—》复合语句
建议:即使只有一条语句也使用{}。程序的可读性更好。
5 循环体中可否加判断(奇数和与偶数和)
循环体可以是任意符合C++语法规则的语句
#include
using namespace std;
int main()
{
int s=0,i=1;
while(i<=100)
{
if(i%2==1)
{
s=s+i;
}
i++;
}
cout<<s<<endl;
return 0;
}
6 千万不要造成死循环。(dead loop)循环永远不能结束。
大多数循环一般都有使循环趋于 结束的语句
此时使循环趋于结束的i++丢掉后。循环无法结束。
#include
using namespace std;
int main()
{
int s=0,i=1;
while(i<=100)
{
if(i%2==1)
{
s=s+i;
i++;
}
}
cout<<s<<endl;
return 0;
}
以上程序i为2时无法执行i++.也因此永远无法到达100.也造成死循环
7 循环三部分(循环之前做一次的,判断是否循环的,使循环趋于结束的)
#include
using namespace std;
int main()
{
int s=0,i=1;// 循环之前做一次。功能准备工作
while(i<=100)//条件判断,判断是否循环的
{
s=s+i;
i++; //使循环趋于结束的语句
}
cout<<s<<endl;
return 0;
}
8 使用最广泛的循环(for)
▪for语句的一般格式为
▪for(表达式1;表达式2;表达式3) 语句 (此处有两个分号)
▪ 它的执行过程如下:
▪(1) 先求解表达式1。
▪(2) 求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。
▪(3) 求解表达式3。
▪(4) 转回第(2)步骤继续执行。
▪(5) 循环结束,执行for语句下面的一个语句。
#include
using namespace std;
int main()
{
int s=0,i;
for(i=1;i<=100;i++)
{
s=s+i;
}
cout<<s<<endl;
return 0;
}
三种循环语句 while do…while for
While与for都是先判断,后执行循环体。只要是先判断后执行都有可能一次也不执行。
Do…while后判断。
9 循环中是否可以是循环??(九九表)如果循环体依然是循环语句。循环的嵌套。For.while,do…while可以互相嵌套。
两个循环不是并列的关系。分内层与外层。
由两个循环变量来控制。
外层循环变量变化一次。内层循环从头到尾变化一遍。
#include
using namespace std;
int main()
{
int j,i;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
cout<<j<<""<<i<<"="<<ij<<" “;
}
cout<<endl;
}
return 0;
}
#include
using namespace std;
int main()
{
int j,i=1;
//外层循环与内层循环可以是不同的循环
while(i<=9)
{
for(j=1;j<=i;j++)
{
cout<<j<<”"<<i<<"="<<ij<<" ";
}
cout<<endl;
i++;
}
return 0;
}
10 循环中改变主意了怎么办(结束这次循环与结束整个循环。比如操场跑圈时遇到特殊情况)
break continue
break语句的功能结束整个循环。(断路)
continue语句功能结束本次循环。如果循环体有多条语句,遇到continue.掠过后面的语句,直接进入下一次循环。(短路)
求1到100的所有整数的和,当和超过3000时循环不再继续。
#include
using namespace std;
int main()
{
int s=0,i=1;
for(i=1;i<=100;i++)
{
s=s+i;
if(s>3000)
{
break;
}
}
cout<<s<<endl;
return 0;
}
#include
using namespace std;
int main()
{
int s=0,i=1;
for(i=1;i<=100;i++)
{
if(i%7==0)
continue;
s=s+i;
}
cout<<s<<endl;
return 0;
}
11 求π的值
π/4≈1-1/3+1/5-1/7+…
注意的问题。精度可自行掌握。整数与整数做除法,得到的结果为整数。
#include
using namespace std;
int main()
{
// 1-1/3+1/5-1/7+…
double i=1,pi=0.0;
int sign=1;
while(i<=50000)
{
pi=pi+sign/i;
i+=2;
sign*=-1;
}
pi*=4;
cout<<pi<<endl;
return 0;
}
12 Fibonacci数列前20个数。
1 1 2 3 5 8 13 21…。。
F1 F2 F3
1 1 2
1 2 3
2 3 5
#include < iostream>
using namespace std;
int main()
{
int f1,f2,f3,i=3;
f1=1;
f2=1;
cout<<f1<<endl;
cout<<f2<<endl;
while(i<=20)
{
f3=f1+f2;
cout<<f3<<endl;
f1=f2;
f2=f3;
i++;
}
return 0;
}
#include
using namespace std;
int main()
{
int f1,f2,i=1;
f1=1;
f2=1;
cout<<f1<<endl;
cout<<f2<<endl;
while(i<=9)
{
f1=f1+f2;
f2=f1+f2;
cout<<f1<<endl;
cout<<f2<<endl;
i++;
}
return 0;
}
作业:求e的值 e=1+1/1!+1/2!+1/3!..(精度自定)