




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章循环结构
程序设计第一部分循环语句的实现累加和累乘利用循环结构可以在程序中实现累加和累乘。累加和累乘是程序设计最常用的基本问题:统计人数、统计总分、求平均分等。其基本思想是:利用变量赋值语句,不断改变变量中的值。累加:k=0;sum=0;k=k+1;sum=sum+k;…累乘:k=1;mult=1;mult=mult*k; k=k+1; 第五章循环结构程序设计循环循环用goto语句和
if语句实现循环
goto语句的一般形式:第五章循环结构程序设计goto语句标号(标识符)#include<stdio.h>main(){intn,sum=0;n=1;loop:if(n<=100){sum=sum+n;n++;gotoloop;}printf(“sum=%d”,sum);}
例
1求1+2+3+…+1001.循环结构满足某一条件P时循环即反复执行A操作。直到P条件为假时停止循环。当型循环
当P为真
A2.C语言表达式while语句while(表达式)语句循环体注:循环体中若有多个语句,则需用复合语句。
例2:从键盘输入十个整数,求这十个整数的和。#include<stdio.h>main(){intcount=0,num,total=0;while(count<10){count++; /*计数器*/printf("EntertheNo.%d=",count);scanf("%d",&num);total+=num; /*累加器*/}printf("Total=%d\n",total);}
A
直到P为假1.循环结构先执行A操作,再判断条件P是否为真,若为真,再执行A,如此反复,直到P为假为止。直到型循环一般形式:do语句while(表达式)2.C语言表达式do-while语句do语句while(表达式);循环体分号作为结束符注:循环体中若有多个语句,则需用复合语句。#include<stdio.h>
main() {unsignedintnumber; printf("Inputthenumber:"); scanf("%d",&number); do{printf("%d",number%10);/*输出最低位数字*/ number/=10;}
/*甩掉原来的最低位数字*/ while(number!=0); printf("\n");}例3:输入一个正整数,要求以相反的顺序输出该数。
从初值到终值
A1.循环结构:计数型循环2.C语言表达式注:循环体中若有多个语句,则需用复合语句。for(表达式1;表达式2;表达式3)语句初值终值增量循环体1)先求表达式12)求表达式2,若为非0,执行循环体;否则出循环3)执行循环体后求解表达式34)转2)3.执行过程表达式1表达式3语句表达式20非0#include<stdio.h>main(){intt=1,n,j=2;scanf(“%d”,&n);for(;j<=n;j++)t*=j;printf(“%d\n”,t);}例4
求n!#include<stdio.h>main(){charc;for(;(c=getchar())!=‘\n’;)printf(“%c”,c);}输入puter输出puter
例5.输出键盘输入的字符例6:求解2的n(0~9)次幂。其中,for循环体又套了一个for语句。
多重循环#include<stdio.h>/*cenfang.c*/main(){ intm,k,c,i; for(m=2,k=0;k<=9;k++){c=1; for(i=1;i<=k;i++) c*=m;printf("%d^%d=%d\n",m,k,c);}}
多重循环①②执行结果:问题:①语句的作用是什么?能否放在第一个循环外?当第一次执行外层for循环语句时k值为零,此时是否进入内循环?注意语句②的作用。
多重循环#include<stdio.h>main(){ intm,k,c,i; for(m=2,k=0;k<=9;k++){c=1; for(i=1;i<=k;i++) c*=m;printf("%d^%d=%d\n",m,k,c);}}
多重循环①②
break和continue概念1.break语句的作用是什么?在switch语句中结束case子句,使控制转到switch语句之外。在循环体中使用,结束循环过程,使控制转移到整个循环语句之外的下一条语句处。在多层嵌套的循环中,break语句仅能退出一层循环,即只能退出所在的循环体。如果要从最内层的循环跳到最外层,就必须多次使用break语句,或者用goto语句。在循环体中break语句通常是与if语句共同使用,当某个条件成立(或不成立),则执行break语句退出循环。如果在循环语句中包含了switch语句,那么switch语句中的break语句仅仅能使控制退出switch语句,而不会使控制退出包含switch语句的循环语句。
break和continue概念2.continue语句的作用是什么?continue语句仅能在循环语句中使用,功能与break语句类似。但它的作用不是结束循环,而是开始一次新的循环。对于for语句而言是将控制转到实行增量处理和条件测试部分、对于while和do-while语句是将控制转到条件测试部分。#include“math.h”main(){intn=100,j,k;for(;n<=200;n++){if(n%2==0)continue;k=sqrt(n);for(j=3;j<=k;j+=2)if(n%j==0)break;if(j>k)printf(“%disaprimenumber\n”,n);}}[例7]求100-200中的素数注意:break和continue不同用法
[例8]阅读程序,写出程序的输出结果 #include<stdio.h> main() {intx=1,j=1; for(;x<50;j++){if(x>10)break; if(x%2!=0){x+=3; continue; } x-=1; } printf("x=%d,j=%d\n",x,j); } X=12,j=10算法概念做任何事情都有一定的步骤。为解决一个问题而采取的方法和步骤,称为算法(Algorithm)第二部分
程序设计应用的常用算法一、递推法利用前项和后项的相互关系求新项的过程称为“递推”。分析:
初始条件:
F1=1 n=1 F2=1 n=2递推条件:
Fn=Fn-1+Fn-2 n≥3[例1]求Fibonacci数列,1,1,2,3,5,8,13……的前40个数。f1=1,f2=1fork=1,to20
输出f1,f2f1=f1+f2f2=f2+f1
流程图:利用前项和后项的相互关系求新项的过程称为“递推”。#include<stdio.h>main(){longintf1,f2;intk;f1=1;f2=1;for(k=1;k<=20;k++){printf("%12ld%12ld",f1,f2);if(k%2==0)printf("\n"); ①f1=f1+f2; ②f2=f2+f1; ③}}程序:问题:2)①语句中,if(k%2==0)printf("\n");起什么作用?1)f1,f2为什么采用长整型变量?3)②③语句能否调换?4)②语句等号右边的f1值与③语句等号右边的f1值是否相同?级数展开式计算[例2]:级数ex的前m+1项之和的展开式为:ex=采用递推法:从前一项推出后一项结果。第k项tk=可由前一项求得:即:tk=tk-1×因此,可采用如下算法:令 t0=1,则:t1=t0*(x/1),t2=t1*(x/2),t3=t2*…,tk=tk-1*(x/k)
ex=ex=输入x,m1t,0sfork=1,tom
s+tst*x/kt输出s
流程图#include<stdio.h>/*li5_2.c*/main(){intk,m;floatx,s,t;printf("inputm&x");scanf("%d%f",&m,&x);s=0;t=1;for(k=1;k<=m;k++){s+=t; (1)t=t*x/k; (2)}printf("e**%.2f=%f\n",x,s);}ex=问题:for循环体中(1)和(2)语句顺序能否调换?调换后会产生什么样的结果?利用前项和后项的相互关系求新项的过程称为“递推”二、穷举法将所有可能的方案都一一测试,找出其中符合要求的。用途:求数学上的整数方程、不定方程、或其它方法无法解决时的一种方法。分析:
设:公鸡x只、母鸡y只、小鸡z只根据条件列出方程:
[例3]百鸡问题。公鸡每只5元,母鸡每只3元,小鸡每3只1元,用100元买100只鸡,并且各种鸡至少买一只,问公鸡、母鸡、小鸡各多少?流程图:forx=1to19 fory=1,to33z=100-x-y
5*x+3*y+z/3=100
TF
输出x,y,z
#include<stdio.h>main(){intx,y,z; for(x=1;x<=19;x++) {for(y=1;y<=33;y++) {z=100-x-y; if(5*x+3*y+z/3.0==100) printf("x=%dy=%dz=%d\n",x,y,z); } }}〖程序〗baiji.c例4:谁是凶手?问题:某地发生了一件凶杀案,凶手A、B、C、D、E、F六人中之一。L说:凶手非A即B;M说:凶手绝不是C;N说:案发时A、B正在他家。已知L、M、N三人只有一人说对,请问谁是凶手?算法分析:对L、M、N三人话建立逻辑表达式,然后用穷举法找出符合要求的情况。假设某人为凶手为1;不是凶手为0L=(A==1&&B==0)||(A==0&&B==1)M=(C==0)N=(A==0&&B==0)L+M+N==1/*三人中只有一人说对*/A+B+C+D+E+F==1/*六人中只有一人是凶手*//*Whoisamurder?whois.c*/#include"stdio.h"main(){inta,b,c,d,e,f,l,m,n;printf("\nComputingResultis:(1isamurder)\n");printf("\n");printf("\tABCDEF\n");printf("===============================\n");for(a=0;a<=1;a++){for(b=0;b<=1;b++){for(c=0;c<=1;c++) {for(d=0;d<=1;d++) {for(e=0;e<=1;e++) {for(f=0;f<=1;f++) {l=((a==1)&&(b==0))||((a==0)&&(b==1)); m=(c==0); n=((a==0)&&(b==0)); if(((l+m+n)==1&&(a+b+c+d+e+f)==1))printf("\t%3d%3d%3d%3d%3d%3d\n",a,b,c,d,e,f);}}}}}}}L=(A==1&&B==0)||(A==0&&B==1)M=(C==0)N=(A==0&&B==0)L+M+N==1/*三人中只有一人说对*/A+B+C+D+E+F==1/*六人中只有一人是凶手*/三、求两个正整数的最大公约数采用欧几里得的辗转相除的方法三、求两个正整数的最大公约数算法流程图输入n,m将m,n中的大数放在m,小数放在n求m/n的余数r
当r≠0nmrn求m/n余数r
打印最大公约数n
#include<stdio.h>main(){intm,n,t,r;scanf(“%d,%d”,&m,&n);if(m<n){t=m;m=n;n=t;}r=m%n;while(r!=0){m=n;n=r;r=m%n;}printf(“最大公约数是%d\n”,n);}例5:程序四、求最大(小)值求一批数的最大(小)值。可采用“擂台赛”中的淘汰法。设立一个变量作为擂台,然后两两数据比较大小,大的留下(暂时占据擂台),小的淘汰。最后一个占据擂台的就是最大值。[例6]:某市物理竞赛决赛有56名选手参加,求第一名获得者的编号和成绩。四、求最大(小)值算法描述:变量number存放编号,score存放分数max存放最高分,maxnum存放最高分者的编号。程序自己写出0max,0maxnumfork=1to56
输入number,scorescore>max?FTscoremaxnumbermaxnum
输出maxnum,max
五、数值计算1、用牛顿迭代法解高次方程的根
条件:
设函数在某一区间内为单调函数,而且有一个实根。
1、用牛顿迭代法解高次方程的根方法:
(1)选一个接近x的真实根x1
(2)由x1求出f(x1)
(3)在f(x1)点作f(x)的切线,交x轴于x2
(4)通过x2求f(x2)
(5)再过f(x2)点作f(x)的切线,交x轴于x3(6)一直求下去,当两次求出的根之差小于给定的数时,就认为Xn+1足够接近真实的根。牛顿迭代公式由牛顿迭代公式可以不断地求出x1,x2….,xn。实际设计时,只需用两个变量x1和x通过循环不断求出新的数据即x2,x3,x4….,xnX代表初始值,x1代表新求出的值,f代表,f1代表[例6]用牛顿迭代法求下列方程的根#include<stdio.h>/*newton4.c*/#include<math.h>main(){floatx1,x,f,f1;scanf("%f",&x);do{x1=x;f=2.0*x*x*x-4.0*x*x+3*x-6;f1=6.0*x*x-8.0*x+3;x=x1-f/f1;}while(fabs(x-x1)>=1e-5);printf(”2x^3-4x^2+3x-6=0,Itsrootis%f\n",x);}2.用二分法求高次方程的根条件:
设函数在某一区间内为单调函数,而且有一个实根。若f(x1)×f(x2)<0,则[x1,x2]之间必有一实根。取[x1,x2]的中点x,x=(x1+x2)/2
方法:1)在区间任取两端点x1和x2,判断区间[x1,x2]有无一个实根2.用二分法求高次方程的根2)区间的舍取判f(x)*f(x2)是否同号,若f(x)*f(x2)<0则:x1=x,即舍去[x1,x]区间,否则,x2=x3)再根据新的x1、x2求出中点x,重复上述步骤。当fabs(x1-x2)小于某一给定的小数时,x为近似根。
分析:用x1,x2存放区间两端点的值,x存放中点值f0、f1、f2代表x、x1和x2的函数[例7]用二分法求下列方程在(-10,10)区间的根#include“math.h”/*twodiv2.c*/#include“stdio.h”main(){floatx1=-10,x2=10,eps=1e-5,f1,f2,f0,x;f1=2.0*x1*x1*x1-4.0*x1*x1+3*x1-6;f2=2.0*x2*x2*x2-4.0*x2*x2+3*x2-6;if(f1*f2<0){while(fabs(x2-x1)>eps){x=(x1+x2)/2;f0=2.0*x*x*x-4.0*x*x+3*x-6;if(f1*f0<0){x2=x;f2=f0;}else{x1=x;f1=f0;}}printf(”2x^3-4x^2+3x-6=0,Itsroot=%12.6f\n",x);}}分析:用x1,x2存放区间两端点的值,x存放中点值f0、f1、f2代表x、x1和x2的函数3.梯形法求积分求一个函数f(x)在[a,b]上的定积分几何意义:就是求f(x)曲线和直线x=a,y=0,x=b所围成的曲边梯形面积。y
0aa+ha+(i-1)ha+ihbxf(a)f(a+h)f(a+(i-1)hf(a+ih)f(b)方法:[a,b]区间分成n个小区间,每个区间的宽度为(b-a)/n,求每个小的曲边梯形面积,第一个小梯形面积为:y
0aa+ha+(i-1)ha+ihbxf(a)f(a+h)f(a+(i-1)hf(a+ih)f(b)第i个小梯形面积为:然后将n个小面积加起来,就近似得到总的面积。即定积分的近似值,当n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 保险公司实习报告
- 2025年教学设计:三角形外角的演示策略
- 临港商业物业管理服务预案50p
- 抛丸清理操作规程
- 2024年青海省中考一模地理试题(解析版)
- 2025年石家庄从业资格证货运考试试题
- 三农村产业结构调整实践手册
- 企业招聘面试安排表格
- 企业管理流程图绘制的方法及技巧
- 工厂特殊岗位保密协议
- 2025年高考语文备考训练之社会现象:“数字囤积症”
- 2025包头青山宾馆有限公司面向社会公开招聘18人笔试参考题库附带答案详解
- 《运营管理 第7版》课件全套 马风才 第01-15章 运营管理概论- 互联网运营
- 2025至2030年中国毛绒卡通玩具数据监测研究报告
- 2025年度智能充电桩场地租赁合同范本3篇
- 2024年芜湖职业技术学院高职单招语文历年参考题库含答案解析
- 17J008挡土墙(重力式、衡重式、悬臂式)图示图集
- 2025年度国家铁路局安全技术中心面向社会公开招聘工作人员5人高频重点提升(共500题)附带答案详解
- 北师大版三年级下册数学口算题练习1000道带答案
- 技术推广服务合同模板五篇
- 《智能制造技术基础》课件-第3章 智能制造加工技术
评论
0/150
提交评论