流程控制语句
条件语句
1. if与if-else
//如果表达式1成立,则执行语句1,并离开这个if语句块(指不用再看这一堆if-else了);否则继续向下看表达式2。如果表达式2成立,则执行语句2,并离开这个if语句块;否则继续向下判定表达式3……
if(表达式1){
语句1;
}else if(表达式2){
语句2;
}else if(表达式3){
语句3;
}
示例:
#include<stdio.h>
int main()
{
int a = 9;
int b = 10;
int c = 55555;
int d = 183443265;
//如果a大于b,则输出a大于b
if(a > b){
printf("a > b");
}
//多重if-else语句
if(a < b){
printf("a < b"),printf("a < b"),printf("a < b");
}else if(a == b){
printf("a == b");
}else{
printf("a > b");
}
//else语句会与最近的那个if语句匹配,比如:
if(a < b){
if(c < d){
printf("c < d");
}else{
//这个else语句会与if(c < d)匹配,如果c < d成立就输出c < d;否则输出
printf("c > d");
}
}else{
}
return 0;
}
细心的同学可能已经发现了,在使用 if
语句的时候不写括号,它似乎也按照我们预想的一样。实际上并不是。编译器会默认把下一个分号之前的所有语句算成是这个 if
语句的内容。
为了程序的可读性,也为了方便我们后期的修改维护,强烈建议使用 if 语句的时候加上大括号。
2. switch语句
switch
语句是C语言中比较常用的语句,它跟 if
语句有点像。
光说有点抽象,我们直接看个例子:
#include<stdio.h>
int main()
{
int a = 7;
switch(a){
case 1:
printf("%d\n",a + 3);
break;
case 2:
printf("%d\n",a + 2);
break;
default:
printf("%d\n",a + 1);
break;
}
//上面这个switch语句和下面这个if语句是等价的
if(a == 1){
printf("%d\n",a + 3);
}else if(a == 2){
printf("%d\n",a + 2);
}else {
printf("%d\n",a + 1);
}
}
WARNING
如果我们不写 break
的话,switch
语句会从符合条件的位置开始,往下一直执行下去,直到遇到 break
为止。就像下面这个例子展示的那样:
#include<stdio.h>
int main()
{
int a = 7;
switch(a){
case 1:
printf("%d\n",a + 3);
case 2:
printf("%d\n",a + 2);
default:
printf("%d\n",a + 1);
break;
}
//上面这个switch语句和下面这个if语句是等价的
if(a == 1){
printf("%d\n",a + 3);
printf("%d\n",a + 2);
printf("%d\n",a + 1);
}else if(a == 2){
printf("%d\n",a + 2);
printf("%d\n",a + 1);
}else {
printf("%d\n",a + 1);
}
}
3. goto语句
作用:让程序跳转到指定的位置。
程序运行时是主函数从上到下逐行执行代码,而 goto
语句能让程序直接跳到指定的位置,并从那个位置接着往下逐行执行代码。goto
语句有两部分:goto
和 标签名。标签的命名遵循变量命名规则。例如:
#include<stdio.h>
int main(){
int a = 7;
double b = 9;
float c = 11.777;
char d = 'D';
part1:
printf("%d,%lf,c = %f,d = %c\n",a,b,c,d);
//%5d指打印一个整数,这个整数占五列(不够五列的话自动补空格),不带负号默认右对齐,带负号则为左对齐
printf("%5d\n%-5d,%1.0f",a,a,c);
if(a >= 7){
a -= 4;
//当这句goto执行时,程序跳转到part1指定的位置,并从那个位置继续向下逐行执行代码
goto part1;
}
return 0;
}
原则上,不建议在C语言中使用 goto
语句,我们可以使用 if
语句、while
循环等来代替它。
循环语句
1. while循环
while
循环是C语言中比较常用的循环语句,它跟 if
语句有点像。
#include<stdio.h>
int main(){
int a = 7;
//先进行判断,如果条件成立就执行循环体,否则跳出循环
//while所属的大括号及其内部的代码称为循环体
while(a <= 10) {
printf("%d ",a);
a++;
}
return 0;
}
2. do-while循环
do-while
循环跟 while
循环很像,不同的是 do-while
循环会先执行一次循环体,再进行判断,如果条件成立就继续执行循环体,否则跳出循环。
#include<stdio.h>
int main(){
int b = 9;
//先进行判断,如果条件成立就执行循环体,否则跳出循环
//while所属的大括号及其内部的代码称为循环体
do {
printf("%d ",b);
b++;
}while(b <= 15);
return 0;
}
3. for循环
for
循环用于在满足特定条件的情况下重复执行一段代码。for
循环通常用在已经知道循环次数的地方。
for (initialization; condition; increment) {
// 循环体
}
initialization
初始化部分,在循环开始前执行一次,用于初始化循环控制变量。
condition
条件部分,在每次迭代开始前进行测试。如果条件为真(非零),则执行循环体;如果条件为假(零),则终止循环。
increment
增量部分,在每次循环体执行完毕后执行,用于更新循环控制变量。
#include<stdio.h>
int main(){
for (int i = 0; i < 10; i++) {
printf("%d ",i);
}
return 0;
}
for
循环的初始化部分、条件部分、增量部分都是可省略的,例如:
#include<stdio.h>
int main(){
int i = 3;
for (;i < 7;) {
printf("%d ",i++);
}
for(;;){
if(i == 17){
printf("循环终止\n");
break;
}
i++;
}
return 0;
}
WARNING
一定要检查有没有写合适的循环终止条件,避免出现死循环。
4. break和continue
刚才我们提过,break
用来跳出一层循环,例如:
#include<stdio.h>
int main(){
for(int i = 0;i < 10;i++){
printf("%d ",i);
}
//上面那个for循环和下面这个for循环是等价的
for(int i = 0;;i++){
if(i >= 10){
break;
} else {
printf("%d ",i);
}
}
return 0;
}
你可能注意到我强调了一层循环,因为我们有时候可能会用到嵌套的循环,例如:
#include<stdio.h>
int main(){
for(int i = 0; i < 10; i++){
for(int j = 0; j < 10; j++){
printf("%d ",i);
break;//在这里加break,它会跳出内层循环,但是跳出后外层循环还会执行下一次循环,所以外层的for循环依然会执行十次,但是每轮循环中,内层循环只会执行一次
}
}
//输出0 1 2 3 4 5 6 7 8 9
return 0;
}
continue
的作用是用来跳过本次循环,继续下一次循环。
#include<stdio.h>
int main(){
for(int i = 0; i < 10; i++){
for(int j = 0; j < 10; j++){
printf("%d ",i);
continue;//在这里加continue,它会跳过本次循环还未执行的代码,直接进入下一次循环,但是不会跳出当前层次的循环。所以内外层的for循环都会执行十次,但是每轮循环中打印j的值的语句不会被执行
printf("%d ",j);
}
}
}