详解C语言中的控制语句

  • 分支语句
    • 1、if语句
    • 2、switch...case语句
  • 循环语句
    • 1、while循环
    • 2、for循环
    • 3、do...while循环
  • goto语句

C语言中的语句包括:表达式语句、函数调用语句、控制语句、复合语句以及空语句。
今天主要写一下关于控制语句部分

分支语句

1、if语句

if语句不仅可以用来实现单分支,而且可以实现双分支多分支

单分支的语法结构:
if(表达式)
语句;

#include <stdio.h>int main()
{int age = 0;scanf("%d", &age);//单分支if (age >= 18){printf("成年\n");}return 0;
}

双分支的语法结构:
if(表达式1)
语句1;
else
语句2;

#include <stdio.h>int main()
{if (age >= 18){printf("成年\n");}else{printf("未成年\n");}return 0;
}

多分支的语法结构:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;

#include <stdio.h>
int main()
{if (age < 18){printf("未成年\n");}else if (age >= 18 && age < 25){printf("青年\n");}else if(age >= 25 && age < 35){printf("中年\n");}else if (age >= 35 && age < 55){printf("壮年\n");}else if (age >= 55 && age < 80){printf("老年\n");}else{printf("老寿星!\n");}return 0;
}

if语句使用过程中的注意事项:
1、if语句默认只能控制一条语句,因此,当执行的语句大于等于两条时,需要加入代码块{};
2、else总是与离它最近的if语句相匹配;

2、switch…case语句

switch…case的语法结构:
switch(整型表达式)
{
case 整型常量表达式:
语句;
}

#include <stdio.h>int main()
{int day = 0;scanf("%d", &day);//switch语句中case时入口,break是出口switch (day){case 1:printf("周一\n");break;case 2:printf("周二\n");break;case 3:printf("周三\n");break;case 4:printf("周四\n");break;case 5:printf("周五\n");break;case 6:printf("周六\n");break;case 7:printf("周日\n");break;default:printf("输入错误!\n");break;}return 0;
}

注意:
1、若case后面没有break,程序不会跳出switch语句,会接着往后面执行,因此,switch…case语句中case决定入口,break决定出口。
2、default子句用来处理与case都不匹配的情况。

接下来实现:
周一到周五输出工作日,周六和周日输出休息日,其他则输出输入错误!
这里就可以使用break语句来控制输出。

#include <stdio.h>int main()
{int day = 0;scanf("%d", &day);//switch语句中case时入口,break是出口switch (day){case 1:case 2:case 3:case 4:case 5:printf("工作日\n");break;case 6:case 7:printf("休息日\n");break;default:printf("输入错误!\n");break;}return 0;
}

循环语句

1、while循环

while的语法结构:
while(表达式)
语句;
while语句默认只能控制一条语句,因此,当执行的语句大于等于两条时,需要加入代码块{};

#include <stdio.h>int main()
{int i = 1;while (i <= 10){printf("%d ", i);i++;}return 0;
}

while循环中break和continue的作用:

采用下面两个代码进行分析

//代码1
int main()
{int i = 1;while (i <= 10){if (i == 5){break;}printf("%d ", i);i++;}return 0;
}

由运行结果可知:i等于5时,break语句执行后,while循环终止了。

//代码2
#include <stdio.h>int main()
{int i = 1;while (i <= 10){         if (i == 5){continue;}printf("%d ", i);i++;}return 0;
}

由运行结果可知:i等于5时,continue语句执行后,引起代码死循环,这是因为continue语句执行后,跳过了i++的语句,使得i一直等于5,执行continue语句。
为了避免上述的死循环,可以将i++放在continue的前面,这样的话
continue执行后只会跳过打印5的操作,i++语句会正常执行,i变成6。

#include <stdio.h>int main()
{int i = 0;while (i < 10){i++;if (i == 5){continue;}printf("%d ", i);}return 0;
}


由上述分析可知:

while循环中break的作用时永久终止循环;continue的作用是跳过本次continue后面的语句,直接来到表达式的判断部分,进行下一次循环的判断。

2、for循环

for的语法结构:
for(表达式1;表达式2;表达式3)
循环语句;
for语句默认只能控制一条语句,因此,当执行的语句大于等于两条时,需要加入代码块{};

#include <stdio.h>int main()
{int i = 0;for (i = 1; i <= 10; i++){printf("%d ", i);}return 0;
}

for语句中break和continue的作用,采用下述两个代码进行分析:

//代码1
#include <stdio.h>int main()
{int i = 0;for (i = 1; i <= 10; i++){if (i == 5){break;}printf("%d ", i);}return 0;
}

由运行结果可知:i等于5时,break语句执行后,for循环终止了。

//代码2
#include <stdio.h>int main()
{int i = 0;for (i = 1; i <= 10; i++){if (i == 5){continue;}printf("%d ", i);}return 0;
}

由运行结果可知:i等于5时,continue语句执行后,跳过了打印5的操作,因此输出结果为1 2 3 4 6 7 8 9 10;

由上述分析可知:

for循环中break的作用时永久终止循环;continue的作用是跳过本次continue后面的语句,直接来到控制变量的调整部分,调整完之后再去判断是否满足下一次的循环。

注意:for循环的使用过程中,控制变量的初始化、判断以及调整部分均可以省略,不过当判断部分省略时,默认判断结果恒为真

3、do…while循环

do…while的语法结构:
do
循环体;
while(表达式);
do…while语句默认只能控制一条语句,因此,当执行的语句大于等于两条时,需要加入代码块{};

#include <stdio.h>int main()
{int i = 1;do{printf("%d ", i);i++;} while (i <= 10);return 0;
}

do…while语句中break和continue的作用,采用下述两个代码进行分析:

//代码1
#include <stdio.h>int main()
{int i = 1;do{if (i == 5){break;}printf("%d ", i);i++;} while (i <= 10);return 0;
}

由运行结果可知:i等于5时,break语句执行后,do…while循环终止了。

//代码2
#include <stdio.h>int main()
{int i = 1;do{if (i == 5){continue;}printf("%d ", i);i++;} while (i <= 10);return 0;
}

由运行结果可知:i等于5时,continue语句执行后,引起代码死循环,这是因为continue语句执行后,跳过了i++的语句,使得i一直等于5,执行continue语句。
这里类似while语句中的continue循环
所以大家可以自己写代码试试怎么可以避免这种死循环,让结果输出1 2 3 4 6 7 8 9 10

由上述分析可知:

do…while循环中break的作用时永久终止循环;continue的作用是跳过本次continue后面的语句,直接来到表达式的判断部分,进行下一次循环的判断。

goto语句

C语言中使用goto语句可以跳到程序的任意位置。

#include <stdio.h>int main()
{printf("haha\n");goto flag;printf("hehe\n");
flag:printf("gaga\n");return 0;
}

这里使用goto语句,程序执行完goto flag后直接调到flag的标识处。
goto语句在跳出多层循环的嵌套时具有很大的优势,因为采用break时有几层循环就需要使用几个break语句,而使用goto语句则可以一次跳出多层循环的嵌套。

#include <stdio.h>int main()
{int i = 0; int j = 0;int k = 0;for (k = 1; k < 5; k++){for (j = 1; j < 5; j++){for (i = 1; i < 5; i++)if (i == 3){goto flag;}}}
flag:printf("haha\n");return 0;
}

上述代码中,利用goto flag直接跳到printf(“haha\n”),一次性跳出三层循环。因此,当需要跳出多层循环的嵌套时,使用goto语句就会非常的方便。

不好意思,最近课题有点忙,导致更新有点慢,后续会抽出更多时间和大家一起分享C语言部分,也会分享一些自己目前所做的课题,希望大家可以一起进步!
如果大家在阅读过程中有问题,可以留言,我会尽可能回答大家的问题的;若有错误,也希望可以留言,大家一起进步鸭!!!
如果这些文章对您有帮助的话,我会很开心的!

C语言之控制语句详解相关推荐

  1. c语言的44种运算符,C语言重要知识点总结【9】:C语言运算符(详解)

    目录 一.前言 二.运算符分类 三.运算符的优先级 四.常用运算符 1. 算术运算符 2. 关系运算符 3. 逻辑运算符 4. 赋值运算符 5. 条件运算符 6. 逗号运算符 7. 强制类型转换运算符 ...

  2. 单片机c语言常用的语句有几条,单片机C语言常用语句详解

    <单片机C语言常用语句详解>由会员分享,可在线阅读,更多相关<单片机C语言常用语句详解(22页珍藏版)>请在人人文库网上搜索. 1.C51编程中常见语句的总结.首先,C51定义 ...

  3. 单片机c语言常用语,单片机C语言常用语句详解

    <单片机C语言常用语句详解>由会员分享,可在线阅读,更多相关<单片机C语言常用语句详解(22页珍藏版)>请在人人文库网上搜索. 1.C51编程常用语句总结,一.C51定义SFR ...

  4. (转)C语言位运算详解

    地址:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html C语言位运算详解 作者:911 说明:本文参考了http://www2.ts ...

  5. R语言基础知识详解及概括

    R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建

  6. c语言练习题及答案)(1),c语言练习题(带详解答案)1.pdf

    c语言练习题(带详解答案)1 (-2) -1: 一单项选择题 /为求商运算符,该运算符能够对整型.字符.浮点等类型的数 据进行运算,5/2 2 1.(A )是构成C语言程序的基本单位. 11.如果 i ...

  7. python语言的格式框架_django框架模板语言使用方法详解

    本文实例讲述了django框架模板语言使用方法.分享给大家供大家参考,具体如下: 模板功能 作用:生成html界面内容,模版致力于界面如何显示,而不是程序逻辑.模板不仅仅是一个html文件,还包括了页 ...

  8. python流程控制语句-python学习 流程控制语句详解

    ###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的 ...

  9. C语言再学习 -- 详解C++/C 面试题 2

    (经典)C语言测试:想成为嵌入式程序员应知道的0x10个基本问题. 参看:嵌入式程序员面试问题集锦 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define ...

最新文章

  1. 2021年中国工业互联网安全大赛核能行业赛道writeup之日志分析
  2. java struts2标签库 常用标签
  3. hdu 1263 水果
  4. android标尺自定义view,android尺子的自定义view——RulerView详解
  5. buuctf LSB
  6. 80040e14 mysql_【ASP】提示错误80040e14
  7. BeautifulSoup库findAll()、find()方法详解
  8. 成为软件高手的几个忌讳(转贴)
  9. java读取、生成图片
  10. tcp 裸流 发送 html,ffmpeg 命令学习
  11. python运行需要联网吗_基于python分析你的上网行为 看看你平时上网都在干嘛
  12. Java中JSON的解析方式
  13. png图像保存为yuv格式以及yuv格式转为png
  14. 一笑望穿一千年,笑对繁华尘世间
  15. Going Deeper with Contextual CNN for Hyperspectral Image Classification
  16. flyme6 patchrom插桩从入门到放弃
  17. win10向右键新建中添加可创建的文件类型
  18. Centos6.5安装后,网络连接显示红叉
  19. 咨询案例:再来几种利益相关人地图
  20. 磁盘IO遇到瓶颈时内存Cache的策略

热门文章

  1. Python 抽扑克牌游戏
  2. 看看一位清华计算机专业的学生怎么看LINUX与WINDOWS的
  3. SQLiteSpy执行Sql语句提示No such collation sequence : PhoneBook
  4. YOLOv5实现吸烟行为检测
  5. Unity 3D模型展示之webGL平台展现
  6. 一款拥有漂亮外表的Typecho简洁主题-Scarfskin
  7. kubevirt 存储 网络 监控
  8. 10019---访问远程Redis服务。Connect to Remote Redis Server
  9. 软件系统开发费用的估算——功能点方法 应用实例
  10. 巧用Hosts文件 杀掉麻烦的IE浏览器弹出窗口