Linux. C语言中else,if else用法详解,C语言if else用法完全攻略
if else 语句是一种选择结构,可以让代码选择执行。所谓选择执行,就是“某些代码可能执行,也可能不执行,有选择地执行某些代码”。
if 的最简单用法
if最简单的格式是:
if(表达式) {语句}
功能:如果表达式为真,就执行下面的语句;如果表达式为假,就不执行下面的语句。
下面给大家写一个程序:
#include
int main(void)
{
if (3>2)
{
printf("I Love You\n");
}
return 0;
}
运行结果:
I Love You
这个是 if 最简单的程序。首先,前面讲代码规范化的时候讲过,if 与它后面的括号之间要加一个空格。其次,在前面讲过判断“真”、“假”分为两种,一种是数值是否为零,另一种是表达式是否成立。所以上面的程序表达式成立,故执行其下的输出语句。
再将 if 后面的表达式改成数字看看:
# include
int main(void)
{
if (2)
{
printf("I Love You\n");
}
return 0;
}
运行结果:
I Love You
或这样写:
# include
int main(void)
{
int i;
if (i = 2)
{
printf("I Love You\n");
}
return 0;
}
运行结果:
I Love You
再改成0看看:
# include
int main(void)
{
if (0)
{
printf("I Love You\n");
}
return 0;
}
编译并运行,什么也不输出。
所以只要 if 后面的表达式成立或非零,就执行其下的语句。表达式为0的时候即假,就不执行其下的语句了。
if 的控制范围问题
这个问题更重要!先给大家写一个程序:
# include
int main(void)
{
if (0)
printf("I Love You\n");
printf("I Love You Too\n");
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 You\n");
printf("I Love You Too\n");
}
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大于j\n");
}
else
{
printf("i小于j\n");
}
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大于j\n");
}
;
else
{
printf("i小于j\n");
}
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 = %f\n", x1, x2);
}
else if (0 == delta)
{
x1 = (-b) / (2*a);
x2 = x1; //左边值赋给右边
printf("该一元二次方程有一个唯一解,x1 = x2 = %f\n", 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 = %d\n", i);
return 0;
}
运行结果:
i = 1
不管 score 是多少,90<=score<=100永远都成立,所以 i 永远都是 1。
Linux. C语言中else,if else用法详解,C语言if else用法完全攻略相关推荐
- C语言中的sscanf()函数使用详解
这篇文章主要介绍了C语言中的sscanf()函数使用详解,文中附加了一道相关的ACM题目进行补充巩固,需要的朋友可以参考下 文章引用自:https://www.jb51.net/article/711 ...
- C语言中for循环的使用详解及注意点
C语言中for循环的使用详解及注意点 1.for语句的格式 2.for语句循环示例 3.注意 4.与while语句的比较 5.典型例题 1.for语句的格式 for(表达式1;表达式2;表达式3){循 ...
- c语言指定变量地址,C语言中 “_at()” 特殊地址定位详解
C语言中 "_at()" 特殊地址定位详解 在keil里面,有一个特殊地址定位的指令,就是将一个变量或常量定位到一个指定的地址上面 指令为 __at ,使用方法如下 int var ...
- C语言中fscanf的作用,C语言中fgets和fscanf区别详解
搜索热词 C语言中fgets和fscanf区别详解 一.作用上的大概区别: ①fgets:从文件中读取一行数据存入缓冲区(fgets遇到回车才会结束,不对空格和回车做任何转换就录入到缓冲区,结束后再往 ...
- c语言putchar与getchar,C语言中的getchar和putchar详解
首先给出<The_C_Programming_Language>这本书中的例子: #include int main() { int c; c = getchar(); while (c ...
- c语言数据类型int的用法,C语言基本数据类型:整型(int)用法详解|C语言学习
C语言基本数据类型:整型(int)用法详解 1. 整型 int C 语言提供了很多整数类型(整型),这些整型的区别在于它们的取值范围的大小,以及是否可以为负.int 是整型之一,一般被称为整型.以后, ...
- python中的super用法详解_Python中super函数用法实例分析
本文实例讲述了python中super函数用法.分享给大家供大家参考,具体如下: 这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简 ...
- java if 用法详解_Java if判断语句用法详解
Java if判断语句用法详解 if关键字中文意思是如果,其细致的语法归纳来说总共有三种:if语句.if-else语句和if-else if-else语句,下面重点介绍if语句. if语句 语法 if ...
- C语言中static关键字的作用详解,全网最透彻
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有 ...
- c语言status和void,C语言中的void和void *详解
1.概述 许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并 详述void及void指针类型的使用方法与技巧. ...
最新文章
- 分布式 WebSocket 集群解决方案
- mysql 和 sqlserver中备份一张表的区别
- .NET MVC 学习笔记(一)— 新建MVC工程
- buuoj-crypto 1
- lombok时运行编译无法找到get/set方法 看这篇就够了
- mysql慢日志优化_Mysql优化-慢sql日志
- AbstractQueuedSynchronizer源码解析
- 聊一聊ABP vNext的模块化系统
- 国家特级数学教授李毓佩:我们欠孩子真正的数学阅读 !
- 大数据分析——零售业
- visio从mysql导入_Visio 怎么从Excel、SQL、SharePoint和其他外部源导入数据?
- 计算机网络布线总结,网络综合布线实训总结
- SVN 忽略不需要提交的文件
- 好看的硬笔字体,怎样设计出好看的中国风艺术字体
- 【美港探案】奈飞Q2宛如鸡肋
- 计算机视觉论文-2021-09-06
- java第九课——继承
- hdu1348 Wall
- 云端虚拟机规格参数快速对比说明
- layui常用审核弹窗
热门文章
- 风险评估资产重要性识别_什么是风险分析,如何识别和评估风险?
- linux 安装flash tar.gz,ubuntu下安装flash(tar.gz格式)
- node.js查询oracle,nodejs操作oracle数据库示例
- ubuntu10.04里安装spidermonkey
- a good website to test OTP
- nginx配置中root与alias的区别
- C:\Windows\Installer越来越大?让我们一起来删除msp这个毒瘤
- 217 Contains Duplicate
- 微信今日全面开放接口
- win 8 学习笔记一:生存周期