第3章 流程控制
图3-18 运行结果
在例3-10中定义了两层for循环,分别为外层循环和内层循环,外层循环用于控制打印的行数,内层循环用于打印“*”,每一行的“*”个数逐行增加,最后输出一个直角三角形。由于嵌套循环程序比较复杂,下面分步骤进行详细地讲解,具体如下:
第一步,在第4行代码中定义了两个循环变量i和j,其中i为外层循环变量,j为内层循环变量。 第二步,在第5行代码中将i初始化为1,条件i <= 9为true,程序将首次进入外层循环的循环体。 第三步,在第7行代码中将j初始化为1,由于此时i的值为1,条件j <= i为true,程序将首次进入
内层循环的循环体,打印一个“*”。
第四步,执行第7行代码中内层循环的操作表达式j++,将j的值自增为2。
第五步,执行第7行代码中的判断条件j<=i,判断结果为false,内层循环结束。执行后面的代码,打
印换行符。
第六步,执行第5行代码中外层循环的操作表达式i++,将i的值自增为2。
第七步,执行第5行代码中的判断条件i<=9,判断结果为true,程序将进入外层循环的循环体,继续
执行内层循环。
第八步,由于i的值为2,内层循环会执行两次,即在第2行打印两个“*”。在内层循环结束时会打
印换行符。
第九步,以此类推,在第3行会打印3个“*”,逐行递增,直到i的值为10时,外层循环的判断条件
i <= 9结果为false,外层循环结束,整个程序也就结束了。
3.4.5 跳转语句(break、goto、continue)
跳转语句用于实现循环执行过程中程序流程的跳转,在C语言中,跳转语句有break语句、goto语句和continue语句。接下来分别进行详细地讲解。
1、break语句
在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现在循环语句中,作用是跳出当前循环语句,执行后面的代码。接下来通过一个具体的案例来演示break语句如何跳出当前循环,如例3-11所示。
例3-11
1 #include
int x = 1; //定义变量x,初始值为1 while (x <= 4) //循环条件 {
printf(\条件成立,打印x的值
16
8 9 10 11 12 13 14 15 }
}
if (x == 3) { }
x++; //x进行自增
break;
return 0;
运行结果如图3-19所示。
图3-19 运行结果
例3-11中,通过while循环打印x的值,当x的值为3时使用break语句跳出循环。因此打印结果中并没有出现“x=4”。
2、goto语句
当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想要跳出外层循环则需要对外层循环添加标记,然后使用goto语句。接下来通过一个案例来演示如何使用goto语句,如例3-12所示。
例3-12
1 #include
int i, j; //定义两个循环变量 for (i = 1; i <= 9; i++) //外层循环 { }
for (j = 1; j <= i; j++) //内层循环 { }
printf(\换行
if (i > 4) //判断i的值是否大于4 { }
printf(\输出*
goto end; //跳至标识为end的语句
18 end: return 0;
运行结果如图3-20所示。
17
第3章 流程控制
图3-20 运行结果
例3-12中,在return语句前面增加了标记“end”。当i>4时,使用“goto end;”语句跳出外层循环。因此程序只打印了4行“*”。
3、continue语句
在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。接下来通过一个1~100之内的奇数求和的案例来演示continue语句的使用,如例3-13所示。
例3-13
1 #include
int sum = 0; //定义变量sum,用于记住和 for (int i = 1; i <= 100; i++) { }
printf(\return 0;
if (i % 2 == 0) //如果i是一个偶数,执行if语句中的代码 { }
sum += i; //实现sum和i的累加
continue; //结束本次循环
运行结果如图3-21所示。
图3-21 运行结果
例3-13使用for循环让变量i的值在1~100之间循环,在循环过程中,当i的值为偶数时,将执行continue语句结束本次循环,进入下一次循环。当i的值为奇数时,sum和i进行累加,最终得到1~100之间所有奇数的和,打印“sum = 2500”。
3.5 本章小结
本章首先介绍了程序的运行流程图,然后讲解了C语言中最基本的三种流程控制语句,包括顺序结构语句、选择结构语句和循环语句。
通过本章的学习,初学者应该能够熟练的运用if判断语句、switch判断语句、while循环语句、do-while循环语句以及for循环语句。掌握本章的内容就能够编写逻辑比较复杂的C语言程序并且有助于后面章节的学习。
18
3.6 习题
一、填空题 1、通常情况下使用______语句来跳出当前循环。
2、程序中的语句由上往下依次执行的是______结构语句。
3、for关键字后面()中包括了三部分内容,分别是初始化表达式、______和操作表达式 4、if条件语句分为三种语法格式,分别是______、______和______。 5、假设int x = 2,三元表达式 x>0?x+1:5 的运算结果是______。 二、判断题
1、程序的运行流程图中,处理框用平行四边形来表示。 2、break语句只用于循环语句中,它的作用是跳出循环。 3、do…while循环语句中的循环体至少会执行一次。 4、while循环中不能再定义另一个循环。
5、switch条件语句中,default语句可用于处理和前面的case都不匹配的值。 三、选择题
1、以下选项中,哪个不属于switch语句的关键字?
A、break B、case C、for D、default 2、下列语句哪些属于循环语句?(多选)
A、for语句 B、if语句 C、while语句 D、switch语句 3、以下选项中哪些描述是正确的?(多选)
A、循环语句必须要有中止条件否则不能编译
B、break关键字用于跳出当前循环
C、continue关键字用于终止本次循环,执行下一次循环D、switch条件语句中可以使用break 4、以下程序片段运行结束后,输出结果是?
for (int i = 1; i<7; i++) {
if (i % 3 == 0)
break;
{ }
printf(\}
A、123456 B、1245 C、123 D、12 5、请先阅读下面的代码
int x = 1; int y = 2; if (x % 2 == 0) { } else {
19
y++;
}
printf(\
y--;
第3章 流程控制
上面一段程序运行结束时,变量y的值为下列哪一项?
A、1 B、2 C、3 D、4 四、程序分析题
阅读下面的程序,分析代码是否能够编译通过,如果能编译通过,请列出运行的结果。否则请说明编译失败的原因。
代码一:
#include
{
}
int x = 4, j = 0; switch (x) { }
printf(“%d”,j\\n); return 0;
case 1:
j++; j++; j++; j++; j++; j++; case 2: case 3: case 4: case 5: default:
代码二:
#include
int n = 9; while (n > 6) { }
return 0;
printf(\n--;
五、简答题
20
1、请说出你知道的跳转语句,并分别说明它们之间的区别。 2、请说明while循环与for循环的异同。 六、编程题
1、请编写程序,实现对奇数和偶数的判断。
提示:
1) 定义一个int类型变量x,该变量的值为5。
2) 使用if…else语句对x进行判断,如果是奇数就输出“x是一个奇数”,否则输出“x是偶数”。
2、请编写程序,实现对“1+3+5+7+…+99”的求和功能。
提示:
1) 使用循环语句实现自然数1~99的遍历。
2) 在遍历过程中,判断当前遍历的数是否为奇数,如果是就累加,否则不加。
21