C语言之控制语句详解
详解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语言之控制语句详解相关推荐
- c语言的44种运算符,C语言重要知识点总结【9】:C语言运算符(详解)
目录 一.前言 二.运算符分类 三.运算符的优先级 四.常用运算符 1. 算术运算符 2. 关系运算符 3. 逻辑运算符 4. 赋值运算符 5. 条件运算符 6. 逗号运算符 7. 强制类型转换运算符 ...
- 单片机c语言常用的语句有几条,单片机C语言常用语句详解
<单片机C语言常用语句详解>由会员分享,可在线阅读,更多相关<单片机C语言常用语句详解(22页珍藏版)>请在人人文库网上搜索. 1.C51编程中常见语句的总结.首先,C51定义 ...
- 单片机c语言常用语,单片机C语言常用语句详解
<单片机C语言常用语句详解>由会员分享,可在线阅读,更多相关<单片机C语言常用语句详解(22页珍藏版)>请在人人文库网上搜索. 1.C51编程常用语句总结,一.C51定义SFR ...
- (转)C语言位运算详解
地址:http://www.cnblogs.com/911/archive/2008/05/20/1203477.html C语言位运算详解 作者:911 说明:本文参考了http://www2.ts ...
- R语言基础知识详解及概括
R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建
- c语言练习题及答案)(1),c语言练习题(带详解答案)1.pdf
c语言练习题(带详解答案)1 (-2) -1: 一单项选择题 /为求商运算符,该运算符能够对整型.字符.浮点等类型的数 据进行运算,5/2 2 1.(A )是构成C语言程序的基本单位. 11.如果 i ...
- python语言的格式框架_django框架模板语言使用方法详解
本文实例讲述了django框架模板语言使用方法.分享给大家供大家参考,具体如下: 模板功能 作用:生成html界面内容,模版致力于界面如何显示,而不是程序逻辑.模板不仅仅是一个html文件,还包括了页 ...
- python流程控制语句-python学习 流程控制语句详解
###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的 ...
- C语言再学习 -- 详解C++/C 面试题 2
(经典)C语言测试:想成为嵌入式程序员应知道的0x10个基本问题. 参看:嵌入式程序员面试问题集锦 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define ...
最新文章
- 2021年中国工业互联网安全大赛核能行业赛道writeup之日志分析
- java struts2标签库 常用标签
- hdu 1263 水果
- android标尺自定义view,android尺子的自定义view——RulerView详解
- buuctf LSB
- 80040e14 mysql_【ASP】提示错误80040e14
- BeautifulSoup库findAll()、find()方法详解
- 成为软件高手的几个忌讳(转贴)
- java读取、生成图片
- tcp 裸流 发送 html,ffmpeg 命令学习
- python运行需要联网吗_基于python分析你的上网行为 看看你平时上网都在干嘛
- Java中JSON的解析方式
- png图像保存为yuv格式以及yuv格式转为png
- 一笑望穿一千年,笑对繁华尘世间
- Going Deeper with Contextual CNN for Hyperspectral Image Classification
- flyme6 patchrom插桩从入门到放弃
- win10向右键新建中添加可创建的文件类型
- Centos6.5安装后,网络连接显示红叉
- 咨询案例:再来几种利益相关人地图
- 磁盘IO遇到瓶颈时内存Cache的策略