对于程式执行的流程顺序以及因应不同状况而选取不同的流程, 即为流程控制 (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 */
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 */
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 */
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 }
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 }
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 /* 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 */
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 }
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 }
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 #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 用于跳过本次循环余下的语句,转去判断是否需要执行下次循环