程序设计基础03

上传人:zw****58 文档编号:57219078 上传时间:2018-10-20 格式:PPT 页数:40 大小:505KB
返回 下载 相关 举报
程序设计基础03_第1页
第1页 / 共40页
程序设计基础03_第2页
第2页 / 共40页
程序设计基础03_第3页
第3页 / 共40页
程序设计基础03_第4页
第4页 / 共40页
程序设计基础03_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《程序设计基础03》由会员分享,可在线阅读,更多相关《程序设计基础03(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() in

5、t n, abs;printf(“Enter integer: ”);scanf(“%d”, ,语句格式 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)if(sal 50) if(sal = 0 ) / 解实

6、根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 );printf(“x1 = %f + %fin“, p, q);printf(“x2 = %f %fin“, p, q);return 0; ,switch 分支语法,计算过程 先计算表达式的值 依次与一组常量比较 若相同则执行该分支 否

7、则转向default分支 退出switch语句 说明 switch后面的表达式必须为整型、字符型或枚举型 case后面必须为常量表达式,则各个case值必须不同 如果没有default子句,且没有case子句匹配,则不执行 case分支中的语句可以有多条,不需要花括号,switch( 表达式 ) case 常量表达式1: 语句组1case 常量表达式2: 语句组2case 常量表达式n: 语句组ndefault: 语句组 ,switch 分支流程图,switch 分支示例一,根据输入的成绩等级,打印相应分数段,#include int main() char grade; printf(“In

8、put 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的目的是终止switch语句的执行。如果没有break语句,则程序会从指定的case分支开始,并在该分支结束后继续执行下去。除非switch语句结束,否则后面的其他case分支或default分支中的语句都会得到执行,switch 分支示例二,根据输入的成绩等级,打印是否通过

9、信息,#include int main() char grade; printf(“Input the grade(A,B,C,D,E):“); scanf(“%c“, ,如果逻辑上确实如此,则不同的case分支可以使用同一个语句组,这也许是特意不在某些case分支中使用break的唯一正当理由,3.4 循环结构,循环结构的含义 根据某一条件的判断结果,反复执行某一处理块的过程 最基本的循环结构是当循环,进入循环结构,判断循环条件,如果循环条件的结果为真,则执行A处理块的操作,即循环一次,然后再次判断循环条件,当循环条件为假时,循环结束,while 循环,while 循环格式:while(表

10、达式) 循环体 while 循环流程 先判断后执行:表达式为真时,执行一遍循环体(一次迭代),返回重新计算表达式的值以确定是否重复执行循环体;若表达式为假,则终止循环 为保证循环终止,循环体内应有能改变表达式值的语句,while 循环示例,使用 while 循环求两个正整数的最小公倍数,#include int main() int m, n, result;printf(“Input two positive integers m, n:“);scanf(“%d,%d“, ,do-while 循环,do-while 循环格式:do 循环体 while(表达式); do-while 循环流程

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

12、先执行表达式1(循环初始化),再计算表达式2以根据其结果决定是否执行一遍循环体(为真时执行),计算表达式3的值(循环再次“初始化”),返回重新计算表达式2的值以确定循环是否终止,for 循环示例一,计算,#include int main() int result, k;result = 0; / 累加器变量,设置初始值(本例设为0)for( k = 1; k = 100; k+ ) / 循环计算result += k * k; / 累加printf(“The result: %dn“, result);return 0; ,三种循环结构的比较,三种循环结构可以互换使用 for 循环与 whi

13、le 循环常见,do-while 循环少见 while 循环常用于不需要或很少需要初始化的场合 for 循环常用于需要简单初始化和通过递增递减运算控制循环体执行的场合 for 循环将所有循环控制因素都放在循环头部,循环结构最清晰 通过省略循环头部的一个或多个表达式,for 循环也可能非常复杂,for 循环示例二,程序读入一个字符串,然后反向打印输出,#include #include int main( ) char s50, c;int i, j;printf(“Input a string: “); scanf(“%s“, s); for( i = 0, j = strlen(s) 1;

14、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+ )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) break; printf(“n“); return 0; ,srand():设置随机数种子的函数 time():获取时间的函数 rand():产生随机数的函数,break终止当前循环的执行,在存在循环嵌套的场合,它并不能终止外层循环的执行,

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

当前位置:首页 > 高等教育 > 其它相关文档

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