zoukankan      html  css  js  c++  java
  • 第7课

    第7课 - 循环语句

    1. 循环语句分析

    (1)循环语句的基本工作方式

    • 通过条件表达式判定是否执行循环体
    • 条件表达式遵循 if 语句表达式的原则

    (2)do、while、for的区别

    • do 语句先执行后判断,循环体至少执行一次
    • while 语句先判断后执行,循环体可能不被执行
    • for 语句先判断后执行,相比while更简洁

    2. 循环的回顾

      

    【三种循环语句使用对比】

     1 #include <stdio.h>
     2 
     3 int f1(int n)
     4 {
     5     int ret = 0;
     6     
     7     if( n > 0 )
     8     {
     9         do
    10         {
    11             ret += n;
    12             n--;
    13         }
    14         while( n > 0 );
    15     }
    16     
    17     return ret;
    18 }
    19 
    20 int f2(int n)
    21 {
    22     int ret = 0;
    23     
    24     while( n > 0 )
    25     {
    26         ret += n;
    27         n--;
    28     }
    29     
    30     return ret;
    31 }
    32 
    33 int f3(int n)
    34 {
    35     int ret = 0;
    36     int i = 0;
    37     
    38     for(i=1; i<=n; i++)
    39     {
    40         ret += i;
    41     }
    42     
    43     return ret;
    44 }
    45 
    46 int main()
    47 {
    48     printf("%d
    ", f1(100));  // 5050
    49     printf("%d
    ", f2(100));  // 5050
    50     printf("%d
    ", f3(100));  // 5050
    51     
    52     return 0;
    53 }

    3. break和continue的区别

    (1)break表示终止循环的执行,跳出整个循环

    (2)continue表示终止本次循环,进入下次循环

    【break和continue的区别】

     1 #include <stdio.h>
     2 
     3 void f1(int n)
     4 {
     5     int i = 0;
     6     
     7     for(i=1; i<=n; i++)
     8     {
     9         if( (i % 2) == 0 )
    10         {
    11             break;  // 跳出循环
    12         }
    13         
    14         printf("%d ", i);
    15     }
    16     
    17     printf("
    ");
    18 }
    19 
    20 void f2(int n)
    21 {
    22     int i = 0;
    23     
    24     for(i=1; i<=n; i++)
    25     {
    26         if( (i % 2) == 0 )
    27         {
    28             continue;   // 终止本次循环,进入下次循环
    29         }
    30         
    31         printf("%d ", i);
    32     }
    33     
    34     printf("
    ");
    35 }
    36 
    37 int main()
    38 {
    39     f1(10);  // 1
    40     f2(10);  // 1 3 5 7 9
    41     
    42     return 0;
    43 }

    【do...while(0)和break的妙用】

     1 #include <stdio.h>
     2 #include <malloc.h>
     3 
     4 int func(int n)
     5 {
     6     int i = 0;
     7     int ret = 0;
     8     int* p = (int*)malloc(sizeof(int) * n);
     9     
    10     do
    11     {
    12         if( NULL == p ) break;  // 注意这里break的用法
    13         
    14         if( n < 5 ) break;
    15 
    16         if( n > 100) break;
    17         
    18         for(i=0; i<n; i++)
    19         {
    20             p[i] = i;
    21             printf("%d
    ", p[i]);
    22         }
    23         
    24         ret = 1;
    25     }while( 0 );
    26     
    27     printf("free(p)
    ");
    28     
    29     free(p);    // 在任何情况下,free(p)都会被执行,不会泄露内存
    30     
    31     return ret;
    32 }
    33 
    34 int main()
    35 {
    36     if( func(4) )
    37     {
    38         printf("OK
    ");
    39     }
    40     else
    41     {
    42         printf("ERROR
    ");
    43     }
    44 
    45     return 0;
    46 }
  • 相关阅读:
    挑战程序设计竞赛 2.1 最基础的“穷竭搜索”
    HDU 5145 NPY and girls(莫队算法+乘法逆元)
    BZOJ 4300 绝世好题(位运算)
    HDU 5724 Chess(博弈论)
    BZOJ 1177 [Apio2009]Oil(递推)
    Codeforces 706D Vasiliy's Multiset(可持久化字典树)
    HDU 3374 String Problem (KMP+最小最大表示)
    POJ 2758 Checking the Text(Hash+二分答案)
    HDU 5782 Cycle(KMP+Hash)
    POJ 3450 Corporate Identity(KMP)
  • 原文地址:https://www.cnblogs.com/shiwenjie/p/11853876.html
Copyright © 2011-2022 走看看