if else 语句是一种选择结构,可以让代码选择执行。所谓选择执行,就是“某些代码可能执行,也可能不执行,有选择地执行某些代码”。

if 的最简单用法

if最简单的格式是:

if(表达式) {语句}

功能:如果表达式为真,就执行下面的语句;如果表达式为假,就不执行下面的语句。

下面给大家写一个程序:#include int main(void) { if (3>2) { printf("I Love Youn"); } return 0; }

运行结果:

I Love You

这个是 if 最简单的程序。首先,前面讲代码规范化的时候讲过,if 与它后面的括号之间要加一个空格。其次,在前面讲过判断“真”、“假”分为两种,一种是数值是否为零,另一种是表达式是否成立。所以上面的程序表达式成立,故执行其下的输出语句。

再将 if 后面的表达式改成数字看看:# include int main(void) { if (2) { printf("I Love Youn"); } return 0; }

运行结果:

I Love You

或这样写:# include int main(void) { int i; if (i = 2) { printf("I Love Youn"); } return 0; }

运行结果:

I Love You

再改成0看看:# include int main(void) { if (0) { printf("I Love Youn"); } return 0; }

编译并运行,什么也不输出。

所以只要 if 后面的表达式成立或非零,就执行其下的语句。表达式为0的时候即假,就不执行其下的语句了。

if 的控制范围问题

这个问题更重要!先给大家写一个程序:# include int main(void) { if (0) printf("I Love Youn"); printf("I Love You Toon"); return 0; }

运行结果:

I Love You Too

为什么“I Love You”没有输出而“I Love You Too”却输出了?因为在C语言中,if 只能控制其后的一个语句。如果要控制多个语句就必须加大括号{}。所以在上面这个程序中 if 只能控制第一个 printf,而 if 后的表达式为 0,所以第一个 printf 不会执行,所以“I Love You”不会输出。而第二个 printf 不在 if 的控制范围内,所以 if 语句执行完之后顺序往下执行第二个 printf,所以“I Love You Too”会输出。

如果希望 if 控制两个 printf 的话就加上大括号,像下面这样:# include int main(void) { if (0) { printf("I Love Youn"); printf("I Love You Toon"); } return 0; }

这样两个printf都不会输出。

但在讲规范化的时候说过,if、else、for、while、do 后面的执行语句不论有多少行,就算只有一行也要加{}。这是规范问题,大家一定要记住。按规范书写就不容易出错,看着也舒服。

if…else 的用法

先给大家写一个程序:# include int main(void) { int i, j; printf("请输入两个数:"); //提示输入 scanf("%d %d", &i, &j); //注意取地址符& if (i>j) { printf("i大于jn"); } else { printf("i小于jn"); } return 0; }

运行结果:

请输入两个数:43 56

i小于j

这里我首先要强调的是:在前面讲 scanf 的时候,为了避免读者产生混乱,有些内容一直未讲,专门放到这里来讲。

前面强调,scanf 中双引号内多个“输入控制符”之间不要加任何“非输入控制符”。但这里我要说的是:可以加一个符号,就是“空格”。

空格在 scanf 中比较特殊,虽然它是“非输入控制符”,但它又算不上是真正的需要“原样输入”。因为就算不加空格,从键盘输入的时候还是要加空格(或回车)。而且在 scanf 中添加一个空格,输入的时候输入 100 个空格也是正确的;在 scanf 中添加 100 个空格,而输入的时候只输入一个空格也是正确的。所以说算不上是真正的“原样输入”。

那么 scanf 中%d之间为什么要加空格呢?原因只有一个——“好看”。如果不加空格的话,看起来就很挤,不好看。但是尽管如此,仍然建议你们什么都不要加,统一思维和用法。在实际编程中也是不要求加空格的,在这里只是告诉你们可以这么做。

下面来看 if…else,上面那个程序是最简单的 if…else 用法。这里主要强调三点:

1) 同样,else 也只能控制到其后的一个语句,如果要控制多个语句的话必须要加大括号{}。但是这里再强调:if、else、for、while、do 后面的执行语句不论有多少行,就算只有一行也要加{}。

1) 代码规范化七大原则的第一个原则是“空行”,前面说过:两个不同的功能块之间要加空行。言外之意就是“两个相同的功能块之间就不需要加空行”。if 和 else 是相同的功能块,所以它们之间不需要加空行。

3) if 可以没有 else 单独使用,这个前面已经应用过了。但如果要用 else,它必须是 if 的一部分。else 绝对不可能脱离if而单独使用,这一点大家一定要注意。

下面将前面那个程序修改一下:# include int main(void) { int i, j; scanf("%d %d", &i, &j); if (i>j) { printf("i大于jn"); } ; else { printf("i小于jn"); } return 0; }

这个程序你觉得有没有错?编译一下发现有一个错误:

illegal else without matching if

意思是:不合法的 else 没有匹配的 if。

为什么会这样?因为在 if 和 else 之间多加了一个分号。在C语言中,一个分号也是一条语句,叫“空语句”,就是一个什么都不执行的语句。若在 if 和 else 中间加了一条语句,就将 else 和 if 分开了,就相当于 else 单独使用了,所以就会报错“没有和else匹配的if”。这个程序也告诉我们,分号不能乱加。

这里顺便给大家介绍一下“三目运算符”。在前面讲优先级的时候提到过它。在整个C语言中只有一个三目运算符,它的格式是:

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

它就相当于:

if (表达式1)

{

表达式2;

}

else

{

表达式3;

}

虽然“三目运算符”的格式看起来代码比较少,但是我们一般都不用。因为那么写看起来很别扭,而且它没有 if…else 的逻辑清晰,所以我们一般还是使用 if…else。这个了解一下就可以了。

if…else if…else 的用法

还记得前面写的一元二次方程的那个程序吗?那个程序就是用 if…else if…else 写的:# include # include int main(void) { //将三个系数保存到计算机中 int a = 1; //“=”不表示相等,而是表示赋值 int b = 2; int c = 1; double delta; //delta存放的是b*b - 4*a*c的值 double x1, x2; //分别用于存放一元二次方程的两个解 delta = b*b - 4*a*c; if (delta > 0) { x1 = (-b + sqrt(delta)) / (2*a); x2 = (-b - sqrt(delta)) / (2*a); printf("该一元二次方程有两个解,x1 = %f, x2 = %fn", x1, x2); } else if (0 == delta) { x1 = (-b) / (2*a); x2 = x1; //左边值赋给右边 printf("该一元二次方程有一个唯一解,x1 = x2 = %fn", x1); } else { printf("无解n"); } return 0; }

if…else if…else 比 if…else 复杂一点,但也很好理解。if…else if…else 的意思就是:“如果”第一个成立,就执行第一个;“否则如果”第二个成立就执行第二个;“否则”就执行第三个。这个应该很好理解吧,与我们平时讲话时的思维逻辑一样。

练习——求分数的等级

下面就来写一个程序,这个程序是目前为止第一个比较有意义的程序。这个程序的功能是“求考试成绩的等级”。即,输入一个考试成绩:如果为 90~100分,就输出“优秀!”;

如果为 80~89 分,就输出“良好!”;

如果为 60~79 分,就输出“及格!”;

如果为 0~59 分,就输出“补考!继续努力!”;

如果分数不在这些范围内就输出“请重新输入!”。#include int main(void) { float score; printf("请输入您的考试成绩:"); scanf("%f", &score); if (score>=90 && score<=100) { printf("优秀!n"); } else if (score>=80 && score<=89) { printf("良好!n"); } else if (score>=60 && score<=79) { printf("及格!n"); } else if (score>=0 && score<=59) { printf("补考!继续努力!n"); } else { printf("请重新输入!n"); } return 0; }

score>=90 && score<=100千万不能写成90<=score<=100,这样写是错误的。这是数学中的写法,在C语言中是不能这么写的。但我并不是说这样写语法有问题,而是说这样写无法实现我们所需要的功能。

在C语言中,90<=score<=100这种写法是允许的,编译的时候不会报错。但如果写成90<=score<=100,那么不管输入多少分,输出都是“优秀!”。大家想想为什么?

因为按照优先级,执行的时候肯定是从左到右,所以肯定是先执行 90<=score。但是 90<=score 的运算结果是一个逻辑值,要么成立,要么不成立。我们前面讲过,逻辑值要么真、要么假,真就是 1,假就是 0。所以不管你输入多少分,90<=score 的执行结果要么是 1,要么是 0,肯定 <=100。所以不管输入多少分,90<=score<=100永远都成立,所以输出的永远都是“优秀!”。所以不能那么写。

下面写一个程序看一下:# include int main(void) { float score = 1000; int i = (90<=score<=100); printf("i = %dn", i); return 0; }

运行结果:

i = 1

不管 score 是多少,90<=score<=100永远都成立,所以 i 永远都是 1。原文始发于:if else用法详解,C语言if else用法完全攻略

c语言写程序if else,if else用法详解,C语言if else用法完全攻略相关推荐

  1. c语言数据类型int的用法,C语言基本数据类型:整型(int)用法详解|C语言学习

    C语言基本数据类型:整型(int)用法详解 1. 整型 int C 语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负.int 是整型之一,一般被称为整型.以后, ...

  2. c语言写程序思路考研题,快速解题 | 在考场C语言编程题

    原标题:快速解题 | 在考场C语言编程题 对于考<C语言程序设计>的小伙伴们来说,程序设计题是很多同学觉得相对较难的一个版块.其题目虽然不算多,但在考研150分的试卷中,却占据了较大的比重 ...

  3. 【牛客刷题】上手用C语言写一个三子棋小游戏超详解哦(电脑优化)

    作者:[南航科院小张 南航科院小张的博客 专栏:从c语言的入门到进阶 学习知识不只是要懂,还要会用:想要找到好的工作,这里给大家介绍一件可以斩获诸多大厂offer的利器–牛客网 点击免费注册和我一起开 ...

  4. C语言基础篇 (二十五) 详解C语言第一大功臣:函数

    文章目录 C语言为什么有函数? 函数书写的一般原则 函数是动词,变量是名词 函数的实质是:数据处理器 函数的基本使用 函数原型和作用 编译器的工作流程 C语言为什么有函数? 1.整个程序分成多个文件, ...

  5. sort在c语言中的作用,c语言中sort的用法详解.docx

    c语言中sort的用法详解.docx C语言中SORT的用法详解C语言的学习很多是比较复杂的,那么C语言中SORT的用法的用法你知道吗下面学习啦小编就跟你们详细介绍下C语言中SORT的用法的用法,希望 ...

  6. C语言高频率--typedef和const用法详解

    一.typedef用法详解 C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 st ...

  7. c语言中getenv的作用,C语言putenv()函数和getenv()函数的使用详解

    C语言putenv()函数和getenv()函数的使用详解 C语言putenv()函数:改变或增加环境变量头文件: #include4 定义函数: int putenv(const char * st ...

  8. php函数find的用法,c语言find函数的用法详解

    c语言find函数的用法详解 C语言之find()函数 find函数用于查找数组中的某一个指定元素的位置. 比如:有一个数组[0, 0, 5, 4, 4]: 问:元素5的在什么位置,find函数 返回 ...

  9. c语言for表达式1的作用,C语言for语句用法详解

    C语言for语句用法详解 C语言是一门高级计算机编程语言,设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言.下面小编给大家介绍C语言f ...

最新文章

  1. 麦肯锡报告:传统车企正面临出行的数字化颠覆
  2. vs2012创建Windows服务
  3. mysql表名查询sql
  4. SAP实施顾问参与主数据搜集的四大好处
  5. 传说之下地图素材_文旅黄陵——轩辕黄帝传说故事(十一) 杜康酿酒的传说...
  6. 【转】一篇比较清晰简单的C++文件操作
  7. (Docker实战) 第五篇:建立持续集成环境02
  8. eclipse启动tomcat 404
  9. java 不同类之间传递数据_java 数据在不同类之间的传递
  10. mysql 岩机_mysql数据库基本应用
  11. 高等数学复习笔记(二)- 一元函数微分学的概念、计算以及几何应用
  12. 许鹏:从零开始学习,Apache Spark源码走读(一)
  13. restTemplate请求设置请求头信息
  14. Windows 10 企业版许可证即将过期怎么办
  15. win7系统mscomctl.ocx不能注册
  16. 目标检测(六):DSSD
  17. cbnertvirtual内部框架下载_快速开发,支持前后端分离,微服务框架
  18. JSON decoding error: Invalid UTF-8 start byte 0xb6
  19. 怎么用matlab编写quad8算法,MATLAB程序设计教程(8)---MATLAB数值积分与微分
  20. php 获取ip地址所在的区域

热门文章

  1. 【计算机网络】知识点整理 第四章 网络层(王道考研视频学习记录)
  2. Kubernetes PVC一直处于Pending状态
  3. 零基础从微软官网制作纯净的U盘启动盘
  4. ATmega16智能遥控小车
  5. 网页中遇到的src=quot;data:image/png;base64,xxxxquot;知识点了解
  6. 企业承担社会责任的必要性
  7. VB.net中字符串转16进制,string转byte,串口发送文本直接转16进制数据
  8. C语言实验:打印日历
  9. Unity摄像机跟随转动分析
  10. telnet 不是内部或外部命令