第五周:循环控制

简介: 编程中的基础噢

阶乘

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);


目录
相关文章
|
6月前
Cron表达式每隔两小时执行一次
Cron表达式每隔两小时执行一次
273 1
|
3月前
|
运维 Serverless 网络安全
函数计算产品使用问题之函数运行时间大于24小时该如何解决
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
C语言
编写一个程序, 给出两个时间,计算出两个时间之差,如给出1120表示11:20,1330表示13:30, 将时间间隔以分钟为单位输出。
这是一个C语言程序,它接收两个时间(小时:分钟格式)作为输入,然后计算并输出两个时间之间的差值。代码包括输入处理、时间转换为分钟以及计算时间差。程序运行结果展示了一个具体的示例时间差。
55 0
|
6月前
|
搜索推荐 Python
为什么我们需要循环控制
在计算机编程中,循环控制是一种非常基础和重要的编程结构。通过循环控制,我们可以实现重复执行某段代码,直到满足特定的条件为止。循环控制不仅简化了编程过程,还提高了代码的效率,使得复杂的计算或任务能够得以高效完成。
64 1
wustojc2011计算终止时间
wustojc2011计算终止时间
40 0
|
算法 Python
通过初始时间和流逝的分钟数计算终止时间
通过初始时间和流逝的分钟数计算终止时间
99 0
|
算法 C++
C++——循环控制强化训练
C++——循环控制强化训练
|
PHP 开发者
循环控制|学习笔记
快速学习循环控制
循环控制|学习笔记
循环控制
break控制语句、continue控制语句
59 0
循环控制