一、控制流语句
个人理解,让计算机程序通过一些条件判断、选择、循环等逻辑操作来执行他应该执行的代码来实现我们希望它实现的功能。
(一)分支跳转语句
1、分支语句 if else
(1)格式1
if(表达式(判断语句))
{
执行表达式;
...
}
(2)示例
#inlude <stdio.h>
int main(void)
{
int a;
scanf("%d", &a);
if(a > 0) //圆括号内判断语句非零为真,零为假
{
printf("平安喜乐\n");
printf("衣食无忧\n");
}
printf("世界和平\n");
return 0;
}
运行结果
输入:100
输出:平安喜乐
衣食无忧
世界和平
输入:-1
输出:世界和平
(3)逻辑
先判断圆括号内的表达式真假,若为真则执行花括号内容,为假则不执行
(4)格式2
if(表达式(判断语句(条件)))
{
条件为真表达式;
...
}
else
{
条件为假表达式;
...
}
(5)示例
#inlude <stdio.h>
int main(void)
{
int a;
scanf("%d", &a);
if(a > 0) //圆括号内判断语句非零为真,零为假
{
printf("平安喜乐\n");
printf("衣食无忧\n");
}
else
{
if(a > -10)
{
printf("home\n");
}
else if(a > -20)
{
printf("car\n");
}
}
return 0;
}
运行结果
输入:100
输出:平安喜乐
衣食无忧
输入:-1
输出:home
输入:-11
输出:car
(6)逻辑
先判断圆括号内的表达式语句真假,若为真执行 if 花括号里的表达式,若为假执行 else 花括号里的表达式
(7)特点
若执行表达式只有一条可不加花括号
if 语句内可嵌套自己
else 总是跟最近的 if 配对
2、多路分支switch
(1)格式
switch(整形变量)
{
case value1:
执行语句;
break;
case value2:
执行语句;
break;
default:
执行语句;
}
(2)示例
#inlude <stdio.h>
int main(void)
{ //int , short , long , char , enum
int a;
scanf("%d", &a);
switch(a)
{
case 0:
printf("平安喜乐\n");
break;
case 1:
printf("衣食无忧\n");
break;
default:
break;
}
printf("世界和平\n");
return 0;
}
运行结果
输入:0
输出:平安喜乐
世界和平
输入:1
输出:衣食无忧
世界和平
输入:2
输出:世界和平
(3)逻辑
先判断switch圆括号内的“整型变量”值是多少,然后从下面的 case 中一一比对,有则直接运行对应的语句,没有则运行 default 里面的语句
特点:
default语句可以不加,default 语句不管放在哪里都可以,但是所有的判断照旧,不会 default的位置改变而改变
break 在这里面叫做跳出 switch 语句,如果没有遇到 break 语句,程序会按照顺序从入口一直执行到遇到 break 或者是 switch 语句结束
switch 当中的小括号的内容必须得是一个整型数据 (int、long、short、char、enum等),不能够是浮点型或者字符串等非整型数据
3、跳转语句goto
(1)格式
goto 标签;
标签名:
执行语句
...
(2)示例
#include <stdio.h>
int main(void)
{
printf("start ... ...\n");
goto label1;
printf("Hello world.\n");
label1:
printf("China\n");
label2:
printf("Chinese\n");
return 0;
}
运行结果
start ... ...
China
Chinese
(3)逻辑
从程序的某处调用goto可以跳过去标签所在地的代码中运行;
(4)注意
goto语句一般会直接跳转到函数的出口(一般都是出错处理)
标签一旦运行他会一直往下面走,直到函数退出或者goto到别的地方
在出错退出的时候定义一套动作,多个接口
慎用goto(不要乱来),因为它会破坏C语言的面向过程性
(二)循环控制语句
1、while循环
(1)格式
while(条件)
{
表达式;
}
(2)示例
#include <stdio.h>
int main(void)
{
int a = 5;
while(a > 0) //先判断a是否大于0,若为真则执行花括号里的命令,否则不执行
{
printf("a = %d\n", a);
a--;
}
printf("...\n");
return 0;
}
运行结果
a = 5
a = 4
a = 3
a = 2
a = 1
...
(3)逻辑
先判断条件是否为真,如果为真则执行花括号中“表达式”的内容,如果为假,则直接跳出循环
若执行完“表达式”的内容了,会重新回来判断条件是否成立,重复上面的1动作
2、do while循环
(1)格式
do{
表达式
}while(条件);
(2)示例
#include <stdio.h>
int main(void)
{
int a = 0;
do //先执行一次花括号里的命令,再判断a是否大于0,若为真则执行,否则不执行
{
printf("a = %d\n", a);
a--;
}while(a > 0);
printf("...\n");
return 0;
}
运行结果
a = 0
...
(3)逻辑
先执行花括号“表达式”的内容,再过来判断条件是否为真,如果为真则再次执行花括号中“表达式”的内容,如果为假,则直接跳出循环
3、for循环
(1)格式
for( 初始化表达式; 判断表达式; 补充表达式)
{
执行语句;
}
(2)示例
#include <stdio.h>
int main(void)
{
int a;
for(a = 5; a > 0; a--)
{
printf("a = %d\n", a);
}
return 0;
}
运行结果
a = 5
a = 4
a = 3
a = 2
a = 1
(3)逻辑
一开始执行for会先执行“初始化表达式”,而且是有且只有一次执行
接下来去判断"判断表达式"的内容是否为真,为真则开始执行“执行语句”,否则退出循环
当我们执行完“执行语句”,会先运行“补充表达式”的内容,在继续判断条件是否为真,以此循环
4、break
(1)作用
跳出循环体或者是switch语句,一个break跳出一个;
逻辑过程,一旦遇到直接跳出,不会拖泥带水
5、continue
(1)作用
continue只作用于循环体
跳过continue下面的语句,直接进入下一次循环
(2)注意
作用在for时,进入下一次循环的时候还是会运行“补充表达式”的