您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > C语言第5章 循环结构设计(1)
1第5章循环结构程序设计(一)2本章主要内容C语言中的三种循环语句:–while语句–do……while语句–for语句循环体中的辅助控制语句:–break语句–continue语句–goto语句3本节课主要内容while语句do……while语句4循环结构——结构化程序设计的基本结构之一顺序结构选择结构循环结构:为解决某一问题,或求取某一计算结果,特定的条件下,程序中反复地按某一模式进行操作。①无休止循环—死循环②有终止循环—有效循环条件:循环体---需要重复执行的操作循环结束条件---在什么情况下停止重复的操作本章是全书的重点和难点!5while语句一般形式:while(表达式)语句特点:先判断表达式,后执行语句表达式语句(循环体)=00循环条件:决定是否执行循环体,表达式值为“真”则执行循环体循环体:重复执行的操作直至表达式的值为false【例5.1】求i=100sumsum+iii+1假真sum=0i=1输出结果sum1001ii7main(){inti=1,sum=0;while(i=100){sum=sum+i;i++;}printf(%d\n,sum);}例5.1编码实现“i=1”可否换成:“i=0”“i=100”可否换成:“i100”“i++”没有会怎样i、sum不赋初值会怎样8可以写成:sum+=i;i++;或:sum+=i++;如果写成:sum+=++i;会有什么问题?inti=1,sum=0;while(i=100){sum=sum+i;i++;}1001iisum9注意:while语句中的“表达式”(即判断条件)可以是任意的表达式,但一般为关系表达式或逻辑表达式,结果只有两种:真(非0)或假(0)。循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。{语句1;语句2;。。。}在循环体中应有使循环趋向于结束的语句,以免形成死循环。允许循环体以空语句形式出现。(延时效果)10p1×224次执行;;;;n2*pp......2*pp2*pp1p【例5.2】求2n11i=1,p=1i≤n?p=p*2i=i+1计数器次执行;;;;n2*pp......2*pp2*pp1p【例5.2】求2n循环规律12【例5.2】求2nmain(){inti=1,n;longintp=1;scanf(%d,&n);while(i=n){p*=2;i++;}printf(%d\n,p);}i=1,p=1输出p输入n当i=npp*2ii+1计数器赋初值循环条件结束条件改变循环条件语句运算前赋初值13【例5.3】求mnmain(){inti=1,m,n;longintp=1;scanf(“%d”,&m);scanf(“%d”,&n);while(i=n){p*=m;i++;}printf(%d\n,p);}i=1,p=1输入m,n当i=np=p*mi=i+1输出p14循环三要素规律----循环体的算法临界点----循环的条件,循环结束的条件循环条件的改变----如何改变使循环趋于结束15容易出错的地方变量运算前没有赋初值临界点使用=或者=出现错误条件判断永真,出现死循环16do-while语句一般形式:do循环体语句while(表达式);特点:先执行一次指定的循环内嵌语句,然后判断条件表达式。语句表达式0=0图6_4表达式循环体TrueFalsedo_while表达式循环体TrueFalsewhiledowhile至少执行一次循环体内的语句!18【例5.4】求1001nn#includestdio.hvoidmain(){inti=1,sum=0;do{sum=sum+i;i++;}while(i=100);printf(“%d\n″,sum);}改为:i++;sum=sum+i;【例5.5】#includestdio.hVoidmain(){charc;do{c=getchar();if(c='A'&&c='Z')c+=32;putchar(c);}while(c!='\n');}将键盘输入字符中所有大写字母转换为小写字母,其他字符不变。问题:试着改为while循环结构。运行情况:COMPUTER↙(输入)computer(输出)而不是CcOoMmPpUuTtEeRr20课堂练习输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。21【例5.6】用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到某一项的绝对值小于1e-6为止。思路:用循环对各项值迭加,直至被加项循环条件:|x|10-6循环终止条件:|x|10-6循环体算法:{累加当前项;求下一项值;}doubles=0,x=1,pi;intk=1;intsign=1;do{s=s+x;k+=2;sign=-sign;x=sign/(double)k;}while(fabs(x)1e-6);pi=s*4;//累加当前项//后项分母//变号//求后项//求例5.6使用级数求的近似值121)1(...715131141nn思路一:设第k项Xk=1/k第k+1项Xk+1=(-1)/(k+2)运行结果:pi=3.141594While语句实现#includestdio.h#includemath.hvoidmain(){ints;floatn,t,pi;t=1;pi=0;n=1.0;s=1;while(fabs(t)1e-6){pi=pi+t;n=n+2;s=-s;t=s/n;}pi=pi*4;printf(pi=%10.6f\n,pi);}121)1(...715131141nn例5.6使用级数求的近似值doubles=0,x=1,pi;intk=1;intsign=1;do{s=s+x;k++;sign=-sign;x=1.0*sign/(2*k-1);}while(fabs(x)1e-6);pi=s*4;121)1(...715131141nn思路二:直接用通项描述迭加//累加当前项//后项分母//变号//求后项//精度判断例5.6使用级数求的近似值25while和do-while循环的比较凡是能用while循环处理,都能用do…while循环处理。do…while循环结构可以转换成while循环结构。在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。但是如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。26while和do-while循环的比较#includestdio.hvoidmain(){intsum=0,i;scanf(“%d”,&i);while(i=10){sum=sum+i;i++;}printf(“sum=%d\n″,sum);#includestdio.hvoidmain(){intsum=0,i;scanf(“%d”,&i);do{sum=sum+i;i++;}while(i=10);printf(“sum=%d\n″,sum);运行结果:1↙sum=55再运行一次:11↙sum=0运行结果:1↙sum=55再运行一次:11↙sum=11说明:当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,二者结果不相同。27控制循环的方法计数器控制循环标记控制循环28计数器控制循环常用一个计数器变量(counter)统计循环执行的次数,在循环执行前将其赋予特定的值,并在循环体执行的过程中不断对其进行修改,这种用计数器控制循环的方法常应用于确定次数的循环(definiterepetition,即循环执行之前已知重复次数)。应用实例班里有10个学生参加测验,可以提供考试成绩(0到100的整数值),以确定全班平均成绩。29标记控制重复也称为不确定重复(indefiniterepetition),因为执行循环之前无法事先知道重复次数。用一个特殊值作为标记值,表示数据输入结束。例:用户输入一个标记值,表示最后一个成绩已经输入。标记值不能与可接受的输入值混淆起来。应用实例:开发一个计算全班平均成绩的程序,在每次程序运行时处理任意个成绩数。标记控制循环应用实例:求10个学生的平均成绩#includestdio.hvoidmain(){intcounter=1,total=0,score;floataverage;while(counter=10){printf(inputonescore\n);scanf(%d,&score);total=total+score;counter++;}average=(float)total/10;printf(theaverageis%f\n,average);}计数器控制循环应用实例:求任意个学生的平均成绩#includestdio.hvoidmain(){intcounter=0,total=0,score=0;floataverage;printf(inputonescore,endflagis-1\n);scanf(%d,&score);while(score!=-1){total=total+score;counter++;printf(inputonescore,endflagis-1\n);scanf(%d,&score);}if(counter)average=(float)total/counter;printf(theaverageis%f\n,average);}标记控制循环counter=0?第一次输入-1?32课堂练习每名学生有三门课程,共n名学生,统计出每名学生的平均成绩。
本文标题:C语言第5章 循环结构设计(1)
链接地址:https://www.777doc.com/doc-3209990 .html