Logo

郎哥编程

第22讲:嵌套if

2026-03-05 30

除了使用简单if和多重if之外,还可以将整个if块插入另一个if块中,这种结构称为嵌套if。嵌套if主要用于只有当前提条件满足时,才判断后续条件是否满足。例如:一个活动计划的安排,如果今天是工作日,则去上班,如果今天是周末,则外出游玩;同时,如果周末天气晴朗,则去室外游乐场游玩,否则去室内游乐场游玩。

嵌套if结构的语法如下:

if(<前提条件>)
{
	if(<后续条件1>)
		<语句块1>
       else
             <语句块2>
}
else
        <语句块3>

在编写嵌套if结构时,有时会引发一些疑问,下面是一个例子:

if( x > 0 )
   if( y > 1 )
        z=1;
else  /*这个else部分属于哪个if?*/
   z=2;

按条件语句的语法形式,上面的例子似乎有两种可能的解释,第一种理解:外层的if是一个没有else部分的条件语句,最后的else部分属于内层的if语句;第二种理解:内层if是一个不带else部分的条件语句,最后的else属于外层的if条件语句。

为了避免这种二义性,C语言规定,每个else部分总是属于前面最近的那个缺少对应的else部分if语句。根据这一规定,上面的例子第一种解释是正确的,第二种解释是不正确的。

因此,在编写代码时,尽量把嵌入的if语句块用“{”和“}”括起来,避免发生理解上的二义性。如果我们真的需要写出具有第二种意义的嵌套条件语句,那么,就应该采用下面的写法:

if( x > 0 )
{
   if( y > 1 )
        z=1;
}
else  /*这个else部分属于哪个if?*/
    z=2;

编写一个程序,要求用户输入两个数值,通过嵌套if结构判断两个数值的大小,并输出相应信息。

例【1】嵌套if练习

编程要求:编写一个程序,要求用户输入两个数值,通过嵌套if结构判断两个数值的大小,并输出相应信息。

程序清单 sample.c

#include <stdio.h>
int main()
{
    int num1,num2;
    //提示用户输入两个整数
    printf("请输入两个整数数:");
    //获取用户的输入
    scanf("%d%d",&num1,&num2);
    //用嵌套if结构判断两个数值的大小
    //首先判断num1和num2是否相等
    if( num1!=num2 )  
    {
        if( num1 > num2 )
	{
    	   printf("num1(%d)>num2(%d)",num1,num2);

	}
        else
        {
    	   printf("num1(%d)<num2(%d)",num1,num2);
	}
    }
    else
  	   printf("num1(%d)=num2(%d)",num1,num2);
}

采用嵌套结构实质上是为了进行多分支选择,判断两个数值的大小实际上有三种选择,即num1=num2、num1<num2或num1>num2,这种问题用if-else-if结构也可以完成,而且程序更加清晰。因此,在一般情况下,较少使用if的嵌套结构,以使程序更便于阅读和理解。

在编写代码时,如果要使用嵌套if结构,尽量把嵌入的if语句块用“{”和“}”括起来,一方面可以提高代码的可理解性和易读性;另一方面也可以预防因if和else匹配错误,使程序发生不可预知的结果,增加程序调试难度。

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论