for循环语句是C语言提供的功能更强,使用更广泛的一种循环语句。C语言的for循环语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环条件的情况,它完全可以代替while循环。
for循环的一般语法为:
for(表达式1; 表达式2; 表达式3;)
{
语句;
}
语法说明如下:
■ 表达式1:通常用来给循环变量赋初值,一般是赋值表达式,也允许在for语句外给循环变量赋初值,此时可以省略该表达式;
■ 表达式2:通常是循环条件,一般为关系表达式或逻辑表达式;
■ 表达式3: 通常可用来修改循环变量的值,一般是赋值语句。
for循环中的这三部分必须用分号隔开,组成循环体的语句可以是单条语句或一个语句集(多条语句)。
一般语法中的“语句”即为循环体语句。for语句的语义是:
(1)首先计算表达式1的值,通常为循环变量赋初值;
(2)再计算表达式2的值,即判断循环条件是否为真,若值为真则执行循环体一次,否则跳出循环;
(3)然后再计算表达式3的值,这里通常写更新循环变量的赋值表达式,然后转回第二步重复执行。
在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次。循环体可能执行多次,也可能一次都不执行。
例【1】for循环练习1
编程要求:使用for循环求数的阶乘。
程序清单 sample.c
#include <stdio.h>
void main()
{
int number,count;
int factorial = 1;
printf("请输入任意一个正整数:");
scanf("%d",&number);
for( count=1;count<=number;count++ )
{
factorial = factorial * count;
}
printf("%d的阶乘 = %d",number,factorial);
}
程序声明了3个int类型的变量,number、count、factorial。分别用于存储输入的整数、循环变量的值、阶乘值。For循环中表达式count=1为变量赋初值,表达式count<=number作为循环条件用来测试是否继续执行循环,表达式count++用来修改循环变量的值。
for语句中的三个表达式都可以是逗号表达式,逗号表达式就是通过“逗号”隔开的多个表达式组成的表达式,逗号表达式从左往右计算。
例【2】for循环练习2
编程要求:使用for循环输出加法表。
程序清单 sample.c
#include <stdio.h>
void main()
{
int i,j,max;
printf("请输入任意一个数值:");
printf("根据这个值可以输出以下加法表\n");
scanf("%d",&max);
for( i=0,j=max;i<=max;i++,j-- )
{
printf("\n %d + %d = %d",i,j,i+j);
}
}
程序在for循环中,表达式1为逗号表达式,该表达式为循环变量i和j赋初值,执行此表达式后,i被赋值为0,j被赋予max中的当前值;表达式3也是一个逗号表达式,每次循环后,i自加1,j自减1。
前面已讨论,for循环中有三个表达式,for循环中的这三个表达式都可以省略,但要注意分号分割符合不能省略,下面分别讨论for循环中省略部分或者全部表达式的情况。
(1)省略表达式1
for循环语句中表达式1可以省略不写,此时,循环变量应在循环语句之外赋值,例如如下语句:
int i = 0;
for( ; i < 10; i++ )
{
printf("\n %d=", i*2)
}
程序输出20以内的偶数,int i = 0对循环变量进行赋值,因为循环变量i已经被赋值,此时循环语句可以省略表达式1。
(2)省略表达式2
for循环语句中的表达式2,在一定条件下也可以省略, 表达式2主要用于循环条件的判断。如果省略表达式2,就必须要在循环体中增加循环条件判断语句,如果不满足循环条件,则跳出循环。跳出循环可以用break语句,break语句将在后面介绍。省略表达式2的示例语句如下:
int i;
for( i=0;; i++ )
{
if( i >=10 )
break;
printf("\n %d=", i*2)
}
程序在循环体内增加了if( i >= 10 )条件判断语句,如果i>=10为真,则通过break语句跳出循环,如果循环体内没有跳出循环的条件判断语句,程序将进入无限循环。
(3)省略表达式3
for循环语句中的表达式3一般是用来修改循环变量的值,如果在循环体内有修改循环变量的语句,此时表达式3可以省略。例如如下语句:
int i;
for( i=0; i<10; )
{
i = i+1;
printf("\n %d=", i*2)
}
循环体内的i = i+1等同于for( ; i < 10; i++ )语句中的i++,每循环一次,i就进行加1操作,当i自增到10时,循环终止。
(4)三个表达式都省略
三个表达式都省略的情况比较少见,此时,循环体为有循环变量的赋值语句,循环体内应有修改循环变量和循环条件判断的语句,否则很容易形成无限循环。例如如下语句:
int i=0;
for( ;; ; )
{
i = i+1;
if( i >=10 )
break;
printf("\n %d=", i*2)
}
程序中int i=0为循环变量i赋初值,循环体内i = i+1修改循环变量i的值,if( i >= 10 )判断循环变量i的值是否大于等于10,如果条件为真,则跳出循环。
for循环在C编程中应用非常广泛,它不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环条件的情况,它完全可以代替while循环。只要弄明白了for循环的三个表达式,就可以掌握for循环的用法,表达式1是进入第一次for循环之前运行,并且只会执行一次;表示式2是for循环的执行条件,满足这个条件后才能进入循环里面的语句;表达式3是在执行一次循环后执行的语句。
break与continue语句
有时可能不知道循环将要执行的次数,终止循环的条件可在以后确定,所以需要提供一种机制在条件满足的时候跳出循环。有时候,我们需要根据条件跳过循环中的一些语句。Java语言提供了break和continue两个关键字,用于改变程序的控制流。
break语句
break语句通常用在前面介绍过的switch语句及循环语句中。当break语句用于switch语句时,可使程序跳出switch语句而执行switch语句之后的语句;当break语句用于while、do-while、for循环语句时,可使程序终止循环而执行循环后面的语句。
break语句实际上就是为了使人能方便地描述从循环执行中退出的动作。通常应把break语句放在条件语句控制之下,以便在某些条件成立时立即结束循环。
例【3】break语句练习
编程要求:使用break语句退出循环。
程序清单 sample.c
#include <stdio.h>
void main()
{
int i= 0;
while(i<7)
{
i++;
printf("\n 第%d次循环",i);
if(i==5)
{
printf("\n i==5 跳出循环,程序结束", i);
break;
}
}
}
该循环在变量i的值等于5时,满足条件,然后执行break语句,结束整个循环,循环语句后面没有其它语句可执行,程序退出。
例【4】break语句练习
编程要求:使用break语句跳出switch结构。
程序清单 sample.c
#include <stdio.h>
void main()
{
int i = 5;
switch(i){
case 1:
printf("this is 1");
break;
case 2:
printf("This is 2");
break;
case 3:
printf("This is 3");
break;
case 4:
printf("This is 4");
break;
case 5:
printf("This is 5");
break;
default:
printf("This is default");
}
}
switch后面的表达式为变量i,i赋值5,然后依次与case语句的常量表达式进行匹配,匹配成功的项,执行break语句跳出switch结构。
break语句通常在循环中与条件语句一起使用。若条件值为真,则跳出循环。控制流转向循环后面的语句。如果已执行break语句,则不会执行循环体中位于break语句后的语句。在多层循环中,一个break语句只能向外跳出一层循环。
continue语句
continue语句只能用在循环里。continue语句的作用是跳过循环体中剩余的语句而准备执行下一次循环。对于while和do-while循环,continue执行之后的动作是条件判断;对于for循环,随后的动作是变量更新。
注意break语句和continue语句的差别。break语句导致循环终止,使程序控制流转向这个循环语句之后;而continue引起的则是循环内部的一次控制转移,使执行控制跳到循环体的最后,相当于跳过循环体里这个语句后面的那些语句,继续下一次循环,下图说明了break语句和continue语句引起的控制转移的情况。

图 break和continue语句引起的控制转移
例【5】continue语句练习
编程要求:求整数1—100的累加值,但要求跳过所有个位为3的数。
提示:在循环中加一个判断,如果该数个位是3,就跳过该数不加。如何判断1到100中的那些整数的个位是3呢,还是使用取余运算符“%”,将一个正整数,除以10以后余数是3,就说明这个数的个位为3。
程序清单 sample.c
#include <stdio.h>
void main()
{
int i;
int sum = 0;
for( i =1; i<=100; i++ )
{
if( i % 10 == 3 )
{
continue;
}
sum += i;
}
printf("sum = %d",sum);
}
程序检查i除以10的余数是否等于3,如果是,则意味该数的个位数是3,这种情况下,将使用continue语句跳过后续语句,然后转向for循环的表达式3更新循环变量,继续下一次循环。
和break语句一样,continue语句通常在循环中与条件语句一起使用,用来控制循环。在循环中遇到continue语句后,就不会执行该循环中位于continue后的任何语句。continue语句用于结束当次循环,继续下一次循环。