for循环
我们已经知道了while循环,但是为什么还有一个for循环呢?
for循环的语法:
for(表达式1;表达式2;表达式3)
循环语句;
表达式1为初始化部分,用于初始化循环变量的。
表达式2为条件判断部分,用于判断循环什么时候终止。
表达式3为调整部分,用循环条件的调整。
for循环是用的最多以及最常见的。
循环使用的次数——从多到少——for while do while
实际上,在写代码的时候其实只要一种循环就能解决问题,三种循环是早期C语言设计出来的。
在新兴的语言中,只留一种for循环,当然其他语言也可能会有其他的循环。(for循环的强大之处。)
写while循环时候,通常要先有一个循环变量,然后在写while循环。
如:
int i=0; //循环变量的初识化
while(i<10){
//.....内容
i++;//——调整
}
注意:当我们在写这个循环的时候,如果这个代码越写越多,越写越复杂的时候;这时初始化的变量的位置要放在while循环前面,会导致越来越多;循环体的内容也可能会很长。
这样会导致初始、判断、调整位置拉开;这样当我们调整循环时,分开的三个部分在输入时可能导致出现错误。
while循环的不足之处就体现在这里。
for循环可以很好解决。
如:
int main(){
int i=0;
for(i=1;i<=10;i++){
printf("%d ",i);
}
return 0;
}
i=1;——初始化
i<=10;——判断
i++;——调整
这串代码执行顺序其实与while循环一样。
for语句的执行流程:
在while循环与for循环中break的作用是一样的,是用于跳出循环。
如:
int main(){
int i=0;
for(i=1;i<=10;i++){
if(i==5)
break;
printf("%d ",i);
}
return 0;
}
若将break换成continue的话,打印结果12345678910.
for循环里的continue是不会跳过调整部分;
while循环的continue若将i++;放在continue后面,则会跳过调整部分,会陷入死循环。
for语句的循环控制变量一些建议:
1、不可在for循环体内修改循环变量,防止for循环失去控制。
2、建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
第一种的例子:
int main(){
int i=0;
for(i=0;i<10;i++){
if(i=5) //这将5赋值给i,并不是判断相等;又因i=5<10陷入死循环
printf("haha\n");
printf("hehe\n");
}
return 0;
}
一般我们对于i的调整不要放在循环内部。
这就是在循环体内部改变循环变量。
第二种的例子:
int main(){
int arr[10]={1,2,3,4,5,6,7,8,9,10}
int i=0;
for(i=0;i<10,i++){
printf("%d ",arr[i]);
}
return 0;
}
这里的“10”可以直观地给出10次循环、10次打印、10个元素的意思;若改“i<=9”,这样并不那么直观。
前闭后开:i=10——闭区间 i<10开区间
for循环的特殊情况:
第一种:
int main(){
for( ; ; ){ //发现这里初始化、判断、调整都被省略掉了。(可不写)
printf("hehe\n");
}
return 0;
}
得出:
1、for循环的初识化、判断、调整都可以省略,但是for循环的判断部分如果被省略,那判断条件就是:恒为真。
2、如果不是非常熟练,建议大家不要随便省略。
如:
int main(){
int i=0;
int j=0;
for(i=0;i<10;i++){
for(j=0;j<10;j++){
printf("hehe\n");
}
}
return 0;
}
这个打印结果为100个hehe。【注:可以省略i,但j不建议省略。】
这里因为我们发现前面有int=0;和int j=0;后面for也有i=0和j=0;那这样是否可以将其省略掉?
如:
for( ;i<10;i++){
for( ;j<10; j++)
}
换成这样,打印结果为10个hehe
分析:我们知道i=0最先开始进入循环,然后在内部开始执行j的循环,一直循环到j=0的时候跳出循环;那这时当i=1,有开始进入;因为j没有初始化,所以j=10是不变的。
第二种:
int x,y; //初始化有两个代码
for(x=0,y=0;x<2&&y<5;++x,y++){
pintf("hehe\n")
}
return 0;
打印结果:两个hehe
(可以连续创建两个变量)
这里x=0,y=0;由逗号隔开的表达式叫逗号表达式。
这个循环由两个循环变量来控制(比较少见)
因为x<2&&y<5;是并且的关系,所以只要x<2的条件为假,后面y<5就不用管,直接跳出循环。
练习:请问以下循环要循环多少次?
#include<stdio.h>
int main(){
int i=0;
int k=0;
for(i=0,k=0;k=0;i++,k++) //这里第二个k=0意思是把0赋值给了k
k++;
return 0;
}
这个表达式的结果就是k的值,而又因k=0且0为假,就意味着循环压根就进不去。
但若将k=0改为k=1,因为1为真,且是赋值等号,就是恒为真。
只要让这个表达式的结果为非0(永远都是),这个代码就死循环了。
do...while()循环
do语句的语法:
do
循环语句;
while(表达式);——先执行后判断
执行流程:
如:
int main(){
int i=1;
do{
printf("%d ",i);
i++;
}
while(i<=10);
}
打印——调整——判断
int main(){
int i=1;
do{
if(i==5)
break;
printf("%d ",i);
i++;
}
while(i<=10);
return 0;
}
do语句的特点:
循环至少执行一次,使用的场景有限,所以不是经常使用。