第二十一篇:循环语句while

while循环

首先判断while后面的表达式的值,若表达式的值为真,则执行while的内嵌语句(即循环体)一次;然后重复以上过程,直到表达式的值为假时,才退出循环,接着执行循环体语句后面的其它程序语句。

//求恰好使s=1/1+1/2+1/3+…+1/n的值大于10时n的值
#include<iostream>
using namespace std;//命名空间
int main()

 double s = 0;//结果
 int n = 0;//除数
 while(s <=10)//这个while中条件为true为真就始终执行
 {    
  n++;//这个给被除数
  s+=1.0/n;//这个为总数
 }
 cout<<"n="<<n<<endl;//输出
 return 0;
}

do-while循环

首先执行do-while的内嵌语句(循环体语句)一次,然后再判断while后面的表达式的值,若表达式的值为真,则重复执行do-while的内嵌语句,如此反复,直到表达式的值为假时,循环结束,执行while后面的语句。

//求两个正整数mn的最大公约数

/*对于5231775569两个数,你能迅速地求出它们的最大公约数吗?

先用较大的75569除以52317,得商1,余数23252,再以52317除以23252,得商2,余数是5813

再用23252做被除数,5813做除数,正好除尽得商数4

这样5813就是7556952317的最大公约数。*/

#include<iostream>//Euclid方法

using namespace std;

int main()

{  

int a0,a1,r;//定义三个整数

cin>>a0>>a1;//

do

{     

r=a0%a1;

cout<<"Start:"<<a0<<"  "<<a1<<"  "<<r<<endl;

a0=a1;

a1=r;

cout<<"End:"<<a0<<"  "<<a1<<"  "<<r<<endl;

}while(r!=0);   

cout<<"最大公约数:"<<a0<<endl;

return 0;

}

 

/*比如说有要求ab两个整数的最大公约数,ab,那么我们先用a除以b,得到商8,余数r1a÷bq1r1

我们当然也可以把上面这个式子改写成乘法式:abq1r1------

如果r10,那么b就是ab的最大公约数3

要是r10,就继续除,用b除以r1

我们也可以有和上面一样的式子:br1q2r2-------

如果余数r20,那么r1就是所求的最大公约数3

为什么呢?因为如果②式变成了br1q2,那么b1r1的公约数就一定是a1b的公约数。

 

a÷bq1r1

abq1r1

 

b÷r1q2r2

b=r1q2r2

b=r1q2(公因数自己领悟吧,呵呵)

 

r1÷r2q3r3

r1=r2q3

 

这是因为一个数能同时除尽br1,那么由①式,就一定能整除a,从而也是a1b的公约数。

反过来,如果一个数d,能同时整除a1b,那么由①式,也一定能整除r1,从而也有db1r1的公约数。

这样,ab的公约数与br1的公约数完全一样,那么这两对的最大公约数也一定相同。

b1r1的最大公约数,在r10时,不就是r1吗?所以ab的最大公约数也是r1了。

有人会说,那r2不等于0怎么办?那当然是继续往下做,用r1除以r2,……直到余数为零为止。

在这种方法里,先做除数的,后一步就成了被除数,这就是辗转相除法名字的来历吧。?*/

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/GodPan/articles/3229135.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值