- C#实践教程(第2版)
- 李乃文
- 1199字
- 2025-03-01 13:31:22
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 日期格式化