for 语句

C语言中的 for 语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。

For语句的一般形式为:

for(表达式 1;表达式 2;表达式3)语句

它的执行过程如下:

(1)先求解表达式1。

(2)求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。

(3)求解表达式3。

(4)转回上面第(2)步骤继续执行。

(5)循环结束,执行for 语句下面的一个语句。

可以用图6.6来表示for 语句的执行过程。

     图 6.6

for语句最简单的应用形式也就是最易理解的如下形式:

for(循环变量赋初值;循环条件;循环变量增值)语句

例如:

for(i=1;i<=100;i++)sum=sum+i;

它的执行过程与图6.2完全一样。可以看到它相当于以下语句:

i=1;

while(i<=100)

{sum=sum+i;

 i++;

}

显然,用for 语句简单、方便。对于以上for语句的一般形式也可以改写为while循环的形式:

表达式1;

while(表达式2)

{语句

表达式3;

}

说明:

(1)for 语句的一般形式中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。注意省略表达式1时,其后的分号不能省略。如 for(;i<=100;i++) sum= sum+i;执行时,跳过“求解表达式1”这一步,其他不变。

(2)如果表达式2省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式2始终为真。见图6.7。

              图 6.7

例如:

for(i=1; ;i++) sum=sum+i;

表达式1是一个赋值表达式,表达式2空缺。它相当于:

i=1;

while(1)

{sum=sum+1;

i++;

}

(3)表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束。如:

for(i=1;i<=100;)

{sum=sum+i;

 i++;

}

在上面的 for 语句中只有表达式1和表达式2,而没有表达式3.i++的操作不放在for语句的表达式3的位置处,而作为循环体的一部分,效果是一样的,都能使循环正常结束。

(4)可以省略表达式1和表达式3,只有表达式2,即只给循环条件。如:

for(;i<=100;)

{sum=sum+i;

i++;}

相当于

while (i<=100)

{sum=sum+i;

i++;}

在这种情况下,完全等同于while语句。可见for 语句比while语句功能强,除了可以给出

循环条件外,还可以赋初值,使循环变量自动增值等。

(5)3个表达式都可省略,如:

for(;;)语句

相当于

while(1)语句

即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。无终止地执行循环体

(6)表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的

其他表达式。如:

for (sum=0;i<=100;i++)sum=sum+i;

表达式3也可以是与循环控制无关的任意表达式。

表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如:

for(sum=0,i=1;i<=100;i++)sum=sum+i;

for(i=0,j=100;i<=j;i++,j--)k=i+j;

表达式1和表达式3都是逗号表达式,各包含两个赋值表达式,即同时设两个初值,使两个变量增值,执行情况见图6.8。

         图6.8

在逗号表达式内按自左至右顺序求解,整个逗号表达式的值为

其中最右边的表达式的值。如:

for(i=1;i<=100;í++,i++)sum=sum+i;

相当于

for(i=1;i<=100;i=i+2) sum=sum+i;

(7)表达式一般是关系表达式(如i<=100)或逻辑表达式(如 a<b&&.x<y),但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。分析下面两个例子:

① for(i=0;(c=getchar())! ='\n';i+=c);

在表达式2中先从终端接收一个字符赋给c,然后判断此赋值表达 式的值是否不等于’\n'(换行符);如果不等于'\n’,就执行循环体。此 for 语句的执行过程见图6.9,它的作用是不断输入字符,将它们的 ASCII 码相加,直到输入一个“换行”符为止。

        图6.9

注意:此for 语句的循环体为空语句,把本来要在循环体内处理的内容放在表达式3中,作用是一样的。可见for语句功能强,可以在表达式中完成本来应在循环体内完成的操作。

②for( ; (c=getchar())!='\n';)

printf("%c",c);

只有表达式2,而无表达式1和表达式3。其作用是每读入一个字符后立即输出该字符,直到输入一个“换行”为止。请注意,从终端键盘向计算机输入时,是在按Enter键以后才送到内存缓冲区中去的。运行情况:

Computer (输入)

Computer (输出)

而不是

CCoommppuutteerr

即不是从终端敲入一个字符马上输出一个字符,而是按Enter键后数据送入内存缓冲区,然后每次从缓冲区读一个字符,再输出该字符。

从上面介绍可以知道C语言中的for语句比其他语言(如BASIC,PASCAL)中的 FOR 语句功能强得多。可以把循环体和一些与循环控制无关的操作也作为表达式1或表达式3出现,这样程序可以短小简洁。但过分地利用这一特点会使for语句显得杂乱,可读性降低,建议不要把与循环控制无关的内容放到for语句中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光向日葵之沈阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值