19-分支和循环语句_if语句switch语句(初阶)

19-1 概览

分支语句:if、switch

循环语句:while、for、do while

goto语句

以上都属于控制语句

19-2 语句的分类

C语句可分为以下五类:

表达式语句、函数调用语句、控制语句、复合语句、空语句

19-3 结构

C语言是结构化的程序设计语言

顺序结构:

选择结构:if、switch

循环结构:for、while、do while

19-4 控制语句 

控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句,可分为以下三类:

1、条件判断语句也叫分支语句:if语句、switch语句;

2、循环执行语句: do while语句、while语句、for语句;

3、转向语句: break语句、goto语句、continue语句、return语句。

19-5 分支语句(选择结构)

19-5-1 if语句

语法结构:

if (表达式)语句;if (表达式)语句1;
else语句2;//多分支
if (表达式1)语句1;
else if (表达式2)语句2;
else语句3;

注:if语句默认控制一条语句,如果后面跟多条语句,要跟上{};else同理

猜猜会输出什么?

int main()
{int age = 10;if(18<=age<28){printf("青年\n");}return 0;
}

运行结果:

为什么10不在这个范围内,还能输出“青年”呢?

因为编译器从左往右判断:18<=age,不正确,为假,所以为0;0<28,正确,所以执行

注意:C语言中0为假,非0为真

所以我们应该这样写:

int main()
{int age = 10;if(18 <= age && age < 28){printf("青年\n");}return 0;
}

 不再输出了:

代码块:一对{}就是一个代码块

悬空else

 这个代码会输出什么?

int main()
{int a = 0;int b = 2;if (a == 1)if (b == 2)printf("hehe\n");elseprintf("haha\n");return 0;
}

运行结果:

什么都没有?!

其实把这段代码写在VS里面是这样的:

int main()
{int a = 0;int b = 2;if (a == 1)if (b == 2)printf("hehe\n");elseprintf("haha\n");return 0;
}

 所以esle是与离它最近的if匹配的

同时,我们也要注意代码风格的规范性,这样的话不仅美观,也便于我们理解

代码规范

1、变量的命名(有意义,规范)

char firstname[20] = 0;  //普通命名
char first_name[20] = 0;  //加下划线
char FirstName[20] = 0;  //首字母大写

2、空格,空行,换行

int a = 10;  //有空格
int a=10;  //无空格

考虑下列代码的输出:

int test()
{int a = 1;if (a == 1)return 1;return 0;
}
int main()
{int r = test();printf("%d\n", r);return 0;
}

 输出结果如下:

其实,test函数的意思就是,如果a=1,就返回1;如果a不等于1,就返回0

但是,该函数里并没有else,可能会误导阅读代码的人:无论a是否等于1,都要返回0

所以,我们应该把代码写得尽量规范:

int test()
{int a = 1;if (a == 1)return 1;elsereturn 0;
}
int main()
{int r = test();printf("%d\n", r);return 0;
}

让编译器指出错误

如果你想要判断是否相等,可以写成这样:

int main()
{int num = 2;if (5 == num){printf("hehe\n");}return 0;
}

这样如果你不小心少写一个=,编译器会报错:

否则,编译器不会报错,编译器会觉得你在赋值,并没有语法错误

练习

判断一个数是否为奇数

//判断一个数是否为奇数
int main()
{int a = 0;scanf("%d", &a);if (a % 2){printf("YES\n");}else{printf("NO\n");}return 0;
}

测试1: 

测试2: 

 输出1-100之间的奇数

代码1

//输出1-100之间的奇数
int main()
{int a = 1;while (a < 101){if (a % 2){printf("%d ", a);}a++;}return 0;
}

 结果如下:

代码2:

//输出1-100之间的奇数
int main()
{int a = 1;while (a < 101){printf("%d ", a);a+=2;}return 0;
}

19-5-2 switch语句 

当分支过多,if-else语句过于复杂,这个时候可以采用switch语句

语法结构:

switch(整型表达式)
{语句项;
}

 注:表达式必须是整型 

语句项:

case 整型常量表达式:语句;

 注:表达式必须是整型,并且是常量,字符也是可以的,因为字符对应的ASCII码值是整型常量

代码举例:

int main()
{int day = 0;scanf("%d", &day);switch(day){case 1:printf("星期一\n");case 2:printf("星期二\n");case 3:printf("星期三\n");case 4:printf("星期四\n");case 5:printf("星期五\n");case 6:printf("星期六\n");case 7:printf("星期日\n");}return 0;
}

运行结果:

为什么会出现这种情况呢?

原因:case只决定了入口,不决定出口

switch语句从哪里跳出去呢?

要用break

int main()
{int day = 0;scanf("%d", &day);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;}return 0;
}

运行结果如下:

 改变要求:

1、输入1-5,输出“weekday”

2、输入6-7,输出“weekend”

我们当然可以直接对上面的进行修改,也可以这样简化,实现多个case匹配同一个语句的效果

int main()
{int day = 0;scanf("%d", &day);switch (day){case 1:case 2:case 3:case 4:case 5:printf("weekday\n");break;case 6:case 7:printf("weekend\n");break;}return 0;
}

测试1:

测试2:

编程好习惯:

最后一个break加不加好像都可以,但是还是建议加上,万一以后还要延续呢?这是一个良好的编程习惯。

default

如果表达的值与所有的case标签的值都不匹配怎么办?其实也没什么,结果就是所有的语句都被跳过而已。

程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?你可以在语句列表中增加一条default子句,把下面的标签:

default:

写在任何一个case标签可以出现的位置。

当switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。

所以,每个switch语句中只能出现一条default子句。

所有case都不能匹配,就会走到default:

int main()
{int day = 0;scanf("%d", &day);switch (day){case 1:case 2:case 3:case 4:case 5:printf("weekday\n");break;case 6:case 7:printf("weekend\n");break;default:printf("输入错误!\n");break;}return 0;
}

运行结果:

练习

下列代码的输出是什么?

int main()
{int n = 1;int m = 2;switch (n){case 1:m++;case 2:n++;case 3:switch (n){case 1:n++;case 2:m++; n++;break;}case 4:m++;break;default:break;}printf("m=%d n=%d\n", m,n);return 0;
}

结果如下:
 

解释:

int main()
{int n = 1;int m = 2;switch (n)  //n=1,跳到case1{case 1:m++;  //m=3,没有break,继续向下走case 2:n++;  //n=2case 3:switch (n)  //n=2,跳到case2{case 1:n++;case 2:m++; n++;  //m=4,n=3break;  //只是在这个switch里结束了}case 4:m++;  //m=5break;default:break;}printf("m=%d n=%d\n", m,n);  //m=5 n=3return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2868915.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【ollama】(5):在本地使用docker-compose启动ollama镜像,修改模型存储位置,并下载qwen-0.5b模型,速度飞快

1&#xff0c;ollama项目 Ollama 是一个强大的框架&#xff0c;设计用于在 Docker 容器中部署 LLM。Ollama 的主要功能是在 Docker 容器内部署和管理 LLM 的促进者&#xff0c;它使该过程变得非常简单。它帮助用户快速在本地运行大模型&#xff0c;通过简单的安装指令&#xf…

最迟但到的 Star History 2023 年度开源精选!

千呼万唤始出来&#xff0c;Star History 2023 年终开源精选来啦&#xff01;&#x1f389; AI 是 2023 开源领域里最主要的关键词&#xff0c;但其实过去一年还是有很多其他值得关注的项目和发展趋势的&#xff01;Star History 小编总结了几个类别并精选了类别中最亮眼的项目…

2024年【危险化学品经营单位主要负责人】找解析及危险化学品经营单位主要负责人模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位主要负责人找解析考前必练&#xff01;安全生产模拟考试一点通每个月更新危险化学品经营单位主要负责人模拟考试题目及答案&#xff01;多做几遍&#xff0c;其实通过危险化学品经营单位主要负责人…

lua脚本的基础内容

官方地址&#xff1a;http://luajit.org/ 官方wiki地址&#xff1a;http://wiki.luajit.org/Home 推荐书籍&#xff1a; OpenResty 最佳实践&#xff1a;https://moonbingbing.gitbooks.io/openresty-best-practices/content/ lua基础文档&#xff1a;https://www.runoob.com/l…

【Machine Learning】Suitable Learning Rate in Machine Learning

一、The cases of different learning rates: In the gradient descent algorithm model: is the learning rate of the demand, how to determine the learning rate, and what impact does it have if it is too large or too small? We will analyze it through the follow…

vmware workstation虚拟机报错”该虚拟机似乎正在使用中“

虚拟机报错&#xff1a; 解决方法&#xff1a; 进入到虚拟机的安装目录里&#xff0c;将lck结尾的文件删掉即可 重新点击虚拟机恢复正常

MIT线性代数-方程组的几何解释

文章目录 1. 二维空间1.1 行方向1.2 列方向 2. 三维空间2.1 行方向2.2 列方向 假设有一个方程组 A X B AXB AXB表示如下 2 x − y 0 (1) 2x-y0\tag{1} 2x−y0(1) − x 2 y 3 (2) -x2y3\tag{2} −x2y3(2) 矩阵表示如下&#xff1a; [ 2 − 1 − 1 2 ] [ x y ] [ 0 3 ] (3)…

DataGrip 面试题及答案整理,最新面试题

DataGrip的数据库兼容性和多数据库支持如何实现&#xff1f; DataGrip实现数据库兼容性和多数据库支持的方式包括&#xff1a; 1、广泛的数据库支持&#xff1a; DataGrip支持多种数据库&#xff0c;包括但不限于MySQL, PostgreSQL, SQL Server, Oracle, SQLite, 和MongoDB&a…

Leet code 179 最大数

解题思路 贪心算法 贪心算法就是走一步看一步 每一步都取当前位置的最优解 这题我们该如何贪呢&#xff1f; 我们先把int数组转换为string数组 以示例2为例 3 30 34 5 9 排序哪个在前哪个在后&#xff1f; 3 30 &#xff08;330&#xff09;> 30 3 &#xff08;30…

进程学习--02

在C语言中&#xff0c;一般使用fork函数开辟进程&#xff0c;这个函数开辟进程后会返回一个进程号&#xff0c;在子进程中会返回0&#xff0c;在父进程中会返回子进程的进程号。 int main(){int ret fork();if(ret<0){fprintf(stderr, "pid error");exit(-1);}e…

进入jupyter notebook发现没有虚拟环境,最简单实用的解决办法!

jupyter notebook 1. 进入jupyter notebook发现没有虚拟环境2.解决办法2.1 检查是否有库ipykernel&#xff0c;我发现我没有2.2 开始安装ipykernel2.3 将虚拟环境写入 总结 1. 进入jupyter notebook发现没有虚拟环境 2.解决办法 2.1 检查是否有库ipykernel&#xff0c;我发现我…

提升口才表达能力的重要性与途径

提升口才表达能力的重要性与途径 口才表达能力&#xff0c;即一个人通过口头语言准确、流畅、生动地传达思想、情感和观点的能力&#xff0c;是现代社会中不可或缺的一项基本技能。无论是在职场沟通、人际交往还是公共场合发言&#xff0c;优秀的口才表达能力都能为我们带来诸…

【编程项目开源】拼图游戏(鸿蒙版)

目标 做个拼图游戏 效果 开发工具 下载DevEco Studio 工程截图 开源地址 https://gitee.com/lblbc/puzzle/tree/master/puzzle_hongmeng_arkUI 关于 厦门大学计算机专业|华为八年高级工程师 专注《零基础学编程系列》 http://lblbc.cn/blog 包含&#xff1a;Java | 安卓…

代码随想录 -- 回溯算法

文章目录 回溯算法理论什么是回溯法回溯法的效率回溯法解决的问题理解回溯法回溯法模板 组合问题I描述题解优化 组合总和III描述题解 电话号码的字母组合描述题解 组合总和描述题解 组合总和II描述题解 分割回文串描述题解 复原IP地址描述题解 子集描述题解 子集II描述题解 递增…

代码随想录训练营Day24:● 理论基础 ● 77. 组合

理论基础 回溯算法解决的问题 回溯法&#xff0c;一般可以解决如下几种问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集合 切割问题&#xff1a;一个字符串按一定规则有几种切割方式 子集问题&#xff1a;一个N个数的集合里有多少符合条件的子集 排列…

腾讯云图形验证码的PHP示例

需要准备的 1.API密钥 SecretId 及 SecretKey 两部分&#xff0c; SecretId 用于标识 API 调用者的身份&#xff0c; SecretKey 用于加密签名字符串和服务器端验证签名字符串的密钥。 前往API密钥管理页面&#xff0c;即可进行获取 https://console.cloud.tencent.com/cam/ca…

swagger踩坑之请求类不显示具体字段

swagger踩坑之请求类不显示具体字段 省流&#xff1a;枚举字段需要加上ApiModelProperty注解 过程复现&#xff1a; TestEnum 枚举不加注解&#xff0c;swagger的UI类不显示详细字段 Data Accessors(chain true) ApiModel(value "test对象", description &quo…

基于SSM SpringBoot vue办公自动化计划管理系统

基于SSM SpringBoot vue办公自动化计划管理系统 系统功能 登录注册 个人中心 员工信息管理 部门信息管理 会议管理 计划管理 行程安排管理 行程进度管理 管理员管理 开发环境和技术 开发语言&#xff1a;Java 使用框架: SSM(Spring SpringMVC Mybaits)或SpringBoot 前端…

空间解析几何之直线与平面:推导直线与直线、直线与平面交点

空间解析几何——直线与平面 三维空间中的直线和平面与二维空间中的性质有一定的类似之处&#xff0c;但是其相交关系的求解方式有所差异。本文回顾了三维空间中直线和平面的解析表达&#xff0c;然后推导线-线、线-面交点。 平面 空间平面的表达式为&#xff1a; A x B y…

Java面向对象案例之描述专业和学生(4)

类的方法图 学生类&#xff1a; 属性&#xff1a;学号&#xff0c;姓名&#xff0c;年龄&#xff0c;所学习的专业方法&#xff1a;学习的方法&#xff0c;描述学习状态。描述内容包括姓名、学号、年龄、所学习的专业信息 专业类&#xff1a; 属性&#xff1a;专业编号&#xf…