
第06章循环程序设计.ppt
41页第六章第六章循环结构程序设计循环结构程序设计概概述述我必须跑我必须跑12圈圈我举我举12次次我举我举24次次循环循环:规律性的重复,即依据规律性的重复,即依据特定条件特定条件重复重复执行执行 基本操作基本操作 表现在程序设计中:算法中含有循环结构表现在程序设计中:算法中含有循环结构例:在屏幕上输出例:在屏幕上输出10个个*号号printf(“**********\n”); 又例:在屏幕上输出又例:在屏幕上输出100,,1000,,10000个个*号号分分析析输出一个输出一个*号号 putchar(‘*’)输出输出1000个个*号号 putchar(‘*’)执行执行1000次即可次即可分分析析基本操作基本操作为什么使用循环算法呢为什么使用循环算法呢? ? 降低解题难度,减少程序代码,提高执行效率降低解题难度,减少程序代码,提高执行效率循环型程序设计解题关键循环型程序设计解题关键1、确定循环体、确定循环体确定哪些操作需反复执行确定哪些操作需反复执行2、确定循环执行条件、确定循环执行条件确定什么条件循环执行确定什么条件循环执行例:在屏幕上输出例:在屏幕上输出1000个个*号号1、确定循环体、确定循环体 putchar((’*’)2、确定循环条件、确定循环条件 i<=1000( i初值为初值为1)) 计数器计数器i=i+1((使循环趋向于结束的操作)使循环趋向于结束的操作)又又如:求如:求1+2+3+4+…..100的和的和分析如下: 1 + 2 + 3 + 4+….. +99+100部分和部分和部分和部分和部分和部分和和和sum=0,,i=1;;i<=100sum=sum+i; i++;输出输出sumsum=sum+i1、确定循环体、确定循环体 sum=sum+i;2、、确定循环执行条件确定循环执行条件 i<=100初值:初值:sum=0;i=1;i++;sum=0+1sum==1+2=3sum=3+3=6sum=6+4……sum=4950+100=5050if 和和 goto语句语句for语句语句do~ while语句语句循环语句与洗衣机循环语句与洗衣机循环控制语句的作用:循环控制语句的作用: 控制核心语句(循环体)的执行次数控制核心语句(循环体)的执行次数循环控制语句循环控制语句(用来编制循环结构程序)(用来编制循环结构程序)while语句语句if 和和 goto语句语句无条件转向语句无条件转向语句形式:形式:goto 语句标号语句标号; (标识符标识符::))功能:从功能:从goto语句所在处,转向语句所在处,转向本函数本函数内标号所在处内标号所在处goto er; er: s; 可用可用if和和goto 语句构成循环语句构成循环可执行语句psgotoynloop: if(p)) {s; goto loop;}例:编程输出例:编程输出1000个个*号(用号(用if和和goto)分析问题,描述算法分析问题,描述算法i=1Putchar(‘*’)i++;i<=1000#include
例例2:2:求键盘输入若干个整数的和,直至输入-1main(){ int i,j,k; for(i=0,j=100;i<=j;i++,j--) { k=i+j; printf("%d+%d=%d\n",i,j,k); }}#include
例:对于任意一整数,判断其是否为素数分析:分析:m%n==rm:任意整数任意整数 n:2~m-12~ 若若r均不为均不为0,则,则m为为素数素数循环体循环体 1、、r=m%n;3、n++;2、if(r= =0) break;循环结束条件循环结束条件 n>或或r=0读入mk=mi=2当ikm被i整除真假用break结束循环i=i+1ik+1真假输出:m”是素数”输出:m”不是素数”循环结构的两种典型算法(穷举法,迭代法)循环结构的两种典型算法(穷举法,迭代法)迭代法迭代法 基本思想基本思想不断用新值取代变量的旧值,或由旧值递归出新值不断用新值取代变量的旧值,或由旧值递归出新值例:人口增长问题例:人口增长问题例:求例:求1*2*3*4*5例:求例:求1-1/2+1/3-1/4+1/5例:求例:求1+2+3+4…….+100sum=sum+n例:人口增长问题例:人口增长问题迭迭代代法法举举例例分析分析现有人口:现有人口: 12亿亿1年以后:年以后: 12*((1+2%)2年以后:年以后: (12*((1+2%)))*((1+2%)) n年以后:年以后: (12*((1+2%))*……….).*((1+2%))现有人口现有人口12亿,每年按亿,每年按2%递增,递增, 问十年后问十年后将有多少人将有多少人?n-1年的人口数 设人口数为设人口数为m(初值为初值为12亿),则其后每一年亿),则其后每一年的人口数的人口数m为为m*(1+2%)(注:注:m为上一年的人口为上一年的人口数),数),m的值不断变化由旧值推出新值,反复执的值不断变化由旧值推出新值,反复执行行m=m*(1+2%)循环体循环体 1、、 m=m*(1+2%)循环结束条件循环结束条件 i>10计数法计数法2、i++迭代问题分析关键要素迭代问题分析关键要素1、迭代初值、迭代初值 2、迭代公式、迭代公式3、迭代次数、迭代次数又例:人口增长问题又例:人口增长问题现有人口现有人口12亿,每年按亿,每年按2%递增,递增, 问多少年问多少年后人口数超过后人口数超过23亿亿?1、迭代初值、迭代初值 m=12 2、、迭代公式迭代公式 m=m*(1+2%)3、、迭代次数迭代次数 ?循环体循环体 1、、 m=m*(1+2%) 2、、 year++;(year 初值为初值为0))循环结束条件循环结束条件 m>23标志法标志法循环型程序设计举例循环型程序设计举例例例1:1:π/4 求求π的近似值,直的近似值,直到最后一项的绝对值小于到最后一项的绝对值小于10-6为止为止1+2+3+4+5+6+7+8+9+10+….类类似似问问题题解题关键:解题关键:1、迭代公式、迭代公式 sum=sum+t;t=…….2、、迭代初值迭代初值sum=…t=…3、、迭代次数迭代次数循环退出的条件循环退出的条件关键是找每一项的变化规律关键是找每一项的变化规律迭代公式推导迭代公式推导:: pi=pi+t; 迭代初值迭代初值::pi=0;;n=1;s=1;t=1 t=s/n;迭代次数迭代次数:由:由t决定,当决定,当fabs(t)< 10-6 迭代结束迭代结束s=-s;n=n+2;迭代公式迭代公式:: sum=sum+t; n=n+2; s=-s; t=s/n;具体分析具体分析相相一一致致分子:1,-1,1,-1…分母:1,3,5,7,...t=1,pi=0,n=1.0,s=1当|t|1e-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出pi例例2:打印:打印Fibonacci数列前数列前40个数,个数,数列具有如下特点:第数列具有如下特点:第1,,2两个数为两个数为1,,1从第三从第三个数开始,该数是其前面两个数之和个数开始,该数是其前面两个数之和F1=1F2=1Fn=F n-1+F n-2 (n>=3)迭代公式推导迭代公式推导 F=F1+F2 F代表数列 从第三项起的某一项,F1代表该项的前两项,F2代表该项的前一项迭代初值迭代初值::F1=1,F2=1 迭代次数迭代次数::由题目要求决定由题目要求决定(可用标志法或计数法)(可用标志法或计数法)1,1,2,3,5,8……F1=F2F2=F1534233159710946750255142293524578241578171855377258417711121393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830914930352102334155求:打印求:打印Fibonacci数列前数列前40个数(方法二)个数(方法二)迭代公式推导迭代公式推导1 F=F1+F2 F1=F2 F2=F迭代公式推导迭代公式推导2 F1=F1+F2 F2=F1+F2 一次得到两一次得到两个数,分析个数,分析F1,F2的含的含义义思考思考f1=1,f2=1for i=1 to 20输出f1,f2f1=f1+f2f2=f2+f1例例3:判断:判断m是否是素数是否是素数算法:算法:m%n=>r n: 2~sqrt(m) 若若r均不为均不为0,则表明,则表明m是素数是素数循环:穷举法循环:穷举法例例4:打印:打印100~200之间的全部素数之间的全部素数循环的嵌套(自己分析)循环的嵌套(自己分析)例例5:译密码(输入一行字符,输出其相应密码):译密码(输入一行字符,输出其相应密码)算法分析:算法分析:1、输入字符为、输入字符为c:(A~V或或a~v) 转变为转变为c+4; 2、、输入字符为输入字符为c:(V或或v之后之后) 转变为转变为c-22;分析程序分析程序例:输入例:输入China!转换为转换为Glmre!lvoid main()l{char c;lwhile((c=getchar())!=‘\n’)l{if(c>=‘a’&&c<=‘v’|| if(c>=‘A’&&c<=‘V’) c+=4;if(c>=‘w’&&c<=‘z’|| if(c>=‘W’&&c<=‘Z’)c-=22;lprintf(“%c”,c);}l}编编程程练练习习1、爱因斯坦的阶梯问题、爱因斯坦的阶梯问题设有一阶梯,每步跨设有一阶梯,每步跨2级,最后余级,最后余 1级;级;每步跨每步跨3级,最后余级,最后余2级;每步跨级;每步跨5级,级,最后余最后余4级;每步跨级;每步跨6级,最后余级,最后余5级;级;每步跨每步跨7级,正好到阶梯顶。
问级,正好到阶梯顶问 至少有至少有多少阶梯?多少阶梯?穷举法穷举法设设m为阶梯数为阶梯数 m%2==1&&m%3==2&&m%5==4&&m%6==5&&m%7==0例例 循环嵌套,输出九九表循环嵌套,输出九九表1234567891234567892468101214161836912151821242791827364554637281……………..ij/#include
