C语言程序设计案例精粹
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

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);               //输入变量ab的值
          08       max=a;                                //赋值maxa
          09       if(max<b)                              //判断a是否大于b
          10       {
          11           max=b;                           //若a小于b,将b赋给max
          12       }
          13       printf("最大值为 %d\n", max);              //打印最大值
          14   }

程序第7行功能是输入两个整型数据,并存储到变量ab中,第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(表达式)
      {
      语句段
      }