【C语言】06-循环控制
概述
程序中凡涉及求阶乘、累加、排序等问题都要用循环解决,因为程序中的某一程序段要重复执行若干次。
C语言实现循环的语句:
goto语句以及用goto语句构成循环
一、作用:无条件地转移到语句标号指向的语句去执行。
二、一般格式:
goto 语句标号;
….…..
标号:语句;
三、说明:
1.语句标号由字母、数字和下划线组成,定名规则同变量名,不能用数字开头。
goto loop; ( √ ) goto 100;(×)
2.与循环语句配合使用时,可从循环体内跳到循环体外,而不能从循环体外跳到循环 体内。
3.goto语句转移的方向可前可后。
4.与if语句配合使用时可构成循环。
5.goto 语句违背结构化程序设计的原则,因此应限制使用。我国宪法的基本原则?
例: 用if 和goto语句构成循环,求
例 从键盘输入一组数据,以0结束输入,求数据和。
#include <stdio.h>
void main()
{ int number,sum=0;
read_loop: scanf("%d",&number);
if(!number) goto print_sum;
sum+=number;
goto read_loop;
print_sum: printf("The total sum is %d\n",sum);
}
while语句
while语句实现“当型”循环结构。
一、一般形式:
二、功能:先判断表达式,若为真则执行循环体,再判断表达式,重复上述过程,直到表达式为假时退出循环。
三、
例 用while语句构成循环,求
四、关于while循环语句:
1.while循环先判断表达式,后执行循环体。循环体有可能一次也不执行。
2.循环体若包含一个以上语句,应该用{}括起来。
3.循环体应包含有使循环趋向结束的语句;
4.下列情况,退出while循环
⊙条件表达式不成立(为零)
⊙循环体内遇 break , goto
5.无限循环
while(1)
循环体 ;
例 用while语句显示1~10的平方
do-while语句
一、do-while语句实现“当型”循环结构。
二、一般形式:
三、功能:先执行循环体,然后判断表达式。若为真,则再次执行循环体,否则退出循环。
四、
例 用do-while语句构成循环,求
1.do-while 循环,循环体至少执行一次;
2.while和do-while可以解决同一问题,两者可以互换。
3.while后的表达式一开始就为假时,两种循环结果不同。
for语句
for 语句是 C 语言中最为灵活,使用最广泛的循环语句,可完全替代while,do-while语句。
一、一般形式
for(表达式1;表达式2;表达式3)
循环体语句;
二、常用形式
for(循环变量赋初值;循环条件;循环变量增值)
循环体语句;
例 用for语句构成循环,求
三、几点说明:
1.for语句中表达式1、2、3类型任意,都可省略,但分号“;”不能省。
2.无限循环:for(;;)不断执行循环体,循环不终止。
3.For语句可以转换成while结构
四、几种形式:
1.省略表达式1:应在for之前为变量赋初值。
2.省略表达式2:循环条件始终为“真”,循环不终止。
3.省略表达式3:应另外设法使程序能够结束。
4.省略表达式1、3:完全等同于while语句。
5.三个表达式都省略:无初值,不判断条件,循环变量
不增值,死循环。
6.表达式1、3可以是与循环无关的表达式,也可以是逗号表达式。
for ( s=0 , i=1 ; i<=100 ; i++ ) s=s+i;
7.表达式2可以是关系、逻辑、算术、字符表达式,非0时,执行循环体,为0时退出循环。
循环的嵌套
一、定义:一个循环体内又包含了另一个完整的循环结构,称为循环的嵌套。
二、三种循环可以互相嵌套,层数不限。
三、嵌套循环的执行流程。
四、循环可以互相嵌套,但不能相互交叉
例 计算3组1~4累加的和
例 循环嵌套,输出九九乘法表
九九乘法表逻辑框图
几种循环的比较
break语句和continue语句
一、Break语句
1.功能:在循环语句和switch语句中,终止并跳出循环体或开关体。
2.说明:
⊙break只能终止并跳出最近一层的结构。
⊙break不能用于循环语句和switch语句之外的任何其它语句之中。
3.一般形式:break;
4.流程形式:
例 break举例:输出圆面积,面积大于100时停止
例 break举例:小写字母转换成大写字母,直至输入非字母字符
二、Continue语句
1.功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断。
2.continue 语句仅用于循环语句中。
三、break 和 continue 语句的区别
1.continue 语句只结束本次循环,break语句则是结束整个循环。
2.continue 语句只用于while,do-while,for循环语句中,break语句还可以用于switch语句中。
3.流程形式:
例: 把100~200之间不能被3整除的数输出
例 :求输入的十个整数中正数的个数及其平均值
#include <stdio.h>
void main()
{ int i,num=0,a;
float sum=0;
for(i=0;i<10;i++)
{ scanf("%d",&a);
if(a<=0) continue;
num++;
sum+=a;
}
printf("%d plus integer's sum :%6.0f\n",num,sum);
printf("Mean value:%6.2f\n",sum/num);
}
程序举例
例: 求Fibonacci数列:1、1、2、3、5、8……前40个数。
Fibonacci数列可以用一个有趣的古典数学问题来描述:有一对兔子,出生三个月后每个月都生一对兔子。小兔子长到三个月后每个月又生一对兔子。假设所有的兔子都不死,问每个月的兔子总数是多少对?
#include <stdio.h>
#include <conio.h>
void main()
{ long int f1,f2;
int i;
f1=1; f2=1;
for(i=1;i<=20;i++)
{ printf("%12ld %12ld ",f1,f2);
if(i%2==0) printf("\n");
f1=f1+f2;
f2=f2+f1; }
}
例:判断m是否素数。
例:求100~200间的全部素数。
由于不是求一个数是否素数,因此需要使用双循环嵌套。外层第一个循环,用于在100~200间提取一个数,然后内层第二个循环进行判断。
例: 译密码。
按一定规律将电文变成密码:
将字母A变为E、将字母a变为e,即变成其后的第四个字母,W将变成A。字母按上述规律转换,非字母字符不变。输入一行字符,输出相应密码。
分析:
由于字符和整数之间可以通用,所以‘A’->’E’对应‘A’->’A’+4
可以定义一个字符型变量c,c接受输入,并c->c+4。
特殊之处是‘W’-’Z’和‘w’-’z’之间时,它们需要对应为‘A’-’D’和‘a’-’d’,怎么办?
一种是用书上的办法,再减回去,即用c->c-26来解决。
小结:
1.问题求解的过程和步骤叫算法,如求π值的算法、验证素数的算法。算法分析是程序设计的第一步,也是最重要的步骤。用某种编程程序语言来表达算法是程序设计的目的。
2.用编程语言实现结构化算法就是结构化程序设计。
3.结构化算法中只包含顺序、分支和循环三种控制结构。
4.在C语言中实现上述三种结构的控制语句分别是顺序语句,分支语句和循环语句。
5.if/if else语句在使用时应注意else和最近一个没有被else匹配的if匹配。
6.?运算符相当于根据不同情况对同一变量赋值的if/else语句的简写形式。
7.switch语句实现多路选择,应用时应注意其条件表达式值为整型或字符型,且每个分支应用break语句结束。
8.while和do while语句在应用时要注意后者至少执行一次循环体。
9.for循环应用时要注意其控制结构中各个表达式的作用及执行次序。for(表达式1;表达式2;表达式3)→表达式1是初始执行,仅执行一次;表达式2接下来执行,以判断是否退出循环,如果执行了循环,接下来执行表达式3,对循环条件进行某中改变,然后再到表达式2进行判断……
10.注意break和continue的区别,break是结束本层循环,continue是结束本次循环。 引致:教材
C程序设计 (第二版)
谭浩强 编著 清华大学出版社 侵权删
公众号:学生成才
内容:提供更好的学习资源