流程控制目录
流程控制
流程控制的结构可以分为顺序结构,选择结构和循环结构
(任何程序都可以通过这三种结构组合而成。)
选择(分支)结构:
选择是在比较后进行的,比较为选择提供了依据。
而在c语言中:通过关系运算和逻辑运算构造选择判断的依据。
关系运算
关系运算是运算的一种,其产生的表达式有对应的数据值和对应的数据类型。
表达式的类型:整形
其表达式的值:当判断为真时,其数值为整形的1;判断为假时,数值为0
关系运算符:>
,<
,>=
,<=
,==
,!=
逻辑运算
逻辑运算符&&
(与),||
(或),!
(非)
运算优先级:非运算(优先级为2)>>
与运算(优先级为11) >
或运算(优先级是12)
与运算:
规则:一假则假
格式:(表达式1) && (表达式2)
特性:1.运算顺序:从左往右运算
2.短路特性:当从左往右运算时整体表达式中已经有一个关系判断为假了,则计算机不会再计算后面的表达式。
或运算
规则:一真则真
格式:(表达式1) || (表达式2)
特性:1.运算顺序:从左往右运算
2.短路特性:当从左往右运算时整体表达式中已经有一个关系判断为假了,则计算机不会再计算后面的表达式。
非运算:
规则:真假转换
格式:!(表达式1)
补充知识:
c语言如何判断一个值的真假:凡是数值是0则为假(包括0,‘\0’, NULL),凡是数值不为0(包括-1,‘a’,‘\t’),则为真。
选择语句:
if语句
1.处理单个情况。
if(表达式1)
{
语句;
}
语义:若表达式为真,则执行语句;若表达式为假,则if语句结束,继续向下执行之后的语句。
如果if()后不加{},if的语句只包括if下一行。
2.处理两个情况。
if(表达式1)
{
语句1;
}
else
{
语句2;
}
语义:若表达式为真,则执行语句1;若表达式为假,则执行语句2;之后if语句结束
3.处理三个情况。
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
................(表示多个else if的省略)
else if(表达式n)
{
语句n;
}
else
{
语句n+1;
}
语义:若表达式为真,则执行语句1;若表达式为假,则往下判断表达式2;为真则执行表达式2条件下的语句,为假则继续往下判断表达式3…直到匹配到满足条件的if语句。如若连表达式n都没有判断到,则直接执行表达式n+1.并结束if整体语句
高内聚低耦合的if语句写法
补充? :
运算符(优先级为13):
其本质与if()else语句相同,但是其更加简洁,是以一种运算符参加到表达式之中。
格式: (表达式1)?(表达式2): (表达式3)
语义:对表达式1进行判断,若判断结果为真,则取表达式2;若判断结果为假。则取表达式2的效果。
switch结构
格式:
switch(表达式)
{
case (常量表达式1):
语句1;
break;
case(常量表达式2):
语句2;
break;
......
case(常量表达式n):
语句n;
break;
default:
语句n+1;
}
语义:根据表达式的值和下方定义的常量表达式的值相匹配,匹配到哪个表达式,程序就跳到那个表达式,并执行对应的语句,然后经过break语句结束switch程序。如果未匹配到相应的常量表达式,则程序会执行default中的语句并结束。
语义流程图见下:
注意事项:
1.第一次匹配到case语句但没有break语句,则对应case下的所有代码都会被执行一次直到执行到switch中符号}
,程序才会结束。
见例
······································································
switch(grade)
{
case 'A': printf("85~100");
case 'B': printf("70~84");
case 'C': printf("60~69");
case 'D': printf("<60");
default: printf("errow");
}
·······································································
输出如下:
2.switch(表达式)中的表达式可以是整形,字符,但不能是浮点型。
3.case(常量表达式)中的常量表达式只能包含常量,不能存在变量。
4.default不一定必须放在最后,其可以放在任意位置。
5.可以根据标签将该语句改成一个选择结构,将执行语句设置一个标签,如果能匹配这个标签,则可以执行对应的语句,如果匹配不上则将所有语句执行一遍。
【补充】标签:
格式:case (标签名):
其效果如给书上某一页贴个书签,配合goto使用可以跳到的对应的位置。
循环结构:
构成循环语句的要素:
1.循环的初始条件
2.执行语句。
3.结束条件
4.使循环趋近结束的操作或语句
goto语句
goto语句严格上来说是跳转语句,而不是循环语句,但是我们可以根据他的跳转功能来实现循环。
---------------------------------------------------------------------
格式:
loop:
printf("hhhhhhhhh %d",d);
d++;
goto loop;
-----------------------------------------------------------------------
语义:将loop下两行的语句取了一个标签,当程序执行到goto loop时,此时程序将会跳转到loop标签并再次向下执行程序。
一般不使用goto语句,因为c语言是模块化语言,而goto的使用会破坏模块,可能会造成程序的错误。
while语句:
-------------------------------------------------------------------
while(表达式)
{
语句;
}
-------------------------------------------------------------------
语义:当括号中的表达式成立时,则执行语句,一直到表达式不再成立。则停止while循环。
易错:
while(表达式)后面没有分号,如果加上分号如下
while(表达式);
编译时程序不会 报错,但是程序会陷入一直循环。
因为while和if一样可以不带{},其代表只将while下仅一行的语句进行循环,上述例子中while将;
前得到空语句当作时循环体,并且没有时循环趋近结束的操作,所以循环一直无法结束。