参考:
- 《标准C语言基础教程》(第四版)[美] Gary J.Bronson 著 张永健 等译
1. 本文概述
不知道大家有没有听过这个笑话,“程序员老王出门买菜,他的老婆说,出门买两个西红柿,如果碰见西瓜就买一个。结果老王看到了西瓜,但只买了一个西红柿。”是不是很好笑!好吧,不好笑。
但是为什么会出现这个情况呢,都知道他老婆的意思是买两个西红柿和一个西瓜。接下来我就为大家解释解释这老王的行为逻辑。这涉及到了选择结构。
2. 老王的逻辑思路
作为一个合格的程序员,老王以身践行了计算机的逻辑。接下来我们来了解一下C语言如果运行老王的老婆的话,会产生什么结果~
大家有没有看明白这个思维呢~没错没错,C语言的选择结构差不多就是这样。
3. if条件语句
首先带着大家看一看最最最基础的选择结构:
//注意if这行没有分号!!!
if(条件)
条件为真时的执行的语句;
先来举个例子,然后再往下说:
//要求:输出变量a比变量b小,输出a,假设a为5,b为10。
//核心代码如下:
int a = 5;
int b = 10;
if(a < b)
printf("a比b小,a=%d",a);
//输出结果:
a比b小,a=5
那啥算条件啊,接下来写几个常见的关系运算符:
敲黑板!注意!判断两个变量相等一定要用==
,否则逻辑上是错误的!
大于小于多常见啊,你咋不写呢!写!来我们看逻辑运算符!
大家注意下,||
不是两个小写字母“L”,大家可以看一下键盘enter键上方的那个按键,具体怎么摁出来我就不讲了。
有的人问了,咦,你说的大于小于呢?来了来了,大于小于不就是大于一个东西并且小于一个东西嘛,简单,假如:a大于2,小于6
,代码这么写(a>2) && (a<8)
,千万不要写成2<a<8
,电脑可看不懂这个式子!
4. 条件什么时候为真
我们说了这么久条件有哪些,那啥时候条件为真,什么时候为假呢?
当然简单的我就不说了,像什么a=8
,那么a<10
一定是真的,很简单。
下面我来说说涉及到AND、OR、NOT的判断方式,见下表:
4.1 AND运算符
4.2 OR运算符
4.3 NOT运算符
5. if…else语句
惯例,首先带着大家看一看if...else
的使用方法:
//注意if和else两行都没有分号!!!
if(条件)
条件为真时的执行的语句;
else
条件不为真时执行的语句;
下面我将最开始说的那个“笑话”用这个语句表示出来(指定运行不了):
int tomato;
if(看见西瓜)
tomato=1;
else
tomato=2;
printf("买了%d个西红柿",tomato);
又有同学想问,我每次只能写一条语句吗?都写点不行吗?
行啊!当然可以!只是要加一对可爱的大括号{}
,操作如下!
//注意if和else两行都没有分号!!!
//下列两个格式的写法表达的意思完全一样!
//格式1:
if(条件)
{
条件为真时的执行的语句块;
} //这里没有分号!!!
else
{
条件不为真时执行的语句块;
} //这里没有分号!!!
//格式2:
if(条件){
条件为真时的执行的语句块;
}else{
条件不为真时执行的语句块;
} //这里没有分号!!!
{}
大括号表示语句块,可以简单理解为{}
为一条语句。
6. if…else if语句(if…else链)
惯例,首先带着大家看一看if...else if
的使用方法:
//注意if和else两行都没有分号!!!
if(条件1)
{
条件1为真时的执行的语句块;
} //这里没有分号!!!
else if(条件2)
{
条件2为真时的执行的语句块;
} //这里没有分号!!!
else
{
条件不为真时执行的语句块;
} //这里没有分号!!!
这玩意有啥用?我多用几个if
不也行吗?
嘿嘿嘿,可以!就是if
慢!那为啥慢呢?其实原因很简单,就是用多个if
判断的次数比if...else if
要多,if...else if
如果条件1不符合,就会抛出条件1的范围,转而判断条件2,如果条件2也不符合,就会抛出条件2的范围,判断条件3,以此类推,指导条件n符合,或者完全没有符合的条件。
7. switch语句
惯例,首先带着大家看一看switch
的使用方法:
switch(整型表达式)
{
case 数值1:
语句1;
语句2;
...
break;
case 数值2:
语句x;
语句y;
...
break;
...
case 数值n:
语句w;
语句x;
...
break;
//default这种情况可以没有,如果有的话,表达的意思是整型表达式不等于以上数值
default:
语句r;
语句t;
} //这里没有分号!!!
大家注意看,这里和前面讲的两种语句有些许不同,但本质上来讲功能是一样,需要注意的就是,这里的case
后面是整型数值,然后是英文冒号,接下来大家可以自由发挥,直到看见break
,break
表示我这个case
里的多条语句结束,如果没有break
的话,你会发现他会继续执行下一个case
的语句,以此类推,直到碰到break
或者switch
结束。
8. 结语
大家觉得if...else if
的最后一段无法理解,没关系,大家可以通过尝试这次的练习理解我在说什么。那么,大家回去尝试一下如果一家银行的利息表如下:
尝试写出这家银行的利息运算系统~
好啦,又到了告别的时间,如果以上说法有错误,希望大家可以在评论区及时订正,有问题也欢迎大家在评论区里提问,我会尽我所能帮助大家解决问题~