3.4 嵌套语句

嵌套语句用于在选择或循环语句块中加入选择或循环语句,将内部加入的选择或循环语句作为一个整体,有以下几种形式:

选择语句嵌套 在选择语句块中使用选择语句。

循环语句嵌套 在循环语句块中使用循环语句。

多重混合语句嵌套 在选择或循环语句块中使用多个选择或循环语句。

3.4.1 选择语句嵌套

选择语句以if else语句为例,在if或else后的语句块中,使用另一个条件语句,如获取一个年份是否是闰年,如练习3-11所示。

【练习3-11】

定义整型变量year为年份,接收用户对年份的输入数据。根据year的值,判断该年份是否是闰年。闰年的判断条件有两个,如下所示。

□ 年份是整百数的,先除去100后,能被4整除的为闰年。

□ 年份不是整百数的,能被4整除的为闰年。

使用语句如下:

Console.WriteLine("请输入年份:");
int year = Convert.ToInt32(Console.ReadLine());
if (year % 100 == 0)
{
    year = year / 100;
    if (year % 4 == 0)
    { Console.WriteLine("年份 {0} 是 闰年", year); }
    else
    { Console.WriteLine("年份 {0} 不是 闰年", year); }
}
else
{
    if (year % 4 == 0)
    { Console.WriteLine("年份 {0} 是 闰年", year); }
    else
    { Console.WriteLine("年份 {0} 不是 闰年", year); }
}

练习3-11中,首先判断年份是否能被100整除,能的话将年份除以100再与4取余数;若年份不能被100整除,直接将年份与4取余数,并根据余数判断年份是否是闰年。

分别使用2012和2013来验证程序,其运行结果如图3-17和图3-18所示。

图3-17 验证2012是否是闰年

图3-18 验证2013是否是闰年

3.4.2 循环语句嵌套

在循环语句块使用循环语句是常用的,以for循环为例,若想输出一行数据或者一列数据,直接使用for循环即可,但若想输出几行几列的数据,只能在循环内部使用循环。

例如,2013年4月1日为周一,按一行一周输出4月份日期,则每一行是一个循环,在一行结束后换行,进行下一个循环,如练习3-12所示。

【练习3-12】

定义整型变量day表示日期,输出4月份日期。

使用嵌套语句如下:

int day;
for (day = 1; day < 31; )
{
    for (int i = 0; (i < 7)&&(day<31); i++)
    {
        Console.Write(day);
        Console.Write(" ");
        day++;
    }
    Console.Write("\n");
}

运行结果如图3-19所示。练习3-12中,由于day等于30时还会进行内部循环,在内部循环中day将大于30并进行下去,因此在内部循环中需要添加条件(day<31)。否则执行结果如图3-20所示。

图3-19 4月份日期

图3-20 无意义日期

3.4.3 混合语句嵌套

嵌套不仅可以用于选择语句之间或循环语句之间,选择与循环之间的嵌套同样常用。复杂的功能尝试用多重的嵌套,一个循环内出现多个循环和选择语句。

当程序使用多重嵌套时,执行时将循环和选择语句块由内到外作为整体进行。如图3-19所示,由于日期数字有一位的,有两位的,因此数据看起来比较乱。若在一位数字的前面加一个空格,即可使日期整齐、便于查看,如练习3-13所示。

【练习3-13】

借助练习3-12的示例,在输出日期时判断该日期是否小于10,若小于10则为一位数字,需要在数字前输出空格,否则不输出空格,代码如下:

int day;
for (day = 1; day < 31; )
{
    for (int i = 0; (i < 7) && (day < 31); i++)
    {
        if (day < 10)
        {
            Console.Write(" {0}", day);
        }
        else
        {
            Console.Write(day);
        }
        Console.Write(" ");
        day++;
    }
    Console.Write("\n");
}

练习3-13是多重嵌套的例子,在for循环内有for循环,内部的for循环内又有选择语句。分析这段代码时,将最里面的if语句块看作一个整体,接着将内部的for循环作为一个整体,执行外部循环。运行练习3-13,其效果如图3-21所示。

图3-21 日期格式化