学科分类
目录
C语言

if条件语句

if条件语句分为3种语法格式:if、if…else、if…else if…else,每一种格式都有其自身的特点,下面分别对这几种if语句进行讲解。

1、if语句

if语句是指如果满足某种条件,就进行相应的处理。例如,小明妈妈跟小明说“如果你考试得了100分,星期天就带你去游乐场玩”,这句话可以通过下面的一段伪代码来描述。

如果小明考试得了100分

妈妈星期天带小明去游乐场

在上面的伪代码中,“如果”相当于C语言中的关键字if,“小明考试得了100分”是判断条件,需要用()括起来,“妈妈星期天带小明去游乐场”是执行语句,需要放在{}中。修改后的伪代码如下:

if (小明考试得了100分)
{
   妈妈星期天带小明去游乐场
}

上面的例子描述了if语句的用法,在C语言中,if语句的具体语法格式如下:

if(判断条件)
{ 
  代码块
}

上述语法格式中,判断条件的值只能是0或非0,若判断条件的值为0,按“假”处理,若判断条件的值为非0,按“真”处理,执行{}中的语句。if语句的执行流程如图1所示。

图1 if语句的执行流程

接下来用if语句来比较两个数的大小,求出较大的值,如例1所示。

例1 max.c

 1  #include <stdio.h>
 2  int main()
 3  {
 4    int x = 11, y = 22;
 5    int max = x;
 6    if(x < y)
 7      max = y;
 8    printf("max = %d\n", max);
 9    return 0;
 10 }

例1运行结果如图2所示。

图2 例1运行结果

在例1中,第4行代码定义了两个变量x、y并初始化;第5行代码定义变量max,用于标识最大值,并将x的值赋给max;第6~7行代码通过if语句判断x<y是否成立,如果成立,将y的值赋给max;如果条件不成立则执行第9行代码,退出程序。由图4-6所知,x<y成立,输出最大值max。

2、if…else语句

if…else语句是指如果满足某种条件,就进行相应的处理,否则就进行另一种处理。if…else语句的具体语法格式如下:

if(判断条件)
{
  执行语句1
}
else
{
  执行语句2
}

上述语法格式中,判断条件的值只能是0或非0,若判断条件的值为非0,按“真”处理,if后面{}中的执行语句1会被执行,若判断条件的值为0,按“假”处理,else后面{}中的执行语句2会被执行。if…else语句的执行流程如图3所示。

图3 if…else语句流程图

接下来通过一个案例来演示if…else语句的用法,该案例要求从键盘输入一个整数,判断该整数是奇数还是偶数,具体实现如例2所示。

例2 if_else.c

 1  #define _CRT_SECURE_NO_WARNINGS      //关闭安全检查
 2  #include <stdio.h>
 3  int main()
 4  {
 5    int num;
 6    printf("请输入一个整数:");
 7    scanf("%d", &num);         //调用scanf()函数从键盘输入数据
 8    if(num % 2 == 0)
 9    {
 10     printf("数字%d是一个偶数\n", num);
 11   }
 12   else
 13   {
 14     //判断条件不成立
 15     printf("数字num%d是一个奇数\n", num);
 16   }
 17   return 0;
 18 }

例2运行结果如图4所示。

图4 例2运行结果

在例2中,第7行代码使用scanf()函数从键盘读取一个整数;第8~16行代码,在if语句中判断num被能否被2整除,若能被2整除,则打印偶数,否则打印这个数是奇数。由图4的运行结果可知,当输入数据10时,输出结果为10是一个偶数。

3、if…else if…else语句

if…else if…else语句用于需对多个条件进行判断,进而执行不同操作的情景中。if…else if…else语句的具体语法格式如下:

if(判断条件1)
{
  执行语句1
}
else if(判断条件2) 
{
  执行语句2
}
……
else if(判断条件*n*)
{
  执行语句*n*
}
else
{
  执行语句*n*+1
}

上述语法格式中,若判断条件1的值为非0,按“真”处理,if后面{}中的执行语句1会被执行;若判断条件1的值为0,按“假”处理,对判断条件2进行判断;如果判断条件2的值为非0,则执行语句2。以此类推,如果所有判断条件的值都为0,意味着所有条件都不满足,else后面{}中的执行语句n+1会被执行。if…else if…else语句的执行流程如图5所示。

图5 if…else if…else语句执行流程

接下来通过一个案例来演示if…else if…else语句的用法,该案例要求从键盘输入学生成绩,并对学生考试成绩进行等级划分的代码,如果学生的分数大于等于80分,等级为优;如果分数小于80分且大于等于70分,等级为良;如果分数小于70分且大于等于60分,等级为中;否则,等级为差。案例具体实现如例3所示。

例3 grade.c

 1  #define _CRT_SECURE_NO_WARNINGS    //关闭安全检查
 2  #include <stdio.h>
 3  int main()
 4  {
 5    float grade;
 6    printf("请输入学生成绩:");
 7    scanf("%f", &grade);      //以%f格式读取输入数据
 8    if(grade >= 80.0)
 9    {
 10     //满足条件 grade >=80
 11     printf("该成绩的等级为优\n");
 12   }
 13   else if(grade >= 70.0)
 14   {
 15     //不满足条件 grade >= 80 ,但满足条件 grade >= 70
 16     printf("该成绩的等级为良\n");
 17   }
 18   else if(grade >= 60.0)
 19   {
 20     //不满足条件 grade >= 70 ,但满足条件 grade >= 60
 21     printf("该成绩的等级为中\n");
 22   }
 23   else
 24   {
 25     //不满足条件 grade >= 60
 26     printf("该成绩的等级为差\n");
 27   }
 28   return 0;
 29 }

例3运行结果如图6所示。

图6 例4-4运行结果

在例3中,第7行代码使用scanf()函数从键盘读取grade的值,第8~27行代码使用if…else if…else语句判断grade的值符合哪一个条件,然后输出对应的成绩等级。由图6的运行结果可知,当输入90.5时,显示其成绩等级为优。

image-20200520114816951脚下留心:意大利面条式代码***

使用if条件语句编写代码很容易判断各种选择情况,但是,过多地使用if语句或if…else…语句会导致代码冗长、结构复杂、逻辑混乱、阅读性差,示例代码如下:

if(判断条件1)
{
  执行语句1
}
if(判断条件2)
{
  执行语句2
} 
else if(判断条件3)
{
  if(判断条件4)
  {
    执行语句3
    if(判断条件5)
    {
      执行语句4
    }
  }
  else
  {
    执行语句5
  }
}

以上示例多次运用if语句与if嵌套,形如这种代码的结构被形象地称之为“意大利面条”,这种代码不利于阅读与维护,在开发中可以考虑使用switch…case…来优化if…else结构。

需要注意的是,如果使用多层if语句嵌套,会出现多个if和else重叠的情况,为避免歧义,C语言规定,else总是与它前面最近的没有配对的if语句配对。

点击此处
隐藏目录