山西财经大学华商学院《C语言程序设计》课件第5章循环结构程序设计的课件_第1页
山西财经大学华商学院《C语言程序设计》课件第5章循环结构程序设计的课件_第2页
山西财经大学华商学院《C语言程序设计》课件第5章循环结构程序设计的课件_第3页
山西财经大学华商学院《C语言程序设计》课件第5章循环结构程序设计的课件_第4页
山西财经大学华商学院《C语言程序设计》课件第5章循环结构程序设计的课件_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

1、第五章 循环结构程序设计山西财经大学华商学院C语言程序设计while语句do-while语句for语句举例 break语句和continue语句 循环的嵌套 在C语言中可以用以下语句来实现循环:1.用while语句;2.用do-while语句;3.用for语句;4. 用goto语句和if语句构成循环。循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体。S=1+2+3+1000S12100S+1SS+2SS+100S作100次加法S+iS累加器计数器5.1 while语句1、while 语句的形式: while (表达式) 循环体; 2 、 while 语句 常称为“当

2、型”循环语句。真(非零)表达式 循环体假(零)while (表达式)后面没有分号3、说明:先判断表达式,后执行语句。表达式同if语句后的表达式一样,可以是任何类型的表达式。 循环体多于一句时,用一对 括起。while循环结构常用于循环次数不固定,根据是否满足某个条件决定循环与否的情况。 i=1; s =0; while (i0) printf( + ); else printf( - ); 判断正负号 scanf( %f ,&x); 避免死循环!#include stdio.h void main()char ch;int num=0;ch=getchar();【例5-2】 统计从键盘输入的一

3、行字符的个数(以回车键作为输入结束标记)。while(ch!=n) 判断是否输入结束 num+; printf(num=%dn,num); num+;ch=getchar();5.2 do-while语句1、 do-while的形式: do 循环体; while (表达式)2、 do-while语句 常称为“直到型”循环语句。真(非零)表达式 循环体假(零);先执行语句,后判断表达式。注意在if、while语句中,表达式后面都没有分号,而在do-while语句的表达式后面则必须加分号。do-while和while语句相互替换时,要注意修改循环控制条件 。第一次条件为真时,while,do-wh

4、ile等价;第一次条件为假时,二者不同main()int sum=0,i;scanf(“%d”,&i); while (i=10) sum=sum+i; i+; printf(“sum=%dn”,sum); main()int sum=0,i;scanf(“%d”,&i); do sum=sum+i; i+; while (i=10) :printf(“sum=%dn”,sum); sum=0 sum=11i=11 有以下程序段 int n=0,p; doscanf(%d,&p);n+; while(p!=12345 &n3); 此处dowhile循环的结束条件是( ) A) P的值不等于12

5、345并且n的值小于3 B) P的值等于12345并且n的值大于等于3 C) P的值不等于12345或者n的值小于3 D) P的值等于12345或者n的值大于等于3main() int s=0,a=1,n; scanf(%d,&n); do s+=1; a=a-2; while(a!=n); printf(%dn,s); 若要使程序的输出值为2,则应从键盘给n输入的值是 A) -1B) -3C) -5D) 0【例5-3】 用do-while语句编写程序统计从键盘输入的一行非空字符的个数(以回车键作为输入结束标记)。 #include stdio.hvoid main()char ch; int

6、 num=0; ch=getchar(); do num+; ch= getchar(); while(ch!=n); printf(num=%dn,num); 5.3 for语句1、for的形式:for (初始表达式1;条件表达式2;循环表达式3) 循环体 ; 表达式1:循环开始前为循环变量设置初始值。表达式2:控制循环执行的条件,决定循环次数。表达式3:循环控制变量修改表达式。循环体语句: 被重复执行的语句。表达式3计算表达式1循环体判断表达式2零非零for的下一条语句2、执行过程 for(i=1;i=100;i+) sum=sum+i; 例如:它相当于以下语句: i=1; while (

7、i=100) sum=sum+i; i+; 表达式1;while(表达式2)表达式3;3、 说明三个表达式都可以是逗号表达式。 三个表达式都是任选项,都可以省略,但要注意省略表达式后,分号间隔符不能省略。 4. for语句中表达式省略的形式(1)for语句一般形式中的“表达式1”可以省略; 如: sum=0;i=1; for ( ; i100) break; sum=sum+i; (3)表达式3也可以省略,但此时保证循环能正常结束如: for(sum=0,i=1;i=100;) sum=sum+i; i+; (4) 可以省略表达式1和表达式3,只有表达式2,如: i=1; sum=0; for

8、 (;i=100;) sum=sum+i; i+; i=1;sum=0;while (i100) break; sum=sum+i; i+; 相当于(6)循环体为空语句对for语句,循环体为空语句的一般形式为: for (表达式1;表达式2;表达式3) ; 如:for(sum=0,i=1;i=100;sum+=i, i+) ;(1)在进入累加前先给累加器赋初值(一般为0); (2)用循环语句实现累加;for(循环变量赋初值;循环条件;循环变量改变规律) (3)循环体语句的设计。 累加器当前值=累加器原值+循环变量当前值 ;典型例题分析【例5-4】 求累加和1+2+3+1000基本方法:属于“累

9、加器”类型问题。 累加器赋初值求偶数和2+4+6+100参考程序:void main() long int k,s; s=0;for(k=1;k=1000;k+) s=s+k;printf( s=%ld ,s);累加思考(1)给累乘器赋初值,一般为1;(2)用循环语句实现累乘;for(循环变量赋初值;循环条件;循环变量改变规律)(3)循环体设计。 累乘器当前值=累乘器原值*循环变量当前值; 例5-5: 求累乘积。 如:123.100基本方法:属于“累乘器”类型问题。 累乘器赋初值参考程序:void main() int s=1; int k;for(k=1;k=100;k+) s=s*k;pr

10、intf( s=%d ,s);累乘例5-6 判断一个数是否为素数?一个数x在2,sqrt(x)范围内没有因子,我们就称其为素数(质数)主要编程方法:循环变量终值法、标记变量法#include math.h void main()int x,k;scanf( %d ,&x);排除法:如果有因子,不再往下判断是否是素数循环变量终值法for(k=2;ksqrt(x) printf( %d is a prime ,x);else printf( %d is not a prime ,x);#include math.h void main()int x,k,f=1;scanf( %d ,&x);排除法

11、:如果有因子,不再往下判断是否是素数for(k=2;k=sqrt(x);k+)if(x%k=0) f=0;break; if(f=1) printf( %d is a prime ,x);else printf( %d is not a prime ,x);标记变量法例5-7 用0-9这十个数字可以组成多少无重复的三位数? 编程方法: “枚举法”按问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解,若是,我们采纳这个解,否则抛弃它。对于所列举的值,既不能遗漏也不能重复。#include stdio.hvoid main() /*a,b,c代表百

12、位、十位、个位*/int x,a,b,c,num=0; /*num存放满足条件的数的个数,注意num要赋初值*/ for(x=100;x=999;x+) a=x/100;b=x/10%10;c=x%10; if(a!=b&a!=c&b!=c) num+; printf(%5d,x); printf(nnumber=%d,num); 编程方法: “递推法” 例5-8 裴波那契数列的第1、2项分别为1、1,以后各项的值均是其前两项之和。求前30项菲波那契数。所谓递推法就是从初值出发,归纳出新值与旧值间的关系,直到求出所需值为止。新值的求出依赖于旧值,不知道旧值,无法推导出新值。数学上递推公式正是这

13、一类问题。 f1-第一个数 f2-第二个数 f3-第三个数 f1=1; f2=1; f3=f1+f2; 以后只要改变f1,f2的值,即可求出下一个数. f1=f2;f2=f3; f3=f1+f2;递推void main()long f1=1, f2=1, f3; int k;参考程序:printf( %ldt%ldt , f1,f2);for(k=3;k=30;k+) f3=f1+f2; printf( %ldt ,f3); f1=f2; f2=f3; 注意f1、f2、f3、k 的类型递推1.break语句(1) 语句形式: break;(2)作用: 结束break所在的 switch语句。

14、结束当前循环,跳出break所在的循 环结构。 5.4 break语句和continue语句(1)语句形式: continue;(2)语句作用: 结束本次循环。2、continue 语句(3)语句执行流程: continue语句可以结束本次循环,即不再执行循环体中continue 语句之后的语句,转入下一次循环条件的判断与执行。 break和continue语句break语句跳出本层循环 while(i100) break; . continue语句结束本次循环 while(i100) continue; . 【例5-9】 求300以内能被17整除的最大的数。#include stdio.hv

15、oid main()int x,k;for(x=300;x=1;x-)if(x%17=0) break; printf(x=%dn,x); 找到满足条件的最大数,结束循环【例5-10】 求300以内能被17整除的所有整数。 #include stdio.hvoid main()int x;for(x=1;x=300;x+)if(x%17!=0) continue; printf(%dt,x); 在循环体语句中又包含有另一个完整的循环结构的形式,称为循环的嵌套。5.5 循环的嵌套嵌套在循环体内的循环体称为内循环,外面的循环称为外循环。while 、do-while、for三种循环都可以互相嵌套。

16、循环语句之间的关系for(.).for(.).内循环外循环for(.).for(.). 并列循环嵌套循环交叉循环for(.).for(.). 错误例5-11:输出图形: * * * *控制行数:共4行, 行号用k表示。每一行输出内容: 1)光标定位3)每输完一行光标换行(n)2)每一行有2*k-1个*号(k 为行数)双重循环5.6 循环结构程序设计举例 #include stdio.h void main() int k1,k2; for(k1=1;k1=4;k1+) putchar(t); for(k2=1;k2=k1;k2+) putchar(b);for(k2=1;k2=k1*2-1;k

17、2+) putchar(*);putchar(n); 定位(还可以用空格的方法)输出【例5-12】 求 #include stdio.hvoid main()float s=0,f1=2,f2=1,f=1,t,n; /*累加器赋初值*/ for(n=1;n=10;n+) s=s+f*f1/f2; /*累加器当前值=累加器原来的值+新的要加的数据*/ f=f*(-1);t=f2;f2=f1;f1=f1+t; /*为求下一个要加的数据做准备*/ printf(s=%fn,s);【例5-13】输入任意一个整数,将其逆序输出,例如输入1234,输出4321。include stdio.hvoid main()long y,n; scanf(%ld,&y) while(y!=0) n=y%10; printf(%ld,n); y=y/10; 本 章 小 结1.掌握while ,for及多重循环注意!2.掌握典型例题及方法 (1)累加、连乘、 判断素数、裴波那契数列等 (2)枚举、递推方法 #in

温馨提示

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

评论

0/150

提交评论