第五周:循环控制

简介: 编程中的基础噢

阶乘

1.n! = 1×2×3×4×...×n

2.写出一个程序,让用户输入n,然后计算输出n!

3.变量:显然读用户的输入需要一个int的n,然后计算的结果需要用一个变量保存,可以是int的factor,在计算中需要有一个变量不断地从1递增到n,那可以是int的i

intn;

scanf("%d",&n);

intfact=1;

inti=1;

for( i=1;i<=n; i++){

   fact*=i;

}

printf("%d!=%d\n",n,fact);

5.1 for循环(第三种循环)

for循环像是一个计数循环:设定一个计数器,初始化它,然后在计数器到达某值之前,重复执行循环体,而每执行一轮循环,计数器值以一定 步进 进行调整,比如加一或者减一

例如:

for(i=0;i<5;i++){

 printf("%d",i);

}

for(初始动作;条件;每轮的动作){

}

//for中的每一个条件都是可以省略的,for(;条件;) == while(条件)

for = 对于

for(count = 10; count > 0; count-- )

可以解读成:对于一开始的count = 10,当count > 0的时候,重复做循环体,每一轮循环在做完循环体内语句后,使得count--

小套路

做求和的程序时,记录结果的变量应该初始化为0,而做求积的变量时,记录结果的变量应该初始化为1

循环控制变量i只在循环里被使用了,在循环外面它没有任何用处。因此,我们可以把变量i的定义写到for语句里面去

尝试(try)

  1. 1×1还是1,所以程序的循环需不需要从1开始,那么改成多少开始合适呢?这样修改之后,程序对于所有的n都正确吗?这样的改动有价值吗?
  2. 除了可以从1乘到n来计算n!,还可以从n乘到1来计算吧?试试换个方向来计算n。这时候,还需要循环控制变量i吗?

for == while

for( inti=1;i<=n;i++ ){

   fact*=i;  

}

-------------------------------------------

inti=1;

while(i<=n){

   fact*=i;

   i++;

}

循环次数

for( i = 0; i < n; i++)

这样循环的次数是n,而循环次数结束以后,i的值是n。循环的控制变量i,是选择从0开始还是从1开始,是判断 i

Tips for Loops(小贴士循环)

  1. 如果有固定次数,用for
  2. 如果必须执行一次,用 do while
  3. 其他情况用while

5.2循环控制

素数

只能被1和自身整除的数,不包括1

break   VS   continue

  1. break:跳出循环
  2. continue:跳过循环这一轮剩下的语句进入下一轮
  3. 都只能对它所在的那层循环生效

嵌套的循环

  1. 意思:循环的里面还是循环
  2. 嵌套循环时的break只会跳出当前所在的循环,如果嵌套了多层循环就会被卡在下一层循环上而无法真正的跳出所有循环

100以内的素数

如何写程序输出100以内的素数?

#include

intmain()

{

   intx;

   //我们需要有一个循环,从 1 到 100

   for(x=2; x<=100; x++){

       inti;

       intisPrime=1; // x是素数

       for ( i=2; i<x; i++ ) {

           if ( x%i==0 ) {

               isPrime=0;

               break;

           }

       }

       //当它是素数的时候就输出出来,不是素数就不要输出任何东西了

       if ( isPrime==1 ) {

           printf("%d ", x);

       }

   }

   return0;

}

凑硬币

如何用1角、2角和5角的硬币凑出10元以下的金额?

#include

intmain()

{

   intx;

   intone, two, five;

   intexit=0;

   scanf("%d", &x);

   for ( one=1; one<x*10; one++ ) {

       for ( two=1; two<x*10/2; two++ ) {

           for ( five=1; five<x*10/5; five++ ) {

               if ( one+two*2+five*5==x*10 ) {

                   printf("可以用%d个1角加%d个2角加%d个5角得到%d元\n",

                          one, two, five, x);

                   exit=1;

                   break;

               }

           }

           if ( exit==1 ) break;

       }

       if ( exit==1 ) break;

   }

   return0;

}

5.3循环应用

正序分解整数

  1. 输入一个非负整数,正序输出它的每一位数字
  2. 输入:13425
  3. 输出:1 3 4 2 5

分解整数输出(未解决结尾空格问题版本)

intx;

scanf("%d",&x);

do{

  intd=x%10;

   printf("%d",d);

       x/=10;

}while( x>0);

printf("\n");

//(未解决结尾空格问题版本)

-----------------------------------------

intx;

scanf("%d",&x);

do{

  intd=x%10;

   printf("%d",d);

       if( x>9){

          printf(" ");

       }

       x/=10;

}while( x>0);

printf("\n");

-----------------------------------------------

   (如果有一个mask的话)

intx;

scanf("%d",&x);

x=13425;

intmask=10000;

do{

  intd=x%10;

   printf("%d",d);

       if( x>9){

          printf(" ");

       }

       x%=mask;

       mask/=10;

}while( mask>0);

printf("\n");

---------------------------------------------------

//   (计算x的位数)

x=12345;

intmask=10000;

intn=0;

do{

 x/=10;

     n++;

}while( x>0);

printf("n = %d\n",n);

求最大公约数

  1. 输入两个数a和b,输出它们最大的公约数
  2. 输入:12,18
  3. 输出:6
  4. 枚举方法:过于麻烦,耗费较多资源

#include

intmain()

{

inta,b;

intmin;

scanf("%d %d", &a, &b);

if ( a<b ) {

min=a;

} else {

min=b;

}

intret=0;

inti;

for ( i=1; i<min; i++ ) {

if ( a%i==0 ) {

if ( b%i==0 ) {

ret=i;

}

}

}

printf("%d和%d的最大公约数是%d.\n", a, b, ret);

return0;

}

辗转相除法

  1. 如果b等于0,计算结束,a就是最大的公约数;
  2. 否则,计算a除以b的余数,让a等于b,而b等于那个余数;
  3. 回到第一步

inta,b;

intt;

scanf("%d %d",&a,&b);

intoriga=a;

intorigb=b;

while( b!=0 ){

   t=a%b;

   a=b;

   b=t;

}

printf("%d和%d的最大公约数是%d",orida,origb,a);


目录
相关文章
定义一个时钟类(TimeDemo),属性有:时、分、秒(默认值10时30分),方法有展示当前时间、过1秒,过1分钟,过1小时后的时分秒;在测试类中实现过10秒,过10分,过10小时后的时间展示
定义一个时钟类(TimeDemo),属性有:时、分、秒(默认值10时30分),方法有展示当前时间、过1秒,过1分钟,过1小时后的时分秒;在测试类中实现过10秒,过10分,过10小时后的时间展示
413 0
|
C++
2014秋C++第9周项目5参考-循环填充题
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703。课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。  【项目5:程序填充题】在程序中横线上填上恰当的成分,使完成题目要求的功能: 1.输出1000以内能被3整除且个位数为6的所有整数。 #include &lt;iostream&gt; using
1104 0
|
C++
2014秋C++第9周项目1参考-利用循环求和
课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703。课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。   【项目1:利用循环求和】求1000以内所有偶数的和 要求:请编出3个程序来,分别用三种循环语句完成,注意体会各种循环语句的执行过程及语法特点。 参考解答://用for循环完成 #include &
1079 0
|
C++
C++第10周项目1参考——利用循环求和
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 【项目1:利用循环求和】求1000以内所有偶数的和//用for循环完成 #include &lt;iostream&gt; using namespace std; int main( ) { int sum=0,i; for(i=2;i&lt;=1000;i+
1047 0
|
C++
C++第12周项目2——分段函数
课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565 【项目2-求解分段函数的值】 参考解答: #include&lt;iostream&gt; using namespace std; const double x1=0.3, x2=0.8; //定义为全局常变量,方便,易维护 double f(double);
1197 0
|
9月前
|
搜索推荐 Python
为什么我们需要循环控制
在计算机编程中,循环控制是一种非常基础和重要的编程结构。通过循环控制,我们可以实现重复执行某段代码,直到满足特定的条件为止。循环控制不仅简化了编程过程,还提高了代码的效率,使得复杂的计算或任务能够得以高效完成。
94 1
循环控制
break控制语句、continue控制语句
76 0
循环控制

热门文章

最新文章