zoukankan      html  css  js  c++  java
  • C语言(十二)流程控制

     对于程式执行的流程顺序以及因应不同状况而选取不同的流程, 即为流程控制 (flow control)。流程控制可说是电脑程式的灵魂, 它包含:条件判断、回圈控制及无条件跳跃三大类:
    1. 条件判断控制:判断条件的真伪, 然后程式依真伪的情形至指定的地方去执行程式。C++ 这方面的叙述有:if-else、switch-case 等 2 种。
    2. 回圈控制(循环):程式依指定的条件做判断, 若条件成立则进入回圈执行回圈内的动作。每执行完一次回圈内动作便再回头做一次条件判断, 直到条件不成立后才结束回圈, C++ 属于这方面的流程控制叙述有:for 、while 和 do-while 3 种。
    3. 无条件跳跃:当程式执行到无条件跳跃叙述时, 程式立即依该叙述的指示跳到目的位置执行, 由于无条件跳跃的强制性, 容易使我们无法由程式本身看出其前因后果, 造成阅读及侦错的困难, 一般也都尽量不用。

    1. if 最简单的用法  

     1 /*
     2     2013年6月13日21:17
     3     if的简单用法
     4 */
     5 #include <stdio.h>
     6 #include <stdlib.h>
     7 int main()
     8 {
     9     if(1 > 2)
    10         printf("AAAA
    ");
    11     
    12     system("pause");
    13     return 0;
    14 }
    15 /*
    16     如果表达式为真,执行语句
    17     如果表达式为假,语句不执行
    18 */
    if的简单用法

    2.  if 的范围问题

     1 /*
     2     2013年6月13日21:22
     3     if的简单用法
     4 */
     5 #include <stdio.h>
     6 #include <stdlib.h>
     7 int main()
     8 {
     9     if(3 > 2)                            
    10         printf("AAAA
    ");
    11         printf("BBBB
    ");
    12     
    13     system("pause");
    14     return 0;
    15 }
    16 /*
    17     if默认只能控制语句A的执行或不执行
    18     if无法控制语句B的执行或不执行
    19     或者讲:语句B一定会执行
    20 */
    if的范围问题
     1 /*
     2     2013年6月13日21:25
     3 */
     4 #include <stdio.h>
     5 #include <stdlib.h>
     6 int main()
     7 {
     8     if(3 > 2)
     9     {                            
    10         printf("AAAA
    ");
    11         printf("BBBB
    ");
    12     }
    13     system("pause");
    14     return 0;
    15 }
    16 /*
    17     if默认只能控制一个语句的执行或不执行
    18     如果想控制多个语句的执行或不执行就
    19     必须把这些语句用{}括起来
    20 */
    if的范围问题1

    3.  if..else...用法

     1 /*
     2     2013年6月13日21:29
     3 */
     4 #include <stdio.h>
     5 #include <stdlib.h>
     6 int main()
     7 {
     8     int i,j;
     9     if(i > j)    
    10         printf("什么什么
    ");
    11     else
    12         printf("什么什么");
    13     system("pause");
    14     return 0;
    15 }
    if...else

    4.  if...else if..else..用法

     1 /*
     2     2013年6月13日21:31
     3 */
     4 #include <stdio.h>
     5 #include <stdlib.h>
     6 int main()
     7 {
     8     int i,j;
     9     if(i > j)    
    10         printf("有两个解
    ");
    11     else if(i == j);
    12         printf("有一个解");
    13     else
    14         printf("无解");
    15     system("pause");
    16     return 0;
    17 }
    if...else..if..else..

    5.  C 语言对真假的处理

    非零是真、零是假、真用1、假用0.

    6.  if 举例

     1 /*
     2     2013年6月13日21:50
     3 */
     4 #include <stdio.h>
     5 #include <stdlib.h>
     6 int main()
     7 {
     8     float score;    //score分数
     9     
    10     printf("请输入您的数学考试成绩
    ");
    11     scanf("%f",&score);
    12     
    13     if(score > 100)    
    14         printf("这是做梦!
    ");
    15     else if(score <= 100 && score >=90)
    16         printf("优秀!");
    17     else if(score < 90 && score >= 70)
    18         printf("良!");
    19     else if(score < 70 && score >=60)
    20         printf("及格!");
    21     else if(score >= 0 && score < 60)
    22         printf("不及格!继续努力");
    23     else
    24         printf("您肯定输错了");
    25     system("pause");
    26     return 0;
    27 }
    数学分数等级
     1 /*
     2     2013年6月13日22:34
     3 */
     4 #include <stdio.h>
     5 #include <stdlib.h>
     6 int main()
     7 {
     8     int i = 3;
     9     int j = 4;
    10     int t = 0;
    11     
    12     t = i;
    13     i = j;
    14     j = t;
    15     printf("i = %d j = %d",i,j);
    16     system("pause");
    17     return 0;
    18 }
    互换两个数字
     1 /*
     2     2013年6月13日23:05
     3 */
     4 #include <stdio.h>
     5 #include <stdlib.h>
     6 int main()
     7 {
     8     int    a,b,c,t;
     9     
    10     printf("请输入三个整数(中间以空格分隔):");
    11     scanf("%d %d %d",&a,&b,&c);
    12 
    13     if(a < b)
    14     {
    15         t = a ;
    16         a = b ;
    17         b = t ;
    18     }
    19     if(a < c)
    20     {
    21         t = a ;
    22         a = c ; 
    23         c = t ;
    24     }
    25     if(b < c)
    26     {
    27         t = b ;
    28         b = c ;
    29         c = t ;
    30     }
    31     
    32     printf("%d %d %d ",a,b,c);
    33     system("pause");
    34     return 0;
    35 }
    对任意三个数进行排序

     7.  if 的常见问题

     1 /*
     2     2013年6月13日23:43
     3 */
     4 #include <stdio.h>
     5 #include <stdlib.h>
     6 int main()
     7 {
     8     if (3 > 2)
     9         ;   //这是一个空语句
    10     system("pause");
    11     return 0;
    12 }
    空语句 
     1 /*
     2     2013年6月13日23:51
     3 */
     4 #include <stdio.h>
     5 #include <stdlib.h>
     6 int main()
     7 {
     8     if (3 > 2) ;                 //如果这里加一个分号,执行else的时候会出错
     9         printf("Holle word
    ");  //
    最好把它加上
    10     else
    11         printf("哈你妹啊");
    12         
    13     system("pause");
    14     return 0;
    15 }
    空语句1 
     1 /*
     2     2013年7月1日00:01
     3 */
     4 #include <stdio.h>
     5 #include <stdlib.h>
     6 int main()
     7 {
     8     if (3 > 2)                 
     9         printf("Holle word
    ");  
    10     else if(2 > 1)
    11         printf("哈你妹啊");
    12     else 
    13         printf("。。。");
    14         
    15     system("pause");
    16     return 0;
    17 }
    18 /*
    19     ------------
    20      输出结果是
    21     ------------
    22      Holle word
    23   -----------------
    24   如果表达式一成立
    25   后面的都不执行。
    26  -------------------
    27 */
    if..else问题

    8.  for循环

     1 #include <stdio.h>
     2 #include <stdlib.h> 
     3 
     4 int main(void)
     5 {
     6     int i;
     7     int sum = 0;
     8     
     9     for( i = 0 ; i <= 10; ++i)
    10     sum=sum + i;
    11     
    12     printf("sum = %d
    ",sum);
    13     
    14     system("pause");
    15     return 0;
    16 }
    for循环的简单用法
     1 /*
     2     2013年7月1日23:00
     3     求1到100之间所有奇数之和
     4 */
     5 
     6 #include <stdio.h>
     7 #include <stdlib.h> 
     8 
     9 int main(void)
    10 {
    11     int i;
    12     int sum = 0;
    13     
    14     for( i = 1 ; i < 100; i += 2)    //i += 2;等价于 i = i + 2;
    15     { 
    16         sum = sum + i;
    17     }
    18     
    19     printf("i = %d
    ",i);
    20     printf("sum = %d
    ",sum);
    21     
    22     system("pause");
    23     return 0;
    24 }
    for循环的简单用法1
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 int main()
     4 {    
     5     int i;
     6     float sum = 0;
     7     
     8     for(i = 1;i <= 100; ++i)
     9     {
    10         sum = sum + 1.0/i; //是Ok的  推荐使用
    11             //sum = sum + (float)(1/i);这样写是不对的
    12             //也可以这样写: sum = sum + 1 / (float)(i); 不推荐使用
    13     }
    14     printf("sum = %f
    ",sum);
    15     system("pause");
    16     return 0;
    17 }
    强制类型转换
     1 /*
     2     本程序不对,因为循环中更新的变量不能定义成浮点型
     3 */
     4 
     5 #include <stdio.h>
     6 #include <stdlib.h>
     7 int main()
     8 {    
     9     float i;
    10     float sum = 0;
    11     
    12     for(i = 1.0;i <= 100; ++i)
    13     {
    14         sum = sum + 1/i;
    15     }
    16     printf("sum = %f
    ",sum);
    17     system("pause");
    18     return 0;
    19 }
    浮点数存储多带来的问题 
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 int main()
     4 {
     5     int i;
     6     int count = 0;
     7     int sum = 0;
     8     float average;
     9     for(i = 1; i<=100; ++i)
    10     {
    11         if(i%2 == 1)
    12         {
    13             sum += i;
    14             ++count;
    15          
    16         }
    17         
    18     }
    19     average = 1.0*sum/count; //1.0默认是double类型
    20     printf("1到100之间的奇数的平均数 :%f
    ",average);
    21     system("pause");
    22     return 0;
    23 }
    1到100之间奇数的平均数 
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 int main()
     4 {
     5     int val;
     6     int m;
     7     int sum = 0;
     8     printf("请输入一您需要判断的数字:");
     9     scanf("%d",&val);
    10     
    11     m = val;
    12     while (m)
    13     {
    14         sum = sum * 10 + m%10;
    15         m /=10;
    16     }
    17     if(sum == val)
    18         printf("Yes!
    ");
    19     else
    20         printf("NO!
    ");
    21     
    22     
    23     system("pause");
    24     return 0;
    25 }
    26 /*
    27     while内部是怎么循环的:    
    28     m = 1234 成立
    29     sum = 0 * 10 + 1234 % 10 = 4
    30     m = m / 10 = 123;
    31     
    32     m = 123 成立
    33     sum = 4 * 10 + 123 % 10 = 43
    34     m = m / 10 = 12
    35     
    36     m = 12 成立
    37     sum = 43 * 10 + 12 % 10 = 432
    38     m = m / 10 = 1
    39     
    40     m = 1 成立
    41     sum = 432 * 10 + 1 % 10 = 4321
    42     m = 1 / 10 =0
    43     
    44     m = 0 不成立
    45 */
    判断是否是回文数 
     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 int main(void)
     5 {
     6     int n;
     7     int i;
     8     int f1,f2,f3;
     9     
    10     f1 = 1;
    11     f2 = 2;
    12     
    13     printf("请输入您需要求的想的序列:");
    14     scanf("%d",&n);
    15     
    16     if(1 == n)
    17     {
    18         f3 = 1;
    19     }
    20     else if (2 == n)
    21     {
    22         f3 = 2;
    23     }
    24     else
    25     {
    26         for(i=3; i<=n; ++i)
    27         {
    28             f3 = f1 + f2;  
    29             f1 = f2; 
    30             f2 = f3; 
    31         }
    32     }
    33     printf("%d
    ",f3);
    34     system("pause");
    35     return 0;
    36 }
    37 /*
    38     for循环执行过程
    39     i=3 3<=6 成立
    40     f3=1+2=3 f1=f2=2 f2=f3=3 ++i i=4
    41     
    42     i=4 4<=6 成立
    43     f3=2+3=5 f1=f2=3 f2=f3=5 ++i i=5
    44     
    45     i=5 5<=6 成立
    46     f3=3+5=8 f1=f2=5 f2=f3=8 ++i i=6
    47     
    48     i=6 6<=6 成立
    49     f3=5+8=13 f1=f2=8 f2=f3=13 ++i i=7
    50 */
    菲波拉契序列

    9、break和continue的用法

    break如果用于循环使用来终止循环

    break如果用于switch,则是用于终止switch

    break不能直接用于if,除非if属于循环内部的一个子句

    break只能终止离他最近语句

     continue 用于跳过本次循环余下的语句,转去判断是否需要执行下次循环

  • 相关阅读:
    第15周Leetcode记录
    《Redis深度历险》七(info指令和过期淘汰策略)
    第14周leetcode记录
    《Redis深度历险》六(事务+发布订阅+Stream)
    第13周LeetCode记录
    在Load average 高的情况下如何鉴别系统瓶颈
    Apache TraceEnable关闭与测试方法
    PHP 5.6 如何使用 CURL 上传文件
    转载-浅谈Ddos攻击攻击与防御
    基于SWOOLE的分布式SOCKET消息服务器架构
  • 原文地址:https://www.cnblogs.com/Maxwell599/p/3162568.html
Copyright © 2011-2022 走看看