分享

C 之while循环

 长沙7喜 2018-04-16

二、语句执行过程

(1)计算作为循环控制条件表达式的值,得到逻辑真或假,假定用M表示。

(2)M为真,则执行了一遍循环体,否则离开循环,结束整个while语句的执行。

(3)循环体的所有语句执行结束后,自动转向第(1)步执行。

三、格式举例

(1) i=0;

    while (i<>

      ++i;

功能:当i的值小于10,重复执行++i语句

(2) cin>>x;

    whilex<>

      cin>>x;

功能:当输入的数据小于0时,重复读数据。

4.5  s=1 +2 +3……+n,当加到第几项时,s的值会超过1000

程序如下:

#include

using namespace std;

int main ()

{

 int n=0,s=0;

 while (s<>

 {

   ++n;

   s+=n;

 }

 cout<>

 return 0;

}

4.6  求两个正整数m,n的最大公约数。

分析:求两个整数的最大公约数可以采用辗转相除法。以下是辗转相除法的算法:分别用mnr表示被除数、除数、余数;

1)m除以n的余数r

2)r!=0,执行第3)步;若r==0,则n为最大公约数,算法结束。

3)n的值赋给m,将r的值赋给n;再求m除以n的余数r

4)转到第2)

#include

using namespace std;

int main ()

{

 int m,n,r;

 cin>>m>>n;

 r =m % n;

 while (r!=0)                  //也可以使用 while(r),c++0即真

 {

   m=n;

   n=r;

   r=m % n;

 }

 cout<>最大公约数='<><>

 return 0;

}

4.7   编一程序求满足不等式1+1/2 + 1/3 …+1/n >=5的最小n值。

分析:此题不等式的左边是一个求和的算式,该和式中的数据项个数是未知的,也正是要求出的。对于和式中的每个数据项,对应的通式为1/ii=12…n

所以可采用循环累加的方法来计算出它的值。设循环变量为i,它应从1开始取值,每次增加1,直到和式的值不小于5为止,此时的i值就是所求的n。设累加变量为s,在循环体内把1/i的值累加到s上。

根据以上分析,采用while循环编写出程序如下:

#include

using namespace std;

int main ()

{

 int i=0;

 float s=0; 

 while(s<5)>s的值还未超过5

 {

   ++i;

   s+=1.0/i;

 }

 cout<>

 return 0;

}

4.8  数据统计

   输入一些整数,求出它们的最小值、最大值和平均值(保留3位小数)。输入保证这些数都是不超过1000的整数。

   样例输入:2 8 3 5 1 7 3 6

   样例输出:1 8 4.375

【参考程序】

#include

int main()

{

 int x,n=0,min,max,s=0;

 while (scanf('%d',&x)==1)

 {

   s+=x;

   if (x

   if (x>max) max=x;

   ++n;

 }

 printf('%d %d %.3lf\n',min,max,(double)s/n);

 return 0;

}

·       【优化程序】

·       #include

·       #define INF 100000000

·       int main()

·       {

·          int x,n=0,min=INF,max=-INF,s=0;

·          while(scanf('%d',&x)==1)  

·                               //scanf('%d',&x)!=EOF,如果没数据可读,scanf返回EOF

·          {

·               s+=x;

·               if (x

·               if (x>max) max=x;

·               ++n;

·          }

·          printf('%d %d%.3lf\n',min,max,(double)s/n);

·          return 0;

·       }

最后,我们来更仔细地研究一下输入输出。研究对象就是经典的“A+B”问题:输入若干对整数,输出每对之和。假设每个整数不超过109,一共不超过106个数对。

 

     1种方法是:

    #include

    int main()

    {

      int a,b;

      while(scanf('%d%d',&a,&b)==2)

      printf('%d\n',a+b);

      return 0;

    }

2种方法也许更加常用(你再也不用记住%d%lf等恼人的占位符了):

   #include

   using namespace std;

   int main()

    {

     int a,b;

     while(cin >> a >> b )

       cout < a+b=""><>

     return 0;

}

·       【上机练习4.2

·       1、用while循环完成如下3题:

·         ①求s=1+2+3+4+…+10

·         ②求s=1+1/2+1/3+…+1/100

·         ③计算n!,其中n由键盘输入。

·       2、输入任意的自然数A, B, A , B的最小公倍数。

·       3、小球从100高处自由落下,着地后又弹回高度的一半再落下。求第20次着地时小球共通过多少路程?

·       4Faibonacci数列前几项为: 0,1,1,2,3,5,8,…,其规律是从第三项起每项均等于前两项之和。求前30,并以每行5个数的格式输出。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约