多层循环执行的过程是外层循环每执行一次,内层循环就完整的执行一遍。
#include<iostream.h>
void main()
{
int i,j,k;
cout<<"i"<<"j"<<"k"<<endl;
for(i=0;i<2;i++)
for(j=0;j<2;j++)
for(k=0;k<2;k++)
cout<<i<<j<<k<<endl;
}
这是一个三层循环,最外层循环每定一个i值时,第二层循环j从0~1执行两次循环;第二层循环的循环变量j每定一个值,第三层循环的k从0~1执行两次循环,第三层的循环体cout<<i<<j<<k;
共执行了2*2*2=8次循环。通过运行结果,可以非常清楚的了解循环过程。
例题一、打印乘法口诀表。
#include<iostream.h>
void main()
{
int i,j,k;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
cout<<j<<"*"<<i<<"="<<i*j<<" ";
cout<<endl;
}
}
用i控制行,用j控制列,需要两层循环。
例题二、两个乒乓球队比赛,各出3人,甲队为a,b,c三人,乙队为x,y,z三人,有人向队员打听比赛名单,a说他不和x比,c说他不和x、z比,请找出三对比赛选手的名单。
用穷举法。
#include<iostream.h>
void main()
{
char i,j,k;
for(i='x';i<='z';i++)
for(j='x';j<='z';j++)
if(i!=j)//a和b的对手不能是同一个人
for(k='x';k<='z';k++)
if(i!=k&&j!=k)//a,b,c的对手不能同一个人
if(i!='x'&&k!='x'&&k!='z')
//a的对手不是x,c的对手不是x和z
cout<<"顺序是"<<"a--"<<i<<" "<<"b--"<<j<<" "<<"c--"<<k;
}
i 是a的对手,j是b的对手,k是c的对手。
循环中的中途退出
break语句
1、break语句用在switch中时,使程序跳出switch而执行switch后的程序
2、break语句用在for、do-while和while中,可使程序终止循环而执行循环后的语句。通常break与if配合,即满足条件时便跳出循环。
例题三、输入一个数判断是否为素数。
素数是只能被1和自身整除的数。
#include<iostream.h>
void main()
{
int n;
cin>>n;
int i=2;
for(;i<n;i++)
if(n%i==0)
break;
if(i>=n)
cout<<"是素数";
else
cout<<"不是素数";
1、break语句不能用于循环语句或者switch语句之外任何语句中。
2、在多层循环中一个break只能跳出一层,而跳到最外层需要多个地方设置break。
continue语句
continue语句是跳过循环体中剩余语句而强行执行下一次循环,continue语句只用于循环体中,通常与if配合。
continue和break区别是,continue只结束本次循环,继续执行下一次循环,而break则是结束整个循环。
例题四、输出能被3和7整除的三位整数。
#include<iostream.h>
void main()
{
int i;
int count=0;
for(i=100;i<1000;i++)
{
if(i%3!=0) continue;
if(i%7!=0) continue;
count++;
cout<<i<<" ";
if(count%5==0)
cout<<endl;
}
}
continue对for循环,跳过循环体其余语句,转向循环增量表达式3的计算。对do-while和while循环,跳过循环体其余语句,转向循环条件的判定,继续判定是否循环。
循环嵌套时,break和continue只影响包含他们的最内层循环,与外层循环无关。