概述
控制语句
- 控制语句
- 一、分支语句
- if语句
- switch语句
- 二、循环语句
- while循环
- for循环
- do...while循环
- 三、转向语句
- break
- continue
- return
- goto语句
控制语句
控制语句是用于控制程序的执行流程,以实现程序的各种结构方式的语句。(C语言支持三种结构:顺序结构、选择结构和循环结构)
C语言有九种控制语句,可分为以下三类:
1、条件判断语句(分支语句):if语句,switch语句。
2、循环语句:while语句,for语句,do…while语句。
3、转向语句:break;continue;return;goto语句。
一、分支语句
-
if语句
if语句的语法结构
//单分支—单代码块
if (表达式)
语句;
//单分支—双代码块
if (表达式)
语句1;
else
语句2;
//多分支
if (表达式1)
语句1;
else if (表达式2)
语句2;
……
else if (表达式n)
语句n;
else
语句;
else的匹配:没有大括号的嵌套分隔时,else与离它最近的if相匹配。
注:如果表达式为真,语句执行;表达式为假,则不执行。
0表示假,非0表示真
-
switch语句
switch语句常用于多分支的情况,switch语句允许嵌套使用。
switch语句的语法结构
switch (整型表达式) // !! 整型
{
语句项;
}
其中的语句项是一些case语句和default语句
// case语句
case 整型常量表达式: // !! 整型,常量
语句;
break;
//除非有意为之,否则每一条case语句写完下面都要加上一个break;
default子句
default:
语句;
当表达式的值与所有case标签的值都不匹配时,用一个default子句来做提示,让整个switch语句的表达更加完整。
default子句可放在任何一个case可以出现的位置,一般建议放在最后。
二、循环语句
-
while循环
while的语法结构
while (表达式)
{
循环语句;
}
-
for循环
for循环的语法结构
// 初始化 条件判断 循环变量调整
for (表达式1; 表达式2; 表达式3)
{
循环语句;
}
for循环条件中的3个表达式均可省略,但没有特殊用处或没有把握时不建议省略。
补充,用for还是while?:
- 循环体执行的代码相同的条件下,for循环的效率高于while循环
C源代码:
int main()
{
while (1);
for (;;);
return 0;
}
对应的汇编代码:
while (1);
00007FF68C2F176B xor eax,eax
00007FF68C2F176D cmp eax,1
00007FF68C2F1770 je main+24h (07FF68C2F1774h)
00007FF68C2F1772 jmp main+1Bh (07FF68C2F176Bh)
for (;;);
00007FF68C2F1774 jmp main+24h (07FF68C2F1774h)
汇编代码解析:
可以看到,“while (1);”语句,需要4条汇编指令:立即数、与操作、比较、跳转;
而“for (;;);”语句,只需要一条汇编指令。
- C99标准下,for循环的循环变量可在初始化部分同时定义和初始化
for (int i = 0;;);
这样写for循环结束后 i 占用的栈内存就会被释放,可节约内存,while则不行。
- while循环的调整部分在循环体内部,容易一个不小心改动了循环变量导致循环错误。
综上,在能使用for循环的情况下建议使用for循环代替while循环。
-
do…while循环
do…while循环的使用场景:循环至少循环一次。
do语句的语法结构
do
{
循环语句;
} while (表达式);
三、转向语句
-
break
break的作用:跳出直接所在的那层循环。
若为一层循环直接跳出循环, 若为嵌套循环,以2层为例:在内层循环遇到break是跳到外层循环,在外层循环则跳出循环体。
-
continue
continue的作用:跳过所在循环continue下面的代码,直接回到所在循环的循环条件部分。
注:在循环体内才能使用break和continue。
-
return
return的作用:直接跳出所在的函数体。
-
goto语句
使用goto语句可实现代码执行顺序的跳转。
可用于一步跳出深度嵌套和实现一些简单的循环。
for(...)
{
for (...)
{
for (...)
{
if (disaster)
goto error; //跳出深度嵌套
}
}
……
//error是标记跳转位置的标号,这个标号名是人为命名的
//要与上面goto后面的标号保持一致
error:
if (disaster) // 处理错误情况
注意:goto语句只能在同一个函数内部跳转,不能跨函数跳转。
最后
以上就是妩媚钢笔为你收集整理的破开C语言暗夜的第三道光——控制语句控制语句一、分支语句二、循环语句三、转向语句的全部内容,希望文章能够帮你解决破开C语言暗夜的第三道光——控制语句控制语句一、分支语句二、循环语句三、转向语句所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复