今天说一下 C和C++ 的if 条件语句。

在实际编程中,会经常有逻辑判断,比如,输入的数值参数中,如果是奇数,输出This is uneven. 如果是偶数,输出 This is even.

我们在C中这么来写:

 int main()
{
int x;
printf("Please input a number x=");
scanf("%d", &x);
if (x % == )
printf("This is even\n");
else
printf("This is uneven\n");
}

第6行 使用 if 判断,如果 % 2 等于0,说明是偶数。

第8行,else 和第6行的 if 配对,不满足 %2 等于0,说明是偶数。

这里有个题外的基础点, "%" 是模运算,取余数的意思。

1. if 条件使用 () 封装

2. 如果条件语句后只有一句代码,可以不用{} 封装,如果有多条语句,需要使用 {} 来封装。

3. 如果有多种可能,需要使用 else if 后接条件。

接下来,我们要对 if 条件升级。如果输入的数字是偶数,并且小于10,输出This is even less than 10

如果输入数字是奇数并且小于20,输出This is uneven less than 20

否则,输入 Other situation.

代码如下:

 int main()
{
int x;
printf("Please input a number x=");
scanf("%d", &x);
if (x < && x % == )
printf("This is even less than 10\n");
else if (x < && x % != )
printf("This is uneven less than 20\n");
else
printf("Other situation\n");
}

1. 多个条件在一起判断,要求都满足的时候,使用 && 连接,如果满足一个即可,使用 || 连接。

2. 如果是 &&, 第一个条件求值为false,第二个表达式不再执行

3. 如果是 ||, 第一个条件求值为true,第二个表达式不再执行

以上特性被称为短路求值(short evaluation). Visual Basic 不属于短路求值语言。

举个例子,

if (x >  && x++)

以上代码中,如果 x 是下于10 的值,x++ 这句语句不会被执行

if (x >  || ++x == )

以上代码在 x 等于2时,表达式求值为真,会执行 if 分支的语句。

短路求值的应用非常广泛,灵活使用短路求值的特性,能提高程序效率。

第二个例子中,如果 条件语句需要调用别的函数计算,

if (fun1(x) && fun2(x))

如果 fun2 的计算逻辑比 fun1 简单,那么强烈建议把它写为

if (fun2(x) && fun1(x))

如果 fun2的结果返回为 false 时, fun1 不再被调用。这样程序执行效率会更高。

特别是有对指针变量的判断时

if (p != NULL && fun1(p))

如果 fun1 函数的作者没有对空指针的判断,将以上的顺序调换会引起错误。

C和C++从零开始系列(二)的更多相关文章

  1. Nordic NRF51822 从零开始系列(外部设备片—MPU6050DMP驱动的移植)

    一.硬件准备             (1)开发板和软件参看 Nordic NRF51822 从零开始系列(一)开发环境的搭建             (2)mpu6050模块 二.前置知识     ...

  2. 前端构建大法 Gulp 系列 (二):为什么选择gulp

    系列目录 前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gul ...

  3. WPF入门教程系列二十三——DataGrid示例(三)

    DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...

  4. Web 开发人员和设计师必读文章推荐【系列二十九】

    <Web 前端开发精华文章推荐>2014年第8期(总第29期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  5. Web 前端开发人员和设计师必读文章推荐【系列二十八】

    <Web 前端开发精华文章推荐>2014年第7期(总第28期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  6. Web 开发精华文章集锦(jQuery、HTML5、CSS3)【系列二十七】

    <Web 前端开发精华文章推荐>2014年第6期(总第27期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  7. Web 前端开发人员和设计师必读精华文章【系列二十六】

    <Web 前端开发精华文章推荐>2014年第5期(总第26期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  8. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十三】

    <Web 前端开发精华文章推荐>2014年第2期(总第23期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML5 ...

  9. Web 前端开发精华文章推荐(HTML5、CSS3、jQuery)【系列二十二】

    <Web 前端开发精华文章推荐>2014年第一期(总第二十二期)和大家见面了.梦想天空博客关注 前端开发 技术,分享各类能够提升网站用户体验的优秀 jQuery 插件,展示前沿的 HTML ...

随机推荐

  1. 大宇java面试系列(一):jvm垃圾回收

    1. 说一下 JVM 有哪些垃圾回收算法? 标记-清除算法:标记无用对象,然后进行清除回收.缺点:效率不高,无法清除垃圾碎片. 标记-整理算法:标记无用对象,让所有存活的对象都向一端移动,然后直接清除 ...

  2. 一.web服务机制

    web服务机制 我们先跟着**(Web服务器工作原理总体描述01)这张图,将一次Web服务的工作流程过一遍,我们假设以浏览器作为客户端(1) 用户做出了一个操作,可以是填写网址敲回车,可以是点击链接, ...

  3. 领扣(LeetCode)合并两个有序数组 个人题解

    给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 的元素数量分别为 m 和 n. ...

  4. docker中部署项目时遇到的问题

    容器和宿主机时间不同步问题? 将本地时间复制到docker容器内的etc文件夹下即可 docker cp /etc/localtime scrapy_8:/etc/ 启动crontab错误? 报错: ...

  5. [转发]CSR8670的DFU功能

    本文源自:https://blog.csdn.net/wzz4420381/article/details/52371409 作者:RyomaWang 申明:为了保持原作者内容,这里不进行任何修改,后 ...

  6. oracle中两个服务器连接中sys密码修改问题

    问题描述:orcl服务器要连接orclstd 想要sqlplus sys/410526@orclstd as sysdba 连接orclstd数据库,但是发现啥意思密码不对,就对sys密码进行重新设置 ...

  7. Linux -- 信号发送实现

    信号是Linux系统响应某些条件而产生的一个事件,接收该信号的进程会响应地采取一些行动   signal 定义 在进程控制块 (PCB Process Control Block) 的数据结构中,存在 ...

  8. 一文彻底搞懂CAS实现原理 & 深入到CPU指令

    本文导读: 前言 如何保障线程安全 CAS原理剖析 CPU如何保证原子操作 解密CAS底层指令 小结 朋友,文章优先发布公众号,如果你愿意,可否扫文末二维码关注下? 前言 日常编码过程中,基本不会直接 ...

  9. selenium常用命令之操作页面元素及获取元素内容的事件整理

    /**id <input type="text" id="phone" name="phone" class="LoginT ...

  10. https揭秘

    首先简要说明一下所谓的https证书是什么东西:打个比方,你第一次去银行办理业务的时候都需要手持本人身份中去办理业务,这个身份证从哪里来呢,没错,是从国家相关机关得来的,在中国内是通用的,类比到htt ...