前言与概述:
在C语言中,for循环语句是较为常用的循环语句,本文章主要介绍for循环的基本语法结构、continue语句和break语句在for循环中的使用、for循环的三种变体,最后通过一道面试题来巩固前面所学知识。
for循环基本语法结构
基本语法结构
for(表达式1;表达式2;表达式3)
{
循环语句;
}
表达式1:初始值,表达式1用于初始化循环变量的值,该表达式只执行一次。
表达式2:循环条件,表达式2用于定义循环条件,当循环条件成立时,执行循环语句块,当循环条件不成立,退出循环。
表达式3:调整,表达式3用于调整循环变量的值,当每次循环语句结束后,都会进入表达式3对循环变量的值进行调整。
图解for循环表达式
实践演练出真知
例题:请使用for循环输出1-10所有的整数
分析:例题要求输出1-10所有的整数,既然是整数,我们就要定义int类型的循环变量,该变量的值就是要输出的值。输出第一个值是1,那么可以初始化循环变量值为1。输出最大的值是10,那么循环条件就是循环变量的值<=10,输出1后输出2,那么循环变量的值每次都要加一。循环语句很简单,就是输出循环变量的值。
示例代码:
//输出1-10所有的整数#include <stdio.h>int main(){int i = 0;for (i = 1; i <= 10; i++){printf("%d ", i);}return 0;}
运行结果:
for循环使用建议
Part1:不建议在for循环语句块内修改循环变量的值,防止出现无限循环。
错误代码示例:
分析:由于笔者在循环语句块内修改了循环变量i的值,导致程序不停输出6,陷入死循环。这是因为:for循环初始循环变量i的值为1,循环条件满足,输出1。将变量i的值变成5,经过i++的调整,变量i的值为6,满足循环条件,输出6,又将变量i的值变成5,经过i++的调整,变量i的值又为6,再次满足循环条件,输出6。以此类推,循环条件始终是满足的,故程序陷入无限循环。
Part2:建议将for循环循环变量的取值设置为前闭后开区间,这样更符合逻辑,也显得代码更高级。
区间:
break和continue在for循环中的使用
break语句用于永久终止循环
在for循环语句中,如果使用break语句,会直接终止剩余所有的循环语句,并离开循环。
例题:输出1-10所有的整数,但输出第四个数后便不再输出
分析:题目要求输出1-10所有的整数,所以我们可以使用上个代码。但是,题目还要求输出第四个数后便不再输出,于是,当我们输出第四个数(循环变量的值为4)后,使用break语句终止循环。
示例代码:
//break语句#include <stdio.h>int main(){int i = 0;for (i = 1; i < 11; i++){printf("%d ", i);if (i == 4){break;}}return 0;}
运行结果:
continue语句用于终止本次循环剩余部分
在for循环中,continue语句用于终止本次循环的剩余语句,并且返回到表达式3,对循环变量进行调整。
例题:如果将上个代码的break语句改为continue语句,输出结果是什么呢?
示例代码:
//continue语句#include <stdio.h>int main(){int i = 0;for (i = 1; i < 11; i++){if (i == 5){continue;}printf("%d ", i);}return 0;}
运行结果:
分析:从控制台中,我们可以看到只有5没有输出,这正是continue语句发挥作用。当变量i的值等于5时,进入continue语句,会终止当前剩余的循环语句,即不输出5,然后返回到表达式3,调整变量i的值,变量i的值加1变成6,if条件语句不成立,输出6。
for循环变体
无循环条件的for循环
在for循环中,圆括号内的3个表达式都可以省略。如果没有设置循环条件,那么默认循环条件恒成立,程序就会陷入无限循环。
示例代码:
//无循环条件for循环#include <stdio.h>int main(){int i = 0;for (i = 1; ; i++){printf("haha! ");}return 0;}
运行结果:
嵌套for循环
for循环支持在for循环语句块内部设置for循环,当外部的for循环条件成立后,如果内部的for循环成立,会进入内部for循环,当内部的for循环执行完毕后,会回到外部的for循环,如果外部for循环成立,会再次进入内部的for循环。依此类推,直到外部for循环条件不成立。
例题:打印九九乘法表
示例代码:
//打印九九乘法表#include <stdio.h>int main(){int i, j;int sum = 0;for (i = 1; i < 10; i++){for (j = 1; j < i + 1; j++){sum = i * j;printf("%d * %d = %d", i, j, sum);if (sum > 9){printf(" ");}else {printf(" ");}if (i == j){printf("\n");}}}return 0;}
运行结果:
多循环变量表达式
for循环支持圆括号内3个表达式都可以有多个循环变量。
示例代码:
//多个循环变量#include <stdio.h>int main(){int i, j;for (i = 0, j = 0; i < 3 && j < 5; i++, j++){printf("good!\n");}return 0;}
分析:在本代码中,定义两个循环变量,并由这两个循环变量共同控制循环条件,&&是逻辑与,左右两个条件必须同时满足,循环条件才成立。||是逻辑或,左右两个条件只要满足一个条件,循环条件就成立。每次for循环都输出“good!”,当第三次for循环结束后,循环变量i的值调整为3,循环条件不成立,循环结束。
练习题:
下列代码一共循环多少次?
//面试题#include <stdio.h>int main(){int x = 0;int y = 0;for (x = 0, y = 0; x = 0; x++, y++){x++;}return 0;}
答案:一共循环0次,for循环循环条件是“x = 0;”,“=”是赋值符不是相等符。将0赋予变量x,变量x的值是0,循环条件不成立。