流程控制语句,或者说控制流语句,是用于控制程序计算操作执行的次序,使我们能实现判断,选择,循环等操作。本篇将逐一描述 C语言中的流程控制语句。

语句与语句块

简单语句

表达式;  

表达式或是变量申明,赋值运算,函数调用等。

语句块

{语句1;语句2;...
}

凡是可以用单条语句的地方也可以用语句块,语句块与单条语句可视为等价,语句块也称为复合语句。在下面的提到的语句均可用语句块代替。

分支结构

  • if 语句
if(表达式)语句1;
else语句2;

如果表达式的值为真(非0),执行语句1,如果为假(0),则执行语句2。(在 C语言中,非零即真)

这里的语句并不单指一条以 ; 为结束符的语句,也可能是多条语句,而是多条语句时,即代码块,最好用 { } 括起来,这样不容易出错,也方便读。

else 部分是可选的,如果不写,表达式的值为真执行语句1,为假不操作,执行后面的代码。

#include <stdio.h>int main ()
{int a, b;a = 1;b = 2;if( a > b )printf("a 的值大 \n");elseprintf("b 的值大 \n");return 0;
}

example

  • else-if 语句
if(表达式1)语句1;
else if(表达式2)语句2;
...
else语句n;

这是编写多路判断的常用方法,如果条件1不成立,则判条件2,如果条件2不成立,则判条件3... 当全部条件都不成立(所有表达式的值都为0),则执行语句n。

通俗来说,就是哪个从上往下,哪个表达式的值先为真,就执行哪个表达式下对应的语句。

#include <stdio.h>int main ()
{int select;printf("请输1~3: ");scanf("%d" ,&select);if( select > 3 || select < 1 ){printf("输入错误!\n");return 0;}if( select == 1 )printf("大师兄,师傅被妖怪抓走啦! \n");else if( select == 2 )printf("大师兄,二师兄,师傅被妖怪抓走啦! \n");elseprintf("大师兄,师傅和二师兄被妖怪抓走啦!~\\(≧▽≦)/~ \n");return 0;
}

example

if 语句可以嵌套使用

if(表达式)if(表达式)if(表达式)...elseelse
else

if 和 else 的匹配准则是: else 与距离它最近的在同一个作用域内的没有被配对的 if 进行匹配。

注意: 在使用 if 语句 要注意同级的(配对的)if 和 else 的起始位置要放在同一列,用 { } 将作用域划分清楚,不容易出错。 

  • switch 语句
switch(表达式){case 常量表达式1:语句1;[break;]case 常量表达式2:语句2;[break;]    ...case 常量表达式n:语句n;[break;]  default:语句n+1;[break;]

[...] 代表可选

switch 语句的执行过程: 首先计算出表达式的值,如果某个case后面的常量表达式N(N取1-n)的值等于 switch 语句中表达式的值,那么就执行该case后的语句N;如果没有,执行 default后的语句n+1。

注意: 如果语句段后面有 break,则执行完语句N后退出 switch语句,否则将继续执行下去,直到遇见 break,如果没有 break,将执行到最后一条switch 语句。

#include <stdio.h>int main ()
{int score;printf("请输入学生的得分: ");scanf("%d" ,&score);if( score > 100 || score < 0 ){printf("输入错误!\n");return 0;}switch(score/10){case 0:case 1:case 2:case 3:case 4:case 5:printf("学生成绩为:差 \n");break;case 6:printf("学生成绩为:及格 \n");break;    case 7:printf("学生成绩为:中 \n");break;case 8:printf("学生成绩为:良 \n");break;default:printf("学生成绩为:优 \n");}return 0;
}

example

switch 语句也可以嵌套

switch(表达式1){case 常量表达式1:switch(表达式2){case 常量表达式2-1:语句1;[break;]case 常量表达式2-2:语句2;[break;]    ...case 常量表达式2-n:语句n;[break;]  default:语句n+1;[break;] }    [break;]case 常量表达式2:语句2;[break;]    ...case 常量表达式n:语句n;[break;]  default:语句n+1;[break;]
}                               

switch嵌套一般形式

注意: 在使用 switch 嵌套时,break 仅仅是终止当前的 switch 语句,而不是退出整个多重 switch 语句。

循环结构

  • while 循环
while(表达式)
{循环体;
}

首先求表达式的值,如果其值为真(非0),则执行循环体,并再次求表达式的值,按照这种模式循环下去,直到求得表达式的值为假(0)为止,之后将跳出循环,执行while循环之后的语句。

example: 逐行打印 0-9 十个数(while)

#include <stdio.h>int main ()
{int a = 0;while( a < 10 ){printf("a 的值: %d\n", a);a++;}return 0;
}

View Code

  • do-while 循环
do{语句;
}while(表达式);

  

do-while 是先执行循环体,再判断表达式的值是否为真,如果为真,继续执行循环体,否则退出循环。

do-while循环与while循环的区别: 由于do-while 是先执行再判断,故无论do-while 的表达式是什么,其循环体至少会执行一次,而while循环是至少0次。

注意: 在 while(表达式)后有一个分号,不能被省略,否则会报错。

example: 逐行打印 0-9 十个数(do-while)

#include <stdio.h>int main ()
{int a = 0;do{printf("a 的值: %d\n", a);a++;}while( a < 10 );return 0;
}

View Code

  • for 循环
for( 表达式1; 表达式2; 表达式3 )语句;

  

表达式1 和 表达式3 是赋值表达式或函数调用,表达式2 是关系表达式。这三个表达式均可省略,但必须保留分号。如果省略表达式2 (测试条件),则认为其值永远是真值;省略表达式1 和表达式3,它就相当于while循环语句。

example: 逐行打印 0-9 十个数(for)

#include <stdio.h>int main ()
{for( int a = 0; a < 10; a++ )printf("a 的值: %d\n", a);return 0;
}

标准版

#include <stdio.h>int main ()
{int a = 0;for( ; a < 10; ){printf("a 的值: %d\n", a);a++;}return 0;
}

省略版

break 语句与 continue语句

break 语句的作用是退出循环结构,在嵌套的 for 语句或者嵌套的 switch 语句退出的是 break 所在的循环结构。

#include <stdio.h>int main ()
{int i;int a[]={2,-1,4,7,-3,8};for( i = 0; i < 6; i++ )if( a[i] < 0 )break;elseprintf("%d \n", a[i]);return 0;
}

View Code

continue 语句是结束本次循环,而非真正退出循环结构。

#include <stdio.h>int main ()
{int i;int a[]={2,-1,4,7,-3,8};for( i = 0; i < 6; i++ )if( a[i] < 0 )continue;elseprintf("%d \n", a[i]);return 0;
}

example

goto 语句

goto 语句也叫无条件转移语句。注意: goto 语句只能在函数内部进行迁移,不能够跨越函数。

goto    语句标号;
...
语句标号:或语句标号:
...
goto    语句标号;

语句标号是 goto 语句转向的目标,语句标号遵循 C语言命名规则,且后有冒号而不是分号。

#include <stdio.h>int main ()
{int num;int sum;num = 0;sum = 0;loop:sum += num;num++;if(num<10)goto loop;printf("sum = %d \n",sum);return 0;
}

example

实际中尽可能少用 goto 语句,如用了,需写清楚注释。

ps: O(∩_∩)O~~

转载于:https://www.cnblogs.com/flamen/p/7000922.html

C语言攻略指南(三)流程控制篇相关推荐

  1. C语言攻略指南(五)数组篇

    数组是指那些具有相同的数据类型的,数量有限的若干个变量通过有序的方法组织起来的一样种便于使用的形式.数组属于派生类型(数组是建立在其他类型的基础上),数组中的变量被称为数组的元素. 一维数组 一维数组 ...

  2. 失落世界服务器国庆宝箱位置,失落的斯菲尔 图文攻略 全剧情任务流程全宝箱收集...

    原标题:失落的斯菲尔 图文攻略 全剧情任务流程全宝箱收集 <失落的斯菲尔>剧情流程图文攻略 游戏介绍: <失落的斯菲尔(Lost Sphear)>是由Tokyo RPG Fac ...

  3. Swift中文教程(三)--流程控制

    Swift中文教程(三)--流程控制 原文:Swift中文教程(三)--流程控制 Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环.条件控制 ...

  4. Android 屏幕适配攻略(三)单位dp与sp

    Android 屏幕适配攻略(三)单位dp与sp 1 一般手机默认使用情况下 在安卓中,一般情况下,也就是正常使用情况下 屏幕密度 对应的标签 对应的像素 sp 120dip ldpi 1dp= 0. ...

  5. Android版疯狂填字第三关,iOS/安卓版《疯狂填字》答案攻略第三十八关

    <疯狂填字>,最创新的填字玩法,挑战你的脑细胞,现在就下载.疯狂填字是最早的在线中文填字游戏,现在你可以在苹果手机上玩填字也可以在安卓手机上面玩,既打发了时间,又增长了知识,你准备好挑战了 ...

  6. 【无标题】三. 流程控制

    三. 流程控制 概述 控制代码的执行的流程. 分类: 顺序执行 分支选择 循环 3.1 流程控制-分支选择 3.1.1 if - 嵌套if class TestIf{public static voi ...

  7. 为什么蓝鸽的听力下载完还是听不了_超实用TOPIK听力全攻略!三步拿下听力高分!...

    这篇宿由分享一些自己的备考经验,关于TOPIK听力部分. 攻略分三个部分:平时训练方法.考场注意事项.常考词汇总结 文末有附上表格资料下载方式,需要的赶紧收藏起来! 激动!做好准备! 初级要求掌握80 ...

  8. 【推免攻略】三.2020年北交计算机学院夏令营、预推免保研经验

    欢迎订阅本专栏:<北交计算机保研经验> 订阅地址:https://blog.csdn.net/m0_38068876/category_10779337.html [推免攻略]一.北交计算 ...

  9. 『黑马全攻略』之入学论坛篇

    一.论坛找到一切 自荐信怎样写?如何更好地自学基础视频?面试都面些什么?你是否对技术分又爱又恨?该如何有效又快速地获得技术分呢?...... 如果你有过这些问题却不知去哪里找寻答案,那就来论坛吧,在论 ...

最新文章

  1. httpWebRequest 错误
  2. python PyQt5教程
  3. 均分纸牌pascal程序
  4. SharpReader的效率:支持meme聚合
  5. codeforces 1038a(找最长的前k个字母出现相同次数的字符串)水题
  6. 记一次el-input使用的坑
  7. 收藏 | EXCEL的36个逆天功能,动画教程
  8. uva 1220——Party at Hali-Bula
  9. RT-Thread对GPIO操作两种方式的区别:1)通过设备操作接口2)直接通过通用GPIO设备驱动
  10. 一个API接口的例子,包括单元测试
  11. git获取管理员权限 windows,windows下git怎么管理权限
  12. 源码阅读:SDWebImage(五)——SDWebImageFrame
  13. java notifyall 唤醒顺序_Java的多线程NotiFyAll()唤醒线程时的顺序问题 | 学步园
  14. [CLS]预训练语言模型的前世今生[SEP]萌芽时代[SEP]
  15. csdn积分c币获取方法
  16. Linux常用编程工具
  17. 第一章 空间解析几何与向量代数(1)
  18. php fpm 报错,php-fpm报错
  19. alooa是华为什么型号_dubalooa什么型号手机 dubalooa华为手机什么型号 - 云骑士一键重装系统...
  20. NRI的统计学意义与临床意义

热门文章

  1. Oracle SQL执行计划操作(9)——位图相关操作
  2. Java——西西弗斯数
  3. 分享JoinQuant 量化策略代码执行过程
  4. 那些令程序员泪流满面的瞬间
  5. 基础——ARM系统的启动流程(boot loader,Linux 内核,文件系统之间的关系)
  6. 小程序蓝牙模块教程--小程序走过的坑(12)(最新版)
  7. mysql 子表_MySQL子查询,派生表和通用表达式
  8. Mabtech丨艾美捷EBI3特异性单克隆抗体
  9. 使用聚合数据短信API测试(短信验证登录)
  10. 原生js实现二级伸缩菜单