2 判断执行语句
判断执行语句,执行时候会有一个条件判断,一旦当条件判断为真,即True的时候,就执行相应的语句,满足条件被执行的语句用大括号“{}”括起来。由于在C语言中没有用于表示布尔类型的变量(即逻辑变量),因此在C语言中只要判断条件为0,就认定为假(False),非0,就认定为真(True)。
判断执行语句的关键词用“if”表示,一般形式为:if(判断条件) {执行语句}。
举一个例子来说,写一段程序,当变量值大于100,就打印出“Greater than 100”。那这个程序可以写成如图3-8-2所示。
图3-8-2 判断执行语句
在图3-8-2所示的代码中,分别对number1和number2两个变量用“if”进行判断,这里“if”的判断条件就是一个关系运算语句,一旦当“number1 > 100”这个条件成立,就执行“{}”里面的打印语句,而由于“number1 > 100”条件不成立,因此这个表达式的结果其实是为0,即“if”里面的条件不满足,因此不执行打印语句。同样的,由于“number2 > 100”这个条件满足,因此进入到“if”语句的“{}”里面来,执行打印语句。
接下来,我们来做一个复杂一点的函数,在键盘上输入一个按键,判断它是否为数字,如果为数字,就将它打印出来。这里要介绍到一个“getchar();”函数,这个函数也是C语言的标准输入输出库提供给我们的,因此我们在使用的时候,也要包含“stdio.h”。一旦“getchar();”函数被调用到,终端或者控制台会等待用户在键盘上输入一个字符,等到用户输入完成之后,这个函数将会获得输入的字符,返回给我们所定义的变量。具体实现代码如图3-8-3所示。
图3-8-3 判断一个输入字符是否是数字
图3-8-3主要的一句判断语句为“if((c_to_input >= '0') && (c_to_input<= '9'))”,我们之前讲到,一个字符输入之后,实际上计算机获得到的是其ASCII码,而计算机中数字的ASCII码是按照顺序排下去的,“0”的ASCII码最小,接着顺序排列“1”,“2”……“9”,因此我们只需要判断输入的字符是否在“0”到“9”之间,如果在这个范围内,就表示输入的字符是个数字,因此就可以执行大括号里面的打印语句了。还有一点需要注意下,有时候if的判断条件用一条判断语句完全不够,就如我们的图3-8-3例子中所示,因此需要用到复合的表达式,在用复合表达式的时候,尽量使用括号语句显示地指明其优先级,这样就不容易出错,虽然用运算符自身的优先级也能正常运行,但有时候写的清晰一点比较易读,直观。
我们测试的结果为,当输入字符“5”的时候,为数字,因此打印出“5”,而第二次输入的字符为小写的“c”,因此程序直接跳过if语言不执行。还有一种方法大家可以尝试下,直接利用ASCII码去做判断,这里就不再赘述。
“if”除了单独使用外,还可以和“else”连用,但这种形式与其说是判断执行语句,还不如说是选择执行语句,我们放到下面再说。这里还要说明的是,if语句可以嵌套使用,如我们要判断一个输入的字符是否为数字,如果是数字就打印出来,同时还要判断这个字符是否是小于5的数字,如果是,再打印一遍。这时候,就可以使用if的嵌套语句了,如图3-8-4所示。
图3-8-4数字判断
图3-8-4中,第一个if判断的条件和图3-8-3中一样,是判断输入字符的是否为数字,而在if满足之后的程序里面,再一次判断了一次,这个数字是否大于5,如果是大于5,那么就输出这个数字是大于5的。这就是if的嵌套,我们可以总结如图3-8-5的程序结构。
图3-8-5 if程序结构
其实,每个程序运行的主要顺序,是我们前一小节里面讲到的顺序执行,只不过在我们需要去让程序改变顺序执行的方式时,在需要的地方增加一个“if”。当然一个程序里面,允许存在多个“if”,我们可以举一个例子来看,还是基于字符判断的程序,输入一个字符,判断其为,数字,小写字母,大写字母,写出一个程序,分别对输入的字符进行判断,程序实现的代码如图3-8-6所示。
图3-8-6多个判断条件