for循环格式:
for (初始化表达式;条件表达式;循环后增量表达式) { 语句; ... }
条件表达式: 和while, dowhile一样, 只有条件满足才会执行循环体
初始化表达式: 在整个for循环的生命周期中, 初始化表达式只会执行一次
循环后增量表达式: 会在每次循环体之后完毕之后调用一次
for循环执行说明:
for循环开始时,会先执行初始化表达式,而且在整个循环过程中只执行一次初始化表达式
接着判断循环条件表达式,如果条件成立,就会执行循环体中的语句(“循环体”就是for后面大括号{}中的内容)
循环体执行完毕后,接下来会执行循环后的操作表达式,然后再次判断条件,重复上述过程,直到条件不成立就结束for循环
for循环应用:
能用while做得用for都能做, for相当于while的升级版
以后如果定义的便利仅仅用于控制循环什么时候结束, 循环结束之后就不在使用了, 那么可以使用for循环
如果将用于控制循环的变量定义在for循环中, 那么循环结束了, 变量也释放了
for循环注意点:
// 1.任何数值都有真假新 for (; 1; ) { printf("lnj"); } // 2.for也可以省略大括号, for省略大括号的时候, 只会执行离他最近的一条语句 for (;0;) printf("lnj"); printf("other"); // 3.作用域混乱 for (;1;) int a = 10; printf("a = %i ", a); // 5.;空语句 for (;0;); { printf("lnj"); } // 6.其实, 初始化表达式和循环后增量表达式可以写多条语句, 语句之间用,号连接 for (int i = 0, j = 0; i < 2; i++, j++) { printf("i = %i j = %i ", i, j); } // 最简单的死循环 for(;1;); for(;;); // 注意: for循环中的条件表达式默认为真
for循环嵌套:
// 问题: 会打印几次 // 结论: 循环嵌套执行的次数等于 : 外循环执行的次数 * 内循环执行的次数 for (int i = 0; i < 2; i++) { for (int j = 0; j < 3; j++) { printf("i = %i , j = %i ", i, j); } }
使用举例:
/* 1. 好友列表1 好友1 好友2 好友列表2 好友1 好友2 好友列表3 好友1 好友2 */ for (int i = 0; i < 3; i++) { printf("好友列表%i ", i + 1 ); for (int j = 0; j < 2; j++) { printf(" 好友%i ", j + 1); } } /* 2. 打印: *** *** *** 打印3行 每行3列 */ // 外循环控制行数 // 内循环控制列数 for (int j = 0 ; j < 3; j++) { for (int i = 0; i < 3; i++) { printf("*"); } printf(" "); } /* 3. *** ** * 打印3行 每行最多3列(第一行3列) */ // 只要以后看到很多行很多列, 那么第一时间就要想到循环嵌套 for (int i = 0; i < 3; i++) { for (int j = i; j < 3; j++) { printf("*"); } printf(" "); } /* 4. * ** *** */ for (int i = 0; i < 3; i++) { for (int j = 0; j <= i; j++) { printf("*"); } printf(" "); } /* 5. --* -*** ***** */ for (int i = 0; i < 3; i++) { for (int j = i; j < 2; j++) { printf("-"); } for (int n = 0; n <= i * 2; n++) { printf("*"); } printf(" "); }
规律:
尖尖朝上: 修改内循环的 条件表达式
尖尖朝下: 修改内循环的 初始化表达式
(但是也不一定非要这样)
使用举例:
/* 打印乘法表: 1 * 1 = 1 1 * 2 = 2 2 * 2 = 4 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 观察发现有很多行很多列--》循环嵌套 尖尖朝上,让内循环条件表达式随着外循环i改变 输出的结果等于 内循环的变量 * 外循环的变量 */ for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { printf("%d * %d = %d ", j, i, (j * i)); } printf(" "); }