您的当前位置:首页循环语句

循环语句

来源:小侦探旅游网
Turbo C 2.0提供三种基本的循环语句: for语句、while语句和do-while语句。

一、循环语句

(一)、for循环 它的一般形式为: for(《初始化》;《条件表过式》;《增量》)

语句;

初始化总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;增量定义循环控制变量每循环一次后按什么方式变化。这三个部分之间用;分开。

例如:

for(i=1;i《=10;i++)

语句;

上例中先给i赋初值1,判断i是否小于等于10,若是则执行语句,之后值增加1。再重新判断,直到条件为假,即i》10时,结束循环。

注意:

(1).for循环中语句可以为语句体,但要用{和}将参加循环的语句括起来。

(2).for循环中的初始化、条件表达式和增量都是选择项,即可以缺省,但;不能缺省。省略了初始化,表示不对循环控制变量赋初值。省略了条件表达式,则不做其它处理时便成为死循环。省略了增量,则不对循环控制变量进行操作,这时可在语句体中加入修改循环控制变量的语句。

(3).for循环可以有多层嵌套。

例如:

for(;;) 语句;

for(i=1;;i+=2) 语句;

for(j=5;;) 语句;

这些for循环语句都是正确的。

main() {

int i,j;

printf(i j\\n);

for(i=0;i《2;i++)

for(j=0;j《3;j++)

printf(%d %d\\n,i,j); }

输出结果为: i j 0 0 0 1 0 2 1 0 1 1 1 2

用for循环求1(更多考试资讯尽在http://www.kaoshibaike.com/)+2+……+100的和:

main() {

int sn=0,i;

for(i=1;i《=100;i++)

sn+=i; /*1+2+……+100*/

printf(%d\\n,sn); }

从程序可以看出,使用循环语句可以大大简化代码。 (二)、while循环 它的一般形式为:

while(条件)

语句;

while循环表示当条件为真时,便执行语句。直到条件为假才结束循环。并继续执行循环程序外的后续语句。

例如:

#include stdio.h

main() {

char c;

c=‘\\0’; /*初始化c*/

while(c!=‘\\n’) /*回车结束循环*/

c=getche(); /*带回显的从键盘接收字符*/ }

上例中,while循环是以检查c是否为回车符开始,因其事先被初始化为空,所以条件为真,进入循环等待键盘输入字符;一旦输入回车,则c=‘\\n’,条件为假,循环便告结束。与for循环一样,while循环总是在循环的头部检验条件,这就意味着循环可能什么也不执行就退出。

注意:

(1)。在while循环体内也允许空语句。

例如:

while((c=getche())!=‘\\n’);

这个循环直到键入回车为止。

(2)。可以有多层循环嵌套。

(3)。语句可以是语句体, 此时必须用{和}括起来。

用while循环求1+2+……+100的和:

main() {

int sn=0,i=0;

while(++i《=100)

sn+=i; /*求1+2+……+100*/

printf(%d\\n,sn); } 三)、do--while循环 它的一般格式为: do {

语句块; }

while(条件);

这个循环与while循环的不同在于:它先执行循环中的语句,然后再判断条件是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。

同样当有许多语句参加循环时,要用{和}把它们括起来。

用do--while循环求1+2+……+100的和:

main() {

int sn=0,i=1; do

sn+=i; /*求1+2+……+100*/

while(++i《=100);

printf(%d\\n,sn); }

从上面三个程序看出,使用for,while和do--while求解同样的问题,基本思路都差不多,只是在第一次计算时,注意初值。

二、循环控制

(一)、break语句

break语句通常用在循环语句和开关语句中。当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则将成为一个死循环而无法退出。break在switch中的用法已在前面介绍开关语句时的例子中碰到,这里不再举例。

当break语句用于do-while、for、while循环语句中时,可使程序终止循环而执行循环后面的语句,通常break语句总是与if语句联在一起。即满足条件时便跳出循环。

例如:

main() {

int sn=0,i;

for(i=1;i《=100;i++) {

if(i==51) break; /*如果i等于51,则跳出循环*/

sn+=i; /*1+2+……+50*/ }

printf(%d\\n,sn); }

可以看出,最终的结果是1+2+……+50。因为在i等于51的时候,就跳出循环了。自己写写怎样在while和do--while循环中增加break语句。

注意:

1. break语句对if-else的(更多考试资讯尽在http://www.kaoshibaike.com/)条件语句不起作用。

2. 在多层循环中,一个break语句只向外跳一层。

例如:

main() {

int i,j;

printf(i j\\n);

for(i=0;i《2;i++)

for(j=0;j《3;j++) {

if(j==2) break;

printf(%d %d\\n,i,j); } }

输出结果为: i j 0 0 0 1 1 0 1 1

当i==0,j==2时,执行break语句,跳出到外层的循环,i变为1。

但是某些情况下又必须使用goto语句,否则会让程序大大臃肿。如:

main() {

int i,j,k;

printf(i j k\\n);

for(i=0;i《2;i++)

for(j=0;j《3;j++)

for(k=0;k《3;k++) {

if(k==2) goto loop;

printf(%d %d %d\\n,i,j,k); }

loop: ; }

输出结果为:

i j k

0 0 0

0 0 1

如果不使用goto语句,而使用break,continue语句,应该这样

main() {

int i,j,k;

printf(i j\\n);

for(i=0;i《2;i++) {

for(j=0;j《3;j++) {

for(k=0;k《3;k++) {

if(k==2) break;

printf(%d %d %d\\n,i,j,k); }

if(k==2) break; }

if(k==2) break; } }

输出结果为: i j k

0 0 0

0 0 1

所以在同时跳出多层循环时,应该使用goto语句。记住,所有的goto语句其实都是可以用break,continue代替的。

下面举几个例子:

1.求两个整数的最大公约数。例如10和15的最大公约数是5。

分析:最大公约数一定小于等于最小的那个数一半,同时能被两数整除。

main() {

int num1,num2,i,min;

scanf(%d%d,&num1,&num2);

min=num1 for(i=min/2;i》0;i--)

if(num1%i==0&&num2%i==0) break;

printf(最大公约数为%d\\n,i); }

2.求1!+2!+……+n!(n《10)

main() {

int n,i;

long temp=1,sn=0; /*从9!以后,所得的值就超过了int范围*/

scanf(%d,&n);

for(i=1;i《=n;i++) {

temp*=i;

sn+=temp; /*如果没有这一步,求的就是n!*/ }

printf(%ld\\n,sn); }

(更多考试资讯尽在http://www.kaoshibaike.com/)

那么想想,如果求1!+3!+5!+……+n!应该怎么办?

3.判断一个整数是不是素数(素数就是只能被本身和1整除的数)。

#include math.h

main() {

int num,i,flag=0;

scanf(%d,&num);

for(i=2;i {

flag=0; /*标志变量复位*/

if(num%i==0) {

flag=1;

break; }

}

if(flag==0) printf(是素数\\n);

else printf(不是素数\\n); }

可以说,在所有的C语言书上,都有判断素数的例题。它的编程思想是:把一个变量作为标志变量,用来标志是不是素数;循环体是从2到sqrt(num),因为如果一个数不是素数的话,一定能分解成num=num1*num2,它们中的最小值一定小于sqrt(num),所以循环的时候只要到sqrt(num)就可以了。同时要注意变量复位的问题。

因篇幅问题不能全部显示,请点此查看更多更全内容