5.2 简单的if语句
if语句是分支结构程序的主要实现方式,它根据给定的条件进行判断,以决定是否执行某个分支程序段。C语言的if语句有三种基本形式,分别为if语句、if和else语句以及嵌套if和else语句。本节介绍简单的if语句。
设计分支结构应注意三个问题:
1. 正确选择条件或逻辑表达式作为分支的判断条件。
2. 根据需求绘制分支流程图。
3. 按流程图编写程序。
5.2.1 if语句的定义
if语句用于判断某些条件是否满足,若条件满足,则转移到if语句下的子程序段执行,否则,顺序执行。其一般形式为:
if(表达式)
语句段
if语句的执行流程为:如果表达式的值为真(非0),则执行其后的语句段,否则不执行该语句,其流程如图5-2所示。
图5-2 if语句流程图
if语句中的表达式可以是任何能转化为数值的表达式,例如:if(100),if(a==b),if(a&&b||c),if(sizeof(int)),if((a>b)?(a+b):(a-b))等。
范例5.1 GetMaxVariableInTwo.c
GetMaxVariableInTwo.c利用if语句的分支功能,可以区分两个或多个数值的大小。本范例由键盘输入两个变量的值,使用if语句判断两者中的较大值,并将较大值输出在屏幕上。(光盘\chat5\ GetMaxVariableInTwo.c)
01 #include<stdio.h> 02 main() 03 { 04 int a=0, b=0; 05 int max=0; 06 printf("请输入两变量的值:\n"); 07 scanf("a=%d, b=%d", &a, &b); //输入变量a和b的值 08 max=a; //赋值max为a 09 if(max<b) //判断a是否大于b 10 { 11 max=b; //若a小于b,将b赋给max 12 } 13 printf("最大值为 %d\n", max); //打印最大值 14 }
程序第7行功能是输入两个整型数据,并存储到变量a和b中,第8行首先将其中一个变量赋给变量max,第9行if语句用于判断两个变量的大小。
程序运行时由键盘输入数值,然后按回车键。
请输入两变量的值:
a = 10, b = 20
输出结果为:
最大值为20
作者心得:
读者请注意使用scanf函数对变量a和b输入数值时的格式,普通字符a=和b=都应按原样输入。
5.2.2 合理设计if语句
if语句结构中,对if语句的设计将影响程序运行的效率,同时也对程序的正确逻辑顺序产生影响。当语句段仅有一条语句时,可不使用大括号将语句封装,此时执行语句可以放在if(表达式)后面,也可以放在其下面。例如:
if(0!=a) a=-a; 或者
if(0!=a)
a=-a;
这里判断a是否为0,若不为0则将a变为-a。
1. 逻辑运算符的编写风格
上述程序中表达式0!=a用于判断a是否为0,该表达式也可以写成a!=0。然而这种写法的缺点是:当程序编写者误将a!=0写成a=0后,程序将无法识别该错误,例如:
if(a=0)
a=-a;
此时,表达式将作为赋值表达式处理,即无论a为何值,都将被重新赋值为0。按照if语句的规则,表达式a=0永远为假(值为0),因此a=-a;永远不会被执行。
通常称这类无法通过编译查找的错误为非语法错误或逻辑错误。逻辑错误较难查找,只有通过软件代码的细致测试才有可能解决。避免这类错误的有效方法是采用特定的代码编写风格,这样容易在检查代码时发现错误。将a!=0写为0!=a就是编写风格之一。此时如果将0!=a误写为0=a,程序编译时将提示错误。因为C语言规定:常量和表达式不能位于赋值号左边。
因此,这里我们约定,类似于关系表达式:
常量或表达式 == 变量 或者 常量或表达式!= 变量
这样的表达式结构应将常量或表达式置于关系运算符左侧,以避免出现逻辑错误。
2. 语句段封装
如果语句段由多条语句组成,则必须使用大括号进行封装,否则程序执行流程将出现逻辑错误。这里我们约定,不论语句段由一条语句还是多条语句构成,都使用大括号封装。即if语句的表达形式为:
if(表达式) { 语句段 }