分支和循环都可以让程序中的语句不再从上到下执行,具有这种特性的语句,叫做流程控制语句。 ### if分支 分支语句可以在程序执行的时候从几组语句中选择一组执行。 在编写程序的时候,如果遇到多种可能性,任何时候只能选择一种可能性,这种情况下就可以采用分支解决。 if关键字可以用来编写分支。 if分支里需要为每种可能性编写专门的处理语句。 每组语句需要一个配对的逻辑表达式。 如果某个逻辑表达式结果为真就执行它对应的语句,其他语句就被忽略了。 只有不可能同时出现多种可能性才可以使用一个分支解决。 如果多种可能性中必然有一种可能性会出现,就可以省略最后一组语句的逻辑表达式和if关键字。 /* if分支演示 */ #include <stdio.h> int main(){ int num = 0; printf("请输入一个整数:"); scanf("%d", &num); if (num >= 0){ printf("非负数\n"); }else if (num < 0){ printf("负数\n"); } return 0; } 编写if语句的时候应该把简单逻辑写在前面,复杂逻辑写在后面。 不可以将if分支当做无关的语句。 ### switch ... case 使用switch ... case语句也可以编写分支。 如果一个分支里包含有限个整数,每个整数需要使用专门的语句处理,这种分支可以采用switch ... case格式编写。 /* switch ... case 格式练习 */ #include <stdio.h> int main(){ int season = 0; printf("请输入一个整数:"); scanf("%d", &season); switch (season) { case 0: printf("春天\n"); break; case 1: printf("夏天\n"); break; case 2: printf("秋天\n"); break; case 3: printf("冬天\n"); break; default: printf("无法识别的数字。\n"); break; } return 0; } 因为在case的语法块中,是无法退出后面的代码的,因此就需要在每个case中加入一个break,break就是代表着退出当前switch语法块。 ### for 循环 for 循环里可以让一个变量一次代表一组数字,用一组语句分别处理它所代表的每个数字。 这种变量叫做循环变量。 /* for循环演示 */ #include <stdio.h> int main(){ int num = 0; for (num = 1; num <= 5;num++){ printf("%d ", num); } printf("\n"); return 0; } 如果小括号中间的逻辑表达式没有写表示逻辑表达式的结果永远为真,这种循环不能正常结束,所以叫做死循环。 /* for循环演示 */ #include <stdio.h> int main(){ int num = 0; for (num = 1;;num++){ printf("%d\n", num); } return 0; } for循环小括号里最前和最后的部分可以是用逗号连接的多条语句。 /* for循环演示 */ #include <stdio.h> int main(){ int num = 0, num1 = 0; for (num = 1, num1 = 9;num <= num1;num++, num1--){ printf("%d X %d = %d\n", num, num1, num * num1); } return 0; } C99规范里允许在小括号中临时声明变量,这种变量只能在循环里使用。 /* for循环演示 */ #include <stdio.h> int main(){ for (int num = 1;num <= 5;num++){ printf("%d\n", num); } return 0; } ### goto goto语句也是流程控制语句。 它可以把任何一条语句指定成下一条语句。 goto语句作用很大,但是副作用也很大,因此一般情况下不应该使用goto语句。 ### 多重循环 循环里面还可以包含其他循环,这种循环叫做多重循环。 如果一个问题,可以分解成几个小问题,每个小问题可以采用类似的循环解决,这种问题就可以采用多重循环编写。 /* 多重循环演示 */ #include <stdio.h> int main(){ int num = 0, num1 = 0; for (num = 1;num <= 5;num++){ for (num1 = 5;num1 >= num;num1--){ printf("%d", num1); } printf("\n"); } return 0; } ### while 循环 while关键字也可以用来编写循环,这种循环通常用来解决事先不知道次数的循环。 /* while 循环演示 */ #include <stdio.h> int main(){ int num = 1; while (num <= 5){ printf("%d ", num); num++; } printf("\n"); return 0; } 程序反复执行大括号里面的语句,知道逻辑表达式结果为假。 while循环也可以实现死循环。这个时候要提供一个永远为真的逻辑表达式。 while循环在小括号里的逻辑为假的时候,是不执行大括号里面的语句的。 ### do...while 循环 do...while循环必须在小括号后面用分号结束。 do...while循环也是交替执行逻辑表达式的计算和大括号里的语句,但是第一步是先执行大括号里的语句。 do...while循环大括号里的语句至少会执行一次。 /* while 循环演示 */ #include <stdio.h> int main(){ int num = 1; do { printf("lanyulei\n"); } while (num == 0); return 0; } ### break和continue **break** 可以在循环里使用`break;`语句终止循环的执行, 使用`continue;`语句退出本次循环。 当执行完break;语句后循环里的所有语句都不再执行,循环变量也不会再改变。 如果循环是采用break;语句结束的,循环结束后循环变量应该落在数字范围内。 如果编写循环时不知道循环要重复的次数,就可以写死循环,在循环里合适的时候用break;语句结束循环。 **continue** 循环里可以是用continue;语句直接跳到循环大括号的末尾,中间的语句这次循环都不执行。