在C语言和其他高级程序语言中,循环允许执行一系列语句,直到满足一个确定的条件为止。这个条件可以与预定义,比如while ,do while 和下面要说的 for循环
1.For 循环的一般形式
For(表达式1;表达式2;表达式3);
其执行过程如下
步骤1:先求解表达式1
步骤2:求解表达式2,若其值为非0,则执行for语句中指定的内嵌语句,然后执行下面的步骤3;若表达式2的值为0,则结束循环,转到步骤5;
步骤3:求解表达式3
步骤4:返回步骤2继续执行
步骤5:循环结束,执行for语句的下面的一条语句
归纳上述5个步骤,其流程图如下
说明:
⑴表达式1通常用来给循环变量赋初值,一般是赋值表达式。也允许在for语句外给循环变量赋初值,此时可以省略该表达式
⑵表达式2通常是循环条件,一般为关系表达式或逻辑表达式。如果表达式2省略,即不判断循环条件,也就是认为表达式2始终为真,则循环将无终止的进行下去
⑶表达式3通常用来修改循环变量的值,一般是赋值语句。表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束
⑷表达式1、表达式2、及表达式3这三条语句必须以分号间隔
For 循环的简单应用
求1-100整数之和
2.for循环的变体
⑴for循环有若干种变体,正是因为这种变体而大大增加了它的功能和灵活性,最常见的一种变体是通过运用逗号运算符,使得两个或两个以上的变量共同实现对循环的控制
For(x=0,y=0;x+y<30;++x)
{
Printf(“please input y:\n”);
Scanf(“%d”,&y)
……
}
⑵可以把表达式1省略,在for循环外赋初值
省略表达式1
上面求和的例子来示例
表达式可以省略,分号不能省略
⑶表达式2可以省略,不判断循环条件,循环将无终止的进行
For(i=1;;i++)
{
Sum+=I;
}
省略表达式1和表达式2
继续用累加的例子来讲解
实际上在出现for(;;)这种结构时,可以使用break避免死循环。Break语句在之后介绍
⑷表达式3也可以省略
继续用累加的例子省略表达式1和表达式3
观察上例会发现,省略了表达式1和3的for语句实现的功能相当于while语句所能实现的功能
例如
⑸三个表达式都可以省略
三个表达式均省略相当于whille(1)
循环嵌套
一个for循环体内又包含另一个完整的for循环结构,称为for循环的嵌套。内嵌的循环中还可以嵌套循环i,这样就形成了多层循环
For循环嵌套的一般形式如下
For(;?
{
For(;?
{
}
}
前面我们说过while dowhile 和for循环这三种循环可以相互嵌套,下面都是合法的嵌套形式
⑴while循环嵌套for循环
While()
{
For(;?
{
}
}
⑵while循环内嵌while循环
While()
{
While()
{
}
}
⑶do while 套用 do while
Do
{
…
While()
{
}
}while();
⑷do while 嵌套 while
Do
{
…
While()
{
}
}while();
⑸do while 内嵌一个for循环
do
{
…
For(;?
{
…
}
}while();
转移语句
程序中的语句通常总是按照顺序方向或语句功能所定义的方向执行。如果需要改变程序的正常流向,可以使用转移语句。例如,goto、break、contine、都是转移语句。
Goto语句
Goto语句 称为无条件转移语句,一般形式如下:
Goto 语句标号;
其中语句标号是按标识符规定书写的符号,放在某一语句行的前面;标号后加冒号(:)。语句标号起标识语句的作用,与goto语句配合使用
flg: i++;
是合法的
123: i++;
不符合标识符的定义规范,不合法
C语言不限制程序中使用标号的次数,但是各标号不能重名,goto语句的语义是改变程序流向,转去执行语句标号所标识的语句。
Goto语句一般有两种用途:
①与if语句语句一起构成循环结构
②从循环体跳转到循环体外
例子 计算从键盘输入的字符数
当输入的字符不为回车时,便会接受键盘输入的字符并统计数量,当输入回车时,循环结束
Break语句
Break语句只能用到switch语句或循环语句中,其作用是跳出switch语句,或者跳出本层循环,转去执行后面的程序,break还可以用于从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句
由于break,语句的转移方向是明确的,所以不需要配合语句标号,break语句的一般形式如下
Break;
Break语句不能用于switch语句和循环语句之外的任何其他语句
这个程序本来想输入3的时候 if判定为假,通过break跳出循环,但是break实际上跳出的是最近的那层循环语句或switch语句,现在虽然跳出了switch语句,但是还执行了 我自己出来了嘻嘻嘻 这条语句 并没有达到程序结束的要求
Continue语句只能用在循环体中,一般形式如下