3.1、让程序拐弯的if

By | 2015年4月12日

终于来到了下一章……

本节的内容会让你真正领略到编程的魅力

你有没有发现,前面我们的程序都是从main函数的第一行开始,一直到main函数的最后一行为止,语句是一条条顺着执行的。

这种程序的结构叫做顺序结构。

顺序结构中的语句顺序是在编程的时候就确定了的

但是光有顺序结构可不行,就像我们走路一样,如果前面是悬崖,你还不转弯的话,我只能说:“你牛!”。

程序中也是如此,有的时候我们在编程的时不能确定语句的执行顺序(实际上是大部分时候),我们需要根据实际情况来改变我们的程序运行方向

也就是让程序拐弯

在这种情况下,if就排上用场了

首先我们来看一段程序

#include <stdio.h>
#include <stdlib.h>

int main()
{
int input;
printf("请输入一个数字\n");
scanf("%d", &amp;input);

printf("\n你输入的是:%d ", input);
if (input &gt; 0)
{
printf("他是一个正数");
}

if (input &lt;0)
{
printf("他是一个负数");
}

if (input == 0)
{
printf("他是0");
}

return 0;
}

如果你跟着程序的提示做,输入了一个数字的话

程序将判断你输入的数字是正数,负数还是0

在编程时,我根本无法预知你的输入是正数还是什么其他的乱七八糟的值

但是我可以使用if语句来判断你的输入信息,并且根据实际情况做出相应的调整

if是一个关键字,它的后面还跟着一对括号

括号里面的内容叫做判断条件

注意,if的括号后面没有分号;

if ( xxx )

if的后面则是一对大括号

用大括号括起来的内容时代码块

大括号标明了if语句的作用范围

一个基本的if格式应该为

if( 表达式 )

{

代码

}

如果表达式的值为“真”,那么将执行if后面大括号中的语句

否则,程序将直接跳过大括号中的代码,执行后面的代码

于是乎,我们就需要知道什么是“真”什么是“假”了

“真”与“假”

因为计算机中使用的是二进制,因此就只存在两种状态(比如高电平和低电平)

真是一种状态,假就是另一种状态

现实生活中,我们所说的“真”是指与客观事实相符合,假则与其相反。

计算机中,人们则规定,0是假,所有非0的数都是真

切记,真是所有非0的数,因此不管是1也好,1024,甚至是-3.14159,他们都是“真”!

当if括号内的表达式的值为0时(就是假时),if后大括号内的代码将不会被执行

计算机会直接跳到if的后面语句进行执行123

现在我们就可以尝试来理解开头处的例子程序了

程序的前10行,你应该能够理解(否则你应该考虑一下是否需要重新学习前面的内容)

第11行是一个if,小括号内的内容是input > 0

中间的>(大于号)和在数学中的含义相似,不过它用来判断大于号左边的值是否大于右边的值

如果这个判断成立,那么这个表达式将返回真(通常来说,这个值是1),否则将返回假(通常是0)

也就是说如果我们输入数字5 的话,5在大于号的左边,显然它是大于右边的0的

这个表达式的值便为“真”,于是乎,这一个if语句中的

printf("他是一个正数");

将被执行,这样你就能在屏幕上看到打印出来的“他是一个正数”

第十三行语句执行完后,将来到16行的第二个if

条件是input<0

input是5,参考上面的大于号

这个表达式的值显然是假,也就是说,第二个if的printf语句不会执行

程序会直接跳到下面的21行的第三个if

这次的表达式变成了input == 0

这一下就有人搞不清楚了【=我知道,可是==是毛线东西】

呃,这个==嘛,其实和数学中的=差不多啦

注意,是差不多,不是相同!

==就是判断左右两边是否相等,相等就返回真,不相等则返回假

显然,这个if也返回假

然后程序就到了return了,到此程序结束

 

这便是程序能够判断输入的数字是正数、负数还是0的原因

请试着分析输入为-1,以及为0的情况


关系运算符

最后我们来介绍一下关系运算符

顾名思义,这是他属于运算符的一类

什么是运算符呢,就是一种表示运算关系的符号,比如+-*/

而关系运算符,则是用来计算关系的

C语言一共提供了6个关系运算符

他们是:

运算符
名称
示例
功能
缩写
<
小于
a<b
a小于b时返回真;否则返回假
LT
<=
小于等于
a<=b
a小于等于b时返回真;否则返回假
LE
>
大于
a>b
a大于b时返回真;否则返回假
GT
>=
大于等于
a>=b
a大于等于b时返回真;否则返回假
GE
==
等于
a==b
a等于b时返回真;否则返回假
EQ
!=
不等于
a!=b
a不等于b时返回真;否则返回假
NE

关系运算符算出来的值是1(真)或者0(假)(但是一定要记住,所有非0的数都是真)

还有一点需要强调的是,很多人会把==和=搞混。

实际上这两个符号的区别是灰常大的

==是等于判断符,他判断左右两边是否相等

而=在c语言中则是赋值的意思,如果上面的程序中

我们将第三个if写成了if(input = 0)

那么会发生什么呢?

因为=是赋值的意思,所以执行到if时,会将0这个数字赋值给input这个变量,也就是说不管你输入的数字是多少

到这里都会变成0,接着,这个表达式将返回input的值,也就是刚刚赋值得到的0

0代表假,也就是说,这个if后面的语句不会被执行。无论你输入的数字是多少,这个if都不会成立

 

好了,对于if的简单介绍到此为止,现在你需要的是练习

请试着将上面的程序改写判断输入的数字是否等于0

并输出相应结果!

发表评论

邮箱地址不会被公开。 必填项已用*标注