第三章程序控制结构.ppt

上传人:本田雅阁 文档编号:2258221 上传时间:2019-03-12 格式:PPT 页数:40 大小:504.51KB
返回 下载 相关 举报
第三章程序控制结构.ppt_第1页
第1页 / 共40页
第三章程序控制结构.ppt_第2页
第2页 / 共40页
第三章程序控制结构.ppt_第3页
第3页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第三章程序控制结构.ppt》由会员分享,可在线阅读,更多相关《第三章程序控制结构.ppt(40页珍藏版)》请在三一文库上搜索。

1、第三章 程序控制结构,学习目标 了解结构化程序设计的一般概念 熟悉顺序结构、分支结构与循环结构等三种程序流程控制结构 掌握 C 语言实现分支结构的 if 语句与 switch 语句,能熟练应用 if 语句与 switch 语句编写程序 掌握 C 语言实现循环结构的 while 语句、for 语句与 do-while 语句,能熟练应用这三种循环控制结构编写程序 了解三种循环结构的关系,掌握在循环结构中控制程序流程转移的方法,3.1 C 语言结构化程序设计基础,程序的控制结构(黑箱) 单入口单出口的控制结构易于理解 三种基本控制结构:顺序、分支、循环 控制结构可以嵌套,以构成更复杂的控制结构 程序

2、的结构化 三种基本控制结构可以构造任何复杂的结构化算法 结构化程序设计原则:自顶向下,逐步求精 结构化程序设计过程:首先对任务进行功能分解,然后使用结构化程序设计思想逐一解决各个子问题,最后构造原始问题的解 好处:逻辑性强,可读性好,维护方便,3.2 顺序结构,顺序结构的含义 由一组顺序执行的处理块组成,每个处理块可能包含一条或一组语句,完成一项任务 顺序结构是最基本的算法结构,语句与复合语句(语句块) 三种语句结构:单语句(表达式;)、空语句(;)、复合语句(语句序列),顺序结构程序示例,分别输入两个复数的实部与虚部,计算两个复数的和、差、积、商并输出结果,#include int main

3、() float a, b, c, d, real, imaginary; printf(“Input reals and imaginaries of two complexesn”); scanf(“%f,%f,%f,%f”, ,实际需要输入4个实数,3.3 分支结构,分支结构(选择结构)的含义 根据某一条件的判断结果,确定程序的流程,即选择哪一个程序分支中的处理块去执行 最基本的分支结构是二路分支结构,以条件判断为起点,如果判断结果为真,则执行A处理块的操作,否则执行B处理块的操作,if-else 语句,语句格式:if(表达式) 语句1 else 语句2 表达式必须位于括号内,一般为关系

4、或逻辑表达式 先计算表达式值,若为真则执行语句1,否则执行语句2 语句1与语句2可以为复合语句 语句1与语句2只能有一个被执行 如果仅仅用于确定某条语句是否执行,else分支可以省略,if-else 语句示例一,输入一个字符,判断它是否为09之间的数字,#include int main() char c; printf(“Input a character: ”); c = getchar(); if(c = 48 ,因:字符以ASCII码值存储 且数字的ASCII码值4857 故:比较ASCII码值,if-else 语句示例二,输入一个整数,输出其绝对值,#include int main

5、() int n, abs; printf(“Enter integer: ”); scanf(“%d”, ,if-else if-else 语句,语句格式 if(表达式1) 语句1 else if(表达式2) 语句2 else 语句n,if-else if-else 示例,根据百分制成绩给出优秀、通过或不通过成绩,#include int main() float score; printf(“Input score: “); scanf(“%f“, ,条件分支的嵌套,条件语句的嵌套格式 当年龄大于50岁时,若工资小于500,则长200,否则长300,if(age 50) if(sal 50

6、0) sal += 200; else sal += 300;,若年龄大于50岁且工资小于500,长200;若年龄不大于50岁,则长300,语法规定:else与离它最近的if配对 嵌套的条件语句可以实现复杂的逻辑判断,if(age 50) if(sal 500) sal += 200; else sal += 300;,if(age 50) if(sal 500) sal += 200; else sal += 300;,条件分支嵌套示例,求方程 ax2 + bx + c = 0 的根,#include #include / 由于用到平方根函数,要用此头文件 int main() float

7、a, b, c, x1, x2, p, q, m; / 定义实型变量 printf(“Enter 3 coefficients: “) ; scanf(“%f,%f,%f“, ,条件分支嵌套示例,if( m = 0 ) / 解实根 x1 = ( b + sqrt(m) ) / ( 2.0 * a ); x2 = ( b sqrt(m) ) / ( 2.0 * a ); printf(“x1 = %fn“, x1 ); / 输出两个实根 printf(“x2 = %fn“, x2 ); else / 解虚根 p = b / ( 2.0 * a ); q = sqrt(m) / ( 2.0 * a

8、 ); printf(“x1 = %f + %fin“, p, q); printf(“x2 = %f %fin“, p, q); return 0; ,switch 分支语法,计算过程 先计算表达式的值 依次与一组常量比较 若相同则执行该分支 否则转向default分支 退出switch语句 说明 switch后面的表达式必须为整型、字符型或枚举型 case后面必须为常量表达式,则各个case值必须不同 如果没有default子句,且没有case子句匹配,则不执行 case分支中的语句可以有多条,不需要花括号,switch( 表达式 ) case 常量表达式1: 语句组1 case 常量表达

9、式2: 语句组2 case 常量表达式n: 语句组n default: 语句组 ,switch 分支流程图,switch 分支示例一,根据输入的成绩等级,打印相应分数段,#include int main() char grade; printf(“Input the grade(A,B,C,D,E):“); scanf(“%c“, ,switch 分支示例一,根据输入的成绩等级,打印相应分数段,#include int main() char grade; printf(“Input the grade(A,B,C,D,E):“); scanf(“%c“, ,break的目的是终止switc

10、h语句的执行。如果没有break语句,则程序会从指定的case分支开始,并在该分支结束后继续执行下去。除非switch语句结束,后面的其他case分支或default分支中的语句都会得到执行,switch 分支示例二,根据输入的成绩等级,打印是否通过信息,#include int main() char grade; printf(“Input the grade(A,B,C,D,E):“); scanf(“%c“, ,如果逻辑上确实如此,则不同的case分支可以使用同一个语句组,这也许是特意不在某些case分支中使用break的唯一正当理由,3.4 循环结构,循环结构的含义 根据某一条件的判

11、断结果,反复执行某一处理块的过程 最基本的循环结构是当循环,进入循环结构,判断循环条件,如果循环条件的结果为真,则执行A处理块的操作,即循环一次,然后再次判断循环条件,当循环条件为假时,循环结束,while 循环,while 循环格式:while(表达式) 循环体 while 循环流程 先判断后执行:表达式为真时,执行一遍循环体(一次迭代),返回重新计算表达式的值以确定是否重复执行循环体;若表达式为假,则终止循环 为保证循环终止,循环体内应有能改变表达式值的语句,while 循环示例,使用 while 循环求两个正整数的最小公倍数,#include int main() int m, n, r

12、esult; printf(“Input two positive integers m, n:“); scanf(“%d,%d“, ,do-while 循环,do-while 循环格式:do 循环体 while(表达式); do-while 循环流程 先执行后判断:先执行一遍循环体(一次迭代),计算表达式的值,表达式为真时重复执行循环体,否则终止循环(循环体至少执行一次,这与while循环不同) 为保证循环终止,循环体内应有能改变表达式值的语句,do-while 循环示例,反复求两个正整数的最小公倍数,直到输入的两个数均为1时结束,#include int main() int m, n,

13、result; do printf(“Input two positive integers m, n:“); scanf(“%d,%d“, ,for 循环,for 循环格式 for(表达式1; 表达式2; 表达式3) 循环体 for 循环流程 先判断后执行:先执行表达式1(循环初始化),再计算表达式2以根据其结果决定是否执行一遍循环体(为真时执行),计算表达式3的值(循环再次“初始化”),返回重新计算表达式2的值以确定循环是否终止,for 循环示例一,计算,#include int main() int result, k; result = 0; / 累加器变量,设置初始值(本例设为0)

14、for( k = 1; k = 100; k+ ) / 循环计算 result += k * k; / 累加 printf(“The result: %dn“, result); return 0; ,三种循环结构的比较,三种循环结构可以互换使用 for 循环与 while 循环常见,do-while 循环少见 while 循环常用于不需要或很少需要初始化的场合 for 循环常用于需要简单初始化和通过递增递减运算控制循环体执行的场合 for 循环将所有循环控制因素都放在循环头部,循环结构最清晰 通过省略循环头部的一个或多个表达式,for 循环也可能非常复杂,for 循环示例二,程序读入一个字符

15、串,然后反向打印输出,#include #include int main( ) char s50, c; int i, j; printf(“Input a string: “); scanf(“%s“, s); for( i = 0, j = strlen(s) 1; i j; i+, j ) c = si; si = sj; sj = c; printf(“%sn“, s); return 0; ,for 循环示例三,打印九九乘法表,#include int main() int i, j, k; for( i = 1; i = 9; i+ ) for( j = i; j = 9; j+

16、 ) k = i * j; printf(“%d%d = %dt“, i, j, k); printf(“n“) ; return 0; ,如果一个循环体内包含另一个循环则称循环嵌套或多重循环,三种循环都可以嵌套,但嵌套时内外层循环不能发生交叉,发生嵌套时,内层循环经常需要使用外层循环的某些值作为控制条件,循环控制转移: break 语句,输出5行、每行10个随机数,若随机数大于20,000,本行输出结束,#include #include #include int main() int i, j, r; srand( time(NULL) ); for( i = 1; i 20000) br

17、eak; printf(“n“); return 0; ,srand():设置随机数种子的函数 time():获取时间的函数 rand():产生随机数的函数,break终止当前循环的执行,在存在循环嵌套的场合,它并不能终止外层循环的执行,循环控制转移: continue 语句,输入一串字符,以回车结束输入,程序统计并输出其中小写字母的个数,#include int main() char c; int num = 0; printf(“Enter a string: n“); while( (c = getchar() != n ) if(c 122) continue; / 非小写字母,本次

18、循环结束 num+; printf(“%dn“, num); return 0; ,continue终止的是当前循环的当前一次迭代,而不是整个循环,当前循环的下一次迭代仍会执行,结构化程序设计注意事项,要保证结构的完整性 不允许结构层次间的交叉!,要保证操作的完整性 一个基本结构就是一个完整的操作单元,程序只能从入口进出口出 程序最好不要有多入口多出口,尤其不能从外部进入循环或条件分支内部,3.5 结构化程序设计应用示例一,打印小于n的所有个位不等于9的素数,n的具体值由用户输入,要求分行输出,每行输出10个数,#include int main() int i, j, n, line = 0

19、; printf(“Please input n:“); scanf(“%d“, ,使用for循环,3.5 结构化程序设计应用示例一,#include int main() int i, j, n, line = 0; printf(“Please input n:“); scanf(“%d“, ,使用while循环,3.5 结构化程序设计应用示例二,百元买百鸡(穷举):已知公鸡每只5元,母鸡每只3元,小鸡1元3只,可买公鸡、母鸡、小鸡几只,#include int main() int x, y, z; for(x = 0; x = 100; x+) for(y = 0; y = 100;

20、y+) for(z = 0; z = 100; z+) if( x + y + z =100 ,设x、y、z分别表示可买的公鸡、母鸡、小鸡的个数,有不定方程组:,3.5 结构化程序设计应用示例二,百元买百鸡(穷举):已知公鸡每只5元,母鸡每只3元,小鸡1元3只,可买公鸡、母鸡、小鸡几只,#include int main() int x, y, z; for(x = 0; x = 20; x+) for(y = 0; y = 33; y+) for(z = 0; z = 100; z+) if( x + y + z =100 ,设x、y、z分别表示可买的公鸡、母鸡、小鸡的个数,有不定方程组:,

21、#include int main() int x, y, z; for(x = 0; x = 100; x+) for(y = 0; y = 100; y+) for(z = 0; z = 100; z+) if( x + y + z =100 ,3.5 结构化程序设计应用示例三,输出裴波那契数列前30项值(递推),#include int main() int n1, n2, n, count; n1 = 0; n2 = 1; printf(“%10d%10d“, n1, n2); for(count = 3; count = 30; count+) n = n1 + n2; printf

22、(“%10d“, n); if(count % 5 = 0) printf(“n“); / 控制每行输出5个数 n1 = n2; n2 = n; printf(“n“); ,3.5 结构化程序设计应用示例四,设计一个简单的菜单程序 运行时,首先显示一个菜单画面用以提示输入操作选择 操作员从菜单上选择一个操作(即输入相应的代码,例如1、2等),程序接收选择后调用相应的函数完成操作 假设系统提供select()、insert()、update()和del()函数,分别用以实现选择、插入、更新与删除等相应操作,3.5 结构化程序设计应用示例四,#include void insert(); void

23、 select(); void del(); void update(); int main() /* generate menu */ char op; printf(“n *“); /*生成菜单*/ printf(“n * Menu Options *“); printf(“n * 1. Insert *“); printf(“n * 2. Select *“); printf(“n * 3. Delete *“); printf(“n * 4. Update *“); printf(“n * 5. Exit *“); printf(“n *“);,3.5 结构化程序设计应用示例四,/* selection operation */ while(1) printf(“nPlease enter selection: “); scanf(“%d“, /* 退出循环 */ / 结束主函数,作 业,第71-72页:第二题(填空题) 第8、9、11小题 第72-73页:第三题(编程题) 第2、4小题,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1