资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,程序设计基础-第八章,引述,while,语句,do-while,语句,for,语句,循环中的问题,循环,嵌套,循 环 结 构 程 序 设 计,2,(,1,)顺序结构,程序的执行是按照各语句出现的先后次序,顺序执行。,问题,1,:输入两个整数,并求和打印结果,算法设计:,1,)输入两个整数,分别存放在变量,a,和,b,中;,2,)进行加法计算,并将和存放在变量,c,中;,3,)输出变量,c,。,用,C,语言伪代码描述:,1,),scanf(%d%d,2,),c=,a+b,;,3,),printf,(%,d,c,);,用,C,程序描述为:,#include,int main(),int a,b,c;,printf(“,输入两个数:”,);,scanf(%d%d,c=a+b;,printf(%d,c);,return 0;,引述,3,(,2,)选择结构,对给定的条件进行判断,根据判定结果选择某种操作。,问题,2,:输入两个整数,进行比较后将较大的输出。,算法设计:,1),输入两个整数,分别存放在变量,a,和,b,中;,2),进行比较,并将较大的存放在变量,c,中;,3),输出变量,c,。,用,C,语言伪代码描述:,1),scanf,(%,d%d,&,a,&b,);,2),if(a=b)c=a;,else c=b;,3),printf,(%,d,c,);,引述,4,问题,3,:计算,1+2+3+.+100,方法,1,:,#include,int main(),int sum=0;,sum=1+2+.100;,printf(sum=%d,sum);,return 0;,缺点:语句太长。,引述,5,问题,3,:计算,1+2+3+.+100,方法,2,:,#include,int main(),int sum=0;,sum=sum+1;,sum=sum+2;,.,sum=sum+100;,printf(sum=%d,sum);,return 0;,语句太多。,引述,6,问题,3,:计算,1+2+3+.+100,方法,3,:,伪语言算法描述,:,Begin,s1:sum=0;k=1;,-,初始化部分,s2:if k=100 then goto s3 -,循环条件,else goto s6,s3:sum=sum+k;-,循环体语句,s4:k+;,-,步长修改,s5:goto s2;,上面,4,部分缺一不可,s6:printf sum;,End,初始化部分、循环条件、循环体语句、步长修改,4,部分缺一不可。,引述,7,算法由,4,部分组成:,1,)初始化:建立循环前所必须的条件;,sum=0;k=1;,2,)循环测试:当满足循环条件时进行循环,否则终止循环;,k=100,3,)循环体:需要重复执行的操作;,sum=sum+k;,4,)增量修改:修改控制循环次数变量的值,使循环测试条件趋向假,即循环趋向结束。,k+;,引述,8,大家学习辛苦了,还是要坚持,继续保持安静,9,while,语句是条件循环语句,根据条件是否成立,确定循环是否进行。,语句一般格式:,while,(条件表达式),循环体语句,语句功能:计算条件表达式的值,为非,0,(逻辑真)时,执行循环体,每执行一次,就判断一次条件表达式的值,直到表达式的值为,0,时结束循环,转去执行,while,后面的语句。,while,语句属于当型循环(即当条件表达式为值时执行循环体)。执行流程见图。,while,语句,10,说明:,(,1,),while,表达式的括号后一般不要加“,;,”;,(,2,)条件表达式是循环条件表达式,可以是任意表达式,在计算时如果是非,0,,则其为值认为是真,否则认为是假。,(,3,)注意循环体语句是复合语句的情况下,一定不要丢掉“,”。,while,语句,11,【例】求前,100,个自然数的和。,分析:,本题即求,1,2,.,100,,,num,为循环变量,要设一个累加变量,sum,放置和,则循环的,4,部分为,初始化部分:,num=1;sum=0;,循环条件:,num=100,循环体语句:,sum=sum+num;,步长修改:,num+;,用,while,语句前,实现初始化部分,循环条件放在,while,后面的括号中,步长修改也算做循环体语句中。,12,/【,例,3-12】,求,1,到,100,的和,#include,int main(int argc,char*argv),int num,sum;,num=1;,sum=0;,while(num=100),sum=sum+num;,num+;,printf(sum=%dn,sum);,return 0;,程序:,13,【例】计算,1+1/2+1/3+.+1/100,分析:,用,k,表示循环变量,,sum,存放和,则循环的四部分为:,初始化部分:,k=1;sum=0;,循环条件:,k=100,循环体语句:,sum=1.0/k+sum;,步长修改:,k+;,14,/【例3-13】求1+1/2+1/3+.+1/100,#include,int main(int argc,char*argv),int k;,float sum;,k=1;,sum=0;,while(k=100),sum=sum+1.0/k;,k+;,printf(sum=%fn,sum);,return 0;,程序:,15,请思考:,如果,sum=sum+1.0/k;,改成,sum=sum+1/k;,程序运行的结果会是什么呢?,注意:,(,1,)如果,while,的,(,条件表达式,),值为,0,,则循环体一次也不执行,(,如当,i,的初值,=101),。,(,2,)在循环体中必须有使循环趋向结束的操作,否则循环将无限进行(死循环)。,(,3,)在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。,(,4),为了保证循环正常运行,应该特别注意:,1,)控制条件的初始状态(初始值);,2,)循环控制条件的描述;,3,)循环体内部对控制条件的影响。,16,【例】计算,1,100,之间,能被,3,整除但不能被,7,整除的数之和。,分析:,初始化部分,:,k=1;sum=0,循环条件,:,k=100,循环体语句,:,if(k%3=0&k%7!=0),sum=,sum+k,;,步长修改,:,k+;,17,/【例3-14】求1到100以内能被3整除但不能被7整除的数之和,#include,#include,int main(int argc,char*argv),int k;,int sum;,k=1;,sum=0;,while(k=100),if(k%3=0&k%7!=0),sum=sum+k;,k+;,printf(sum=%dn,sum);,return 0;,程序:,18,语句一般格式:,do,循环体语句,while(,条件表达式),;,语句功能:当流程到达,do,后,立即执行循环体一次,然后才对判断表达式进行计算、测试。若表达式的值为真,(,非,0),,则重复执行一次循环体;否则退出。,dowhile,语句属于直到型循环;与,while,结构相比,,do,while,结构至少要执行一次循环体。这样的结构应用在需要事先执行一次循环体的程序非常容易理解。执行流程见图。,do-while,语句,提示:,while,(条件表达式)后的分号不能丢。,19,【例】计算,1+3+5+.+99,分析:,初始化部分,:,num=1;sum=0,循环条件,:,num100,循环体语句,:,sum=sum+num,步长修改,:,num=num+2,20,/【例3-15】求1+2+3+.+100,#include,int main(int argc,char*argv),int num,sum;,num=1;,sum=0;,do,sum=sum+num;,num+;,while(num=100);,printf(sum=%dn,sum);,return 0;,程序:,21,在一般情况下,用,while,语句和用,do-while,语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是如果,while,后面的表达式一开始就为假,(0,值,),时,两种循环的结果是不同的。,#include,int sum=0,k;,scanf(“%d”,while(k=10),sum=sum+ki;,k=k+1;,printf(“sum=%dn”,sum);,#include,int sum=0,i;,scanf(“%d”,do,sum=sum+i;,i=i+1;,while(i=10);,printf(“sum=%dn”,sum);,while,与,do-while,比较,22,语句一般格式:,for(,表达式,1;,表达式,2;,表达式,3,),循环体语句,for,语句是比较常用的循环语句,它能清晰地体现循环结构的四个组成部分。初始化部放在表达式,1,中;循环条件写在表达式,2,中;步长修改通常在表达式,3,中。,程序流程图,for,语句,23,执行流程:,(,1,)先执行表达式,1,(初始化表达式)。注意在整个循环中它只执行一次。,(,2,)重复下面的过程:计算表达式,2(,判断表达式,),,若为真,(,非,0),,就执行一次循环体语句,然后再执行表达式,3,(修正表达式);再计算表达式,2(,判断表达式,),,判断是否为“真”,直至表达式,2(,判断表达式,),的值为假,(0),,就不再执行循环体了。,for,语句,24,例程序段:,sum=0;,for(i=1;i,=n;i+),sum=sum+i;,等价于下面的一段用,while,语句实现的代码。,sum=0;,i=1;,/*,相当于,for,语句中的表达式,1*/,while(i,=n)/,相当于,for,语句中的表达式,2,sum=sum+i;/for,循环体,i+;/,相当于,for,语句中的表达式,3,故,for,语句的一般格式等价于下列语句:,表达式,1,;,while,(表达式,2,),语句;,表达式,3,;,for,语句,25,for,语句,注意,for,语句的一般形式中的“表达式,1,”可以省略,此时应在,for,语句之前给循环变量赋初值。注意省略表达式,1,时,其后的分号不能省略。如,for(;i=100;i+),sum=sum+i;,执行时,跳过求解表达式,1,这一步,其他不变。,26,for,语句,注意,如果表达式,2,省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式,2,始终为真。,表达式,1,是一个赋值表达式,表达式,2,空缺。它相当于:,for(i=1;i+),sum=sum+i;,也相当于:,i=1;,while(1),sum=sum+1;i+;,27,表达式,3,也可以省略,但此时程序设计者应另外设法保证循环能正常结束。,在上面的,for,语句中只有表达式,1,和表达式,2,,而没有表达式,3,。,i+,的操作不放在,for,语句的表达式,3,的位置处,而作为循环体的一部分,效果是一样的,都能使循环正常结束。,可以省略表达式,1,和表达式,3,,只有表达式,2,,即只给循环条件。,在这种情况下,完全等同于,while,语句。可见,for,语句比,while,语句功能强,除了可以给出循环条件外,还可以赋初值,使循环变量自
展开阅读全文