资源预览内容
第1页 / 共59页
第2页 / 共59页
第3页 / 共59页
第4页 / 共59页
第5页 / 共59页
第6页 / 共59页
第7页 / 共59页
第8页 / 共59页
第9页 / 共59页
第10页 / 共59页
亲,该文档总共59页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
共 37页 第 1 页,顺序结构的程序设计 选择结构程序 循环控制 几种循环控制结构程序设计 break语句和continue语句,第五章 用C语言进行结构化程序设计,共 37页 第 2 页,5.1 顺序结构的程序设计,A,B,int main(void ) int nA,nB,nC; nA=5; nB=6; nC=nA+nB; printf(“nC is %d“,nC); return 0; /*End of main()*/,顺序结构是结构化程序的基本结构。本质上,问题求解过程都是顺序结构的。顺序结构下程序将按照语句或模块出现的先后依次执行,语句和语句之间、模块和模块之间的先后决定了其执行的顺序。 每一个模块都有一个数据入口和一个数据出口。,共 37页 第 3 页,声明变量fA,fB,fC,fS,fP,给出输入提示信息“Input(fA,fB,fC): “,计算fP=(fA+fB+fC)/2,计算面积fS,输出三角形的面积值fS,假设三边a,b,c能构成三角形。半周长p=(a+b+c)/2,面积s= 。,例5-1 求给定三边的三角形的面积。,格式化输入三边fA,fB,fC的值,N-S流程图:,分析:,共 37页 第 4 页,#include #include int main(void) float fA,fB,fC,fS,fP; printf(“Input(fA,fB,fC):“); scanf(“%f,%f,%f“, /*End of main()*/,运行结果如下:,Input(fA,fB,fC):,3,4,5,fS=6.000000,格式化 输入,程序代码:,改进与思考:如何保证边a,b,c一定构成三角形?,共 37页 第 5 页,例5-3 输入无符号整数u_a和带符号整数n_b,分别以10#,8#,16#和不带符号的10#进制整数输出。,分析:,简单的IO过程。,N-S流程图:,输入整数u_a和n_b,格式化输出u_a,格式化输出n_b,共 37页 第 6 页,#include int main(void) unsigned int u_a; int n_b; printf(“Please input two integers (u_a,n_b):“); scanf(“%u,%d“, /*End of main()*/,程序代码:,运行结果如下:,Please input two integers(u_a,n_b):,65535,-2,n_b=-2,177776,fffe,65534,u_a=-1,177777,ffff,65535,能不能从源 代码中提炼 出流程图呢?,输入整数u_a和n_b,格式化输出u_a,格式化输出n_b,共 37页 第 7 页,对例5-1求三角形面积问题,考虑三边能否构成三角形时需判断。,5.2 选择结构,对仅用顺序结构无法完成的一些逻辑判断与处理过程,C语言中提供了根据不同条件值分别选择相应的程序代码去执行的机制。即选择结构机制。,考虑如下问题: 求分段函数的值: 任意输入三个数,输出最大者。,怎么解决这 类问题呢?,共 37页 第 8 页,选择结构分类,二分支选择结构,多分支选择结构,用什么语句实现?,自然语言:如果 那么 否则 C语言: 选择(分支)语句,共 37页 第 9 页,用if语句设计选择结构程序,if语句构成的选择结构是C语言的三种基本结构之一。用来确定给定的条件是否满足,所含条件一般是关系表达式或逻辑运算表达式。,if语句的缺省形式 if语句的标准形式 else if语句 if语句的嵌套,本节 重点,共 37页 第 10 页,if (条件表达式) 语句组1 ,语句组2,语句组1,语句组2,Yes,No,条件?,功能:若为表达式的值非0,执行语句组1。否则,跳过语句组1继续执行语句组2。,/*输出不及格的成绩*/ int main(void) int nScore; scanf(“%d“, return 0; /*End of main()*/,条件表达式,语句组1,语句组2,1. 最简单的if语句,格式:,整个条件表达式必须用圆括号对()括起来且不可省略; 语句组2不属于if语句范围; 语句组1只有条语句时,花括号对可以省略; 条件表达式可以是任何类型的表达式; 要注意条件表达式后直接跟分号的情形,它表明表达式成立时执行空语句。,共 37页 第 11 页,(1) 设max=第一个数; (2) max与第二个数比较,如果max小于第二个数,则max=第二个数; (3) 比较max与第三个数,max小于第三个则max=第三个数; (4) 输出max。,例5-6 求三个数的最大者。,分析:,共 37页 第 12 页,int main(void) float val_1,val_2,val_3,fMax; printf(“Please input 3 values (val_1,val_2,val_3):“); scanf(“%f,%f,%f“, /*End of main()*/,程序代码:,共 37页 第 13 页,if (表达式) 语句组1 else 语句组2 语句组3, if (nScore60) printf(“及格n“); else printf(“不及格n“); ,2. 标准格式ifelse,格式:,功能:表达式值非0时执行语句组1,否则执行语句组2。,语句组1,语句组2,Yes,语句组3,No,条件?,语句组1,语句组2,语句组3,语句组3不属于if语句的语句组。它只有在语句组1或语句组2执行完后才可能被执行; 语句组1或语句组2只有条语句时,对应的花括号对可以省略。,共 37页 第 14 页,#include int main(void) float fA,fB; printf(“input two numbers:“); scanf(“%f,%f“, /*End of main()*/,只有一个语句时,可以省略,例5-7(a) 对两个实数按由小到大次序输出。,共 37页 第 15 页,#include int main(void) float fA,fB,fC,fTemp; printf(“input three numbersn“); scanf(“%f,%f,%f“, /*End of main()*/,去掉红色“,程序的执行情况如何?,例5-7(b) 对输入的三个数由小到大输出。,共 37页 第 16 页,例5-9 编写程序判定输入年份是否闰年。,分析:,#include int main(void) unsigned uYear,nOk; /*nOk is a flag*/ printf(“Please input year number:n“); scanf(“%u“, /*End of main()*/,共 37页 第 17 页,多分支,3. 多分支的 i f 结构(else if语句),if (表达式1) 语句组1 else if (表达式2) 语句组2 else if (表达式3) 语句组3 else 语句组n 语句组n+1,语句组n+1,无论是if还是ifelse都只能进行两种选择。多选一时表达不方便,为此,C语言提供了else if语句。,格式:,语句组n+1不属于else if语句的语句组; 所有else if分支的条件表达式相互排斥或不相容。,共 37页 第 18 页,例:从键盘输入一个正整数,判断它是几位数。,怎么判断?,可以根据数的大小范围来确定: 个位数大于等于0小于10; 两位数应该大于等于10小于100; 三位数应该大于等于100小于1000; 四位数应该大于等于1000小于10000; ,多分支的判断,分析:,#include #include int main(void ) int num; scanf(“%d“, /*End of main()*/,共 37页 第 19 页,例5-10 试编程实现如下分段函数的求值问题:,#include int main(void) float x; printf(“Please input xs value: “); scanf(“%f“, /*End of main()*/,问题分析:,共 37页 第 20 页,4. if语句的嵌套,例如:if (表达式1) if (表达式2) 语句组1 else 语句组2 else if (表达式3) 语句组3 else 语句组4,判断表达式1的值,若为非0,再判断表达式2的值,非0执行语句组1,否则执行语句组2。若表达式1的值为0,再判断表达式3的值,非0执行语句组3,否则执行语句组4。,功能:,共 37页 第 21 页,if (表达式1) if (表达式2) if (表达式3) ,if (表达式1) if (表达式2) else if (表达式3) ,多个if语句结构之间的关系,交叉关系,嵌套关系,平行关系,if (表达式1) 表达式1的语句组1 if (表达式2) 表达式2的语句组1 else 表达式1的语句组2 else 表达式2的语句组2 ,共 37页 第 22 页,就近匹配或由(嵌套层的)内部向外部顺序匹配。else总是先与同层最近的if匹配。书写不当会造成逻辑上的错误。,if语句的匹配原则,if (条件1) if (条件2) 语句组 else if (条件3) 语句组2 else 语句组3,if (条件1) if (条件2) 语句组 else if (条件3) 语句组2 else 语句组3,if (条件1) if (条件2) 语句组 else if (条件3) 语句组2 else 语句组3,三个表达的 意思相同吗?,共 37页 第 23 页,int main(void) int nA=5,nB=1; if (nA+5) if (nA+5) nB=2; else if (nA+5) nB=3; else nB=4; printf(“%d“,nB); return 0; /*End of main()*/,嵌套,else,if,if,else,else,else,else,if,if,if,例题,课外作业:请绘制这两个例子的流程图。,共 37页 第 24 页,if中的条件表达式必须用()括住,且在括号外部没有分号; 2. if或else子句后面的语句均有分号; else是if语句的子句,不可单独使用; 当if或else子句后是多个执行语句构成的语句组时(复合语句),必须用括起来,否则各子句均只能管到其后第一个分号处; 5. if或else 子句后只接一单个分号时,应把之作为空语句处理。,有关if语句使用的几点说明:,共 37页 第 25 页,格式: switch(整型或字符型表达式) case 常量表达式1: 语句组1 case 常量表达式2: 语句组2 case 常量表达式n: 语句组n default: 语句组n+1 ,switch与else if 的区别何在?,switch语句,1. switch 语句的基本语法和执行逻辑,功能:先计算表达式值,判断此值是否与某个常量表达式的值匹配,如果有,控制转向其后相应的语句组;若无,执行default语句组。,都属于多分支选择控制结构。else if用于多条件并列选择,要求各分支条
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号