for语句
在C语言中,for语句使用最为灵活,它完全可以取代while语句。
for语句的一般形式:for(表达式1;表达式2;表达式3)语句;
它执行过程:
1.先求解表达式1;
2.求解表达式2,若其值为真,则执行for语句中的内嵌语句,然后执行下面第3步;若其值为假,则结束循环,转到第五步;
3.求解表达式3
4.转回第二步继续执行;
5.循环结束,执行for语句下面一个语句。
for语句最简单的应用形式如下;
for(循环变量赋初值;循环条件;循环变量增量)语句;
循环变量赋初值总是一个赋值语句,它用来给循环控制变量赋初值;循环条件是一个关系表达式,它决定什么时候退出循环;循环变量增量,定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用;分开。
如:for(i=1;i<=100;i++)
{
sum=sum+i;
}
先给i赋值,判断i是否小于等于100,若是,则执行语句 ,之后再加1,再重新判断,直到条件为假,即i>100时,结束循环。
注意事项:
1.for循环中的“表达式1(循环变量赋初值)”,“表达式2(循环条件)”和“表达式3(循环变量增量)”都是选择项,可以省略,但是“;”不能省略。
2.省略了“表达式1(循环变量赋初值)”,表示不对循环变量赋初值。
3.省略了“表达式2(循环条件)”,则不做其他处理时便成为死循环。
如:
for(i=1;;i++)
{
sum=sum+i;
}
4.省略了“表达式3(循环变量增量)”,则不对循环控制变量进行操作;这时可在语句体中修改循环控制变量的语句。
如:
for(i=1;i<=100;)
{
sum=sum+i;
i++;
}
5.省略了“表达式1(循环变量赋初值)”和“表达式3(循环变量增量)”。
如:
for(;i<=100;)
{
sum=sum+i;
i++;
}
6.2个表达式都可以省略
如:
for(;;)语句
相当于:
while(1)语句
7.表达式1可以是设置循环变量的初值的赋值表达式,也可以是其他表达式。
如:
for(sum=0;i<=100;i++)
sum=sum+i;
8.表达式1和表达式3可以是一个简单表达式,也可以是逗号表达式。
for(sum=0,i=1;i<=100;i++) sum=sum+i;
或 for(i=0,j=100;i<=100;i++,j--) k=i+k;
9.表达式2一般是关系表达式或逻辑表达式,也可以是数值表达式或字符表达式,只要其值非0,就执行循环体。
如:
for(i=0;(getchar())!='\n';i+=c)
又如:
for(;(c=getchar())!='\n';)
{
printf("%c",c);
}
循环的嵌套
例1:
#include<stdio.h>
void main()
{
int i,j,k;
printf("i j k\n");
for(i=0;i<2;i++)
for(j=0;j<2;j++)
printf("%d %d %d\n",i,j,k);
}
例2:输出以下图像
*
**
***
****
*****
******
分析:一共六行,每行*数目与行号相同。
#include<stdio.h>
void main()
{
int i,j;
for(i=1;i<7;i++)
{
printf("\n");
for(j=1;j<i;j++)
{
putchar('*');
}
}
}
几种循环的比较
1.四种循环都可以用来处理同一问题,一般情况下它们可以相互代替。但一般不提倡用goto型循环。
2.在while循环和do-while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i++或i--等。for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中,因此for语句的功能更强,凡用while循环能完成的,用for循环都能实现。
3.用while和do-while循环时,循环变量初始化的操作应在while 和do-while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。
4.while 循环,do-while循环和for循环,可以break语句跳出循环,用continue语句结束本次循环,而对用goto语句和if语句构成的循环,不能用break语句和continue语句进行控制。
break语句
break语句可以用来从循环体内跳出循环体,即提前结束,接着执行循环下面的语句
一般形式:break;
注意:
1.break语句不能用于循环语句和switch语句之外的任何其他语句中。
2.break 语句对if-else条件语句不起作用。
3.在多层循环中,一个break语句只向外跳一层。
例:
#include<stdio.h>
void main()
{
float pi=3.14159;
for(r=1;r<10;r++)
{
area=pi*r*r;
if(area>100)
{
break;
}
printf("r=%f,area=%f\n",r,area);
}
}
continue语句
作用为结束本次循环,即跳出循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。
一般形式:continue;
continue语句和break语句的区别:
continue语句只结束本次循环,而不是终止整个循环的进行。break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。
例1:显示输入的字符,如果按的是esc键,则退出循环;如果按的是enter键,则不做任何处理,继续输入下一个字符。
#include<stdio.h>
void main()
{
char ch;
for(;;)
{
ch=getchar();
if(ch==27)
break;
if(ch==13)
continue;
putch(ch);
}
getch()
}
例2:把100~200之间的不能被3整除的数输出。当n能被3整除时,执行continue语句,结束本次循环(即跳过printf函数语句)只有n不能被3整除才执行printf函数。
#include<stdio.h>
void main()
{
int n;
for(n=100;n<=200;n++)
{
if(n%3==0)
{
continue;
}
printf("%d\n",n);
}
}