收藏 分销(赏)

C语言第5章3.7.ppt

上传人:s4****5z 文档编号:13990536 上传时间:2026-05-23 格式:PPT 页数:63 大小:1.46MB 下载积分:10 金币
下载 相关 举报
C语言第5章3.7.ppt_第1页
第1页 / 共63页
C语言第5章3.7.ppt_第2页
第2页 / 共63页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,循环,课堂测验,请同学们将书合上,拿出一张纸。,给你们,3,分钟的时间,请将,优先级与结合性表,默写下来。,惩罚措施:,1,、抄写,100,遍;,2,、抄写,直到熟练掌握为止;,3,、如果没有熟练掌握,就继续抄写。,抄写,100,遍,少于,100,次,抄写,真,假,次数为,0,次数加,1,抄写,直到熟练掌握为止,不熟练吗,抄写,真,假,没有熟练掌握,就继续抄写,不熟练吗?,抄写,真,假,循环结构,重复执行的语句可以写成循环结构,组成,循环体是一组反复执行的语句,循环条件是所依据的条件,三种不同的循环结构:,while,do-while,for,while,循环,功能:,表达式,e,的值等于,0,跳出循环体,while(e),s;,格式,:,循环体,一个语句或,分程序,(,程序块,),e,是表达式用于指定循环条件。,s,可以是单个语句、空语句或分程序,(,程序块,),,又叫循环体。,特点,:,e,取值非,0,时,则执行,s,,否则结束循环(跳出循环体)。,先判断表达式,e,的值,若,e,的值为非,0,,则执行下面循环体内的语句。,表达式,真“非,0”,循环体语句,while,打印,0,到,9,的整数,定义整数,i,并赋初值为,0,i10,i+,假,打印整数,i,真,int i=0;,while(i 0,i-,假,s=s*i;,真,int i=10;,int s=1;,while(i 0),s=s*i;,i-;,printf(“%dn”,s);,定义变量,i,,赋初值为,10,定义变量,s,,赋初值为,1,打印输出,s,的值,计算 1+2+3+.+100。(用,while),main(),int n,sum;,n=1;,sum=0;,while,(n100,使循环结束,计算累加和,给数列项变量和循环控制变量,n、,累加和变量,sum,赋初值,设:,n,为数列项变量和循环控制变量。,sum,为累加和变量。,循环结构,循环条件:循环结构中的测试表达式,循环体:每个循环周期中都要执行的语句序列,循环控制变量:在循环条件中控制条件是真是假的变量。,要写出一个正确的循环循环结构,对控制变量要做三方面的工作:一是控制变量赋初值;二是把控制变量写入正确的循环条件;三是控制变量的更新调整。,循环结构,#include,main(),int i,sum;/*,定义循环变量和,sum,变量*/,i=1;/*,循环变量赋初值*,/,sum=0;/*sum,置初值,0*/,while(i=100)/*,计算,100,次*,/,sum+=i;,i+;/*,循环变量参与运算后,自加,1*/,printf(“1+2+.+100=%d”,sum);/*,运算结束,打印运算结果*,/,循环条件,循环控制变量,循环体,使用,while,循环求两个正整数的最小公倍数,#include,void main(),int m,n,result;,printf(input two integers:);,scanf(%d%d,result=mn?n:m;while(!(result%m=0&result%n=0),result+;,printf(“the result is%dn,result);,while(result%m!=0|result%n!=0),用,while,语句组织循环,main(),int i=0;float sum=0;,while (i100),+i;,sum+=1.0/i;,printf(n=%d sum=%-8.3fn,i,sum);,计算,1/i=?,100,i=1,用复合语句,do-while,循环结构,do,s;,while(e);,格式,:,循环体,表达式,程序语句或,分程序,(,程序块,),e,s,真“非,0”,假“,0”,功能:,其中,e,是表达式用于指定循环条件。,s,可以是单个语句、空语句或分程序,(,程序块,),,又叫循环体。,e,的值等于,0,退出循环体,特点,:,e,取值非,0,时,则执行,s,否则结束循环(退出循环体)。,先执行循环体,再计算表达式,e,然后判断它的值,其值为非,0,则返回执行循环体内的语句,否则结束循环。,do-while,循环结构,while,(,e,)后面的分号不要忘记,不管循环体是否为单一语句,习惯上都用花括号把它括起来,把,while(e),直接写在“,”,的后面,以免把,while(e),部分误认为一个新的,while,循环的开始,打印,0,到,9,的整数,定义整数,i,并赋初值为,0,i10,i+,假,打印整数,i,真,int i=0;,do,printf(“%dn”,i);,i+;,while(i 0,i-,假,s=s*i;,真,int i=10;,int s=1;,do,s=s*i;,i-;,while(i 0);,printf(“%dn”,s);,定义变量,i,,赋初值为,10,定义变量,s,,赋初值为,1,打印输出,s,的值,计算 1+2+3+.+100。(用,do-while),main(),int n,sum;,n=1;,sum=0;,do,sum=sum+n;,n+;,while,(,n100,使循环结束,设:,n,为数列项变量和循环控制变量。,sum,为累加和变量。,计算 1+4+9+.+,n,2,n=10(,用,do-while),main(),int n,sum;,n=1;,sum=0;,do,sum=sum+n*n;,n+;,while,(n10,使循环结束,至例3-18,设:,n,为数列项变量和循环控制变量。,sum,为累加和变量。,使用,dowhile,循环求两个正整数的最小公倍数,#include stdio.h,void main(),int m,n,result;,printf(input two integers:);,scanf(%d%d,result=mn?m:n;,result-;,do,result+;,while(result%m!=0|result%n!=0);,printf(the result is%dn,result);,从键盘输入整数17,输出显示对应英文的星期名。,#,include,main(),int n;,prinrf(“Enter a integer with 1 to 7.n”);,do,scanf(%d,switch(n),case 1:printf(MONn);break;,case 2:printf(TUEn);break;,case 3:printf(WEDn);break;,case 4:printf(THUn);break;,case 5:printf(FRIn);break;,case 6:printf(SATn);break;,case 7:printf(SUNn);break;,default:printf(Errorn);break;,while,(n!=0);,输入数为0时,循环结束,当输入的数不在17 范围时,显示错误,在循环语句中嵌套开关分支语句,一个正整数与3的和是5的倍数,与3的差是6的倍数。编一个程序求符合该条件的最小数。,当,if,中表达式为真,即满足条件时,将循环条件表达式,e,置为0,使循环结束。,#,include,main(),int x=0;,int e=1;,do,x=x+1;,if(,(x+3)%5=0&(x-3)%6=0,)e=0;,while,(e);,printf(nx=%d,x);,运行程序,x=27,(,x+3)%5=0&(x-3)%6=0,满足题目的表达式(设该数为,x):,在循环语句中嵌套,if,分支语句,用,do-while,语句组织循环,main(),int i=0;float sum=0;,do,+i;,sum+=1.0/i;,while (i100),;,printf(n=%d sum=%-8.3fn,i,sum);,计算,1/i=?,100,i=1,用复合语句,for,循环结构,真“非,0”,e,2,e,1,s,e,3,假“,0”,for(e1 ;e2 ;e3),S;,表达式,程序语句或分程序,(,程序块,),e2,的值等于,0,跳出循环体,循环体,其中:,e1,、,e2,、,e3,为表达式。,e1,为初值表达式,用于进入循环之前给某些变量赋处值。,e2,为循环条件表达式,用于指定循环条件。一般为关系表达式或逻辑表达式。,e3,为修改表达式,用于对循环变量的运算。,S,可以是单个语句、空语句或分程序,(,程序块,),,又叫循环体。,for,语句比,while,语句功能更强而且更加灵活的一种循环结构。其格式为:,表达式,1,:,循环变量赋初值,表达式,2,:,循环条件判断,表达式,3,:改变循环变量值,(1),计算表达式,e1,。,(2),计算表达式,e2,判断其值,若为真,(,非,0),则执行循环体,s,即,(3);,若为假,(0),则结束循环。,(3),执行循环体,s,。,(4),计算表达式,e3,。,(5),重复执行,(2),。,for,(,表达式,1,;,表达式,2,;,表达式,3,),循环体语句;,表达式,2,的值等于,0,跳出循环体,特点,:,进入,for,语句首先执行而且仅执行一次,e1,。循环体每次执行完后要继续执行,e3,。,for,循环语句的执行流程:,表达式,2,循环体语句,真,假,表达式,1,表达式,3,打印,0,到,9,的整数,i10,i+,假,打印整数,i,真,int i;,for(i=0;i0,i-,假,s=s*i;,int i;,int s=1;,for(i=10;i0;i-),s=s*i;,printf(“%dn”,s);,定义变量,i,定义变量,s,,赋初值为,1,打印输出,s,的值,i,赋初值为,10,真,表达式,1,表达式,1,表达式,2,表达式,2,表达式,3,表达式,3,循环体,循环体,用,for,循环语句计算,1+3+5+.+(2,n-1),(,n=100),main(),int n,sum;,for(sum=0,n=1;n=100;n+),sum+=2*n-1;,printf(sum=%dn,sum);,运行程序,sum=10000,sum=sum+(2*n-1),设:,n,为数列项变量和循环控制变量。,sum,为累加和变量。,#,include stdio.h,main(),int i,j,a,b,c,d;,for,(i=32;i=99;i+),j=i*i;,a=j/1000;,b=j/100-a*10;,c=j/10-a*100-b*10;,d=j-a*1000-b*100-c*10;,if(,a+c=10&b*d=12,),printf(%d ,j);,5-6,编一个程序求满足下列条件的四位数:该数是一个完全平方数,并且第一、三位数字之和为10,第二、四位数字之积为12。,解题思路 设:要找的四位数为,j,,根据题意,j,是一个完全平方数(设这个数为,i),即,j=i*i,,那么,i,只能在3299之间(因为32,2,1024,99,2,9801;31,2,1000 小于四位数,100,2,=10000大于四位数)。,运行程序,1296 9216,设:,a,为,j,的千位数,b,为,j,的百位数,c,为,j,的十位数,d,为,j,的个位数,若,j,已知,则可将其千、百、十、个数分解开:,a=j/1000,b=j/100-a*10,c=j/10-a*100-b*10,d=j-a*1000-b*100-c*10,j=a*1000+b*100+c*10+d,for,循环,e1,、,e2,、,e3,三个表达式均可省略,但其中的分号“,;”,不能省略,三个表达式,e1,、,e2,、,e3,都省略,即,for(;),,则完全等同于,while(1),,无终止地执行循环体。,只省略表达式,e2,,即,for(e1;e3),,省略循环判断的条件,则循环将无终止地执行循环体。,如果只有表达式,e2,,即,for(;e2;),,则完全等同于,while(e),语句,三种循环的比较,表达式,2,循环体语句,真,假,表达式,1,表达式,3,do,表达式,循环体语句,真,假,while,表达式,循环体语句,真,假,三种循环结构的比较,C,语言的三种循环语句可以用来处理同一问题,一般情况下可以互换。但是功能和灵活程度不同。,for,语句功能最强,最灵活,使用最多,任何循环都可以用,for,实现,;,其次是,while;do-while,用的最少。,while,和,do-while,的循环变量初始化是在循环语句之前完成,而,for,语句循环变量的初值是在,for,中的,e1,表达式中实现。,for,循环语句中的第一个和第三个表达式(,e1;e3,)可以是逗号表达式,它扩充了,for,语句的作用范围,使它有可能同时对若干参数,(,如循环变量、重复计算数等,),进行初始化和修正等。,for,和,while,循环语句是先判断循环条件,后执行循环体;而,do-while,循环语句则是先执行一次循环体,然后才判断循环条件。因此,后者不管什么情况,都至少执行一次循环体,。,已知,s=2/1+3/2+5/3+8/5+13/8+,计算前,20,项之和,main(),int i;,float a=2,b=1,s=0,w;,for(,i=1,;,i=20,;,i+,),s=s+a/b;,w=a;a=a+b;b=w;,printf(sum=%fn,s);,5-7,main(),int i=0;,float a=2,b=1,s=0,w;,while(,i 20,),i+;s+=a/b;,w=a;a=a+b;b=w;,printf(sum=%fn,s);,main(),int i=0;,float a=2,b=1,s=0,w;,do,i+;s+=a/b;,w=a;a=a+b;b=w;,while(,i 20,);,printf(sum=%fn,s);,循环嵌套(多重循环),在一个循环的循环体内又包含另一个循环,称之为循环的嵌套,被嵌入的循环又可以嵌套循环,称之为多重循环,循环相互嵌套时,被嵌套的一定是一个完整的循环结构,即两个循环结构不能相互交叉,循环嵌套,开始,i=0,i8,k=0,k7,打印*号,k=k+1,回车换行,i=i+1,结束,#,include,/*,打印,8,行,7,列的星号矩形*,/,main(),int i,k;,/*,外循环控制星号矩形的行*,/,for(i=0;i8;i+),/*,内循环打印每行的,7,个星号*,/,for(k=0;k7;k+),printf(“*”);,printf(“n”);/*,换行,*/,编一个程序。求出,200-300,之间的某些数,这些数应满足下面的条件:它们个位、十位、百位之积为,42,、之和为,12,main(),int i,j,k;,i=2;,for(j=0;j=9;j+),for(k=0;k=9;k+),if(,i*j*k=42&i+j+k=12,),printf(“i=%d,j=%d,k=%d.n”,i,j,k);,编一个程序。求出,200-300,之间的某些数,这些数应满足下面的条件:它们个位、十位、百位之积为,42,、之和为,12,main(),int i,j,k;,i=2;,for,(,j=0;j=9;j+),k=0;,do,if(i*j*k=42&i+j+k=12),printf(“i=%d,j=%d,k=%d.n”,i,j,k);,k+;,while,(k=9);,编一个程序。求出,200-300,之间的某些数,这些数应满足下面的条件:它们个位、十位、百位之积为,42,、之和为,12,main(),int i,j,k;,i=2;,for(j=0;j=9;j+),k=0;,while,(k=9),if(i*j*k=42&i+j+k=12),printf(“i=%d,j=%d,k=%d.n”,i,j,k);,k+;,循环嵌套,main(),int i,j,k;,i=2;,for,(j=0;j=9;j+),for,(k=0;k=9;k+),if(i*j*k=42&i+j+k=12),printf(“i=%d,j=%d,k=%d.n”,i,j,k);,main(),int i,j,k;,i=2;,for,(j=0;j=9;j+),k=0;,while,(k=9),if(i*j*k=42&i+j+k=12),printf(“i=%d,j=%d,k=%d.n”,i,j,k);,k+;,main(),int i,j,k;,i=2;,for(j=0;j=9;j+),k=0;,do,if(i*j*k=42&i+j+k=12),printf(“i=%d,j=%d,k=%d.n”,i,j,k);,k+;,while,(k=9);,最多抄写,100,遍,熟练的段落可以不抄写,少于,100,次,抄写一段,真,假,次数为,0,次数加,1,段落加,1,段落为,0,最后一段,该段落熟练了吗,真,假,假,真,最多抄写,100,遍,熟练后可以停止,少于,100,次,抄写,真,假,次数为,0,次数加,1,熟练了吗,真,假,break,和,continue,C,语言的三种循环,都是根据循环判断表达式为,0,来控制循环结束,这种结束是正规结束。在实际应用中,有时还要求在循环的中途退出循环,这是一种非正规的循环退出。实现非正规的循环退出的语句有,break,、,continue,。,break,语句,功能:,退出当前循环或当前,switch,结构,适用于:,for,、,while,、,do-while,、,switch,语句。不能用于其它语句,作用:,跳出当前的上述语句转向它们之后的语句去执行,如果,break,语句处在一个循环体中,若执行它时退出所在的循环,即结束当前层的循环,开始,i=0,i100,打印面积,i=i+1,打印半径,结束,#,include,#define PI 3.14159,/*,打印半径为,0,到,10,的圆的面积*,/,/*,如果面积超过,100,,则不予打印*,/,main(),int i;,float area;,for(i=0;i 100),break;,printf(“,面积等于,%dn”);,printf(“,现在,r=%dn”,i);,break,假,真,真,假,一个正整数与,3,的和是,5,的倍数,与,3,的差是,6,的倍数。编一个程序求符合该条件的最小数,#include,main(),int x=0;,do,x=x+1;,if(,(x+3)%5=0&(x-3)%6=0,)break;,while,(1);,printf(nx=%d,x);,(x+3)%5=0&(x-3)%6=0,编一个程序。求出,2,和,100,之间的素数,#include“stdio.h”,main(),int i,k;,for(k=3;k=100;k+),for(i=2;,i=k),printf(“%d”,k);,内循环,外循环,跳出内循环体,结束当前层循环,设:,k,外循环控制变量、分子变量。外循环变量用来产生被判断数(即,2100,),i,内循环控制变量、分母变量。内循环变量用来产生试除的数(即,2k-1,),continue,语句,功能:,结束本次循环,适用于:,for,、,while,、,do-while,语句,作用:,结束当前的上述语句的循环转向下一次循环条件的判断。如果循环条件的判断结果为真,则继续循环,,否则结束循环,注意:,结束本次循环后,应清楚程序控制跳转到什么地方,编一个程序。找出,1-20,之间所有奇数,main(),int i;,for(i=1;i=20;i+),if(i%2=0),continue;,printf(“%d ”,i);,结束本次循环,,转向下依次循环的判断,continue,语句,#,include,/*,计算用户输入的所有正数的和*,/,/*,如果用户输入,0,,则结束*,/,main(),float f,s;,s=0;,do,fscanf(“%f”,if(f=0),continue;,s+=f;,while(f!=0);,开始,s=0,打印结果,结束,f!=0,读入一个数,f,f=0,累加,假,真,假,continue,真,求函数,y=ax2+bx+c,。,x,变化范围是:,1,到,10,的区间内(,x,取值为整数)。用,break,还是用,continue,语句控制函数的输出值不在,250y350,之间。,变量,y,值介于,250-350,之间时,结束本次循环,for(x=1;x250&y350),continue,;,printf(“continue-x=%d,y=%dn”,x,y);,变量,y,值在,250-350,之间时,,跳出循环体。,运行程序,x=1,y=30,x=2,y=55,x=3,y=90,x=4,y=135,x=5,y=190,x=6,y=255,x=7,y=330,x=8,y=415,x=9,y=510,x=10,y=615,main(),int a,b,c,x,y;,a=5;b=10;c=1;,for(x=1;x=10;x+),y=a*x*x+b*x+c;,printf(“x=%d,y=%dn”,x,y);,for(x=1;x250&y350),break;,printf(“break-x=%d,y=%dn”,x,y);,break-x=1,y=30,break-x=2,y=55,break-x=3,y=90,break-x=4,y=135,break-x=5,y=190,continue-x=1,y=30,continue-x=2,y=55,continue-x=3,y=90,continue-x=4,y=135,continue-x=5,y=190,continue-x=8,y=415,continue-x=9,y=510,continue-x=10,y=615,main(),int i,n=0;,float sum=0,f;,printf(“Enter a real number:”);,for(i=1;i=10;i+),scanf(“%f”,if(f=0),continue;,sum+=f;,n+;,printf(“n=%d n”,n);,printf(“sum=%fn”,sum);,printf(“average=%fn”,sum/n);,编一个程序。求输入的10个数中正数的个数及平均值。,设:,i,循环控制变量。,n,循环计次变量。,sum,求和累加变量。,f,放输入数据的变量。,Enter a real number:10 10 10 10 10 10 10 10 10-10,n=9,sum=90,average=10,程序运行,开始,s=0,打印结果,结束,f!=0,读入一个数,f,f=0,累加,假,真,假,continue,真,开始,i=0,i100,打印面积,i=i+1,打印半径,结束,break,假,真,真,假,goto,语句,无条件分支语句,格式:,goto,语句标号;,语句标号:语句标号是一个标识符,它表示程序的一个特定位置,违反结构化程序设计的语句,应当合理、有节制地使用,#,include“stdio.h”,main(),int i,j,m;,printf(“n*|”);/*print table header*/,for(i=1;i10;i+),printf(“%4d”,i);,printf(“n-|-n”);,for(i=1;i10;i+),printf(“%d|”,i);,for(j=1;j=i;j+),m=i*j;,printf(“%4d”,m);/*print product*/,printf(“n”);,printf(“-”);,例:3-32 编制九九乘法表,。,#,include“stdio.h”,main(),int i,j;,for(i=0;i8;i+),for(j=0;j8;j+),printf(“*”);,printf(“n”);,打印输出用“*”组成的88矩形图形。,运行程序,*,*,*,*,*,*,*,*,如果将,j8,改为,j=i,则打印输出?,*,*,*,*,*,*,*,*,编写,下列分段函数的计算程序。,y=,xx-y,2,x=y,x+(x+y)(x-y,2,)/(x-y)xy,且,x1,0.2x+(0.2x+y)(x-y,2,)/(0.2x+y)xy,且,x1,#,include“math.h”,main(),float x,y;,printf(“n Enter x,y”);,scanf(“%f,%f”,if(x=y),y=x*fabs(x-y*y);,else if(x1),y=x+(x+y)*(x-y*y)/(x-y);,else y=0.2*x+(0.2*x+y)*(x-y*y)/(0.2*x-y);,printf(“y=%f”,y);,下列程序段执行后,y,的值为:,main(),int x,y;,for(y=1,x=1;y=10),break;,if(x%2=1),x+=5;,continue;,x-=3;,A)2 B)4 C)6 D)8,main(),int i=1,s=0;,do,s+=i+;,while(i+6);,printf(“%d,%d”,i,s);,答:7,9,答:,C,main(),int a=1,b=1;,switch(a),case 1:switch(b),case 0:printf(“*3*n”);break;,case 1:printf(“*0*n”);break;,case 2:printf(“*6*n”);break;,答:,*0*,*6*,以下程序运行时若从键盘输入2473,则运行结果是:,main(),int c;,while(c=getchar()!=n),switch(c-2),case 0:,case 1:putchar (c+4);,case 2:putchar (c+4);break;,case 3:putchar (c+3);,default:putchar (c+2);break;,printf(“n”);,A)668977 B)668966,C)66778777 D)6688766,答:,A,continue;,读程写结果,main(),int x=1,y=0,a=0,b=0;,switch(x),case 1:switch(y),case 0:a+;break;,case 1:b+;break;,case 2:a+;b+;break;,printf(“a=%d,b=%d”,a,b);,答案:,a=2,b=1,读程写结果,main(),int a,b;,for(a=1,b=1;a=20)break;,if(b%3=1),b+=3;,continue;,b-=5;,printf(“%d”,a);,A)7 B)8 C)9 D)10,答案:,B,下述程序接收从键盘输入的若干学生成绩,统计并输出最高成绩和最低成绩,当输入的成绩为负数时结束,填空完成程序。,答案:,(1),x=0,(2)xfmax),fmax=x;,else,if(,(2),),fmin=x;,scanf(“%f”,printf(“nmax=%f,min=%f”,fmax,fmin);,三、下列语句执行后,,b,的值为:,int a=1,b=10;,do,b-=a;,a+;,while(b-0);,A)9 B)-2 C)-1 D)8,答案:,D,四、下面程序的功能是:计算,1-3+5-7+9+.-99+101,的值并输出,main(),int i,t=1,s=0;,for(i=1;i=101;i+=2),(1),;,s=s+t;,(2),;,printf(“%dn”,s);,t=t*i,(2)t=-t/i,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服