ch4-程序的控制结构

上传人:j7****6 文档编号:61622209 上传时间:2018-12-07 格式:PPT 页数:65 大小:487KB
返回 下载 相关 举报
ch4-程序的控制结构_第1页
第1页 / 共65页
ch4-程序的控制结构_第2页
第2页 / 共65页
ch4-程序的控制结构_第3页
第3页 / 共65页
ch4-程序的控制结构_第4页
第4页 / 共65页
ch4-程序的控制结构_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《ch4-程序的控制结构》由会员分享,可在线阅读,更多相关《ch4-程序的控制结构(65页珍藏版)》请在金锄头文库上搜索。

1、Ch4 程序结构,C语言快速培训教案,2018/12/7,NEUQ计算机兴趣小组专用教案,2,内容提要,算法的描述方法 基本控制结构 基本控制语句 常用算法,如累加、累乘、统计、递推、迭代、穷举等 程序的基本版式 结构化程序设计的基本思想,2018/12/7,NEUQ计算机兴趣小组专用教案,3,算法的概念,数据结构+算法=程序 算法:为解决一个具体问题而采取的确定的有限的操作步骤,这里仅指计算机能执行的算法 算法特性: 有穷性 确定性 有效性 没有输入或有多个输入 有一个或多个输出,2018/12/7,NEUQ计算机兴趣小组专用教案,4,算法的分类,数值运算算法: 解决的是求数值解的问题,例如

2、用辗转相除法求两个数的最大公约数等 非数值运算算法: 主要用于解决需要用分析推理、逻辑推理才能解决的问题,例如人工智能中的许多问题,查找、分类等问题,2018/12/7,NEUQ计算机兴趣小组专用教案,5,算法的表示方法,自然语言表示 传统的流程图表示 N-S结构化流程图表示 伪代码表示,2018/12/7,NEUQ计算机兴趣小组专用教案,6,C程序结构,2018/12/7,NEUQ计算机兴趣小组专用教案,7,构成程序的三种基本结构,顺序结构 选择结构 循环结构 已经证明,任何程序均可只用这三种结构综合描述 只用这三种结构编制的程序,叫结构化程序 程序必须符合结构化规则,2018/12/7,N

3、EUQ计算机兴趣小组专用教案,8,结构化程序设计的核心思想,采用顺序、选择和循环三种基本结构作为程序设计的基本单元 只有一个入口; 只有一个出口; 无死语句,即不存在永远都执行不到的语句; 无死循环,即不存在永远都执行不完的循环。 采用“自顶向下、逐步求精”和模块化的方法进行结构化程序设计,2018/12/7,NEUQ计算机兴趣小组专用教案,9,B,A,NS图,传统流程图,顺序结构,B,A,2018/12/7,NEUQ计算机兴趣小组专用教案,10,B,N,如果 成绩60 那么 通知补考 否则 告知你考试成绩,A,Y,条 件P,分支结构(选择结构),2018/12/7,NEUQ计算机兴趣小组专用

4、教案,11,条 件P,A,当型循环,直到型循环,真,假,假,条 件P,A,假,真,循环结构,2018/12/7,NEUQ计算机兴趣小组专用教案,12,当型循环,循环结构,2018/12/7,NEUQ计算机兴趣小组专用教案,13,直到型循环,循环结构,2018/12/7,NEUQ计算机兴趣小组专用教案,14,复合语句,括住的若干条语句构成一个复合语句 语句块内可以定义变量 变量仅在定义它的复合语句内有效 变量必须在复合语句的开头定义 复合语句可以用在任何可以使用语句的地方,2018/12/7,NEUQ计算机兴趣小组专用教案,15,if-else,选择结构的一种最常用形式 if (表达式) 语句1

5、; else 语句2; 语句3 表达式值非0时,执行语句1,然后语句3; 表达式值为0时,执行语句2,然后语句3 else部分可以没有。 if (表达式) 语句1; 语句3 当表达式值为0时,直接执行语句3 if-else嵌套使用时,注意else和谁配对的问题,2018/12/7,NEUQ计算机兴趣小组专用教案,16,else-if,if的一种扩展形式 if (表达式) 语句1; else if (表达式) 语句2; else if (表达式) 语句3; else 语句4; 语句5; else部分可以没有,2018/12/7,NEUQ计算机兴趣小组专用教案,17,现场编程完成例4.5,体型判断

6、。按“体指数”对肥胖程度进行划分: 体指数t = 体重w / (身高h)2 (w 单位为公斤,h单位为米) 当t = 27时,为肥胖。 编程从键盘输入你的身高h和体重w,根据给定公式计算体指数t,然后判断你的体重属于何种类型。 用3种方法编程: 算法1:用不带else子句的if语句编程 算法2:用在if子句中嵌入if 语句的形式编程 算法3:用在else子句中嵌入if 语句的形式编程,2018/12/7,NEUQ计算机兴趣小组专用教案,18,switch,多路选择 switch (表达式) case 常数1: 语句序列1; case 常数2: 语句序列2; default: 语句序列3; de

7、fault可以没有,但最好不省略 不要忘记break,2018/12/7,NEUQ计算机兴趣小组专用教案,19,现场编程完成计算器程序例4.8,编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式: 操作数1 运算符op 操作数2 然后,计算表达式的值,指定的运算符为加(+)、减(-)、乘(*)、除(/),2018/12/7,NEUQ计算机兴趣小组专用教案,20,循环while,for,while (表达式) 语句; for (表达式1; 表达式2; 表达式3) 语句; ,2018/12/7,NEUQ计算机兴趣小组专用教案,21,while,while (表达式) 语句; 只要表达式的

8、值为非0,就重复执行语句,直到表达式值为0时止,2018/12/7,NEUQ计算机兴趣小组专用教案,22,for,for (表达式1; 表达式2; 表达式3) 语句; 首先执行表达式1。如果表达式2的值为非0,就重复执行语句和表达式3,直到表达式2的值为0时止 相当于: 表达式1; while (表达式2) 语句; 表达式3; 表达式1和表达式3可以没有或者是用逗号分隔的多个表达式的组合。但最好不要有太多的表达式组合,2018/12/7,NEUQ计算机兴趣小组专用教案,23,注意,在for和while语句之后一般没有分号 有分号表示循环体就是分号之前的内容(空循环体) while (i 100

9、); i+; for (i = 0; i 100; i+); printf(“%d“, i); for通常有一个循环变量控制循环的次数,不要在循环体内改变这个变量,2018/12/7,NEUQ计算机兴趣小组专用教案,24,do-while,do 语句; while (表达式); 首先执行语句,然后判断表达式的值。如果表达式为0,继续向下执行,否则,再次执行语句,再次判断表达式的值 语句会被至少执行一次,2018/12/7,NEUQ计算机兴趣小组专用教案,25,条 件P,A,当型循环,直到循环,真,假,假,条 件P,A,假,真,假,条 件P,条 件P,A,假,当循环条件第一次就为假时,2018/

10、12/7,NEUQ计算机兴趣小组专用教案,26,选择三种循环的一般原则,如果循环次数已知,用for 如果循环次数未知,用while 如果循环体至少要执行一次,用do-while 这只是“一般”原则,不是“原则”,2018/12/7,NEUQ计算机兴趣小组专用教案,27,现场编程完成例4.6 ,例4.9,例4.6:猜数游戏:先由计算机“想”一个数请人猜,如果人猜对了,则计算机给出提示:“Right!”, 否则提示:“Wrong!”,并告诉人所猜的数是大还是小。 例4.9:先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则结束游戏,否则计算机给出提示,告诉人所猜的数是太大还是太小,直到

11、人猜对为止。计算机记录人猜的次数,以此来反映猜数者“猜”的水平。,2018/12/7,NEUQ计算机兴趣小组专用教案,28,猜数游戏用到的库函数,随机函数rand() #include RAND_MAX在stdlib.h中定义,不大于双字节整数的最大值32767 产生0,RAND_MAX 之间的随机数 magic = rand(); 产生0,b-1 之间的随机数 magic = rand()%b; 产生a,a+b-1 之间的随机数 magic = rand()%b + a; 现场编程完成例4.6,发现问题,2018/12/7,NEUQ计算机兴趣小组专用教案,29,猜数游戏用到的库函数,随机函数

12、srand 为函数rand()设置随机数种子来实现对函数rand所产生的伪随机数的 “随机化” 通过键入随机数种子,产生0,100之间的随机数 scanf(“%u“, ,2018/12/7,NEUQ计算机兴趣小组专用教案,30,猜数游戏用到的库函数,随机函数srand 为函数rand()设置随机数种子来实现对函数rand所产生的伪随机数的 “随机化” 使用计算机读取其时钟值并把该值自动设置为随机数种子,产生0,100之间的随机数 函数time()返回以秒计算的当前时间值,该值被转换为无符号整数并用作随机数发生器的种子 #include srand(time(NULL); magic = ran

13、d() % 100 + 1;,2018/12/7,NEUQ计算机兴趣小组专用教案,31,死循环,永远不会退出的循环为死循环 for (;) while (1) do while (1) 一般情况下,要极力避免死循环 绝大多数程序不需要死循环。如果出现,往往都是bug 时间过长的循环会造成“假死”效果,也要考虑解决,2018/12/7,NEUQ计算机兴趣小组专用教案,32,现场编程完成例4.11,国王的许诺。相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。 位聪明的宰相指着88共64格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第一个格子中放1

14、粒,第2格中放2粒,第3格放4粒,以后每一格都比前一格增加一倍,依此放完棋盘上的64个格子,我就感恩不尽了。 舍罕王让人扛来一袋麦子,他要兑现他的许诺。 国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦子赏赐他的宰相,这些麦子合多少立方米? (已知1立方米麦子约1.42e8粒) 总粒数为:sum=1+2+22+23+263,2018/12/7,NEUQ计算机兴趣小组专用教案,33,方法1,#define CONST 1.42e8 #include #include main() int n; double term, sum = 0; /*累加求和变量赋初值*/ for (n=1; n=64;

15、 n+) term = pow(2, n-1); /*根据累加项的规律计算累加项 */ sum = sum + term; /*作累加运算*/ printf(“sum = %en“, sum); /*打印总麦粒数*/ printf(“volum = %en“, sum/CONST);/*打印折合的总麦粒体积数*/ ,2018/12/7,NEUQ计算机兴趣小组专用教案,34,方法2,#define CONST 1.42e8 /*定义符号常量CONST值为1.42e8 */ #include main() int n; double term = 1, sum = 1; /*累乘求积、累加求和变量

16、赋初值*/ for (n=2; n=64; n+) term = term * 2; /*根据后项总是前项的2倍计算累加项*/ sum = sum + term; /*作累加运算*/ printf(“sum = %en“, sum); /*打印总麦粒数*/ printf(“volum = %en“, sum/CONST); /*打印折合的总麦粒体积数*/ ,2018/12/7,NEUQ计算机兴趣小组专用教案,35,使用嵌套的循环体时,应注意以下问题,在嵌套的各层循环体中,使用复合语句(即用一对大花括号将循环体语句括起来)保证逻辑上的正确性 内层和外层循环控制变量不应同名,以免造成混乱 嵌套的循环最好采用右缩进格式书写,以保证层次的清晰性 循环嵌套不能交叉,即在一个循环体内必须完整的

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

当前位置:首页 > 生活休闲 > 社会民生

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