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

下载本文档

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

文档简介

学习目标案例目标

熟悉循环语句中的条件表达式的构成

了解三种循环语句的特点及区别掌握三种循环语句的应用学习目标学习目标掌握while,do-while和for三种循环语句学会使用continue、break语句

掌握循环的嵌套使用

能够使用循环语句进行程序设计

方法的探索【问题】如何计算1+2+3+4+…+100

123100……11+21+2+31+2+3+…+100iss=s+i;

/*投入i枚硬币到s中*/i=i+1;

/*计算下次投币数*/案例5s=0;/*盒子开始为空*/i=1;/*第1次投币*/while(i<=100)/*100次投币*/{s=s+i;/*投入i枚硬币到s中*/i=i+1;/*计算下次投币数*/}循环结构语句for循环while循环do-while循环

while语句的一般格式为:

while(表达式){语句;}while语句的执行过程为:

(1)计算并判断表达式的值。若值为0,则结束循环,退出while语句;若值为非0,则执行循环体

(2)转步骤(1)语句非00表达式5.1while语句【例5.1】#include<stdio.h>main(){inti,s;i=1;s=0;while(i<=100)/*循环控制*/

{s=s+i;i=i+1;}printf("s=%d\n",s);}计算s=1+2+3+…+100非0i=1;s=0;0i<=100s=s+i;i=i+1;5.1while语句

(1)循环体包括一条或多条语句,多条语句必须用一对花括号括起来。

(2)合理的循环是有限次循环。如果循环不能退出,则称为“死循环”,在程序设计中应该避免出现。例如上例中的循环条件为i<=100,i从1逐渐增加到100,当i等于101时,不满足i<=100的条件从而退出循环,如果将循环条件改成i>=1,由于i每次都是加1,其趋势为递增,所以条件等于虚设,循环将一直执行下去,变成“死循环”。【注意】5.1while语句(3)控制循环执行的次数因素包括循环中的循环条件、控制循环的主要变量的初值和终值以及每次变化的幅度等。例如上例中i有效地控制了循环的运行,i从1循环到100,每次加1,循环运行了100次,i也可以称为循环变量。

5.1while语句如果只有一个循环变量,而且循环变量每次有固定的增加和减少,则循环的次数可以用以下公式计算:

循环次数

=(终值-初值)/步长

+1

步长为循环变量每次增加或减少的值,例如上例循环次数为:(100–1)/1+1,即100次.

步长可以为负数,例如以下程序语句:

inti=100,s=0;while(i>=1)

{s=s+i;i=i-1;}5.1while语句

do-while循环,又称为“直到型”循环,用do-while语句来实现,其一般格式为:

do{

语句

}while(表达式);

先执行循环体语句再判断表达式的值。若值为0,则结束循环,退出do-while语句;若值为非0,则继续执行循环体。

do-while语句的执行过程为:5.2do-while语句【例5.2】#include<stdio.h>main(){inti,s;i=1;s=0;do{s=s+i;i=i+1;}while(i<=100);

printf("s=%d\n",s);}计算s=1+2+3+…+100非00i<=100s=s+i;i=i+1;s=0;i=1;5.2do-while语句(1)do-while循环和while循环可以完成相同的任务(2)do-while循环的循环条件的判断在循环体的后面,所以和while循环有区别。结论:当循环初始条件为“真”时,两种循环结果相同,否则结果不同。例如下面两个程序,请思考结果分别为多少?#include"stdio.h"main(){ints=0,i=10;do{s=s+i;i++;}while(i<10);printf("i=%d,s=%d“,i,s);}#include"stdio.h"main(){ints=0,i=10;while(i<10){s=s+i;i++;}printf("i=%d,s=%d“,i,s);}5.2do-while语句for循环是循环的一种标准形式,通过for语句实现,其语法如下:for(表达式①;表达式②;表达式③){循环体④}表达式①:通常用于循环的初始化。表达式②:循环的条件判断式;表达式③:主要是循环变量的变化部分;循环体④:由一条或多条语句构成,多条语句需要用一对花括号括起来。5.3for循环语句非00①②④③①②④③5.3for循环语句【例5.3】#include<stdio.h>main(){inti,s;for(i=1,s=0;i<=100;i++)s=s+i;printf("s=%d\n",s);}计算s=1+2+3+…+100非00s=0;i=1;i<=100s=s+i;i=i+1;5.3for循环语句【注意】(1)for循环可以用以下while循环代替:

①;

while(②)

{

④;

③;

}

(2)表达式①可以是多个表达式构成的逗号表达式

例如:i=1,s=0;

(3)①、②、③构成循环的控制部分,三个表达式之间用分号分隔;5.3for循环语句【注意】(4)表达式①可以放在for循环的前面,但后面的分号不能少,例如:

①;

for(;②;③)

④;(5)表达式②也可以省略,相当于②始终为真值,从而构成无条件循环,循环将不能终止,需要采取其他措施;

(6)表达式③也可以省略,但作为循环变量的调整功能不能缺少,可以在循环体中完成,例如下面的for循环:

for(i=1,s=0;i<=100;)s=s+i++;5.3for循环语句(7)如果表达式①和③都省略的话,相当于while循环,例如下面的程序形式:

i=1,s=0;

for(;i<=100;)/*相当于

while(i<=100)*/

s=s+i++;

(8)①、②、③均省略,即:

for(;;)④;

相当于while(1)④;

循环的所有控制和计算功能都必须在循环体④中完成,这样的循环适合于随机退出循环程序的情况。【注意】5.3for循环语句(9)表达式④也可以省略,但必须至少保留一个分号,即:

for(①;②;③);

一个分号即是一条空语句。

(10)如果①、②、③、④均省略,即如以下形式:

for(;;);

这将构成一个死循环。

【注意】5.3for循环语句#include<stdio.h>main(){inti,s;i=3;s=0;while(i<=99){s=s+i;i=i+3;}printf("s=%d\n",s);}【例1】计算1到100之间所有3的倍数的和思考:用for语句和if语句改写本例??5.3for循环语句【例2】#include<stdio.h>main(){floati,s;/*i,s需要定义为float型*/for(i=1,s=0;i<=10;i=i+0.5)s=s+i;printf("s=%f\n",s);}计算1+1.5+2.0+2.5+3.0+3.5+…+105.3for循环语句【思考】编程求:1~100以内所有奇数的和?1~100以内所有偶数的和?5.3for循环语句引入案例:在屏幕上输出如图所示的图形****************************************分析:此图形输出特点:每行有8个“*”,可用循环实现;总共有5行,如果把每行当成一个整体,亦可用循环实现5.4循环的嵌套/*案例*/#include"stdio.h"voidmain(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=8;j++)printf("*");printf(\n");}printf(“\n”);}5.4循环的嵌套【思考】分别编程输出下面的两个图形:***************12345678910图1图25.4循环的嵌套5.4循环的嵌套一个循环的循环体内包含另外一个循环语句称为循环的嵌套。如图5-6是一个循环嵌套的例子。循环嵌套时,外层循环执行一次,内层循环从头到尾执行一遍。3种循环不仅可以自身嵌套,而且还可以互相嵌套。(1)while(){…while()…}(2)while(){…for(;;)…}(5)for(;;){…while()…}(6)for(;;){…for(;;)…}(3)do{

while()…

}while();(4)do{

for(;;)…

}while();5.4循环的嵌套5.6break、continue和goto语句5.6.1break与continue语句一般格式:break;continue;功能说明:(1)break:强行结束循环。(2)continue:结束本次循环。对于while和do-while循环,跳过循环体其余语句,转向循环终止条件的判断;而对for循环,跳过循环体其余语句,转向循环变量增值量表达式的计算,如图5-10所示。5.6break、continue和goto语句5.6.1break与continue语句【例】:输入一个整数k,判断其是否是素数

分析:让k被i(从2到k-1)除,如果k能被2~k-1中任何一个整数整除,则应提前结束除,此时i必小于或等于k-1,k不是素数;如果k不能被2~k-1中任何一个整数整除,则k是素数。5.6break、continue和goto语句#include"stdio.h"#include"math.h"voidmain(){ inti,j,k; printf("请输入一个正整数:"); scanf("%d",&k);

j=k-1; for(i=2;i<=j;i++) { if(k%i==0)break;//如果i是k的因子,则跳出循环

} if(i>j)printf("%d是素数。\n",k);

else printf("%d不是素数。\n",k);}j=k/2或j=sqrt(k)

5.6break、continue和goto语句5.6break、continue和goto语句【例4-10】把100~200之间不能被3整除的数输出。程序如下:main(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf("%6d",n);/*格式6d表示输出值占6个宽度*/}}5.7情景应用——案例拓展【案例1】:趣味古典数学问题

【问题描述】有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长大到第3个月后每个月又生一对兔子。假设所有的兔子都不死亡,问每个月的兔子总对数为多少?程序运行效果如图5-11所示。图5-11趣味古典数学5.7情景应用——案例拓展

表5-1月份-兔子明细表5.7情景应用——案例拓展【算法设计】Fibonacci数列的特点是,前两个数为1,1。从第3个数开始,每个数都是前面两个数的和。即:F1=1,F2=1(n=1或2)Fn=Fn-1+Fn-2(n>=3)很显然,Fibonacci数列依次为

1,1,2,3,5,8,13,21,34……

5.7情景应用——案例拓展参考代码如下:#include<stdio.h>voidmain(){ inti; longf1=1,f2=1,f; printf("%6ld%6ld",f1,f2); for(i=3;i<=21;i++) { f=f1+f2;//由前两项的f1,f2求得当前项f printf("%6ld",f);//输出f if(i%7==0)printf("\n");//每行限输出7个fibonacci数

f1=f2; f2

温馨提示

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

最新文档

评论

0/150

提交评论