C语言回顾-基本语句-for循环语句
昨天我们介绍了while语句,这是一种循环语句,今天的for也是一个循环语句,我们来看他的结构:
for(表达式1;表达式2;表达式3)
{
循环体;
}
其中,表达式1,2,3全都是表达式,他们分别起什么作用呢,我们来看一个例子:
#include<stdio.h>
int main()
{
int i;
for(i=10;i>0;i--)//这是一个循环
{
printf("%d ",i);//我们每次打印i的值
}
getchar();//我们打印完暂停一下
return 0;
}
这个程序的运行结果是什么呢,我们可以看看:
可以看出来,每次i的值都在减一,一直到1,那么是怎么实现的呢。他就是通过for循环里的三个表达式是实现的,表达式1是循环开始前的初始化动作,只执行一次;表达式2用来控制循环的结束,(只要i>0就一直运行)他的判断和while类似,深刻理解一下真假值的问题;表达式3是每次循环结束中最后被执行的一个操作。所以在运行完整个for循环的时候i现在等于几呢,应该是0。
现在我们来看看for的习惯用法,大家可以发现,while一般用在不知道循环多少次的问题,for是可以通过第三个语句知道循环的次数的。
- 从0向上加到n-1
for(i=0;i<n;i++)...
- 从1向上加到n
-
for(i=1;i<n;i++)...
- 从n-1乡下减到0
for(i=n-1;i>=0;i--)...
- 从n向下减到1
-
for(i=n;i>0;i--)...
里面需要注意>=与>的区别,关系到循环的结束点,结束后i的值等等问题。
-
另外,for语句也不是这么死板,他比我们想的灵活,比如他允许忽略任意甚至全部的表达式,比如我们在for开始前给i定义,就可以不用第一个语句
#include<stdio.h> int main() { int i=0; for(;i<10;i++); return 0; }
可以看见,我们的第一个语句是空的,也就是单独一个分号,但是程序还是可以把i加到10.如果我们忽略第三个表达式
-
for(i=10;i>0;) printf("%d",i--);
这里i--需要理解,是在i被使用后自减一次,也就是说,我们如果忽略第三个表达式,那么我们就要在循环体里给出变化用来补偿忽略第三个表达式产生的后果。
那么我们如果同事忽略掉第一个和第三个表达式时for(;(i>10;),for循环会变成什么样子呢?
看着有没有想起来,是不是和while循环一模一样?(比while要复杂),这里while语句很明显更清楚,因此更加可取。
那还有一个,我们如果忽略第二个语句呢,实际上,这也是一个技巧,当第二个语句为空,程序默认为真值,也就是说会一直循环(除非一些特别语句例如break),因此我们也可以用for(;;)来构建死循环。
还有一点,在C99标准里,for的第一个表达式可以声明变量,例如for(int i=0;i<10;i++),如果要声明多个,中间可以用逗号隔开。
最后,我们做一个打印平方表的程序,留给大家思考。代码如下:
#include<stdio.h>
int main()
{
int i,j;
for(i=1;i<=9;i++)//第一个因数从一到九循环
{
for(j=1;j<=i;j++)//第二个因数从1到第一个数开始循环
{
printf("%d*%d=%-2d ",i,j,i*j);//这里我们打印算式
}
printf("\n");//这里我们需要给程序换行
}
getchar();//这里暂停下
return 0;
}
我们看看运行结果:
那么今天的回顾就到这里了
21 : 48