首页 > 技术文章 > C语言(十二)流程控制

Maxwell599 2013-06-29 17:37 原文

 对于程式执行的流程顺序以及因应不同状况而选取不同的流程, 即为流程控制 (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\n");
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\n");
11         printf("BBBB\n");
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\n");
11         printf("BBBB\n");
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("什么什么\n");
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("有两个解\n");
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("请输入您的数学考试成绩\n");
11     scanf("%f",&score);
12     
13     if(score > 100)    
14         printf("这是做梦!\n");
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\n");  //\n最好把它加上
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\n");  
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\n",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\n",i);
20     printf("sum = %d\n",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\n",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\n",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\n",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!\n");
19     else
20         printf("NO!\n");
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\n",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 用于跳过本次循环余下的语句,转去判断是否需要执行下次循环

推荐阅读