本节将深刻讨论C语言的条件判断语句编写
[前言]
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
通过前面的学习,我们已经知道了如何去修改计算机的内存数据。C语言程序在运行后,机器会直接执行程序中修改内存的指令。
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
但是在实际应用中,我们不想让机器在开机后直接执行全部的指令,而是希望当满足某一条件后,机器才会去执行相应的指令,比如说按下不同的按钮(满足不同的条件)后,机器会选择性地执行那些满足条件的指令。C语言的条件判断语句应运而生。
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
C语言程序要执行一系列的事件,对于没有条件判断的程序,CPU就会一股脑的把所有的事件都做完;而对于有条件判断的程序,CPU只会执行那些满足条件的事件,这样就既实现了功能,又能减少CPU资源的占用。
![](https://i-blog.csdnimg.cn/blog_migrate/b38f807d173c2334dfa6600a72102b44.png)
好嘞!我记下了(\ _ /)
一、运算符
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
在学习C语言的条件判断语句之前,我们得先知道C语言的条件怎么写
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
比如说当变量达到某一个数值后,或者说当一个变量的数值大于某一个变量的数值,又或者说当一个变量的数值小于某一个变量的数值......
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
以上的种种情况都离不开C语言的运算符,C语言常见的运算符总结如下表:
![](https://i-blog.csdnimg.cn/blog_migrate/d3be22a438c3b60592642c459c105c58.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b38f807d173c2334dfa6600a72102b44.png)
啊嘞?!!!有这么多运算符Σ(⊙▽⊙"a?这些到底该怎么用啊,一时间接受不了QAQ
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
哈哈,不要担心,我一个一个慢慢给你说哈
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
算数运算符,就是我们常用的加、减、乘、除四则运算,比较特殊的是有一个求余运算符'%',顾名思义,这个运算符就是用来求余数的,比如说我们计算12÷5=2······2(余数为2),所以12%5=2
下面给出算数运算符的代码示例:
#include <stdio.h>
int main()
{
int a = 12 ; //定义变量a,赋值为12
int b = 5 ; //定义变量b,赋值为5
printf("a+b = %d\n", a+b) ; //打印a+b的值
printf("a-b = %d\n", a-b) ; //打印a-b的值
printf("a*b = %d\n", a*b) ; //打印a×b的值
printf("a/b = %d\n", a/b) ; //打印a÷b的值
printf("a%%b = %d\n", a%b) ; //打印a%b的值(打印百分号要写成%%)
return 0 ;
}
![](https://i-blog.csdnimg.cn/blog_migrate/b38f807d173c2334dfa6600a72102b44.png)
前辈,我看到a/b=2(即12/5=2),可是12/5结果不应该是2.4吗?
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
你的观察很敏锐!这是因为a和b是int类型的,在C语言中,整数类型(int,short,long)的数据在进行除法运算时,如果运算结果有小数部分,则会自把小数部分舍弃掉;如果想要保留小数部分, 则需要把a和b这两个变量定义为浮点型(float,double),具体代码如下:
#include <stdio.h>
int main()
{
float a = 12 ; //定义float类型变量a,赋值为12
float b = 5 ; //定义float类型变量b,赋值为5
printf("a/b = %.2f\n", a/b) ; //按'%.2f'格式输出a/b的运算结果,
//'.2'修饰%d表示保留2位小数
return 0 ;
}
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
自加(++)、自减(--)是特殊的算数运算符,它们的功能是在原数值的基础上加1或者减1:比如说a++就等价于a=a+1;同理a--就等价于a=a-1
![](https://i-blog.csdnimg.cn/blog_migrate/b38f807d173c2334dfa6600a72102b44.png)
前辈!++a和a++到底有什么区别呢?
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
++a和a++的区别体现在语句执行的先后顺序上:++a是指在语句执行之前就已经完成了a=a+1的操作,而a++是指在语句执行之后,才进行a=a+1的操作;--a和a--也是同样的道理,比如我们运行下面一段代码:
#include <stdio.h>
int main()
{
int a = 0 ; //定义一段int大小的内存a,赋值为0
printf("%d\n", ++a) ; //a先加1,然后再打印a
a = 0 ; //a赋值为0
printf("%d\n", a++) ; //先打印a,然后a再加1
printf("%d\n", a) ; //打印a的值
return 0 ;
}
![](https://i-blog.csdnimg.cn/blog_migrate/b38f807d173c2334dfa6600a72102b44.png)
唔~你这么说我就懂了!
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
关系运算符,就是我们生活中常说的大于、小于和等于,具体代码如下:
#include <stdio.h>
int main()
{
int a = 12 ; //定义变量a,赋值为12
int b = 5 ; //定义变量b,赋值为5
printf("a>b = %d\n", a>b) ; //打印a>b的值
printf("a<b = %d\n", a<b) ; //打印a<b的值
printf("a==b = %d\n", a==b) ; //打印a==b的值
return 0 ;
}
![](https://i-blog.csdnimg.cn/blog_migrate/b38f807d173c2334dfa6600a72102b44.png)
前辈,为什么这些关系运算的结果是0或者1?
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
在C语言中,我们用1来表示真(成立),0来表示假(不成立)
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
上面的代码中,我们定义了a=12,b=5,那么a>b显然是成立的,所以a>b打印的值为1(真,成立),而a<b和a==b就是不成立的了,所以a<b和a==b打印的值为0(假,不成立)。
![](https://i-blog.csdnimg.cn/blog_migrate/b38f807d173c2334dfa6600a72102b44.png)
唔——原来如此
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
逻辑运算符,就是我们生活中所说的“或者”( || ),“并且”(&&),“除了”(!)
“或者”( || ):比如我说:“我今天中午要吃番茄炒蛋,或者是鱼香肉丝”,意思是我只需要吃番茄炒蛋和鱼香肉丝中的一种,硬性条件是:有其中一个就可以了!(当然,两个都有也可以,多多益善嘿嘿~);如:条件1 || 条件2
,只要有一个条件是"成立"的,不管另一个条件是否成立,"条件1 || 条件2"这条语句就是成立的。
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
“并且”(&&):比如我说:“我今天中午要吃宫保鸡丁,并且还要来一瓶可乐”,意思是说宫保鸡丁和可乐两个东西必须都有,少了一个,我就会感到愤怒,硬性条件是:两个必须都要有!;如:条件1 && 条件2
,只要有一个条件是"不成立"的,不管另一个条件是否成立,"条件1 && 条件2"这条语句都不成立。
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
“除了”(!):比如我说:“我今天晚上随便吃点,除了鲱鱼罐头”,意思是什么食物都可以,只要不是鲱鱼罐头,硬性条件是:只要不是我指定的就可以了!;如:!条件
,除了这个条件,其他条件都成立。
![](https://i-blog.csdnimg.cn/blog_migrate/b38f807d173c2334dfa6600a72102b44.png)
原来这就是逻辑运算符呀~
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
最后在说一下复合运算符(其他的运算符自己拓展哦~),+=,-=,*=,/=,这些其实是程序员偷懒的的写法,它们等价于:
a += b 等价于 a = a + b //把a + b的值赋值给a
a -= b 等价于 a = a - b //把a - b的值赋值给a
a *= b 等价于 a = a * b //把a * b的值赋值给a
a /= b 等价于 a = a / b //把a / b的值赋值给a
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
这下你明白复合运算符是什么意思了吧,初学者可能会觉得莫名其妙、难以理解,但我相信你在后面深入学习C语言的时候,一定会爱上这种写法!
![](https://i-blog.csdnimg.cn/blog_migrate/b38f807d173c2334dfa6600a72102b44.png)
哦哦~我记下了!
二、if...else
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
经过对C语言运算符的了解,我们就可以自己写一些条件语句了。
首先我们要说的条件语句就是if...else语句,放在我们实际的生活场景可以理解为:
如果
(条件成立)就....
否则
(条件不成立)就...
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
下面用if...else写一段简单的启动游戏的逻辑代码:要求用户输入"1",就可以启动游戏
#include <stdio.h>
int main()
{
int a = 0 ; //定义一段int大小的内存a,赋值为0
printf("请输入指令:") ;
scanf("%d", &a) ; //将用户键盘输入的数赋值给内存a
if(a==1) //如果检测到内存a的值为1(条件成立)
{
printf("原神,启动!\n") ;
}
else //否则(条件不成立)
{
printf("无任何反应\n") ;
}
return 0 ;
}
![](https://i-blog.csdnimg.cn/blog_migrate/b38f807d173c2334dfa6600a72102b44.png)
哇(眼冒金光)!
三、if...else if...else
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
if...else if...else(多条件)是if...else(单条件)的升级版,
如果(条件1成立)就....
如果
(条件2成立)就....
否则
(条件不成立)就...
它能够处理有多种条件的场合,比如说我想要通过输入不同的指令来启动不同的游戏:
#include <stdio.h>
int main()
{
int a = 0 ; //定义一段int大小的内存a,赋值为0
printf("请输入指令:") ;
scanf("%d", &a) ; //将用户键盘输入的数赋值给内存a
if(a==1) //如果检测到内存a的值为1(条件1成立)
{
printf("原神,启动!\n") ;
}
else if(a==2) //如果检测到内存a的值为2(条件2成立)
{
printf("星铁,启动!\n") ;
}
else if(a==3) //如果检测到内存a的值为3(条件3成立)
{
printf("崩三,启动!\n") ;
}
else //否则(条件都不成立)
{
printf("无任何反应\n") ;
}
return 0 ;
}
四、switch case
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
switch case也是一种多条件判断语句,是if...else if...else语句的升级版,它可以让代码看起来更加简洁、干练:
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
switch的参数是一个变量(可以是一段内存,也可以是一个表达式),当这个变量是不同的值(不同的条件)时,会执行对应不同的语句,语句执行完毕后,会有break终止当前的case分支,并跳出switch语句。如果没有break,程序将继续执行下一个case语句。
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
我们用switch case语句来复刻前面if...else if...else实现的通过输入不同的指令来启动不同的游戏:
#include <stdio.h>
int main()
{
int a = 0 ; //定义一段int大小的内存a,赋值为0
printf("请输入指令:") ;
scanf("%d", &a) ; //将用户键盘输入的数赋值给内存a
switch(a) //判断内存a的值
{
case 1 : printf("原神,启动!\n") ; break ; //如果a==1
case 2 : printf("星铁,启动!\n") ; break ; //如果a==2
case 3 : printf("崩三,启动!\n") ; break ; //如果a==3
default: printf("无任何反应\n") ; break ; //否则
}
return 0 ;
}
![](https://i-blog.csdnimg.cn/blog_migrate/b38f807d173c2334dfa6600a72102b44.png)
哇~用switch case写果然看起来清晰多了呢!
![](https://i-blog.csdnimg.cn/blog_migrate/2a326fc4ad869247fceb90f4d5adcb09.png)
好的~下面总结一下本节所阐述的内容:
(1)在写条件之前要先了解C语言的运算符。
(2)C语言的运算符主要包括:算数运算符(加减乘除,求余,自增自减),关系运算符(大于,小于,等于,不等于),逻辑运算符(与,或,非),复合运算符(加等于,减等于,乘等于,除等于),...(剩下的自己总结)
(3)单条件判断语句:if...else
(4)多条件判断语句:if...else if...else,switch case
[end]