《程序的控制结构》PPT课件.ppt_第1页
《程序的控制结构》PPT课件.ppt_第2页
《程序的控制结构》PPT课件.ppt_第3页
《程序的控制结构》PPT课件.ppt_第4页
《程序的控制结构》PPT课件.ppt_第5页
已阅读5页,还剩108页未读 继续免费阅读

下载本文档

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

文档简介

第4章 程序的控制结构 1 *2 第四章算法 生成指定范围围的随机数 P95 P106 累加求和 P102 /2:P112 求阶阶乘 P107 素数 P127 分离一个数的每一位数字求反转转数判断一个数是否是 回文数 求一个数的因子 判断一个数是否是完数 求一元二次方程的根 124 用二分法求一元二次方程的根 P149 水仙花数 双重循环环 P117P121 最大公约约数 *3 内容提要 基本控制结构(顺序结构、选择结构、循环结构) 基本控制语句 常用算法,如累加、累乘、统计、递推、迭代、穷 举等 结构化程序设计的基本思想 *4 B B A A NS图 传统流程图 顺序结构 B B A A *5 AB N N Y Y 条条 件件P P B B N A A Y 条条 件件P P 分支结构(选择结构) NS图 传统流程图 *6 A A 条条 件件P P A A 当 型 循 环 直 到 型 循 环 真真 假 假假 条条 件件P P 假假 真真 循环结构 A A 当P成立 A A 直到P为假 *7 流程图 6!算法可以用流程图表示如下: 开始 x = 1 y = 1 x*y= y x + 1= x x 6 N N 结束 传统流程图传统流程图 打印 y 1 =x 1 =y x * y =y x + 1 =x 直到 x6 打印 y NSNS图图 *8 思考 1、y=2x+5 x5 2、 3、 *9 程序员练书法 某程序员对书法十分感兴趣,退休后决定在这 方面有所建树。 于是花重金购买了上等的文房四宝。 一日,饭后突生雅兴,一番磨墨拟纸,并点上 了上好的檀香, 颇有王羲之风范,又具颜真卿气势,定神片刻 ,泼墨挥毫,郑重地写下一行字:hello world. *10 分支结构 P85 if语句(多种形式) 没有else子句的if语句 含else子句的if语句 if语句的嵌套 switch语句 break语句 *11 if语句 1、没有else子句的if语句 if (表达式) 语句1; 语句3 执行过程:首先计算紧跟在if后面一对圆括号内的表达式的 值。如果表达式的值为非0(“真”),则执行语句1;然后 执行语句3.如果表达式值为0(“假”),直接执行语句3 语句语句1 1; ; if if 是是 C C 语言的关键字,表达式两侧的圆括号语言的关键字,表达式两侧的圆括号 不可少,语句不可少,语句1 1 称为称为 if if 子句。子句。 *12 If语句 2、含有else子句的if语句 if (表达式) 语句1; else 语句2; 语句3 首先计算紧跟在if后面一对圆括号内的表达 式的值。 如果表达式值非0,执行语句1,然后语句 表达式值为0时,执行语句2,然后语句3 语句语句1 1; ; 语句语句2 2; ; *13 条件表达式 含义: 如果表达式1的值非 0(为真),则该条件 表达式的结果就是表达 式2的值 否则,是表达式3的 值 表达式3 N 表达式2 Y 表达式1 表达式表达式1 ? 1 ? 表达式表达式2 : 2 : 表达式表达式3 3 *14 例4.4 :年龄判断 #include main() int yourAge, hisAge; printf(“Please enter your age:“); scanf(“%d“, /*输入你的年龄yourAge*/ printf(“Please enter your friends age:“); scanf(“%d“, /*输入你朋友的年龄hisAge*/ if (yourAge = hisAge) printf(“You are older! Your age is = %dn“, yourAge); else printf(“Your friend is older!His age is=%dn“,hisAge); *15 例4.4 :年龄判断 #include main() int yourAge, hisAge, max; printf(“Please enter your age:“); scanf(“%d“, /*输入你的年龄yourAge*/ printf(“Please enter your friends age:“); scanf(“%d“, /*输入你朋友的年龄hisAge*/ max = (yourAge = hisAge) ? yourAge : hisAge; printf(“The older age is = %dn“, max); *16 else-if if的一种扩展形式相当于else分支嵌套 if (表达式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3; else 语句4; 语句5; 表达式1 语句1 语句2 语句3 语句4 表达式2 表达式3 图4-9 多分支选择结构 语句语句1;1; 语句语句2;2; 语句语句3;3; 语句语句4;4; *17 if语句的嵌套 内嵌的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。 1 在 if 子句中嵌套具有 else 子句的 if 语句. 语句形式如下: if (表达式 1 ) if (表达式 2 ) 语句 1 else 语句 2 e1se 语句 3 2 在 if 子句中嵌套不含 else 子句的 if 语句.语句形式如下: if (表达式 1 ) if 表达式 2 )语句 1 else 语句 2 if-else嵌套使用时,注意else和谁配对的问题 当表达式 1 的值为非0时,执行内嵌的 if-else 语句; 当表达式 1 的值为 0 时,执行语句 3 。 在if子句中的一对花括号花括号不可缺少。因 为c语言的语法规定:else子句总是与前 面最近的不带else的if相结合,与书写格 式无关。 *18 例4.5 :体型判断 按“体指数”对肥胖程度进行划分: 体指数t = w / h2 (体重w单位为公斤,身高h单位为米) 当t main() float h, w, t; printf(“Please enter h,w:“); scanf(“%f, %f“, t = w / (h * h); if (t = 18 当当t main() float h, w, t; printf(“Please enter h,w:“); scanf(“%f, %f“, t = w / (h * h); if (t main() float h, w, t; printf(“Please enter h,w:“); scanf(“%f, %f“, t = w / (h * h); if (t 产生0,b-1 之间的随机数的表达式: 产生a,a+b-1 之间的随机数: rand()%brand()%b rand()%brand()%b + a + a srand(seedsrand(seed) )函数:函数:为函数rand()设置随机数种子来实现 对函数rand所产生的伪随机数的 “随机化” 函数time()time()返回以秒计算的当前时间值,该值被转换为无符号整数 并用作随机数发生器的种子 #include *32 根据输入的百分制成绩 score ,转换成相应的五分制成 绩 grade 并打印输出。转换标准为: switch语句 *33 思考题 语句 if (0 = data2)的必要性 1998年11月科学美国人杂志,描述了美国导弹 巡洋舰约克敦号上的一起事故,除零错导致军舰推进系 统的关闭 如果要求程序能进行浮点数的算术运算,语句 if (0 = data2)还能用于比较实型变量data2和常 数0的大小吗? if (fabs(data2) main() int i, n; for (i=1; i main() int i, n; for (i=1; i ,可设x=k*j,即若x被大 于 的数整除,必有一个不超过 的j也能 整除x,因而上界取到 即可。 *51 例4.19: 输入一个 整数,判 断它是否 是素数 gotogoto 语句语句 *52 例 4.19 :方 法1 #include main() int m, i, k; printf(“Please enter a number:“); scanf(“%d“, k = sqrt(m); for (i=2; i main() int m, i, k; printf(“Please enter a number:“); scanf(“%d“, k = sqrt(m); for (i=2; i main() int m, i, k; printf(“Please enter a number:“); scanf(“%d“, k = sqrt(m); for (i=2; i k) printf(“Yes!n“); else printf(“No!n“); printf(“Program is over!n“); Please enter a number: 6 Program is over! No! 例 4.19 :方 法2 *56 例 4.19 :方 法3 设置标志变量设置标志变量 是最好的方法是最好的方法 *57 #include main() int m, i, k, flag = 1; /*标志变量flag初值置为1*/ printf(“Please enter a number:“); scanf(“%d“, k = sqrt(m); for (i=2; i #include main() int n; double term, sum = 0; /*累加求和变量赋初值*/ for (n=1; n main() int n; double term = 1, sum = 1; /*累乘求积累加求和变量赋初值*/ for (n=2; n RAND_MAX在stdlib.h中定义,不大于双字节整 数的最大值32767 产生0,b-1 之间的随机数 magic = rand()%b; 产生a,a+b-1 之间的随机数 magic = rand()%b + a; *67 例 4.6 #include #include main() int magic; /*计算机“想“的数*/ int guess; /*人猜的数*/ magic = rand()%100 + 1; /*“想”一个1,100之间的数magic*/ printf(“Please guess a magic number:“); scanf(“%d“, if (guess magic) printf(“Wrong! Too high!n“); else if (guess #include main() int magic; int guess; int counter; /*记录人猜次数的计数器变量*/ magic = rand() % 100 + 1; counter = 0; /*计数器变量count初始化为0*/ do printf(“Please guess a magic number:“); scanf(“%d“, counter +; /*计数器变量count加1*/ if (guess magic) printf(“Wrong! Too high!n“); else if (guess 通过键入随机数种子,产生1,100之间的随机数 scanf(“%u“, srand(seed); magic = rand() % 100 + 1; *70 #include #include main() int magic; int guess; int counter; unsigned int seed; printf(“Please enter seed:“); scanf(“%u“, srand(seed); magic = rand() % 100 + 1; counter = 0; do printf(“Please guess a magic number:“); scanf(“%d“, counter +; if (guess magic) printf(“Wrong! Too high!n“); else if (guess srand(time(NULL); magic = rand() % 100 + 1; *72 #include #include #include main() int magic; int guess; int counter; /srand(time(NULL); magic = rand() % 100 + 1; counter = 0; do printf(“Please guess a magic number:“); scanf(“%d“, counter +; if (guess magic) printf(“Wrong! Too high!n“); else if (guess #include main() int magic; int guess; int counter; magic = rand() % 100 + 1; counter = 0; do printf(“Please guess a magic number:“); scanf(“%d“, counter +; if (guess magic) printf(“Wrong! Too high!n“); else if (guess #include main() int magic; int guess; int counter; magic = rand() % 100 + 1; printf(“magic=%dn“, magic); counter = 0; do printf(“Please guess a magic number:“); scanf(“%d“, counter +; if (guess magic) printf(“Wrong! Too low!n“); else if (guess #include #include main() int magic; int guess; int counter; srand(time(NULL); magic = rand() % 100 + 1; counter = 0; do printf(“Please guess a magic number:“); scanf(“%d“, counter +; if (guess magic) printf(“Wrong! Too high!n“); else if (guess #include #include main() int magic; int guess; int counter; srand(time(NULL); magic = rand() % 100 + 1; counter = 0; do printf(“Please guess a magic number:“); scanf(“%d“, counter +; if (guess magic) printf(“Wrong! Too high!n“); else if (guess magic) printf(“Wrong!Too high!n“); else if (guess main() int m, n; for (m=1; m main() int m, n; for (m=1; m main() int x,y,z; printf(“Man t Women t Childernn“); for (x=0; x main() int x,y,z; printf(“Man t Women t Childernn“); for (x=0; x *94 这一章我们学习了 算法的描述方法 流程图 与基本控制结构相应的结构化的控制语句 if-else switch for while do-while break continue 常用算法,如累加、累乘、统计、递推、迭代、穷举 等 *95 这一章我们学习了 常用算法 求阶乘: 数据类型的定义, long或double 求累加和: long 统计: 统计正数、平均分以上、n个成绩中10090、8980、 7970、6960、60的人数;输入字符串中字母d的个数 设置一个计数变量k:初始化为1,每遇到一次将其加1: k+; *96 这一章我们学习了 累加和 存放累加和的变量: 初始化为0或第一项,再循环加每一项; 循环控制: 前n项之和已知循环次数,可设置一个循环 变量如i来控制; 加到某一项或累加和满足一定条件。例: 1+2+.+n 与 1+3+5+7+.和 2+4+6+8+.及 12+32+52+72+ 输入n或累加和大于2000的最小的n *97 这一章我们学习了 累加的项较复杂时,得专门求,例: 前后项之间无关 1m+3m +5m +7m +. /4=1-1/3+1/5-1/7+.直到最后一项的绝对值小于10-6为 止 前后项之间有关 1!+2!+.+n! x0+x1 +x2+x3+. 1+1+2+3+5+8+13+21+. 2/1+3/2+5/3+8/5+13/8+21/13+. a+aa+aaa+aaaa+aaaaa+a是一个数字,例a=2, 2+22+222+2222+ *98 练习 P143152习题4.2,4.3,4.4 *99 OVER *100 C程序结构 C程序 源程序文件1源程序文件2源程序文件3 编译预处理命令全局变量声明函数1函数n 函数首部函数体 局部变量声明执行语句 *101 什么是结构化程序设计? 目前,还没有一个严格的定义 1974年,D.Gries教授将已有的对结构化程序设计的不 同解释归纳为13种。 一个比较流行的定义是: 结构化程序设计是一种进行程序设计的原则和方法, 它避免使用goto语句,采用“自顶向下、逐步求精”方法进 行程序设计,按照这种原则和方法设计出的程序的特点为 : 结构清晰 容易阅读 容易修改 容易验证 *102 什么是结构化程序设计? Structured Programming,简称SP 1965年,最早由E.W.Dijkstra在一次国际会议上提出 1966年,C.Bohm和G.Jacopini首先证明了: 只用顺序、选择、循环三种基本的控制结构就能实现任 何单入口、单出口的程序 给结构化程序设计奠定了基础 1971年,IBM公司的Mills提出: 程序应该只有一个入口和一个出口 进一步补充了结构化程序的规则 *103 结构化程序设计的核心思想 采用顺序、选择和循环三种基本结构作为程序设计 的基本单元 只有一个入口; 只有一个出口; 无死语句,即不存在永远都执行不到的语句; 无死循环,即不存在永远都执行不完的循环。 采用“自顶向下、逐步求精”和模块化的方法进行结 构化程序设计 *104 什么是结构化程序设计? 结构化程序设计语言 按照结构化程序设计的要求设计出的语言 结构化程序 利用结构化程序设计语言或按照结构化程序设计思想 编制出的程序 *105 如何设计结构化的程序? Top-down, Stepwise refinement 自顶向下、逐步求精 1971年,wirth提出的结构化程序设计方法 先全局后局部 先整体后细节 先抽象后具体 *106 自顶向下、逐步求精的 结构化程序设计方法 B B A A A2A2 A1A1 B2B2 B1B1 A12A12 A11A11 A22A22 A21A21 B12B12 B11B11 B22B22 B21B21 *107 算法的概念 数据结构 + 算法 = 程序 只对面向过程的语言(C)成立 面向对象程序 = 对象 + 消息 算法: 为解决一个具体问题而采取的确定的有 限的操作步骤,仅指计算机能执行的算法 *108 算法的特性 有穷性 在合

温馨提示

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

评论

0/150

提交评论