控制流程是指程序的执行顺序,分为顺序,分支和循环三种类型。
顺序结构
顺序结构是指程序按照顺序依次执行,不做任何的判断和跳转。
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = a + b;
printf("a + b = %d\n", c);
return 0;
}
上述代码没有使用任何控制流程语句,按照程序从头到尾的顺序执行,先给a赋值,再给b赋值,最后计算a和b的和并输出。
分支结构
分支结构是指程序通过判断,选择不同的执行路径。C语言中有三种分支结构:if语句,switch语句和三目运算符。
if语句
if语句是最为常见的一种分支结构,语法如下:
if (条件表达式)
{
//执行语句1
}
else
{
//执行语句2
}
if语句先判断条件表达式是否成立,如果成立则执行语句1,否则执行语句2。
#include <stdio.h>
int main()
{
int a = 10;
if (a > 0)
{
printf("a是正数\n");
}
else
{
printf("a不是正数\n");
}
return 0;
}
上述代码中,如果a大于0则输出"a是正数",否则输出"a不是正数"。
switch语句
switch语句也是一种分支结构,语法如下:
switch (表达式)
{
case 常量1:
//执行语句1
break;
case 常量2:
//执行语句2
break;
...
default:
//执行语句n
break;
}
switch语句先计算表达式的值,然后与各个case后跟的常量值进行比较,如果相等则执行对应的语句并跳出switch语句,如果没有匹配的常量值则执行default后的语句。
#include <stdio.h>
int main()
{
int a = 3;
switch (a)
{
case 1:
printf("a等于1\n");
break;
case 2:
printf("a等于2\n");
break;
default:
printf("a不等于1和2\n");
break;
}
return 0;
}
上述代码中,a等于3,因此没有匹配的常量值,输出"a不等于1和2"。
三目运算符
三目运算符也是一种简单的分支结构,语法如下:
表达式1 ? 表达式2 : 表达式3
如果表达式1的值为真,则返回表达式2的值,否则返回表达式3的值。
#include <stdio.h>
int main()
{
int a = 10;
int b = (a > 0) ? 1 : 0;
printf("b = %d\n", b);
return 0;
}
上述代码中,如果a大于0则b的值为1,否则为0。
循环结构
循环结构是指程序通过重复执行一段代码,达到一定的目的。C语言中有三种循环结构:while循环,do-while循环和for循环。
while循环
while循环的语法如下:
while (条件表达式)
{
//执行语句
}
while循环先判断条件表达式是否成立,如果成立则执行语句,然后再次判断条件表达式,如此循环直到条件表达式为假。
#include <stdio.h>
int main()
{
int i = 0;
while (i < 5)
{
printf("i = %d\n", i);
i++;
}
return 0;
}
上述代码中,i从0开始,每次循环加1,当i大于等于5时跳出循环。
do-while循环
do-while循环的语法如下:
do
{
//执行语句
} while (条件表达式);
do-while循环先执行一次循环体内的语句,然后在判断条件表达式是否成立,如此循环直到条件表达式为假。
#include <stdio.h>
int main()
{
int i = 0;
do
{
printf("i = %d\n", i);
i++;
} while (i < 5);
return 0;
}
上述代码中,i从0开始,每次循环加1,当i大于等于5时跳出循环。
for循环
for循环的语法如下:
for (表达式1; 表达式2; 表达式3)
{
//执行语句
}
for循环先执行表达式1,然后判断表达式2是否为真,如果为真则执行语句,然后再执行表达式3和表达式2,如此循环直到表达式2为假。
#include <stdio.h>
int main()
{
for (int i = 0; i < 5; i++)
{
printf("i = %d\n", i);
}
return 0;
}
上述代码中,i从0开始,每次循环加1,当i大于等于5时跳出循环。注意,for循环中的i只在for循环内部有效,如果在循环外部使用则会报错。