第03章 程序的控制结构(循环)简易版

上传人:今*** 文档编号:110214928 上传时间:2019-10-29 格式:PPT 页数:46 大小:1.27MB
返回 下载 相关 举报
第03章 程序的控制结构(循环)简易版_第1页
第1页 / 共46页
第03章 程序的控制结构(循环)简易版_第2页
第2页 / 共46页
第03章 程序的控制结构(循环)简易版_第3页
第3页 / 共46页
第03章 程序的控制结构(循环)简易版_第4页
第4页 / 共46页
第03章 程序的控制结构(循环)简易版_第5页
第5页 / 共46页
点击查看更多>>
资源描述

《第03章 程序的控制结构(循环)简易版》由会员分享,可在线阅读,更多相关《第03章 程序的控制结构(循环)简易版(46页珍藏版)》请在金锄头文库上搜索。

1、厦门理工学院 计算机科学与技术系,厦门理工学院高级语言程序设计教学课件,第3章 程序的控制结构,循环结构(重复结构),厦门理工学院计算机科学与技术系 2019/10/29,教 师: 谢小竹 E-Mail: xzxie,厦门理工学院 计算机科学与技术系,2,本章主要内容,3.1 算法,3.2 语句概述,3.3 顺序结构,3.5 循环结构,3.6 综合例子,3.4 选择结构,厦门理工学院 计算机科学与技术系,0 循环的必要性,int result1,result2,result3; int result4,result5; result1 = 1 * 10; printf(“1 10 %d n“,

2、result1); result2 = 2 * 10; printf(“2 10 %d n“,result2); result3 = 3 * 10; printf(“3 10 %d n“,result3); result4 = 4 * 10; printf(“4 10 %d n“,result4); result5 = 5 * 10; printf(“5 10 %d n“,result5);,1 10 10 2 10 20 3 10 30 4 10 40 5 10 50,输出结果,重复语句,厦门理工学院 计算机科学与技术系,0 循环的必要性,1 10 = 10 2 10 = 20 3 10 =

3、 30 4 10 = 40 5 10 = 50,0 + 1,1 + 1,2 + 1,上个数字 + 1,.,重复 (上个数字 +1) 10,厦门理工学院 计算机科学与技术系,5,3.5 循环结构,循环结构又称重复结构,可用来完成重复性、规律性的操作。是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。 循环结构的特点是:在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。语言主要提供了while、do-while和for三种循环语句,来组成各种不同形式的循环结构。,厦门理工学院 计算机科学与技术系,C

4、语言中的各种循环,while,do- while,for,需要多次重复执行一个或多个任务的问题考虑使用 循环来解决,厦门理工学院 计算机科学与技术系,7,3.5.1 while语句,while语句的一般形式为: while (表达式) 语句 其中表达式是循环条件,语句为循环体。 while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句。其执行过程如图3-9(a)、(b)所示。,厦门理工学院 计算机科学与技术系,#include void main () int num=1,result; while (num=10) result=num*10; printf(“%d 10

5、%d n“,num,result); num+; ,while 循环示例,1,null,10,2,输出: 1 10 10,2 10 20 3 10 30 4 10 40 5 10 50 6 10 60 7 10 70 8 10 80 9 10 90 10 10 100,11,100,厦门理工学院 计算机科学与技术系,【例】 用while语句求1100的累计和。,#include void main ( ) int i = 1, sum = 0; while ( i = 100 ) sum += i; i+; printf (“sum = %dn“, sum); ,循环初值,循环终值,循环条件,

6、循环体,循环变量增值,运行结果: sum = 5050,厦门理工学院 计算机科学与技术系,10,例题3-14,例3-14 用while语句求n!=1*2*3* *n的值。 分析:这是一个累乘求积的问题,与累加求和类似。引入变量 fac和 i 分别表示被乘数和乘数,积也用变量 fac 表示,则求n!=1*2*3* *n可以转化为对语句: fac=fac*i; 的多次反复运行即可。令fac的初值为1,并让i从1变化到n,即可得到n!的值了。 用传统流程图表示算法,如图3-10所示:,#include main() int i=1, n; /*定义i和n变量,并为i赋初值*/ long int fa

7、c=1; printf(“Please input n:”) ; scanf(“%d”, ,运行情况如下: Please input n:6 720 思考:若把循环体中的两个语句:第10和11行对调,对结果有什么影响?若要保持原结果不变,应把前面的程序段作何修改?,厦门理工学院 计算机科学与技术系,11,说明:,(1)从上例中可以看出,一个循环的基本组成应该有三大部分: 循环的初始化部分:建立循环首次执行所必需的条件,包括循环操作中的初值和控制循环的初值两部分。 循环控制部分:其核心为一个条件判断。这个条件一般是关系表达或逻辑表达式,只要表达式的值为真(非0)即表示条件成立,可继续循环。 循环

8、体部分:循环中要反复执行的操作,同时包括控制循环条件的修改语句,以保证循环正常结束,避免出现死循环(若把第10行i+;去掉,则出现死循环,此时只能按Ctrl+Break组合键终止程序运行)。 (2)注意到初始化部分中第5行:long int fac=1 中的fac 的若定义为整型int,则可能出现数据溢出现象,因为整型int的取值范围为-3276832767。当然如果定义为long int仍有可能出现数据溢出现象,还可以定义其数据类型为float,甚至为 double。另外,因为fac充当累乘器,一般初始化为1,而累加器,一般初始化为0。,厦门理工学院 计算机科学与技术系,12,说明:,(3)

9、while语句的特点是先判断表达式,后执行语句。即先计算表达式的值,当值为真(非0)时,执行循环体语句。因此如果表达式的值一开始就为“假”,循环体一次也不执行。 (4)循环体如果包括有一个以上的语句,则必须用 括起来,组成复合语句。 请大家在例3-14的基础上完成下列各题: (1)求1*3*5*7* *(2n+1) (2)求1!+2!+3!+ +n! (3)求1!+3!+5!+ +(2n+1)!,厦门理工学院 计算机科学与技术系,13,例题3-15,例3-15 角度的余弦值可以利用下面的无穷级数计算出来: cos(x)1-x2/2!+x4/4!-x6/6!+x8/8!- 编程序从键盘读取一个角

10、度x(单位为弧度)计算cos(x)的近似值,直到最后一项的绝对值小于10-5为止。 分析:通过观察,我们可把此级数看成是对若干项的累加求和,其中每一项由符号、分子和分母组成。因此编程的基本思想是:不断求级数的部分和,直到后面准备加进去的项的绝对值小于1e-5为止,否则加进去后计算下一项。,#include /*包含使用数学库函数所对应的头文件*/ #include main() float a=1.0,b=1.0,x,term=1.0,s=0.0; /*a、b、term分别代表分子、分母及某一项*/ int m=2,sign=1; /*sign代表符号*/ printf(“Please inp

11、ut the value of x:“); scanf(“%f“, ,运行结果如下: Please input the value of x:0 cos(0.000000)=1.000000 Please input the value of x:3.141593 cos(3.141593)=-1.000004 Please input the value of x:1.570796 cos(1.570796)=-0.000000 思考:(1)分母b是否可以定义为int类型?(2)循环中语句s=s+term;能否移到语句 term=sign*a/b;的后面。 说明:本例的上述解法具有一般性,即

12、适用于类似的级数求和问题。但本例比较特殊:后一项与前一项的比为一个与项数i有关的数据 (-1)*x*x/(2*i-1)/(2*i),这样在求出前一项的基础上可以很容易地推导出后一项。本例的第二种解法代码如下:,#include #include main() float s=0.0, term=1.0, x; int i=1; printf(“Please input the value of x:“); scanf(“%f“, ,厦门理工学院 计算机科学与技术系,14,例题3-16,例3-16 将从键盘输入的一串字符(用#结束输入)按如下规则进行转换: (1)如果输入的字符为大写字母,则先转

13、换为对应的小写字母。 (2)将a转换为c、b转换为d、x转换为z、y转换为a、z转换为b。 (3)其他字符不转换。 分析:用语句“if( ch=A”后,其ASCII码已超出小写字母的取值范围,因此必须在此基础上再减去26才能得到a和b 。,源程序如下: #include main() char ch; printf(“Input data:“); ch=getchar(); while(ch!=#) if (ch=A ,运行结果如下: Input data:UfYrq 2 yLb 3?# whats 2 and 3? 说明: (1)程序中的第6、7、16行可以用while(ch=getchar

14、( )!=#)来代替放在原来第6行的位置,其他保持不变。注意上面式子中ch=getchar( )必须在两边加上圆括号。 (2)本例属于解密码的问题,即将原来的字符串按照一定的规则转换后能够阅读。,厦门理工学院 计算机科学与技术系,(1) 如果while后的表达式的值一开始就为假,循环体将一次也不执行。 (2) 循环体中的语句可为任意类型的C语句。 (3) 遇到下列情况,退出while循环: 表达式为假(为0)。 循环体内遇到break、return语句。,while语句注意事项:,int a = 0, b = 0; while (a 0) /a 0为假,b+不可能执行 b+;,int num

15、= 0; /字符计数 while ( 1 ) if (getche ( ) = n) /如果输入的字符是回车符,则返回 return; num+; ,当执行循环体内部语句return时,它不仅要退出循环,而且还要终止return后面的语句的运行,将该循环所在的函数返回。,厦门理工学院 计算机科学与技术系,(4) 在执行while语句之前,循环控制变量必须初始化,否则执行的结果将是不可预知的。 (5) 要在while语句的某处(表达式或循环体内)改变循环控制变量,否则极易构成死循环。 (6) 允许while语句的循环体又是while语句,从而形成双重循环。,while语句注意事项:,例:计算10! #include void main ( ) int i; / i应赋初始值10 long s = 1; while (i = 1) s *= i-; printf (“10! = %ldn“, s); ,i = 1; while (i 100) /死循环,因为i的值没变化,永远小于100 sum += i; printf (“sum = %dn“, sum);,i = 1; while (i = 9) j = 1; while (j =

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号