循环语句

三种循环语句:for循环,while循环,do while循环

for循环.png

while语句.png

do while 语句.png

一、三种算法的共性和特性

1.共性:初值(表达式1),终值(表达式2),步长(表达式3)
2.特性:
1)计数循环(已知循环次数):for循环
2)非计数循环(未知循环次数):while循环,dowhile循环(也可转化为计数)
3)dowhile循环:必执行一次

二、与循环有关的算法:累加累乘算法,递推算法,枚举算法

累加累乘算法

核心算法:sum = sum + p
步骤:
1.找到项与项数
2.累加或累乘
基本算法:

    int i, sum = 0, n;  //定义变量
    scanf("%d", &n);  
    for ( i=1; i <= n ; i++){  
        sum += i;         //累加
    }
    printf("%d", sum);  // 输出sum

优点:用户输入n
缺点:1.不能任意计算数的和
2.n过大时,效率过低

改进算法:
1.预先设定n

    int i, sum = 0;  //定义变量
    for ( i=1; i <= 100 ; i++){  
        sum += i;         //累加
    }
    printf("%d", sum);  // 输出sum

2.用户输入m(增加灵活性)

    int i, sum = 0, m;
    for ( i=0; i <5; i++){  // i 是计数器
        scanf("%d", &m);
        sum += m;
    }
    printf("%d", sum);

3.首尾相加法1(提高效率)

    int i,j,sum = 0;
    for ( i=1,j=100; i <= 50,j >= 51;i++,j--){
        sum = sum + i+ j;
    }
    printf("%d", sum);

4.首尾相加法2(提高效率)

    int i,j,sum = 0;
    for ( i=1,j=100; i < j; i++,j--){
        sum = sum + i+ j;
    }
    printf("%d", sum);

5.累乘(初值 i = 1而不是0)

    int i, sum = 1, n;  //定义变量
    scanf("%d", &n);  
    for ( i=1; i <= n ; i++){  
        sum *= i;         //累乘
    }
    printf("%d", sum);  // 输出sum

进阶算法:计算累乘的累加
计算1+1 * 2+1 * 2 * 3+......+1 * 2 * 3 * ... *n



算法1:看每项的结构
第1项: 1! , 第2项: 2! , 第3项: 3! , ... 第n项: n!

    int i, sum = 0,n;
    scanf("%d", &n);
    for ( i = 1; i <= n; i++){
        int p = 1,j;
        for ( j = 1; j <= i; j++){
            p = p * j;                      //累乘算法
        }
        sum += p;                       //累加算法
    }
    printf("sum = %d", sum);
    return 0;
}

算法2:看项与项之间的关系
p = p * i

    int i, sum = 0,n,p=1;
    scanf("%d", &n);
    for ( i = 1; i <= n; i++){
        p = p * i;                          // 递推算法
        sum += p;                       //累加算法
    }
    printf("sum = %d", sum);
递推算法

核心算法:p = p * i
两种方法:
1.正向顺推:斐波那西数列
2.反向逆推:猴子吃桃问题
步骤:
1.找到项
2.找到项与项之间的关系

枚举算法

核心:通过已知条件缩小可能的范围,逐一检查每个可能值
步骤:
1.找到对象
2.确定范围
3.设定条件
4.检验结果
实例:士兵报数问题


算法1:假定范围为5000

     int x;
     for ( x = 1; x < 5000; x++){//5000无依据
         if ( x% 5==1 && x % 6== 5 && x % 7 == 4 && x % 11 == 10){
             printf("x = %d\n", x);

         }

缺点:
1.显示了所有结果
2.5000没有依据

算法2:跳出循环

     int x;
     for ( x = 1;  ; x++){//5000无依据
         if ( x% 5==1 && x % 6== 5 && x % 7 == 4 && x % 11 == 10){
             printf("x = %d\n", x);
             goto End; //无条件转向语句
             //break; ( continue)
             // exit(0); 强制退出函数 #include <stdlib.h>
         }

算法3:标志变量find

     int x;
     int find = 0;
     for ( x = 1; !find ; x++){//find == 0; find != 1 不如!find
         if ( x% 5==1 && x % 6== 5 && x % 7 == 4 && x % 11 == 10){
             printf("x = %d\n", x);
             find = 1;
         }
     }

算法4:改用do while语句

     int x = 1;
     do {
         x++;
     }while ( !(x% 5==1 && x % 6== 5 && x % 7 == 4 && x % 11 == 10));
     printf("x = %d\n", x);

三、如何选择循环

1.嵌套循环,计数循环多使用for循环
2.无限次输入,灵活条件多使用while循环
3.必执行一次多使用dowhile循环

四、选择之后如何设计循环

1.找到循环体(需要循环的内容)
2.找到初值(初始条件),终止(终止条件),步长(转化条件)

五、总结

1.三种循环:for,while,do...while
2.三种算法:累算法,递推算法,枚举算法
3.根据题目要求,选择并设计循环语句

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容