《循环结构程序设计教案.ppt》由会员分享,可在线阅读,更多相关《循环结构程序设计教案.ppt(23页珍藏版)》请在三一办公上搜索。
1、,王小琼信息科技学院,C语言程序设计,第三章 循环结构程序设计,自增自减运算,+-是单目运算符有前缀和后缀两种形式 前缀形式:先自增(自减)再引用;后缀形式:先引用再自增(自减);功能:前缀形式+a 等价于 a=a+1-a 等价于 a=a 1 后缀形式 a+等价于 a=a+1 a-等价于 a=a 1,表达式的值会不同,+,-只能用于变量,不能用于常量和表达式10+(x+y)(-i)-等都是错误的,例如:,当 a5 时+a 表达式的值为 6,且 a6 a+表达式的值为5,且 a6 b=+a 等价于 表达式的值为6,且 a=6,b=6 b=a+等价于 表达式的值为5,且 a=6,b=5,循环的基本
2、概念,Ex 求 1+2+3+4+5+6+7+8+9+10=?s=1+2+3+4+5+6+7+8+9+10,如果 求1+2+3+100 呢?,或者 求1+2+3+n(n为某一任意指定的数)呢?,Ex s=1+2+3+n,分解2,s=0;i=1;,循环的使用方法,当条件e成立(真)时,反复执行A。直到e为假才停止循环,先执行A操作,再判断e是否为真,若e为真,再执行A,如此反复,e为假停止循环,执行e1(循环变量赋初值),判断e2是否为真,若e2为真,执行循环体A,然后用e3改变循环变量的值,再判断e2是否为真,如此反复,直到e2为假停止循环,当型先判断循环,当型后判断循环,步长型循环,while
3、(e)A,do A while(e),for(e1;e2;e3)A,Ex3.13 求s=1+2+3+100,算法:1 定义变量,初始化 3 输出结果,while(i=100)s=s+i;i+;,do s=s+i;i+;while(i=100);,for(i=1,s=0;i=100;i+)s+=i;,2 用循环求s,while(e)s;e表达式 s语句(循环体),3.4.2 while语句,说明:当表达式(条件)e 的值为真(非0)时,反复执行语句 s(循环体);直到 e 为假才停止循环。,注意:只包含了两个要素,初始化应放在 while 前,例:s=1+2+3+n,分解s=0;i=1;s+=i
4、;i+;s+=i;i+;s+=i;i+;其中 i=n,#include main()int n,i,s;printf(Enter n:“);scanf(%d,程序:s=1+2+3+n,注意:循环体如果包含一条以上语句,应该用复合语句(即语句序列)循环体重应有使循环趋于结束的语句 有可能一次也不执行循环体,真,s+=i;i+;,输出结果s,s=0;i=1;while(i=n)s+=i;i+;,Ex 计算,#include main()int i=1;float s=0;printf(s=%fn,s);,while(i=100)s+=1.0/i;i+;,3.3 do-while 语句,do s w
5、hile(e);,e 表达式 s 语句(循环体),说明:先执行语句s(循环体),再判断e是否为真,若e为真,再执行语句s,如此反复,直到e为假为止,注意:dowhile 至少执行一次循环体,即使条件一开始就不成立 一般情况下,while与do-while处理同一问题时,结果相同,#include main()int i=1,n;long t=1;printf(Enter n:“);scanf(%d,do t*=i;i+;while(i=n);,先执行后判断,Ex403 计算t=n!,a y 输出10 012 12 a=12 y=121416 28 a=16 y=28,main()int a=1
6、0,y=0;do a+=2;y+=a;printf(a=%d y=%dn,a,y);if(y 20)break;while(a=14);,Ex 下列程序的输出是什么?,for语句,for(e1;e2;e3)s;e1、e2、e3表达式s语句(循环体)说明:执行e1(循环变量赋初值),判断e2是否为真,若e2为真,执行循环体A,然后用e3改变循环变量的值,再判断e2是否为真,如此反复,直到e2为假停止循环,例如,下面程序段计算1+2+100并输出,它的执行过程如图所示。for(sum=0,i=1;i=100;i+)sum=sum+i;printf(“%d”,sum);,e1,e2,e3,循环体语句
7、,后续语句,下面来分析其中的几个问题,for(sum=0,i=1;i=100;i+)sum=sum+i;,问:(1)循环控制变量的初始条件?循环控制变量的终止条件?循环控制变量的增量(步长)?,1,100,1,(2)循环体共循环了多少次?,循环体循环次数(终止值初始值)/步长1,100,(3)当循环100次后,i,sum?,101,5050,例如:for(i=1;i=10;i+)a=a+1;b=b+1;,注意:,例如:a=0;b=0;for(i=1;i=10;i+)a=a+1;b=b+1;,for语句一般形式中的“语句”部分就是循环体,它可以是一个单语句,也可以是一个复合语句。如果不加,系统只
8、将for后面的一个单语句作为循环体。,例如:a=0;b=0;for(i=1;i=10;i+)a=a+1;b=b+1;,执行后a的值为10,b的值为10。,执行后a的值为10,b的值为1。,注意:,for(i=1;i=n;i+)s+=i;,2 若表达式e2省略,即不判断循环条件,循环无法终止死循环(应避免),该结构一定要有break之类的跳出循环控制语句,1 表达式e1可以省略(分号不能省),此时应在for语句之前给循环变量赋初值,s=0;i=1;,for(i=1;i=n;i+)s+=i;,for(i=1;i=n;)s+=i;i+;,for(;)s;,while(1)s;,3 表达式e3可以省略
9、,放入后面的循环体语句s中,4 三个表达式都省略死循环,一个循环体内又包含另一个完整的循环结构称为循环嵌套(p61)。内嵌的循环中又嵌套有循环时称为多重循环。多重循环的嵌套次数可以是任意的,可以根据嵌套的层数分别叫做二重循环、三重循环等。最常用的循环嵌套形式是:for语句的循环体中又是一条或多条for语句。,例如,下面这条语句是二重循环:for(i=1;i=10;i+)for(j=1;j=10;j+)printf(“%d”,i*j);其中,第一个for是外循环、第二个for是内循环。,循环嵌套,Ex 执行下列语句后,a=?int a=0,i;for(i=1;i 5;i+)switch(i)ca
10、se 0:case 3:a+=2;case 1:case 2:a+=3;default:a+=5;,1,2,3,4,i i5 执行 a,1,真,case 1 a+=3,3,8,a+=5,11,2,真,case 2 a+=3,16,a+=5,18,3,真,case 3 a+=2,21,a+=3,26,a+=5,31,4,真,default a+=5,假,5,break与continue语句,break语句只能用在switch语句或循环语句中,用以终止它所在的switch语句或循环语句的执行,continue语句只能出现在循环语句中,用以跳过循环体中其后面的语句,直接转去判别下次循环控制条件(wh
11、ile或do_while语句)或表达式e3(for语句),break用于结束循环,continue提前循环,Ex,算法,1 定义变量n、i、j、k2 n从100到999做循环,将n的各位数字(i、j、k)分离出来3 判断:若n是水仙花数则输出,#include main(),1 定义变量n、i、j、k,int n,i,j,k;,将n的各位数字(i、j、k)分离出来,i=n/100;,n的百位数字,设n=153,j=n/10%10;,n的十位数字,i=n/100=153/100=1,j=n/10%10=153/10%10=5,3 判断:若n是水仙花数则输出,2 n从100到999做循环,,if(
12、n=i*i*i+j*j*j+k*k*k)printf(%dn,n);,如果只要求一个水仙花数,可在if语句后加上break语句终止循环,k=n%10;,n的个位数字,k=n%10=153%10=3,break语句只能用在switch语句或循环语句中,用以终止它所在的 switch语句或循环语句的执行,水仙花数:一个3位数的各位数字的立方和恰好等于它本身,这样的3位数称为水仙花数。编程求出所有的水仙花数。,break与continue语句,Ex 执行下列语句后,a=?,main()int i=0,a=0;while(i 20)for(;)if(i%10)=0)break;else i-;i+=1
13、1;a+=i;,i a i20 i%10=0 break,0,0,真,0,真,11,11,真,1,假,10,0,真,假,21,32,Ex 输出两位数中所有能同时被3和5整除的数,main()int n;for(n=10;n 100;n+)if(n%3=0,main()int n;for(n=10;n 100;n+)if(n%3!=0|n%5!=0)continue;printf(%5d,n);,解法1,解法2,1 输入整数k,设置素数标记l=1(l=0,则k不是素数)2 i从2到k-1做循环,若k整除i,k不是素数,循环结束(l=0;i=k);否则继续循环3 循环结束后,根据l的值输出结果:如
14、果l=1,则k是素数;否则k不是素数。,#include main()int i,k,l;printf(Input k:);scanf(%d,算法,Ex3.22 检测给定整数是否是素数,素数:一个自然数,若除了1和它本身外不能被其他整数整除,则称 为素数,1 输入整数k,设置素数标记l=1(l=0,则k不是素数),if(l=1)printf(%d is a prime.n,k);else printf(%d is not a prime.n,k);,for(i=2;ik;i+)if(k%i=0),3 循环结束后,根据l的值输出结果:如果l=1,则k是素数;否则k不是素数。,2 i从2到k-1做循环,若k整除i,,循环结束,k不是素数,,(l=0;i=k);否则继续循环,i=k;,l=0;,