C语言教程(五):选择结构

参考:

  • 《标准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

那啥算条件啊,接下来写几个常见的关系运算符
C语言中的关系运算符
敲黑板!注意!判断两个变量相等一定要用==,否则逻辑上是错误的!
大于小于多常见啊,你咋不写呢!写!来我们看逻辑运算符
C语言中的逻辑运算符
大家注意下,||不是两个小写字母“L”,大家可以看一下键盘enter键上方的那个按键,具体怎么摁出来我就不讲了。
有的人问了,咦,你说的大于小于呢?来了来了,大于小于不就是大于一个东西并且小于一个东西嘛,简单,假如:a大于2,小于6,代码这么写(a>2) && (a<8),千万不要写成2<a<8,电脑可看不懂这个式子!

4. 条件什么时候为真

我们说了这么久条件有哪些,那啥时候条件为真,什么时候为假呢?
当然简单的我就不说了,像什么a=8,那么a<10 一定是真的,很简单。
下面我来说说涉及到AND、OR、NOT的判断方式,见下表:

4.1 AND运算符

AND运算符

4.2 OR运算符

OR运算符

4.3 NOT运算符

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后面是整型数值,然后是英文冒号,接下来大家可以自由发挥,直到看见breakbreak表示我这个case里的多条语句结束,如果没有break的话,你会发现他会继续执行下一个case的语句,以此类推,直到碰到break或者switch结束。

8. 结语

大家觉得if...else if的最后一段无法理解,没关系,大家可以通过尝试这次的练习理解我在说什么。那么,大家回去尝试一下如果一家银行的利息表如下:
银行利率表
尝试写出这家银行的利息运算系统~
好啦,又到了告别的时间,如果以上说法有错误,希望大家可以在评论区及时订正,有问题也欢迎大家在评论区里提问,我会尽我所能帮助大家解决问题~

发布了16 篇原创文章 · 获赞 11 · 访问量 1136

猜你喜欢

转载自blog.csdn.net/bjtu_linxinyu/article/details/104044652