当前位置: 首页 > news >正文

第四章 逻辑运算和判断选择(三)

一、if语句详解

前面讲过程序的三种基本结构顺序结构、选择结构、循环结构。

if语句是选择结构的代表性语句,if语句用来判断给定的条件是否满足, 根据判断的结果(真或者假)决定执行什么样的操作。

1、if语句的三种形式

1)if(判断表达式)语句

如果判断表达式中的条件满足则执行对应的语句(1条或多条语句),否则直接跳过这些语句继续执行后面的内容。

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

如果判断表达式中的条件满足,则执行语句1(1条或多条语句) ,否则执行语句2 (1条或多条语句)。

3、

if(判断表达式)语句1;

else if(判断表达式 2) 语句 2 ;

else if(判断表达式 3) 语句 3;

...

else if(判断表达式 3) 语句 m;

else 语句n;

注意:

1)if后面是个圆括号,通俗地说就是用圆括号把这个判断表达式括起来。

2)如果if语句包含多条语句,必须用{},如果只有1条语句,可以省略{}。

3)if语句可以单独使用,但 else语句不能单独使用 ,必须与if语句配对使用,如果出现了 else,必然会对应一个 if 语句。

2、if语句的嵌套

在 if语句中包含一个或者多个 if语句称为 if语句的嵌套。

为了防止混乱,也为了其他人能够清晰地阅读自己所写的代码,该加{}的地方一定要加,该缩进的地方也一定要缩进。

3、条件运算符和 switch 语句

1)条件运算符

条件表达式:表达式1?表达式2:表达式3

条件表达式中用到的"? :"组合被称为条件运算符, 条件运算符有三个操作对象,也被称为三 自运算符,它是 C 语言中唯一一个三目运算符。

例:

下面是if语句,将 a,b 两个变盘中的最大值赋给 max 变量:

等价于下面的条件运算符:

(a>b)?a:b条件表达式是这样执行的:如果(a>b)的条件为真,则取a的值作为整个表达式的值,否则取b的值作为整个表达式的值。

注意:

(1)条件运算符优先级高于赋值运算符 ,所以是先计算条件表达式的值,再将计算结来赋值给 max。

(2)条件运算符的结合顺序是从右到左

例:a>b?a:c>d?c:d 等价于 a>b?a:(c>d?c:d);

2)switch语句

if语句一般用途是针对两个分支的比较和选择,而 switch语句一般用于处理多分支选择,多分支选择也可以使用 if else if ... else if...语句来实现,但这种连续使用多个 else if实现的多分支选择,可读性不如 switch语句好。

switch(表达式){

case常量表达式1:

1 行或多行语句;

break;

case常量表达式2:

1 行或多行语句;

break;

...

case常量表达式n:

1 行或多行语句;

break;

default:

1 行或多行语句;

break;

}

swirch后面表达式的值若满足(等于)任何某个 case后面的常量表达式值,则执行case后面的 1行或多行语句 ,直到遇到 break语句停止,然后跳出整个switch语句并继续 switch后面语句的执行,如果所有 case条件都不满足,则会执行default 中包含的1行或多行语句 ,然后跳出整个 switch 语句。

例:

说明:

(1)switch 后面的表达式,可以是整型表达式,也可以是字符型表达式 ,甚至可以是枚举型数据(后面会讲到)。还可能是其他类型表达式,但那比较罕见。

(2)每个 case后面的常量表达式值彼此之间必须互不相同,不然会出现编译错误。

(3)各个 case之间、case和 default之间的顺序没有影响,谁在上面,谁在下面都可以。

(4)一定不要忘记 break语句,每个case的最后,以及 default的最后,都有一个break,否则,程序执行会出现问题。

(5)case 中如果包含多行语句,并不需要使用{}将多行语句括在一起 ,case条件一旦满足 ,会自动顺序执行本case后面的所有语句。也有人习惯用{}把要执行的语句括起来,这也完全可以。

(6)default可以没有,那么当所有 case条件都不满足,整个 switch就不被执行。

(7)多个 case 条件可以紧挨着写在 一起,从而在其中任意一个条件成立时共用一组执行行语句。

case 3:

case 4:

printf("值为3或4\n"); //switch后表达式的值为3或4都执行这行代码

break;

相关文章:

  • Hazelcast分布式内存网格(IMDG)基本使用,使用Hazelcast做分布式内存缓存
  • 【刷题篇】动态规划(七)
  • vue-打包后的dist文件如何在本地测试
  • 选择法排序
  • 什么是Scss
  • mysql,根据学生成绩计算各个分数段学生数量,以及最高分最低分平均分
  • JVM 性能调优
  • Airtest使用的图像识别算法识别比较慢解决办法,改变算法的运算顺序或者指定一种算法,提高Airtest图像识别效率
  • SpringBoot集成WebSocket
  • 软件项目管理---胡乱复习版
  • 虚幻学习笔记10—C++函数与蓝图的通信
  • C++STL的vector模拟实现
  • 现代皮质沙发模型材质编辑
  • React中父子之间数据的通信方式
  • 托盘四向穿梭车自动化密集库供应|单机智能向系统智能跨越的HEGERLS托盘四向车系统
  • [笔记] php常见简单功能及函数
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • exports和module.exports
  • JS基础之数据类型、对象、原型、原型链、继承
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • ReactNativeweexDeviceOne对比
  • Redis 懒删除(lazy free)简史
  • Sass 快速入门教程
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Spark学习笔记之相关记录
  • unity如何实现一个固定宽度的orthagraphic相机
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • vue-cli3搭建项目
  • vue--为什么data属性必须是一个函数
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 你不可错过的前端面试题(一)
  • Linux权限管理(week1_day5)--技术流ken
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​Linux·i2c驱动架构​
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • !!Dom4j 学习笔记
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #pragma pack(1)
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (十一)图像的罗伯特梯度锐化
  • (五)Python 垃圾回收机制
  • (一)Thymeleaf用法——Thymeleaf简介
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转) RFS+AutoItLibrary测试web对话框
  • (转载)OpenStack Hacker养成指南
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .htaccess 强制https 单独排除某个目录
  • .net2005怎么读string形的xml,不是xml文件。