for语句 |
---|
while语句 |
do-while语句 |
循环嵌套 |
1.语句格式:
a.for(控制变量初始化表达式;条件表达式;增量表达式)
ex.
for(i=1;i<=100;++i)
for(i=100;i>=1,--i)
按所示数列改变控制变量值:99、88……11、0,增量为-11
for(int i=99;j>=0;j-=11)
控制变量i和j共同进行循环控制,i从1变到99,从2变到100,增量均为2
for(int i=1,j=2;i<=99&&j<=100;i+=2;j+=2)
注:可以再for循环“控制变量初始化语句”声明变量,这些变量只在for循环结构中有效,离开了该for结构,变量就无效了。
#include<iostream>
using namespace std;
int main()
{
int sum=0;
for(int i=1;i<=100;++i)//i初始值为1,终值为100,每次增量为1
sum+=i;
cout<<sum;
return 0;
}
for循环计算n!
#include<cstdio>
using namespace std;
int main()
{
long long s=1;//Noip2010开始C++语言long long允许使用
int n;//n不能定义为long long,否则for语句死循环
scanf("%d",&n);
for(int i=1;i<=n;++i)//若s定义为int,当n=13时s的值就溢出了
s*=i;
printf("%lld\n",s);
return 0;
}
2.语句格式
while(条件表达式)
ex.
(1)i=0;
while(i<10)
++i;(重复执行)
(2)while(cin>>x,x<0)//相当于cin>>x;while(x<0)cin>>x;
注:while括号中可以包含多个语句,中间用逗号隔开,但是只判断最后一个语句是否为真;
ex.while(x>10,x==10,x<10)
如果x<10,则继续执行循环,否则退出循环。
最大公约数
法一:
#include<iostream>
using namespace std;
int main()
{
int m,n,gcd;
cin>>m>>n;
gcd=m>n?n:m;//注意此处的写法
while(gcd>1&&(m%gcd!=0||n%d=0))
gcd--;//每次减一寻找最大公约数
return 0;
}
法二:辗转相除法
#include<iostream>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
int r=m%n;
while(r!=0)
{
m=n;
n=r;
r=m%n;
}
cout<<"最大公约数="<<n<<endl;
return 0;
}
3.语句格式
do
{
}
while(条件表达式);
在do语句的循环体中也可使用break语句,用它来非正常结束循环的执行
校体操队到操场集合,排成每行两人,最后多出一人;拍成每行三人,也多出一人;分别按每行排4,5,6人,都多出一人;当排成每行七人时,正好不多。求体操队至少多少人~
#include<iostream>
using namespace std;
int main()
{
int x=0;
do
{
bool yes=true;
x+=7;
if(x%2!=1)yes=false;
if(x%3!=1)yes=false;
if(x%4!=1)yes=false;
if(x%5!=1)yes=false;
if(x%6!=1)yes=false;
}while(yes==false);//直到yes的值为真
cout<<"All="<<x;
return0 0;
}
程序中对每个x值,都先给yes赋真值,只有在循环体各句进行判断时,都得到“通过”才能保持真值。
4.循环嵌套
ex.
求s=1!+2!+3!+4!+……+10!
#include<iostream>
using namespace std;
int main()
{
int s=0;
for(int i=1;i<=10;++i)
{
int t=1;
for(int j=1;j<=i;++j)//求i!
t*=j;
s+=t;//累加i!
}
cout<<s;
return 0;
}