作为循环语句,while、for 以及 do…while 实现的都是将循环体重复执行。这里涉及到一个问题:循环体反复执行,什么时候终止呢?比如我在电脑桌面显示一个界面,要使得界面一直进行显示,我可以令界面进入一个循环的状态,不让其关闭,直到我点击关闭窗口按钮。 我们要给循环添加一个终止条件,当满足这个终止条件时循环终止。有了循环的终止条件,比如 i < 10 , 那这个 i 就必须保证它的值是可以变化的(如果i的值不变化,比如 i = 7,循环终止条件永不触发那么循环体就会一直进行下去,陷入死循环)。这就要求我们必须在循环体内对 i 的值进行修改,使其不断接近终止条件。 结合循环进行的条件,再来看 while、for 以及 do…while 语句。
while语句
循环变量的定义(初始化);
while(循环条件){
循环体;
步进语句;
}
我在写while循环时经常会忘记写步进语句导致死循环的产生。后来我再写while语句时,大括号里我就先写步进语句。
for语句
for(循环变量的初始化; 循环条件; 步进语句){
循环体;
}
for语句中循环变量的初始化、循环条件、步进语句并不一定要写在上述的位置。但是这样写既不显突兀又能规避一些问题。所以非必要请按照上述的写法书写。
#include <stdio.h>
int main(int argc, char const *argv[])
{
int i = 0;
int j = 0;
for( ; i < 3; i++){
for( ; j < 3; j++){
// 内层循环只执行3次,因为 j 在进入循环时未初始化,其作用域为 main 函数,
// 因此 j 加到 3 后,并不会进行 等于 0 的初始化,从而内层 for 循环无法进入。
}
}
return 0;
}
do…while语句
循环变量的定义(初始化);
do{
循环体;
步进语句
}while(循环条件);
break 和 continue
break、continue 和循环语句密不可分。它俩在循环中的作用结合其字面意思可进行推导。break-打破,打破什么,在循环体中那当然是打破循环了。所以 break 在循环中的作用就是打破循环(终止循环的进行,直接执行循环语句之后的代码)。continue-继续,继续什么,是继续 continue 之后的代码片段吗??如果是那为何要多此一举呢?所以 continue 一定不是继续其后面的循环体。循环结构一共就那几部分组成,不是循环语句体,那就是只能是循环本身了。所以 continue 的作用立显:不再执行 continue 之后的语句,遇到 continue 转到循环条件的判定,继续执行下一次循环。
#include <stdio.h>
#define NUMBER 10
int main(int argc, char const *argv[]) {
int i = 1;
while (i < NUMBER) {
if (i == 5) {
break;
}
// 输出 i 的值
i++;
}
i = 0;
while (i < NUMBER) {
if (i == 5) {
continue;
}
// 输出 i 的值
i++;
}
return 0;
}
// 使用 break 最终输出的结果为 1 2 3 4
// 使用 continue 最终输出的结果为 1 2 3 4 6 7 8 9
break、continue 和 return 的辨析
break 和 continue 用于循环语句中(break也用于switch语句),return 用于函数中。 我们可能会在函数中遇到 break、continue,或者在循环中遇到 return 这都很正常。关键是根据具体场景分析 break、continue 以及 return 语句的主体,得出其匹配的结构。
三种循环语句的比较
while 和 for 语句类似都是先判断,当满足循环条件时执行循环体。 do…while 语句是先执行,执行完后判断循环终止条件,不满足时退出。 while 和 for 的差别体现在步进语句上。遇到 continue,for循环的步进语句一定会执行,但是 while 的步进语句是否执行和 continue 的位置有关。
#include <stdio.h>
int main(int argc, char const *argv[]) {
int i = 0;
for (; i < 10; i++) {
if (i == 5)
continue;
// 打印 i 的值
}
while (i < 10) {
if (i == 5)
continue;
// 打印 i 的值
i++;
}
return 0;
}
// 使用 for 循环,continue执行之后,步进语句会被执行 i 值变为 6
// 使用 while 循环,continue执行之后,步进语句不会被执行 i 值仍然为 5
// 最终导致 for 循环能正常执行,而 while 循环进入死循环(i = 5, < 10 且i值得不到修改导致循环条件始终成立)
练习题
已知使用 getchar 可以获取来自键盘的一个输入 int ch = getchar(); 编写程序,当输入 EOF 时,程序退出,否则等待下次输入。 EOF:文件结束标志。其值为 -1, 按下 Ctrl + Z 向控制台输入一个 EOF
// 已知使用 getchar 可以获取来自键盘的一个输入 int ch = getchar();
// 编写程序,当输入 EOF 时,程序退出,否则等待下次输入。
// EOF:文件结束标志。其值为 -1, 按下 Ctrl + Z 向控制台输入一个 EOF
#include <stdio.h>
int main(int argc, char const *argv[]) {
int ch = 0;
// 使用 while 语句
while ((ch = getchar()) != EOF){
printf("%c", ch);
}
// for 语句
for (; ch != EOF;) {
ch = getchar();
printf("%c", ch);
}
return 0;
}
|