南昌工程学院C语言程序设计基础课件第5讲循环结构.ppt

上传人:max****ui 文档编号:2023358 上传时间:2019-11-13 格式:PPT 页数:58 大小:564.50KB
返回 下载 相关 举报
南昌工程学院C语言程序设计基础课件第5讲循环结构.ppt_第1页
第1页 / 共58页
南昌工程学院C语言程序设计基础课件第5讲循环结构.ppt_第2页
第2页 / 共58页
南昌工程学院C语言程序设计基础课件第5讲循环结构.ppt_第3页
第3页 / 共58页
点击查看更多>>
资源描述
第四章 循环结构,在人们所需处理的运算任务中,常常需要用到循环结构,所谓 循环是指对同一个程序段重复执行若干次。被重复执行的部分 (由若干语句组成)称为循环体。循环结构又称重复结构。,本章主要内容 1 while 循环语句 2 dowhile 循环语句 3 for 循环语句 4 循环嵌套及注意的问题,问题,输出整数1-10,输出整数1-100,输出整数1-n,printf(“%d”,1); printf(“%d”,2); printf(“%d”,n);,i=1; printf(“%d”,i);i+; printf(“%d”,i); i+; printf(“%d”,i); i+;,i=1; while(i=10) printf(“%d”,i); i+; ,while 语句,语法:while(表达式) 循环体 说明 (1)while是关键字。 (2)循环体是多条语句,用。,非0,while(表达式),表达式,循环体,0,while 语句,非0,while(表达式),表达式,循环体,0,i=1; while(i=10); printf(“%d”,i); i+; ,循环条件,改变循环条件,思考:如果没有i+,程序如何执行?,10 求sum=i i=1,sum=0 sumsum+1 sum sum+2 sum sum+3 sum sum+10 sum=sum+?,1找循环不变式,2考虑问号,3循环条件,int sum=0,i=1; while(i=10) sum=sum+i; i+; ,例1 main() int i=0; while(i=10) printf(“*”); i+; ,例2 main() int i=1,sum=0; while(i=100) sum=sum+i; i+; printf(“sum=%d”,sum); ,例3一个班有学生50人,统计该班学生语文成绩中高于80分的人数 。把统计结果在屏幕上输出。,int m=1,n=0; float x; while(m=80) n+; /* 累加大于80 分的人数*/ m+; printf(“大于80分的学生人数为%d个n“,n);,分析:成绩要通过键盘输入,设为x,高于80分的人数为n,总人数为m。,从键盘输入5个学生的语文、数学、英语3门成绩,输出每个学生的总分与平均成绩。,从键盘输入5个学生的语文、数学、英语3门成绩,输出每个学生的总分与平均成绩。,int j=1; float a,b,c,sum,aver; while(j=5) printf(“输入第 %d 个学生三门成绩n”,j); scanf(“%f%f%f“, ,1如何确定循环条件? 题目中有明确的提示!从键盘输入5个学生的 2 如何确定循环体?重复执行的语句! 从键盘输入5个学生的语文、数学、英语3门成绩,输出每个学生的总分与平均成绩。 等价于: (1)输入1个学生的语文、数学、英语3门成绩; (2)计算总分与平均分 (3)输出总分与平均成绩。,#include main() int n,i=1,sum=1; printf(“please input nn”) scanf(“%d”, ,例4 以下程序从键盘输入5,结果是多少?,do-while语句,语法: do 循环体 while(表达式);,注意: 1先执行循环体,再判断循环条件,循环至少执行一次。 2while()后的分号不能省略。,非0,while(表达式),循环体,0,i=1; while(i=10) printf(“%d”,i); i+; ,do,while(i=10);,例1: main() int i=1; do printf(“ * ”); i+; while(i=10); ,例2: main() int i=1,s=0; do s=s+i; i+=2; while(i=100); printf(“s=%d”,s); ,统计某班级中计算机课程中成绩高于95分的学生人数。假定(10人),1 算法分析,将该班每人计算机课程成绩输入计算机,每输入一个成绩,就与95进行比较,如果大于95,计数器加1,直到输完10个人成绩为止。最后显示出统计的人数。,2 数据结构,用fs存放输入的数据,用变量j记录输入数据的个数,数据输完成时j=10,用变i统计高于95分学生的人数。当成绩输完后,输出i 累加后的结果。,int i=0,j=1; float fs; while( j95) i+; j+; printf( “95分人为%d“,i);,int i=0,j=1; float fs; do printf(“输入第 %d 个数”,j) scanf(“%f“,while和do-while,while(表达式) 循环体,do 循环体 while(表达式) ;,非0,while(表达式),表达式,循环体,0,非0,while(表达式),循环体,0,先判断,后循环,先循环,后判断,一般情况 两者差不多-进入循环结构执行若干次后结束循环; 极端情况 (1)死循环 (2) 无法进入循环 i=100,while(i10),for 循环语句(功能强),语法: for(表达式1; 表达式2; 表达式3) 循环体 ,执行过程:,1 先运算表达式1,2 再运算表达式2,真执行循环体,3 再运算表达式3,判断循环条件,表达式1,循环体,表达式3,表达式2,T,F,若表达式2为假不执行循环体,注意: (1)表达式1在不在循环里?执行几次? (2)先做循环,再运算表达式3! 若表达式2为假,表达式3如何运算? (3)循环体包含那些?,while和for,表达式1,循环体,表达式3,表达式2,T,F,for(表达式1; 表达式2; 表达式3) 循环体 ,while(表达式) 循环体,非0,while(表达式),表达式,循环体,0,如何用while写for结构?,while( ?) ?,表达式; while( 表达式) 循环体; 表达式3; ,结论:for语句书写结构更清晰,while 语句,while(表达式) 循环体,dowhile 语句,do 循环体 while(表达式);,for 循环语句,for(表达式1;表达式2;表达式3) 循环体,1.三种循环可用来处理同一问题,一般情况可互相代替 2.do while语句至少执行一次循环。 3.while 与for可能一次也不执行。,几种循环的比较,for(表达式1; 表达式2;表达式3) 循 环 体 ,控制循环是否结束,改变循环条件,二、说明: 1、表达式1可以是逗号表达式,可省略,但其后的分号不能省; 2、表达式2也可省略,此时循环为无穷循环; 3、表达式3也可省略。,sum=0; for(i=1;i=10;i+) sum=sum+i;,int sum=0,i=1; while(i=10) sum=sum+i; i+; ,sum=0; for(i=1;i=10;i+) sum=sum+i; i+;结果是什么?,例 4.5 统计某班级中计算机课程中考试成绩高于80 分的人数(10人),用for 循环语句写该程序。,int fs, j,i=0; for (j=1; j80) i+; printf(“i=%dn“,i);,例2:说明以下循环语句的循环次数。 for (i=0; i=0; i-); 答: (3) i=1; while (ij;i+,j-); 答:,n-1次,n+1次,n-1次,1次,0次,0次,求数列 s=1+2+3. n,程序段: s=0; for(i=1;1=n;i+) s=s+i;,算法: 循环的条件:i=n 重复做的:s=s+t;t+(加法运算) 循环的控制:i+等价t+,求数列 s=1+1/2+1/3.1/n,程序段: s=0; for(i=1;i=n;i+) s=s+1.0/i;,算法: 循环的条件:i=n 重复做的:s=s+t (t是什么?) 循环的控制:i+,t=1.0/i,s=s+1.0/i,int i,n; float s=0; printf(“please input n:“); scanf(“%d”,练习:求数列 s=1/12+1/22+1/32.1/n2的和,int n, i; float s; printf(“ input n:“); scanf(“%d”,3求数列 s=1-1/2+1/3-1/4.1/n,程序段: s=0;m=1 for(i=1;i=n;i+) s=s+1.0/i*m; m=-m; ,练习 求数列 s=1-1/3+1/5-1/7+1/91/(2n-1)的和,int n,i=1,m=1; float s=0; printf(“input n:“); scanf(“%d”,分析:找出通项s=s+1.0/(2*i-1), s+=pow(-1,i+1)/(2*i-1);,求数列 s=1-1/3+1/5直到最后一项的绝对值,int i=1,m=1; float s=0,t=1; while (fabs(t)=1E-5) t=1.0/(2*i-1); s=s+m*t; m=-m; i+; printf(“s=%f”,s);,练习:求,的近似值,精确到,公式为:,1 算法分析,=sqrt(s*6),double s=0; int i; for(i=1; 1.0/(i*i)=1e-10;i+) s=s+1.0/(i*i); printf(“%fn“, sqrt(s*6);,程序,int i; float sum=0; for(i=0;i=100;i+) sum=sum+1.0/(1+i*5); printf(“%f“,sum);,6:下面程序是统计从键盘输入的数字字符1-9的个数,用换行结束循环,请填空。 int n=0; char c; c=getchar(); while(1) if(2) n+; c=getchar(); printf(“n=%d”,n);,c!=n,c=1&c=9,计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。,long int i,n,t=1; printf(“please input n:”); scanf(“%d”,7 求 n!,long int i,n,t=1,s=0; printf(“please input n:”); scanf(“%d”,练习: s=1!+3! +5!,long int i,n,x,t=1; printf(“please input x and n:“); scanf(“%d%d“,8 求 xn,计算并输出给定整数n的所有因子(不包括1与自身)之和。规定n的值不大于1000。,break 和 continue 语句,int n=1,s=0; while(n=10) s=s+n; break; n+; printf(“%d”,s);,break使流程跳出本层循环体 continue跳过本次循环中余尚未执行的语句,接着去执行下一个循环,int s=0,n=1; while(n20) n+; continue; s=s+n; printf(“%d”,s); ,退出循环体,跳过循环体中未执行的语句,break 和 continue 语句,例1 以下程序输出结果 int s=0,n=1; while(n=10) if(n=4) break; s=s+n; n+; printf(“%d”,s);,例2 以下程序输出结果 int n=1; while(n3) continue; n+; printf(“%d”,n);,6 死循环,无输出!,int n=2; while(n10) if(n3) continue; if(n= =5) break; n+; printf(“%d”,n);,A 10 B 9 C 5 D 死循环,int a=1,b=1; while(a=9) break; if(b%3=1) b+=3; a+; printf(“%d”,a);,A2 B3 C4 D5,输入m,判断m是否是素数,算法:除了和m,不能被其他数整除 m %2 %3 %4 %(m-1) 不是素数 | =0 =0 =0 =0 是素数 & !=0 !=0 !=0 !=0,程序: for(i=;im;i+) if(m%i=0) break; if(i=m) printf(“是素数”); else printf(“不是素数”);,循环的嵌套 循环体内再包含循环语句,while(表达式) 循环体 ,内循环,注意 外循环条件满足时进入内循环; 只有当内循环循环完毕后,才会回到外循环.,while(表达式) 循环体 ,程序,int i; for(i=1;i=10;i+) printf(“*”);,输出:*,* * * * * * * * * *,如要输出如下图形:,* * * * * * * * * *,* * * * * * * * * *,* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *,计算并输出3到n(大于2)之间所有素数的平方根之和,int n,m,k i; double s=0.0; scanf(“%d”,#include main() int t=0,n=1,s=0; while(n=7) _1_; s=s+_2_; n+; printf(“s=%dn”,s); ,t=t*10+3,t,或t=1/3*(pow(10,n)-1),计算3+33+333+33333333333(7个3)的和,请填空。,习题4 计算:1+22+333+4444+前7项(p87),int t=0,n=1,s=0; while(n=7) t=n*(pow(10,n)-1)/9); s=s+t; n+; ,习题5 计算:1+12+123+1234+前7项,下面程序的功能是完成用一元人民币换成一分、两分五分的所有兑换方案,请填空。,int i1,i2,i5; for(i5=0;i5=20;i5+) for(i2=0;i2=50;i2+) i1=1; if(2) printf(“%d%d%d”,i5,i2,i1); ,100-i5*5-i2*2;,i1=0,下面程序是从三个红球、五个白球、六个黑球取出八个球,且中必须有白球,输出所有可能的方案。请填空。,int i,j,k,sum=0; for(i=0;i=3;i+) for(1;j=5;j+) k=8-i-j; if(2) sum+; printf(“%d%d%dn”,i,j,k); printf(“%d”,sum);,j=1,k=0&k=6,int n,a,b,c; for(n=100;n=999;n+) a=n/100; b=n/10%10; c=n%10; if(a*a*a+b*b*b+c*c*c=n) printf(“%d”,n); ,6请找出这样一些三位数整数,其本身恰好等于其各位数的立方和,如153=13+53+33,下面程序是求1000以内的完全数(一个数如果恰好 等于它的因子之和,则称该数为完全数,如:6=1+2+3, 再如:28=1+2+4+7+14)。,int a,i,m; for(a=1;a=1000;a+) for (1;i=a/2;i+) if(a%i=0) 2; if(m=a) printf(“%dn”,a); ,m=0,i=1,m=m+i,搜索(穷举求解) 中国剩余定理:“有物不知几何,三三数余一,五五数余二,七七数余三,问:物有几何?”。编程求1000以内所有解。,int m,count=0; for(m=1;m=1000;m+) if(m%3=1 ,例3:“鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁母雏各几何?” (引自张邱建算经,公元五世纪) 分析:设x,y,z分别表示鸡翁,鸡母,鸡雏的数目,则有 x: 020 y: 033 z: 0300,x+y+z=100,5x+3y+z/3=100,上述方程属于不定方程,解并不唯一,因此,只能用搜索法对x,y,z的所有组合情况,测试满足条件的解。,int x,y,z; printf(“ Cock Hen chickenn”); for(x=0;x=0 ,搜索求解练习 有30个男女小孩同在一家小饭馆进餐,共花了50先令,其中每位男宾3先令,每位女宾2先令,每位小孩1先令,问男女小孩各多少?(马克思数学手稿),int i,j,k; for(i=0;i=0 ,#include main() int i,j,k; for (i=1;i=28;i+) for(j=1;j=28;j+) for(k=1;k=28;k+) if(3*i+2*j+k=50 ,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!