循环
while循环
语法形式:(表达式称为循环条件,语句称为循环体)
while ( 表达式 ) 语句;
循环体出现一条以上的语句应以复合语句形式出现
循环前必须给循环控制变量赋初值
循环体中必须要有改变循环控制变量的语句
判断最少进行了一遍
先计算表达式的值,在判断是否循环
一般来说循环语句都是关系表达式或者逻辑表达式
//求100以内整数和
#include <iostream>
using namespace std;
int main()
{
int n=1,sum=0;
while(n<=100)//循环条件
{
sum+=n;
n+=1;
}//循环体
cout<<"sum="<<sum<<endl;
return 0;
}
do-while循环
语法形式:(表达式称为循环条件,语句称为循环体)
do 语句 while ( 表达式 );
do语句最后必须用分号(;)作为语句结束
循环最少进行了一遍
do-while循环和while循环可以互相转换
//求输入的值的乘积
#include <iostream>
using namespace std;
int main()
{
int result=1,x=1;
do{
result*=x;
cin>>x;
}while(x!=0);
cout<<result;
return 0;
}
for循环
语法形式:(表达式1为初始化语句,2为循环条件,3为循环变量刷新,语句为循环体)
for (表达式1 ; 表达式2 ; 表达式3) 语句;
表达式1只进行1次,作用是给循环变量赋初值
表达式2相当于是for的循环条件
表达式3是重复执行的内容,通常是改变循环控制变量值的语句
可单独省略表达式1或3
也可以表达式1和3同时省略
//求100以内的整数和
#include <iostream>
using namespace std;
int main()
{
int sum=0,i;
for(i=1;i<=100;i++)
{
sum+=i;
}
cout<<sum;
return 0;
}
循环附加语句
break语句
语法形式为:
break;
break语句的作用是结束switch语句和循环语句的运行,跳到后续语句
break语句只能用在switch语句和循环语句(while、do、for)中,不得单独使用
//判断一个数是否为素数
#include <iostream>
using namespace std;
int main()
{
int i,x;
cin>>x;
for(i=2;i<x;i++)
{
if(x%i==0)
{
break;
}
}
if(i==x)
{
cout<<"YES"<<endl;
}else
{
cout<<"NO"<<endl;
}
return 0;
}
continue语句
语法形式为:
continue;
continue语句的作用是在循环体中结束本次循环,直接进入下一次循环
continue语句只能用在循环语句(while、do、for)中,不能单独使用
//求100以内的奇数和
#include <iostream>
using namespace std;
int main()
{
int i,result=0;
for(i=1;i<=100;i++)
{
if(i%2==0)
{
continue;
}
result+=i;
}
return 0;
}
循环的嵌套
一个循环体内包含有另一个循环语句时,就构成了循环的嵌套
循环语句(while、do、for)可以互相嵌套,嵌套层数没有限制,可以形成多重循环
使用多重循环时,嵌套的循环变量不能相同
//打印九九乘法表
#include <iostream>
using namespace std;
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
cout<<j<<"*"<<i<<"="<<i*j<<" ";
}
cout<<endl;
}
return 0;
}
循环语句的使用
计数型循环
计数型循环用于处理已知循环次数的循环过程
控制变量在每次循环时都要发生规律性变化(递增或递减),当控制变量达到预定的循环次数时,循环就结束
计数型循环常使用for语句
//求1到10的阶乘之和
#include <iostream>
using namespace std;
int main()
{
int result=0,i,temp=1;
for(i=1;i<=10;i++)
{
temp*=i;
result+=temp;
}
cout<<result<<endl;
return 0;
}
条件型循环
条件型循环就是用于处理循环次数未知的循环过程,称为不定次数循环"
在条件型循环中,由于事先不能准确知道循环的次数,因此循环控制是由条件来判定的。在每次循环时检测这个条件,当条件一旦满足,循环就结束
条件型循环常使用while语句和do-while语句
//求Π的近似值
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double pi=0,flag=1,fenmu=1,temp=1;
while(fabs(temp)>=1e-7)
{
pi+=temp;
flag=-flag;
fenmu+=2;
temp=flag/fenmu;
}
pi+=temp;//加上最后一项
cout<<pi*4<<endl;
return 0;
}
枚举算法(穷举算法)
从可能的集合中一一枚举各个元素,用给定的约束条件判定哪些是无用的,哪些是有用的。能使命题成立者,即为问题的解
基本思路:1. 确定枚举对象、枚举范围和判定条件 2. 一一枚举可能的解,验证是否是问题的解
//百钱买百鸡问题(一百块钱买一百只鸡,公鸡一只5元,母鸡一只3元,小鸡三只1元,求各应买多少只)
#include <iostream>
using namespace std;
int main()
{
int x,y,z;//x为公鸡数量,y为母鸡数量,z为小鸡数量
for(x=0;x<=20;x++)
{
for(y=0;y<=33;y++)
{
for(z=0;z<=100;z++)
{
if((z%3==0)&&(x+y+z==100)&&(5*x+3*y+z/3==100))
{
cout<<"公鸡="<<x<<",母鸡="<<y<<",小鸡="<<z<<endl;
}
}
}
}
return 0;
}
//下面列举的做法只用了两层循环效率更高
#include <iostream>
using namespace std;
int main()
{
int x,y,z;//x为公鸡数量,y为母鸡数量,z为小鸡数量
for(x=0;x<=20;x++)
{
for(y=0;y<=33;y++)
{
z=100-x-y;
if((z%3==0)&&(5*x+3*y+z/3==100))
{
cout<<"公鸡="<<x<<",母鸡="<<y<<",小鸡="<<z<<endl;
}
}
}
return 0;
}
迭代算法
迭代法是一种不断用变量的旧值递推新值的求解方法
基本思路:1. 确定迭代变量 2. 建立迭代关系式 3. 对迭代过程进行控制
//求斐波那契数列前40项
#include <iostream>
using namespace std;
int main()
{
int i,f1=0,f2=1,fn;
for(i=1;i<=40;i++)
{
fn=f1+f2;
f1=f2;
f2=fn;
cout<<f1<<" "<<endl;
}
return 0;
}