for语句
一、语句格式
格式1
说明:语句1是for循环语句的循环体,它将在满足条件的情况下被重复执行。
格式2
说明:循环体部分由多个语句构成,应由一对花括号括起来,构成一个语句块的形式程序风格提示:写for循环语句时,循环体的语句相对于for缩进两格。
无;
• 二、语句执行过程
• for语句的执行过程可由以下4步来描述。
• (1)执行“控制变量初始化语句”,使控制变量获得一个初值。
• (2)判断控制变量是否满足“条件表达式”,若满足条件则执行一遍循环体,否则结束整个for语句,继续执行for循环下面的句子。
• (3)根据增量表达式,计算出控制变量所得到的新值
• (4)自动转到第(2)步。
for语句中表达式1、表达式2、表达式3类型任意 ,都可省略,但分号“;”不可省
无限循环: for(; ?
-
int i; for(i=0;;)等价于for(int i=0;;)
-
当循环控制条件较为复杂,不再是简单的小于某数,可以在for括号里省去表达式2,花括号里可输入控制条件。
-
同理语句3的增量表达式也可放入花括号中,进行判断升级。 如果要进行for循环的多次输入在花括号里进行cin>>
,若是有类似每次循环都要进行n的重复初始数值利用,可在花括号最后再次定义n=0。 -
循环嵌套时,注意花括号的使用,输入输出是否在花括号内。
利用for循环,分别计算1—100中奇数的和、偶数的和。
【方法1】根据例4.2的分析,很容易找到所有的偶数和奇数,继而计算其和。
假设用变量sum1和sum2分别存放偶数与奇数和,
累加就是在sum1或sum2的基础上,加上一个数字,改变累加变量的值;
再加上一个数字,改变累加变量的值;......;
如此重复下去。
程序如下:
#include <iostream>
using namespace std;
int main()
{
int i,sum1=0,sum2=0; //sum1、sum2分别偶数和,奇数和,初始化为0
for (i=1;i<=100; ++) //i取1至100之间的每个整数,都重复操作
if (i%2==0) sum1+=i; //偶数累加到sum1中
else sum2+=i; //奇数累加到sum2中
cout<<sum1<<" "<<sum2; //输出偶数和、奇数和
return 0;
}
【方法2】偶数从2开始每次递增2,奇数从1开始每次递增2,
for语句的循环变量初始化和循环变量增量两部分都可以使用逗号语句序列。
程序如下:
#include <iostream>
using namespace std;
int main()
{
int i,j,sum1=0,sum2=0;
for (i=2,j=1; i<=100; i+=2,j+=2) //生成偶数和奇数的初始值
{
sum1+=i; //偶数i累加到sum1中
sum2+=j; //奇数j累加到sum2中
}
cout<<sum1<<" "<<sum2; //输出偶数和、奇数和
return 0;
}
for语句可以转换成while结构
while循环
- 一、语句格式
格式1
注意,圆括号()后无;
说明:语句1是while循环语句的循环体,它将在满足条件的情况下被重复执行。
格式2
说明:循环体部分由多个语句构成,应由一对花括号括起来,构成一个语句块的形式。
程序风格提示:写while循环语句时,循环体的语句相对于while缩进两格。
- 二、语句执行过程
(1)计算作为循环控制条件表达式的值,得到逻辑真或假,假定用M表示。
(2)若M为真,则执行了一遍循环体,否则离开循环,结束整个while语句的执行。
(3)循环体的所有语句执行结束后,自动转向第(1)步执行。
三、格式举例
(1) i=0;
while (i<10)
++i;
功能:当i的值小于10,重复执行++i语句
(2) cin>>x;
while(x<0)
cin>>x;
功能:当输入的数据小于0时,重复读数据。
求两个正整数m,n的最大公约数。
【方法1】:求任意两个自然数m和n的最大公约数,可以想到其最大的可能就是两个数中的较小者min,最小可能是1。所以,可以设最大公约数gcd从min开始进行判断,若gcd>1并且没有同时整除m和n,那么就gcd-1,重复判断是否整除。
【参考程序】
#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%gcd!=0))
gcd--; //每次减1寻找最大公约数
cout<<gcd<<endl; //输出最大公约数
return 0;
【方法2】:求两个整数的最大公约数可以采用辗转相除法即欧几里德算法。对于任意两个自然数m和n,用m,n,r分别表示被除数、除数、余数,那么m和n的最大公约数等于n和r的最大公约数。以下是辗转相除法的算法:
1)求m除以n的余数r;
2)当r!=0,执行第3)步;若r==0,则n为最大公约数,算法结束。
3)将n的值赋给m,将r的值赋给n;再求m除以n的余数r。
4)转到第2)步
【参考程序】
#include <iostream>
using namespace std;
int main ()
{ int m,n;
cin>>m>>n;
int r =m % n;
while (r!=0) //也可以使用 while (r),c++中 非0即真
{
m=n;
n=r;
r=m % n;
}
cout<<"最大公约数="<<n<<endl;
return 0;
}
do-while语句
- do-while语句
格式1
注意,此处()后有;
说明:语句1是do-while的循环体。
特点:先执行循环体,后判断表达式(直到型)
说明:至少执行一次循环体 ,do-while可转化成while结构
格式2
说明:循环体部分由多个语句构成,应由一对花括号括起来,构成一个语句块的形式。
- 二、语句执行过程
(1)执行一遍循环体。
(2)求出作为循环条件的“条件表达式”的值,若为逻辑值真则自动转向第(1)步,否则结束do循环的执行过程,继续执行其后面的语句。
在do语句的循环体中也可以使用break语句,用它来非正常结束循环的执行。
while 与 do while 的比较
几种循环的比较
1.三种循环均可处理同一问题;
2.for和while语句为先判断后执行,do-while语句则 先执行后判断;
3.do-while和while 语句多用于循环次数不定的情况, for语句用于循环次数确定的情况; 4.do-while语句更适合第一次肯定执行的情况;
5.do-while和while语句只有一个表达式,用于控制循 环是否进行。for语句有三个表达式,不仅可以控 制循环是否进行,而且能为循环变量赋初值及不 断修改其值。故for语句功能更强,更灵活。