Cprogramming 简明教程

C - Nested If Statements

C programming 中嵌套 if-else 语句总是合法的,这意味着你可以在另一个 ifelse-if statement(s) 语句中使用一个 ifelse-if 语句。

在编程语境中,术语 "嵌套" 指将一个特定的编程元素包裹在另一个类似元素中。例如,嵌套循环、嵌套结构、嵌套条件语句等。如果在另一个 if 语句中使用了 if statement in C ,那么在 C 中我们称之为 nested if statement

Syntax

nested if 语句的语法如下 −

if (expr1){
   if (expr2){
      block to be executed when
      expr1 and expr2 are true
   }
   else{
      block to be executed when
      expr1 is true but expr2 is false
   }
}

以下流程图表示 if 语句的嵌套 −

nested condition

你可以将布尔表达式与 &&|| 复合,以获得相同的效果。不过,对于有多种复合布尔表达式的复杂算法,很难形成复合条件。相反,建议使用嵌套结构。

另一个 if 语句可以出现在顶层 if 块中,或其 else 块中,或同时出现在两者中。

Example 1

让我们举一个例子,其中程序需要确定给定数字是否小于 100、在 100 到 200 之间、或大于 200。我们可以用以下复合布尔表达式表示此逻辑 −

#include <stdio.h>

int main (){

   // local variable definition
   int a = 274;
   printf("Value of a is : %d\n", a);

   if (a < 100){
      printf("Value of a is less than 100\n");
   }

   if (a >= 100 && a < 200){
      printf("Value of a is between 100 and 200\n" );
   }

   if (a >= 200){
      printf("Value of a is more than 200\n" );
   }
}

Output

运行代码并检查其输出。此处,我们已将 "a" 的值初始化为 274。更改此值并重新运行代码。如果所提供的数字小于 100,那么你将得到不同的输出。类似地,如果所提供的数字在 100 和 200 之间,则输出会再次改变。

Value of a is : 274
Value of a is more than 200

Example 2

现在,针对同一问题让我们使用嵌套条件。当我们使用嵌套条件时,解决方案将更易懂。

首先,检查“a >= 100”。在 if 语句的真部分中,检查它是否小于 200,以此来确定该数字介于 100-200 之间,或者是否大于 200。如果第一个条件(a >= 100)为 false,则表示该数字小于 100。

#include <stdio.h>

int main (){

   // local variable definition
   // check with different values 120, 250 and 74
   int a = 120;
   printf("value of a is : %d\n", a );

   // check the boolean condition
   if(a >= 100){

      // this will check if a is between 100-200
      if(a < 200){
         // if the condition is true, then print the following
         printf("Value of a is between 100 and 200\n" );
      }
      else{
          printf("Value of a is more than 200\n");
      }
   }
   else{
       // executed if a < 100
       printf("Value of a is less than 100\n");
   }

   return 0;
}

Output

运行代码并检查其输出。对于“a”的不同输入值,您将获得不同的输出 -

Value of a is : 120
Value of a is between 100 and 200

Example 3

以下程序使用嵌套 if 语句来确定一个数字是否可以被 2 和 3 整除、可以被 2 但不能被 3 整除、可以被 3 但不能被 2 整除、或者既不能被 2 也不能被 3 整除。

#include <stdio.h>

int main(){
   int a = 15;
   printf("a: %d\n", a);

   if (a % 2 == 0) {
      if (a % 3 == 0){
         printf("Divisible by 2 and 3");
      }
      else {
         printf("Divisible by 2 but not 3");
      }
   }
   else {
      if (a % 3 == 0){
         printf("Divisible by 3 but not 2");
      }
      else{
         printf("Not divisible by 2, not divisible by 3");
      }
   }

   return 0;
}

Output

运行代码并检查其输出:

a: 15
Divisible by 3 but not 2

对于“a”的不同值,您将获得不同的输出。

Example 4

下面是检查给定年份是否是闰年的 C program 。年份是否是闰年由以下规则确定 -

  1. 年份是否可以被 4 整除?

  2. 如果是,它是否是一个世纪年(可以被 100 整除)?

  3. 如果是,它是否可以被 400 整除?如果是,它是一个闰年,否则不是。

  4. 如果它可以被 4 整除但不是一个世纪年,它是一个闰年。

  5. 如果它不能被 4 整除,它不是一个闰年。

以下是 C 代码 -

#include <stdio.h>

int main(){

   // Test the program with the values 1900, 2023, 2000, 2012
   int year = 1900;
   printf("year: %d\n", year);

   // is divisible by 4?
   if (year % 4 == 0){

      // is divisible by 100?
      if (year % 100 == 0){

         // is divisible by 400?
         if(year % 400 == 0){
            printf("%d is a Leap Year\n", year);
         }
         else{
            printf("%d is not a Leap Year\n", year);
         }
      }
      else{
         printf("%d is not a Leap Year\n", year);
      }
   }
   else{
      printf("%d is a Leap Year\n", year);
   }
}

Output

运行代码并检查其输出:

year: 1900
1900 is not a Leap Year

用不同的值为变量“year”测试程序,例如 1900、2023、2000、2012。

通过使用复合布尔表达式(而不是嵌套 if 语句)可以实现相同的结果,如下所示 -

If (year % 4 == 0 && (year % 400 == 0 || year % 100 != 0)){
   printf("%d is a leap year", year);
}
else{
   printf("%d is not a leap year", year);
}

通过在 C 中使用 nested if 语句,我们可以编写结构化和多级决策算法。它们简化了对复杂的区分逻辑情况进行编码。嵌套还使得程序更具可读性,且易于理解。