C语言第5章-循环结构程序设计课件_第1页
C语言第5章-循环结构程序设计课件_第2页
C语言第5章-循环结构程序设计课件_第3页
C语言第5章-循环结构程序设计课件_第4页
C语言第5章-循环结构程序设计课件_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章循环结构程序设计1一、实现循环结构的控制语句二、循环嵌套三、循环结构程序举例主要内容2一、实现循环结构的控制语句while语句do-while语句for语句break、continue语句几种循环的比较3格式while(表达式)语句§5.1while语句举例P79求1~10的累加和。i=1sum=0当i<=10sum=sum+ii++输出sum#include"stdio.h"intmain(){inti,sum;i=1;sum=0;while(i<=10){

sum=sum+i;i++;}printf("sum=%5d\n",sum);return0;}说明1、循环体如果包含一个以上的语句,必须使用复合语句形式。2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。3、先判断后执行。1求1~100的累加和.2求1~10的奇数和.3求N!表达式循环体语句不成立

成立?4

求1到10的奇数和举例#include"stdio.h"intmain(){inti,sum;i=1;sum=0;while(i<=10){

sum=sum+i;i+=2;}printf("sum=%5d\n",sum);return0;}运行结果:5#include<stdio.h>voidmain(){inti,sum=0;i=1;while(i<=10){if(i%2==0)sum=sum+i;i++;}printf("%d\n",sum);}运行结果:求1到10之间的偶数和举例6举例求N!#include<stdio.h>voidmain(){ inti=1,n; floatfac=1; printf("请输入n:"); scanf("%d",&n); while(i<=n){fac=fac*i;i++;} printf("%.0f\n",fac);}运行结果:7利用公式:sum=1-3+5-7+9-11…求前10项的和。#include<stdio.h>voidmain(){ints,i,sum,t,n;i=0;n=1,sum=0,t=1,s=1;while(i<10){sum=sum+t;n=n+2;s=-s;t=s*n;i++;}printf("sum=%d\n",sum);}s:变化的符号i:第i项n:第i项的绝对值t:第i项的值sum:和举例运行结果:8举例例5.2设s=1×2×3×……×n,求s不大于400000时最大的n。#include<stdio.h>intmain(){ intn=1; longints=1; while(s<=400000) {n=n+1;s=s*n; } printf("不大于400000时的最大n为:%d\ns值为:%ld\n",n-1,s/n); return0;}运行结果:前n项的乘积P819举例例5.3现有某班20名学生的C语言成绩,求该班学生的C语言的平均成绩。运行结果:

请输入学生成绩:23凵89凵67凵78凵94凵56凵34凵83凵90

凵67凵48凵72凵81凵65凵74凵87凵73凵67凵90凵98

20名学生的C语言平均成绩为:71.8#include<stdio.h>intmain(){floattotal=0,score,average;inti=1;printf("请输入学生成绩:");while(i<=20){ scanf("%f",&score);total=total+score;i++;}average=total/20;printf("20名学生的C语言平均成绩为:%.1f\n",average);return0;}total:前i名学生的成绩的和score:每一名学生的成绩average:

平均成绩P8110格式do

循环体语句while(表达式);§5.2do-while语句举例P85求1~10的累加和。#include"stdio.h"intmain(){inti,sum;i=1;sum=0;

do

{sum=sum+i;i++;

}while(i<=10);printf("sum=%5d\n",sum);return0;}说明1、循环体如果包含一个以上的语句,必须使用复合语句形式。2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。3、先执行,后判断。i=1sum=0当i<=10(直到i>10)输出sumsum=sum+ii++表达式循环体语句假真至少执行一次11举例while和do-while循环的比较。#include<stdio.h>voidmain(){inti,sum=0;scanf("%d",&i);while(i<=10)

{sum=sum+i;i++;

}printf("sum=%d\n",sum);}#include<stdio.h>voidmain(){inti,sum=0;scanf("%d",&i);

do{sum=sum+i;i++;

}while(i<=10);printf("sum=%d\n",sum);}输入:1

输入:11sum=55输出:sum=55sum=0输出:sum=11此程序的功能?什么情况下两者结果相同?12格式for(表达式1;表达式2;表达式3)语句P87for(循环变量赋初值;循环条件;循环变量增值)语句执行过程(1)先求解表达式1;(2)求解表达式2,若其值为真,则执行循环体语句,然后执行第(3)步;若为假,则结束循环,转到第(5)步;(3)求解表达式3;(4)转向步骤(2);(5)循环结束,执行for语句下面的一个语句。表达式2循环体语句假

真求解表达式1求解表达式3§5.3for语句13举例求1~100的累加和。#include<stdio.h>voidmain(){inti,sum;sum=0;

for(i=1;i<=100;i++)

sum=sum+i;printf("sum=%5d\n",sum);}?1求1~50的累加和.2求1~100的奇数和.3求N!i=1;while(i<=100){sum=sum+i;i++;}14for(表达式1;表达式2;表达式3)语句说明三个表达式都可以省略。表达式2循环体语句假

真求解表达式3表达式1省略需在循环体外赋初值循环体语句求解表达式1求解表达式3表达式2省略恒真循环表达式2循环体语句假

真求解表达式1表达式3省略两种情况?结果?15说明1i=1;for(;i<=10;i++)sum=sum+i;2for(i=1;

;i++)sum=sum+i;?3for(i=1;i<=10;){sum=sum+i;i++;}for(i=1;i<=10;i++)sum=sum+i;表达式1可以省略,但其后的分号不可以省略。没有循环结束条件,构成了死循环for(i=1;i<=10;i++)sum=sum+i;i=1while(1){sum=sum+i;i++;}16说明45for(;;)sum=sum+i;6表达式1和表达式3可以是与循环变量无关的表达式。for(;i<=10;){sum=sum+i;i++;}7表达式2一般是关系表达式,也可以是数值或字符表达式。while(i<=10){sum=sum+i;i++;}while(1)sum=sum+i;表达式1和表达式3可以同时省略,此时等同于while语句。for(sum=0,i=1;i<=100;i++)sum=sum+i;例建议:for语句中只放与循环控制有关的语句。17说明1、三种循环语句在处理循环问题时,一般可以相互替代。2、对于循环次数固定的问题,用for语句实现比较简单。3、对于循环次数不确定的问题,可用while语句或do-while语句实现。4、while语句:先判断,后执行。

do-while语句:先执行,后判断。几种循环语句的比较18格式while(表达式1){…if(表达式2)break;

…}§5.4break/continue语句举例…...sum=0;for(i=1;i<=10;i++){if(i>5)break;sum=sum+i;}printf(“sum=%5d\n”,sum);…...while(表达式1){…if(表达式2)conitue;

…}结束整个循环结束本次循环…...sum=0;for(i=1;i<=10;i++){if(i<=5)continue;sum=sum+i;}printf(“sum=%5d\n”,sum);…...1到5的累加和6到10的累加和19举例例5.11分析下面程序的运行结果。P90结束整个循环#include<stdio.h>intmain(){inti=0,a=0;while(i<20){if(i%10==0)break;elsei++;}i+=11;a+=i;printf("%d\n",a);return0;}ii%10第1次执行循环00条件表达式i%10==0成立,执行break语句,跳出循环运行结果:1120举例例5.12输出100以内能被7整除的最大数。P91结束整个循环#include"stdio.h"intmain(){intn;for(n=100;n>=1;n--)if(n%7==0){printf("100以内能被7整除的最大数为:%d\n",n);break;}return0;}nn%7第1次执行循环1002第2次执行循环99

1第3次执行循环980第4次执行循环时条件表达式n%7==0成立,执行break语句,跳出循环运行结果:100以内能被7整除的最大数为:9821举例例5.13分析下面程序的运行结果。P92结束本次循环#include"stdio.h"intmain(){inti=0,s=0;do

{if(i%2)

{i++;continue;

}i++;s+=i;

}while(i<7);printf("%d\n",s);return0;}

ii%2i++scontinue

是否执行第1次执行循环0011否第2次执行循环1

121是第3次执行循环2034

否第4次执行循环3144

是第5次执行循环4059否第6次执行循环5169是第7次执行循环60716否此时条件表达式1<7不成立,结束循环运行结果:16S=1+3+5+722#include<stdio.h>voidmain(){inti;for(i=1;i<=5;i++){ if(i>3)break; if(i%2)printf("*"); elsecontinue; printf("#"); }printf("$\n");}分析如下程序的输出结果:*#*#$举例23举例例5.14把100~200之间的能被13整除的数输出。P92#include"stdio.h"

intmain()

{

intn;

for(n=100;n<=200;n++)

{

if(n%13!=0)

continue;

else

printf("%d",n);

}

printf("\n");

return0;

}运行结果:104117130143156169182195#include"stdio.h"

intmain()

{

intn;

for(n=100;n<=200;n++)

if(n%13==0)

printf("%d",n);

printf("\n");

return0;

}24概念一个循环体内又包含另一个完整的循环结构,称为循环嵌套。举例例5.15马克思曾经做过这样一道趣味数学题:有30个人在一家小饭馆里用餐,其中有男人、女人和小孩。每个男人花3先令,每个女人花2先令,每个小孩花1先令,共花去50先令。问男人、女人和小孩各几人(男人、女人和小孩均存在)?P83#include"stdio.h"intmain(){intman,women,child;for(man=1;man<16;man++) for(women=1;women<=23;women++) {child=30-man-women; if(man*3+women*2+child*1==50) printf("man=%-6dwowen=%-6dchild=%-6d\n",man,women,child);}return0;}§5.5循环嵌套男人人数,最多15人(16*3=48)女人人数,最多23人(24*2=48)小孩人数=30-man-women25运行结果:man=1women=18chile=11man=2women=16chile=12man=3women=14chile=13man=4women=12chile=14man=5women=10chile=15man=6women=8chile=16man=7women=6chile=17man=8women=4chile=18man=9women=2chile=192627概念一个循环体内又包含另一个完整的循环结构,称为循环嵌套。1234246836912481216举例打印乘法口诀表。#include<stdio.h>voidmain(){inti,j;for(i=1;i<=4;i++)

{for(j=1;j<=4;j++)printf("%4d",i*j);printf("\n");

}}i=1,j=11*1

j=21*2

j=31*3

j=41*4i=2,j=12*1

j=2……i=3i=4fori=1to4输出i*jforj=1to4换行§5.5循环嵌套第六章循环结构程序设计28124369481216#include<stdio.h>voidmain(){inti,j;for(i=1;i<=4;i++)

{for(j=1;j<=i;j++)printf("%4d",i*j);printf("\n");

}}§5.5循环嵌套思考1第六章循环结构程序设计29#include<stdio.h>voidmain(){inti,j;for(i=1;i<=4;i++)

{for(j=1;j<=5-i;j++)printf("%4d",i*j);printf("\n");

}}§5.5循环嵌套思考21234246364第六章循环结构程序设计30#include<stdio.h>voidmain(){inti,j;for(i=1;i<=4;i++)

{for(j=1;j<=4-i;j++)

printf(“%4d”,’‘);

for(j=5-i;j<=4;j++)printf(“%4d”,i*j);

printf(“\n”);

}}§5.5循环嵌套思考34686912481216第六章循环结构程序设计31#include<stdio.h>voidmain(){inti,j;for(i=1;i<=4;i++)

{for(j=1;j<=i-1;j++)printf(“%4d”,’‘);for(j=i;j<=4;j++)printf(“%4d”,i*j);printf(“\n”);

}}§5.5循环嵌套思考4123446891216第六章循环结构程序设计32举例例5.16打印乘法口诀表。P95#include"stdio.h"intmain(){inti,j,result;for(i=1;i<=9;i++)

{

for(j=1;j<=9;j++)

{

result=i*j;//计算i行j列上的元素值

printf("%d*%d=%-3d\t",i,j,result);

}printf("\n");

}return0;}resulti=1,j=11*1j=21*2j=31*3

j=91*9i=2,j=12*1j=22*2

┇j=92*9……i=9,j=19*1j=29*2┇j=99*91*1=11*2=2…1*9=92*1=22*2=4…2*9=18…9*1=99*2=18…9*9=8133#include"stdio.h"intmain(){inti,j,result;for(i=1;i<=9;i++)

{

for(j=1;j<=9;j++)

{

result=i*j;//计算i行j列上的元素值

printf("%d*%d=%-3d\t",i,j,result);

}printf("\n");

}return0;}resulti=1,j=11*1j=21*2j=31*3

j=91*9i=2,j=12*1j=22*2

┇j=92*9……i=9,j=19*1j=29*2┇j=99*934举例例5.17求Fibonacci数列的前40个数。按每行4个进行输出。#include"stdio.h"intmain(){intn;longf1,f2;f1=1;f2=1;printf("%10d%10d",f1,f2);for(n=1;n<=19;n++){if(n%2==0)

printf(“\n”);//每行输出4个

f1=f1+f2;f2=f2+f1;printf("%10d%10d",f1,f2);}printf("\n");return0;}特点:第1、2个数为1、1。从第三个数开始,该数是其前面两个数之和。F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n>=3)P961123581321345589144……§5.6程序举例35输出下列图形:112123123412345123456123456712345678123456789#include"stdio.h"intmain(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++) printf("%3d",j);

printf("\n");}return0;}36举例例5.4从键盘输入一个非负整数,判断m是否是素数。P82素数(质数):只能被1和它本身整除的数。判别方法:57:若2~56之间的每一个数都不能整除57,则57为素数,否则57不是素数。m,k=m-1,i=2~k:若每一个i的值都不能整除m,则m为素数,否则m不是素数。k=m-1;k=[m/2];[(m+1)/2];k=[sqrt(m)];[sqrt(m+1)]flag=1;k=m-1;for(i=2;i<=k;i++)if(m%i==0)

{

flag=0;

break;

}if(flag==1)printf("yes!");elseprintf("no!");k=m-1;for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)printf("yes!");elseprintf("no!");37#include<stdio.h>#include<math.h>intmain(){intm,k,i,n=0;scanf("%d",&m);k=sqrt(m+1);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)printf("%d是素数",m);elseprintf("%d不是素数",m);return0;}38#include"math.h"#include"stdio.h"intmain(){ intm,flag=0,i=2; printf("请输入一个非负整数:\n"); scanf("%d",&m); while(i<=sqrt(m)&&flag==0) { if(m%i==0) flag=1;//m不是素数,修改flag的值

elsei++; }

if(flag==0) printf("%d是素数。\n",m);

else

printf("%d不是素数。\n",m); return0;}P8239第六章顺序结构程序设计举例:求100~200之间的全部素数。form=101to200

判断m是否为素数

若m是素数,则输出并统计个数n.

每输出10个素数,换行#include<stdio.h>#include<math.h>intmain(){intm,k,i,n=0;for(m=101;m<=200;m++)

{k=sqrt(m+1);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1)

{printf("%4d",m);n=n+1;

if(n%10==0)printf("\n");

}}return0;}

if(i>=k+1)

{printf("%4d",m);n=n+1;}if(n%10==0)printf("\n");?40#include<stdio.h>

//输出100到200之间的素数#include<math.h>voidmain(){inti,k,m,flag=1;for(m=100;m<200;m++){k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0){

flag=0;

break;}if(flag==1)

printf("%d\t",m);}printf("\n");}?flag=1;41例1利用公式

/4=1-1/3+1/5-1/7+…求

的近似值。直到某一项的绝对值小于10-6为止。pi=1-1/3+…输出4*pis=1(-1)n=1,3,5,7…t=s/nt=1,p=0,n=1,s=1当|t|>=10-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出pi#include<stdio.h>#include<math.h>voidmain(){ints;

floatn,t,pi;t=1;pi=0;n=1;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);}同类题sin(x)=x-x3/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论