关关雎鸠南邮C语言课件第4章.ppt
《关关雎鸠南邮C语言课件第4章.ppt》由会员分享,可在线阅读,更多相关《关关雎鸠南邮C语言课件第4章.ppt(46页珍藏版)》请在三一文库上搜索。
1、高级语言程序设计 *1 *2 第四章 程序流程控制 主讲: 计算机学院 朱立华 内容提要 n算法的基本概念以及表示方法,简单介绍流程图 nC程序的3种基本流程控制结构:顺序结构、选择结构( 也叫分支结构)、循环结构,每种结构的控制语句: if、switch控制选择结构 for、while、dowhile控制循环结构 break、continue、goto等语句的用法 循环嵌套程序的设计及运行过程 n一些常用算法的基本思想: 分段函数求解问题 判断一个整数是否为质数 求两个正整数的最大公约数 各种求和问题 掷骰子游戏的多种解法 求阶乘 打印规则的图形 穷举问题的多种求解方法 DateDate 3
2、 3 算法与语句 n算法(Algorithm)就是为解决一个具体问题而采取的 有限的操作步骤,算法通过语句来实现 n计算机算法分两类:数值运算算法、非数值运算算法 n程序=数据结构+算法 n算法的正确性衡量标准: 有穷性:算法包含有限步操作 确定性:每一步都应确定无歧义 有效性:每一步都应能有效执行且能得到确定的结果 0或多个输入: 程序允许无输入 1或多个输出:任何程序都必须有输出,哪怕是提示信息 解决求数值解的问题 解决需要用分析推理、逻 辑推理才能解决的问题 数据的描述和组织形式 对操作或行为的描述, 即操作步骤 DateDate 4 4 算法与语句 n常用的算法描述方法有:自然语言、传
3、统流程图、NS 流程图、伪代码等,这里只介绍传统流程图。 n例:求n!的算法思想: nn!=1*2*3*n n由于计算机执行乘法时每次只能求两个数相乘,因此 上面的公式在程序中必定需要通过反复相乘来实现。 n需要设定一个变量n,表明求多少的阶乘; n第二个变量,存当前累乘的结果; n第三个变量存当前将要与累乘器相乘的因子,并且该 因子的变化是从1到n每次增加1 n流程图如下页所示 DateDate 5 5 no 开始 n n#include /包含平方根函数sqrt的声明 nint main( ) n n double a,b,c,s,area; /定义5个double变量 n printf(
4、“Please input a,b,c:n”); /屏幕提示 scanf(“%lf%lf%lf“, /输入a,b,c的值 n s=(a+b+c)/2; /求周长的一半 n area=sqrt(s*(s-a)*(s-b)*(s-c); /求面积 n printf(“area=%fn“,area); /输出面积 n return 0; n 顺序结构 输入 3 4 5 输出area=6.000000 编程提示:存原始数据的变 量,用读入方式使其获得 的值更灵活,也可赋值, 但是通用性下降 编程提示:如果变量的值需要根据其他 变量或一定的计算规则计算出来,则 使用赋值语句而不能读入 问题1:可能会输入
5、负数 问题2:即使输入的都是正数, 未必能构成一个三角形 顺序结构无法解决需要作出判 断的问题! 动 态 演示 过 程 DateDate 9 9 n选择结构的特点:通过某一个或若干条件的约束,有选 择性地执行特定语句-在符合一定条件时,执行特定 操作;在不符合条件时,不执行操作或执行另外的操作 n选择结构使用的流程控制语句:if语句、switch语句 n优点:保证程序的健壮性、完备性 nifelse语句形式: n if (表达式) 语句块1 n else 语句块2 n执行过程:先计算表达式,若非0(真) n则执行语句块1;如果表达式为0(假) n则执行语句块2 选择结构 不平衡的ifelse
6、语句(单分支if) ifelse语句( 双分支if) 表达式可以是任何类型的 ,条件表达式和逻辑表达 式最常用 语句块通常用复合语 句实现,若复合语句内 只有一条语句,则一对 大括号可以不写 表达式 真假 语句块1 语句块2 不平衡的ifelse 语句(if语句) 不执行操作 DateDate1010 n程序4.1 求任意三角形的面积 n#include n#include /包含平方根函数sqrt的声明 nint main( ) n double a,b,c,s,area; /定义5个double变量 n printf(“Please input a,b,c:n”); /屏幕提示 scanf
7、(“%lf%lf%lf”, /输入a,b,c的值 n s=(a+b+c)/2; n area=sqrt(s*(s-a)*(s-b)*(s-c); /求面积 n printf(“area=%fn”,area); /输出面积 n n return 0; n 选择结构(if语句) 问题1:可能会输入负数 问题2:即使输入的都是正数, 未必能构成一个三角形 顺序结构无法解决需要作出判 断的问题! 程序4.2 改进程序4.1,在构成三角形时求面积,否则给提示信息 if (a0 此else分支不能省略,否则在不能 构成三角形时将没有任何输出, 就不是一个正确的算法了 动 态 演示 过 程 DateDate
8、1111 n程序4.3 生成50以内的两个随机数,比较大小,输出较大者及 两者之差的值。若第1个数大于第2个数,输出you are lucky! n#include n#include /含srand和rand函数的原型 n#include /含time函数的原型 nint main( ) nint a ,b ; /定义两个整型变量a和b nsrand(time(NULL); /调用当前系统时钟产生随机种子 a=rand()%50; /产生一个50以内的随机数赋给a nb=rand()%50; /产生另一个50以内的随机数赋给b nif(ab) /如果a大于b n printf(“the la
9、rger number is a:%dn”,a) ; /输出较大者 n printf(“a-b=%dn“,a-b); /输出a与b的差值 n else /如果a不大于b,即ab) printf(“you are lucky!n”); /if语句 nreturn 0; n 选择结构(if语句) 若删除此句,则每次产生的随 机数都是一样的,这是调用系 统时钟产生随机种子 上机运行观察结果 上机测试观察运行结果并分析: (1)删除srand(time(NULL); (2)删除else后的一对大括号 若删除此一对括号,则语句 printf(“b-a=%dn”,b-a);成为 一条不受条件控制的语句 动
10、 态 演示 过 程 DateDate1212 nifelse语句形式: if (表达式) 语句块1 else 语句块2 nif语句形式: if (表达式) 语句块1 n最常用的嵌套ifelse语句形式: if (表达式1) 语句块1 else if (表达式2) 语句块2 else 语句块n 选择结构(if语句) 在语句块处还可以嵌入if或 ifelse语句,形成形式多 样的嵌套if语句,以解决多 分支(=3)的处理问题 else总是与其前面与之最靠近的并且未与其它else 匹配过的if相对应; 每个else都代表了与其对应if完全相反的条件,编 程时应充分利用else所代表的条件简化程序 整
11、个嵌套的ifelse语句从 语法上仍为一条语句 DateDate1313 选择结构(if语句) n程序4.4 用嵌套if进行符号函数求解 n#include nint main( ) n int x,sign; n printf(“Please input x:“); n scanf(“%d“, n if (x0) n sign=1; n else n if (x=0) n sign=0; n else sign=-1; n printf(“x=%d, sign=%dn“,x,sign); n return 0; n 1 sign= 0 -1 /语句2处嵌入ifelse 此else代表的条件是
12、x=0) if (x0) sign=1; else sign=0; else sign=-1; 语句1处嵌入ifelse 此else代表的条件是x100| score= 90) grade=A; nelse if (score = 80) grade=B; n else if (score = 70) grade=C; nelse if (score = 60) grade=D; n else grade=E; nprintf(“%d-%cn”,score,grade); /输出百分成绩及等级 n n A 90score100 B 80score100| score= 90) grade=A;
13、 nelse if (score = 80) grade=B; n else if (score = 70) grade=C; nelse if (score = 60) grade=D; n else grade=E; nprintf(“%d-%cn”,score,grade); n n switch (score/10) /为减少常量的个数 case 10: case 9: grade=A; break; case 8: grade=B; break; case 7: grade=C; break; case 6: grade=D; break; case 5: case 4: case
14、3: case 2: case 1: case 0: grade=E; break; 选择结构(switch语句) 方法二:用switch语句实现百分制转五级分制 这些break都 不能省略 此break 可以省略 在VC+下运行程序观察结果,遗 憾:每次运行程序只能输入一个 成绩,一次运行无法输入多个百 分成绩进行转换! 动 态 演示 过 程 DateDate1717 n循环结构的特点:某些操作在一定条件约束下在程序中 可被重复执行,或者重复执行到满足一定的条件时停止 n循环结构使用的流程控制语句: for语句、while语句、dowhile语句; n辅助语句:break语句、continu
15、e语句 nfor语句形式: for(表达式1;表达式2;表达式3) 语句块 n执行过程见右边流程图 n注意:for语句中的3个表达式可以省略 1个或多个,最多3个都可省略,但是 分号不能省,且应保证执行结果不变,不能死循环 循环结构 当型循环 直到型循环 用于求初值, 只计算一次 用来作为控制循环的条件, 非0值则执行语句块;若为0 ,则结束for语句 语句块执行结束后自动执 行此表达式,然后再重新 计算表达式2就是循环体,通常用复合语 句,只能是一条语句 整个for语句在语法 上就是一条语句 假 表达式2 真 语句块 表达式1 表达式3 DateDate1818 循环结构(for语句) n程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 雎鸠 语言 课件
链接地址:https://www.31doc.com/p-2216237.html