for循环
语法结构
for(表达式1;表达式2;表达式3)
循环语句;
表达式1为初始化部分.用于初始化循环变量.
表达式2位条件判断部分,用于判断循环终止的时候.
表达式3为调整部分,用于循环条件的调整.
来看一个例子,加入我们要使用for循环打印1-10的数字,程序如下
#include <stdio.h>
int main(){
int i;
for(i = 1; i < 11; ++i){ //for(初始化;判断部分;调整部分)
printf("%d\n",i);
}
return 0;
}
for循环执行流程
1.执行表达式1(int i = 1) //注意在表达时1中定义变量在有些版本的编译器中是不能通过的;
2.执行表达式2(i < 11);
3.执行循环体;
4.执行表达式3(++i);
5.执行表达式2;
6.执行循环体;
7.执行表达式3.
…
我们来看一下for循环和之前学过的while循环的对比.
int i = 0;
while (i < 11){ //判断部分
printf("haha\n");
i = i + 1; //调整部分
}
同样的功能,我们用for循环来实现.
for(i = 0; i < 11; ++i){
printf("haha\n");
}
通过对比我们不难发现,在while循环中依然存在循环的三个条件,但由于语句结构不同,三个部分相隔可能会较远,这样在我们查找和修改的时候就不够集中和方便.由此,for循环的结构更好一些,在我们的工程实际中,使用频率也更高.
for循环中break和continue.
在我们的for循环使用当中,也会经常出现break和continue,他们的用法及意义和在while循环中如出一撤.但由于语句结构不同,我们在使用break和continue的时候还是要考虑清楚.
对于for循环语句循环控制变量的一些建议:
1.不要在for循环体内去修改循环变量,防止for循环失去控制.
2.通常建议for语句的循环控制变量的取值采用前闭后开区间写法.
最后来看一下for循环当中的变种.
1.第一种情况
#include <stdio.h>
int main(){
for(;;){
printf("haha\n");
}
return 0;
}
2.第二种情况
#include <stdio.h>
int main(){
int x,y;
for (x = 0,y = 0; x < 2 && y < 5; ++x, y++){
printf("haha\n");
}
return 0;
}
在上面的第二种情况里出现的++x和y++,前置++和后置++都是自增1,但是表达式的返回值不同.
前置++,返回的是自增之后的值;
后置++返回的是自增之前的值.
来看一道题目,如下:
#include <stdio.h>
int main(){
int i = 0;
int k = 0;
for(i = 0, k = 0; k = 0; i++,k++){
k++;
}
return 0;
}
问这个循环会执行多少次?
其实答案为0次,仔细观察我们条件判断部分,k = 0,在这里其实给k赋值为0,而不是比较等于,赋值为0后,则条件判断部分为假,就不会在执行下去了,即为0次.
do…while循环
语法结构
do
循环语句;
while(表达式);
do…while语句特点
循环至少执行一次,使用的场景十分有限,并不是经常使用.
看一个例子;
#include <stdio.h>
int main(){
int i = 10;
do{
printf("%d\n",i)
}while(i < 10);
return 0;
}