一、if语句
在C语言中,提供三种形式的if语句。
1.单分支if语句
if语句形式:
if (表达式) 语句S
其流程图如下图所示。
执行过程:系统首先计算表达式的值,如果表达式结果不为0,则执行语句S;否则跳过语句S,继续执行其后的其他语句。
说明:
(1)“if”是C语言的关键字;“表达式”是任意合法的C语言表达式,可以是关系表达式或逻辑表达式,也可以是任意的数值类型(包括整型、实型、字符型等);表达式两侧括号不可以省略。
(2)语句S可以是一条语句,也可以是任意合法的复合语句,其位置比较灵活,可以直接出现在if同一行的后面,也可以出现在if的下一行。如果语句S只是一条语句,可以直接写,也可以加上{},如果是多条语句一定要用{}把这些语句括起来。
【例1】计算并输出一个整数的绝对值。
【分析】计算一个整数的绝对值需要判断这个数是否小于0。
#include <stdio.h>#include <stdlib.h>int main(){ //输入一个整数nint n = 0;scanf("%d", &n);//判断整数n是否小于0,小于0则n变为-n,大于等于0则跳过if (n < 0)n = n * -1; //输出printf("%d", n);return 0;}
2.双分支if语句
if - else 形式:
if (表达式) 语句S1
else 语句S2
其流程图如下图所示。
执行过程:系统首先计算表达式的值,如果结果不为0,则执行语句S1;否则,执行语句S2。
选择结构全部执行完成后继续执行其后的其他语句。
例1也可以用双分支结构,程序代码如下:
#include <stdio.h>#include <stdlib.h>int main(){int x, y;scanf("%d", &x);if (x < 0)y = x * -1; else y = x;printf("%d", y);return 0;}
3.多分支选择语句
if-else-if 形式:
if (表达式1) 语句S1
else if (表达式2) 语句S2
...
else if (表达式n 语句Sn
else 语句Sn+1
其流程图如下图所示。
执行过程:if - else-if 结构实际上是由多个if-else 结构组合而成的,系统首先计算表达式1,其值不为0时,执行语句S1;否则计算表达式2,其值不为0时,执行语句S2;......如果if 后的所有表达式都不为真,则执行语句Sn+1,并结束整个分支结构。
4.if语句的嵌套
if 语句的嵌套是指if 或 else 子句中又包含一个或多个if 语句。其实就是语句S为一个if语句。
形式较多就不一一例举了。
嵌套选择结构主要用于处理多条件的问题。设计嵌套选择结构时应清晰描述各条件之间的约束关系。在使用时要特别注意以下两点:
(1)if 与 else 的配对关系。内嵌结构中,else 总是与它上面最近的、未配对的 if 配对,组成一对 if-else。
(2)如果 if 与 else 的数目不一样,为了避免在 if 与 else 配对时出错,建议使用“{}”来限定内嵌if语句的范围。
如:
if (表达式1)
{if (表达式2) 语句1}
else 语句2
【例2】编程计算一元二次方程a*x*x + b*x + c = 0的根,其中a,b,c为输入的值,且a不等于0.
注意,实数不能直接与0比较相等与否。
本例中,由于a是输入的原始数据,不存在计算误差,因此a与0比较也可用a==0代替。
但disc是经过计算得出的浮点数,而绝大多数计算机中表示的浮点数都只是它们在数学上表示的数据的近似值,因此disc与0的比较不能用disc==0来代替,必须用fabs(disc) <= EPS.