一. for循环
语法:
for(表达式1; 表达式2; 表达式3)
循环语句;
其中:
表达式1是 初始化部分,用于初始化循环变量的
表达式2是 判断部分,用于判断循环终止
表达式3是 调整部分,用于循环条件的调整
练习一下:打印10到20个数字
#include<stdio.h>
int main()
{
int i = 0;
for (i = 10; i <= 20; i++)
{
printf("%d ", i);
}
return 0;
}
这里的i = 10 是初始化部分, i<=20是判断部分, i++是调整部分
程序是怎么运行的可以看一张图
我们可以看到第一步初始化部分当i等于10时,去2判断部分判断10<=20条件成立就去3打印,打印完后就去4调整部分++等于21,加完之后再去2判断部分,一次类推循环下去知道i > 20循环结束.
要注意的是初始化部分只执行一次
对比for和while循环的区别
while
#include<stdio.h>
int main()
{
int i =10;
while(i<=20)
{
printf("%d " , i);
i++;
}
return 0;
}
for
#include<stdio.h>
int main()
{
int i = 0;
for (i = 10; i <= 20; i++)
{
printf("%d ", i);
}
return 0;
}
总结:可以发现while循环中依然存在循环的三个必要条件(初始化,判断,调整),但由于风格问题是的三个部分比较偏远,这样查找修改就不够集中和方便,所以for循环风格更好用使用效率也比较高
二.break和continue在for循环中
break
#include<stdio.h>
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
if (i == 5)
break;
printf("%d ", i);
}
return 0;
}
这里当i = 5时break就会直接终止循环
continue
#include<stdio.h>
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
if (i == 5)
continue;
printf("%d ", i);
}
return 0;
}
这里当当i = 5时continue不会往下执行,会回到整部分i++变成6
三.for语句的循环控制变量
for(i = 0; i < 10; i++)
{
int i = 0;
}
1.不可在for循环体内修改循环变量,防止for循环失去控制
int i = 0;
for(i = 0; i < 10; i++)
{}
i = 0; 闭 i < 10;开
for(i = 0; i <= 9; i++)
{}
i = 0;闭 i <= 9 ;开
2.建议for语句的循环控制变量的值采取前闭后开写法
四.for循环的变种
1.省略初始化,判断,调整
#include<stdio.h>
int main()
{
for (;;)
{
printf("hehe\n");
}
return 0;
}
打印结果是死循环,因为把判断部分省略了,就意味着判读条件恒为真就会一直打印
注意:for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议省略,容易到时问题
2.省略初始化
#include<stdo.h>
int main()
{
int i = 0;
int j = 0;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf("hehe ");
}
}
return 0;
}
没省略初始化的结果是打印9个hehe
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (; i < 3; i++)
{
for (; j < 3; j++)
{
printf("hehe ");
}
}
return 0;
}
省略初始化打印的结果是3个hehe
通过调试我们可以看到,此时j已经循环了1圈打印结果是3个hehe,按道理还有2圈没有循环
循环到第2圈的时候 j 按道理是6了现在还是3,原因就在于当 j 执行完3个循环之后,返回到 i++ ,i = 2 通过判断部分 2 < 3条件成立进入到 j 此时 j 因为没有初始化 j的值还是之前的3,通过判断部分,3 < 3 条件不成立就不打印返回i。
3.多余一个变量
#include<stdio.h>
int main()
{
int x = 0;
int y = 0;
for (x = 0 , y = 0; x < 2 && y <5; x++, y++)
{
printf("hehe\n");
}
return 0;
}
使用多余一个变量控制循环
练习题:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
for (i = 0, j = 0; j = 0; i++, j++)
j++;
return 0;
}
C语言中0表示假不进入循环,非0表示真进入循环
我们可以看到什么都没有打印,原因是判断部分的j = 0 为假。j = 0 是赋值并不是判断所以这种写法是错误的
正确写法
五.do...while循环
语法:
do
循环语句;
while(表达式);
#include<stdio.h>
int main()
{
int i = 1; //初始化
do
{
printf("%d ", i);
i++; //调整部分
} while (i <= 10); //判断部分
return 0;
}
特点:循环至少执行一次,使用场景有限
六.break和continue在do...while循环中
break:
#include<stdio.h>
int main()
{
int i = 0;
do
{
if (5 == i)
break;
printf("%d ", i);
i++;
} while (i <= 5);
return 0;
}
当i = 5时执行break程序直接就结束了
continue:
#include<stdio.h>
int main()
{
int i = 0;
do
{
if (5 == i)
continue;
printf("%d ", i);
i++;
} while (i <= 5);
return 0;
}
当i = 5时执行continue就会无限循环,有的人就会问了,为什么for循环就只是不会打印5不会出现死循环而while会,原因是for的调整部分在continue的上面,while的调整部分在continue的下面
练习:
1.计算n的阶乘
写代码前应该思考的是,1.什么是阶乘:比如3!= 1*2*3
2.得到n个数 3.将他们相乘
#include<stdio.h>
int main()
{
int n = 3;
int i = 0;
int ret = 1;
for (i = 1; i <= n; i++)
{
ret *= i;
}
printf("%d ", ret);
return 0;
}
本章完结,点个赞和关注吧❥(^_-)