2013最新大学计算机c语言-循环结构

上传人:101****457 文档编号:89231581 上传时间:2019-05-21 格式:PPT 页数:34 大小:179.50KB
返回 下载 相关 举报
2013最新大学计算机c语言-循环结构_第1页
第1页 / 共34页
2013最新大学计算机c语言-循环结构_第2页
第2页 / 共34页
2013最新大学计算机c语言-循环结构_第3页
第3页 / 共34页
2013最新大学计算机c语言-循环结构_第4页
第4页 / 共34页
2013最新大学计算机c语言-循环结构_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《2013最新大学计算机c语言-循环结构》由会员分享,可在线阅读,更多相关《2013最新大学计算机c语言-循环结构(34页珍藏版)》请在金锄头文库上搜索。

1、第五章 循环结构,1+2+3+98+99+100=5050 main() int s,i; i=0;s=0; i=1;s=s+i;i=i+1; i=2;s=s+i;i+; i=99;s=s+i;i+; i=100;s=s+i;i+; i=101 ,那些需要重复执行的操作通常用到循环结构,例如: 求几个数之和;(重复加操作) 对数组的处理等等。,C语言中,有三种语句可以构成循环结构: While、do while、for三种语句,5.1 while语句构成的循环结构,一、while语句的形式:,while(表达式) 循环体;,while(i0) printf(“*”);i+;,表达式,循环体语句

2、,为0,非0,While语句的执行过程:,1)计算while后表达式的值。,2)当值为非0时,执行循环体;,3)继续判断表达式,为非0,执行(2); 为0,执行(4),4)当值为0时,退出循环体,While与if语句的区别: 当表达式为真的时候,重复执行语句。,注意:一定要有表达式变为假的条件,否则无限制的循环下去。,补充例题:计算1+2+3+98+99+100的值?,3、复合语句的用法。,1、加数的规律:后一个数比前一个大1 一直到100 找出变量I i100, i+;,2、循环一次,放一个和。找变量sum。 和的初值:0 ; 积的初值:1,i=100,s=s+i;i+;,为0,非0,#in

3、clude main() int i,sum; i=1; sum=0; while(i=100) sum=sum+i; i+; printf(“sum=%d”,sum); ,例1:12+22+32+n2,直到累加和大于或等于1000为止。,main() int i,sum; i=0;sum=0; while(sum1000) sum+=i*i; i+; printf(“i=%dsum=%dn“,i-1,sum); ,sum100,sum+=i*I;i+;,为0,非0,例2: pi/4=1-1/3+1/5+求pi的近似值。,main() double x1,x2; x1=0.0; x2=cos(

4、x1); while(fabs(x2-x1)1e-6) x1=x2; x2=cos(x1); printf(“x=%fn“,x2); ,引申题:习题5.17,1-3+5-7+9-99+101的值。,例3:用迭代法求方程x=cosx的根,要求误差小于10的-6次方。,#include #include Main() double x1,x2; x1=0.0; x2=cos(x1); while(fabs(x2-x1)1e-6) x1=x2; x2=cos(x1); printf(“x=%fn”,x2) ,5.2 do-while语句构成的循环结构,一、do while的形式:,do 循环体 wh

5、ile(表达式);,do i+;s+=I; while(i10);,先执行一次循环体,再计算表达式的值为真,执行循环体; 为假,退出循环。,表达式,循环体语句,为0,非0,表达式后的分号是个重要的考点。,#include main() int i,sum; i=1; sum=0; while(i=100) sum=sum+I; i+; printf(“sum=%d”,sum); ,#include main() int i,sum; i=1; sum=0; do sum=sum+I; i+; while(i=100); printf(“sum=%d”,sum); ,用do while处理累加和

6、问题。,二、比较两种循环的区别:,(1)do while 先执行循环体,后判断条件。,(2)While 先判断条件,后执行循环体。,(3)do while 最少执行次数是1 while最不执行次数是0,#include main() int i,sum; sum=0; scanf(“%d”, ,#include main() int i,sum; sum=0; scanf(“%d”, ,例5.4求fibonacci数列,直到某项大于1000为止。,1)f=f1+f2,f1=f2,f2=f,2)判断f2是否大于1000,3)循环结束,输出f2的值.,F3=1000,f=f1+f2; ,f1=f2

7、;f2=f,非0,f1=1,f2=1,1 1 2 3 5 8 13.,5.3 for语句构成的循环结构,一、for语句形式和执行过程:,for(表达式1;表达式2;表达式3(没有分号))循环体;,for(k=1;k=10;k+) printf(“*”);,1)计算表达式1,2)表达式2,真:转3);假:转5),3)执行一次循环体,4)计算表达式3;转2),5)结束循环,执行for后面的语句。,执行过程:,for(循环变量赋初值;循环条件;循环变量增值) 语句;,表达式2,语句,为0,非0,表达式1,表达式3,for语句的流程图:,对for语句的详细说明:,(1)”表达式1”可以省略,但分号不可

8、以省略,在for 语句前为 变量赋初值。 例:i=0; for(;i=100;i+) printf(“%d”,i);,(2)”表达式2”省略去,语句将无限循环下去。 例:for(i=0;i+) sum=sum+I; if(i100) break;,(3)”表达式3”可以省略,但要把其放到循环体去,否则for循环将无法正常结束。 for(i=0; i100;) sum=sum+I;i+;,(4)把其它变量初值放到表达式,把循环体放到表达式,作用是一样的。 for(sum=0,i=0;i=100,sum=sum+i,i+);,例5.5累加和1+2+3+100?用for循环来做。,#include

9、main() int I,sum; sum=0; for(i=1;i=100;i+) sum=sum+i; printf(“sum=%dn”,sum); ,for循环改成while语句:,表达式1; while(表达式2) 语句 表达式3;,例题:5.6:计算半径为0.5、1.5、5.5的圆面积。,补充:求n!:1*2*3*n,main() int i; double s=1; scanf(“%d”, ,注意:如果把s定义为int,结果为错。,二、三种循环的区别和特点:,1、while和do while的区别: (1)while当型循环:先判断,后执行循环体。 do while直到型循环:先执

10、行循环体,后判断。 (2) while最不执行次数是0. do while 最少执行次数是1.,2、for和while、do while的区别: (1)while和do while在循环体之前赋初值。 for语句在表达式1中赋初值。 (2)while和do while使循环趋向结束的语句在循环体内。 for语句位于表达式3。,3、共同点: (1)三个循环解决同一类同题时条件相同。 (2)三个语句都必须有使循环结束的条件,否则成为死循环。 (3) Break和continue语句在这三种语句中作用一样。,上机中常考for语句,笔试中常考while和do while语句。,5.4 循环结构的嵌套,

11、概念:在一个循环体内又完整地包含了另一个循环。,自己写while和do while嵌套的形式。,例:for(i=0;i=10;i+) for(j=1;j=5;j+) ,* * *,for(i=0;i3;i+) for(j=0;j=i;j+) printf(“*”); printf(“n”); ,一、有关图形的问题:,补充例题:正直角三角形的输出: (1)找变量i来控制循环的行数。 for(i=0;i3;i+) (2)找变量j来控制每一行的每一列。 找出每列字符个数与行的关系。 *:j=i(当前行数)+1(执行次数) for(j=0;ji+1;j+) printf(“*”); 列数=当前行数 f

12、or(j=0;j=i;j+) printf(“*”); (3)每行后要输出换行,printf(“n”).,i=0;j=0; i=1;j=0,1; i=2;j=0,1,2;,* * *,补充例题:倒直角三角形的输出: (1)找变量i来控制循环的行数。 for(i=0;i3;i+) (2)找变量j来控制每一行的每一列。 找出每列字符个数与行的关系。 *:j=3(总行数)-i(当前行数). for(j=0;j3-i;j+) printf(“*”); 列数总行数+当前行数 for(j=0;j=3+1-i;j+) printf(“*”); (3)每行后要输出换行,printf(“n”).,i=0;j=2

13、,1,0; i=1;j=1,0; i=2;j=0;,例:5.7使用双层循环,打印星号组成的倒三角形。,引申题:习题5.20,* * * *,分析:倒等腰三角形的输出: (1)找变量i来控制循环的行数。 for(i=0;i4;i+) (2)找变量j,k来控制每一行的每一列。 找出每列字符个数与行的关系。 :for(j=1;j=i;j+) printf(“ ”); for(j=1;jI;j+) printf(“ ”); *:列数行数*2*当前行数-1 for(k=0;j7-i*2) printf(“*”); 列数行数*2*当前行数 for(k=0;j=8-i*2) printf(“*”); (3)

14、每行后要输出换行,printf(“n”)., 和*的输出;i=0; k=0,1,2,3,4,5,6; i=1;j=1 k=0,1,2,3,4; i=2;j=1,2; k=0,1,2; i=3;j=1,2,3;k=0;,二、有关素数的问题(笔试和上机分数都比较多),1、素数的概念:除了1和本身之外不能被任何数整除的数。,2、素数的判断:从2开始到x-1都不能被整除 从2开始到x/2都不能被整除 从2开始到的平方根都不能被整除。,补充例题:判断是不是素数。,main() int i,x,tag=0; scanf(“%d”, ,补充例题:输出所有三位(100999)的素数。,#include #in

15、clude main() int i,x,tag=0,n=0; for(x=101,x=999;x+=2) for(i=2;i=sqrt(x);i+) if(x%i=0) tag=1; if(tag=0) printf(“%d”,x); n+; if(n%10=0) printf(“n”); ,例:5.8找出2-100以内的所有质数(素数)。,补充例题:求大于m的k个素数。(题库中的原题),#include #include main() int i,x,m,n=0,tag=0; scanf(“%d%d”, ,补充例题:求小于m的最大的k个素数。,#include main() int i,x,n=0,m,k,tag=0; scanf(“%d%d”, ,补充习题:累加前100个数的和(要求100+99+2+1), 训练循环的灵活度。,三、有关(斐波那)fibonacci数列的问题:,#include main() long a,b,c,i; a=1;b=1; printf(“%ld%ld”,a,b); for(i=3;i=40;i+) c=a+b; a=b;b=c; printf(“%ld”,c); if(i%10=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号