C语言支持三种结构:
顺序
分支(选择)
循环
1.顺序:
程序从main函数开始执行,按照代码的书写顺序 执行一条语句后,程序将按照顺序执行下一条语句,直至程序执行到最后一条语句或遇到跳转语句(如break、continue、return等)。
执行过程中程序将按照语句的要求进行数据输入,处理和输出操作,是逐步完成程序的。
2.分支:(也叫选择结构)
当出现选择的时候,就会产生分支,满足一种条件运行一个分支,满足另外的条件运行另外的分支,当然不同分支往往运行的结果不同。
分支结构中有两个常用结构:
(1)If..........else 结构
例子:
#include <stdio.h>
int main()
{
int a = 10;
if(a==10) //如果a等于10,就会执行这个分支,即打印you are right !
printf("you are right !");
else //如果a不等于10,就执行这个分支,即打印you are wrong !
printf("you are wrong !");
return 0;
}
(尝试修改a的值,重新保存,编译,看看执行的结果是什么)
即:如果if后边括号里边的结果为真,就执行if下面的语句,为假就执行else下面的语句。
if......else 结构可以只有if , else可以省略不用。
即这样也可以。
#include <stdio.h>
int main()
{
int a = 10;
if(a==10) //如果a等于10,就会执行这个分支,即打印you are right ! 如果a不等于10就不打印,继续向下执行其它语句。
printf("you are right !");
a = 11;
if(a!=10) //如果a不等于10,就会打印you are right !
printf("you are right !");
return 0;
}
运行结果如下:
If.....else 结构还可以嵌套 if....else结构
例子:
#include <stdio.h>
int main()
{
int a = 11, b = 9;
if(a > 10) //if或者else后边可以用大括号括起来执行多条语句。
{
if(b < 10)
printf("you are right !");
else
printf("you are wrong !");
}
else
printf("you are wrong !");
return 0;
}
运行结果:
(2)switch....case 结构
先举个例子:
#include <stdio.h>
int main()
{
int a = 1;
switch(a)
{
case 1:
printf(“you are 1!”);
break;
case 2:
printf(“you are 2!”);
break;
case 3:
printf(“you are 3!”);
break;
default:
printf(“sorry!”);
break;
}
return 0;
}
即:
1、 switch后边括号中可以是一个变量或者是一个表达式,比如:a+b 等。
2、 当表达式的值跟case 后边的值相同时就执行相应case 后面的语句,然后不再判断case值是否跟表达式的值相同,顺序依次执行以下语句,直到遇到 break 语句,结束switch….case 结构。
3、 如果所有case后的值都与 switch后括号内的值不同,就直接执行 default后边的语句。
注意:case与case,case与default之间没有顺序要求。但一般要按照生后实际来制定他们之间的顺序。
4、 假如表达式的值和任何一个case标签都不匹配,同时没有发现一个default标签,程序会跳过整个switch语句,从它的结束大括号之后的第一个语句继续执行。
switch…….case………. 语句和 if…………else……语句是C语言程序中常用的分支语句,他们有相似之处,但又有些不同:
1、if…………else……….语句,常用来做条件判断,判断某个条件是否成立,进而执行相应程序。
2、switch…….case………语句,常用到多个分支选择中,用来清晰的表达,多个分支不同的执行路径。
3循环:
使用循环可以多次重复地执行多条语句,这里的“多条语句”称为循环体。在C语言中,可以使用三种循环,分别是:while、do...while和for。
在这些语句中,循环体被重复执行的次数由循环条件控制,称为控制表达式(controlling expression)。这是一个标量类型的表达式,也就是说,它属于一个算术表达式或指针表达式。如果控制表达式的值不等于 0,循环条件为 true,反之,循环条件为 false。
语句 break 和 continue 用于在一次循环还未执行完时,跳转出循环或返回到循环头部。
(1)while 循环
只要控制表达式为 true,while 循环就会反复地执行语句:
while (表达式)语句
while 表达式是顶部驱动(top-driven)的循环:先计算循环条件(也就是控制表达式)。如果为 true,就执行循环体,然后再次计算控制表达式。如果控制表达式为 false,程序跳过循环体,而去执行循环体后面的语句。
(2)for 循环
和 while 一样,for 循环也是一个顶部驱动的循环,但是它包含了更多的循环逻辑,如下所示:
for ([表达式1];[表达式2];[表达式3])
语句
在一个典型的 for 循环中,在循环体顶部,下述三个动作需要执行:
(1) 表达式 1:初始化
只计算一次。在计算控制表达式之前,先计算一次表达式 1,以进行必要的初始化,后面不再计算它。
(2) 表达式 2:控制表达式
每轮循环前都要计算控制表达式,以判断是否需要继续本轮循环。当控制表达式的结果为 false,结束循环。
(3) 表达式 3:调节器
调节器(例如计数器自增)在每轮循环结束后且表达式 2 计算前执行。即,在运行了调节器后,执行表达式 2,以进行判断。
for 循环头部中的三个表达式可以省略一个或多个。这意味着 for 循环头部最短的形式是:
- for ( ; ; )
如果没有控制表达式,则表示循环条件始终是 true,也就是说,这定义了一个死循环。
下面所示的 for 循环,既没有初始化表达式,也没有调节器表达式,它与 while(表达式)语句含义是等效的:
- for ( ;表达式; )
事实上,每个 for 循环都可以被改写成 while 循环,反之亦然。例如,例 2 的 for 循环可完全等效为下面的 while 循环:
- i = 0; // 初始化计数器
- while ( i < ARR_LENGTH ) // 循环条件
- {
- arr[i] = 2*i;
- ++i; // 递增计数器
- }
一般来说,当循环内有计数器或索引变量需要被初始化,并且在每次循环时需要调整它们的值时,最好使用 for 循环,而不是 while 循环
(3)do...while 循环
do...while 循环是一种底部驱动的循环:
do 语句 while (表达式);
在控制表达式被第一次计算之前,循环体语句会首先被执行一次。与 while 和 for 循环不同,do...while 循环会确保循环体语句至少执行一次。如果控制表达式的值为 true,那么另一次循环就会继续;如果是 false,则循环结束。
博主水平有限,文章如有错误,欢迎指正,大家一起和谐讨论。