4控制结构.ppt
西北农林科技大学课堂讲授内容课堂讲授内容第一章第一章绪论绪论第二章第二章算法与流程图算法与流程图第三章第三章数据类型、运算符和表达式数据类型、运算符和表达式第四章第四章程序的控制结构程序的控制结构第五章第五章函数函数第六章第六章数组数组第七章第七章指针指针第八章第八章结构体结构体第九章第九章文件操作文件操作西北农林科技大学第四章第四章程序的控制结构程序的控制结构1、三种基本结构、三种基本结构2、选择结构、选择结构3、循环结构、循环结构4、流程的转移控制、流程的转移控制西北农林科技大学1、三种基本结构、三种基本结构 顺序结构、选择结构、循环结构顺序结构、选择结构、循环结构顺序结构、选择结构、循环结构顺序结构、选择结构、循环结构 已经证明,任何程序均可用这三种结构描述。已经证明,任何程序均可用这三种结构描述。已经证明,任何程序均可用这三种结构描述。已经证明,任何程序均可用这三种结构描述。西北农林科技大学1、三种基本结构、三种基本结构 结构化程序设计的基础。结构化程序设计的基础。结构化程序设计的基础。结构化程序设计的基础。结构化程序设计(结构化程序设计(结构化程序设计(结构化程序设计(StructuredprogrammingStructuredprogramming)是)是)是)是一种编程范型。它采用子程序、语句块、一种编程范型。它采用子程序、语句块、一种编程范型。它采用子程序、语句块、一种编程范型。它采用子程序、语句块、forfor循环循环循环循环以及以及以及以及whilewhile循环等结构代替传统的循环等结构代替传统的循环等结构代替传统的循环等结构代替传统的gotogoto等结构,以等结构,以等结构,以等结构,以提高计算机程序的明晰性、质量以及开发效率,便提高计算机程序的明晰性、质量以及开发效率,便提高计算机程序的明晰性、质量以及开发效率,便提高计算机程序的明晰性、质量以及开发效率,便于跟踪与维护。于跟踪与维护。于跟踪与维护。于跟踪与维护。西北农林科技大学1、三种基本结构、三种基本结构 特点特点 只有一个入口;只有一个入口;只有一个入口;只有一个入口;只有一个出口;只有一个出口;只有一个出口;只有一个出口;无死语句,即不存在永远都执行不到的语句;无死语句,即不存在永远都执行不到的语句;无死语句,即不存在永远都执行不到的语句;无死语句,即不存在永远都执行不到的语句;无死循环,即不存在永远都执行不完的循环。无死循环,即不存在永远都执行不完的循环。无死循环,即不存在永远都执行不完的循环。无死循环,即不存在永远都执行不完的循环。西北农林科技大学2、选择结构、选择结构2.1逻辑表达式逻辑表达式2.2if语句语句2.3switch语句语句西北农林科技大学2.1逻辑表达式逻辑表达式 关系运算符关系运算符,=,=,!=逻逻辑运算符辑运算符!,&,|注意:注意:注意:注意:(1 1)不能使用)不能使用)不能使用)不能使用、,符号符号符号符号(2 2)=与与与与=不一样不一样不一样不一样(3 3)ABCABC与与与与(AB&BC)(AB&BC)有区别有区别有区别有区别(4 4)短路计算:)短路计算:)短路计算:)短路计算:(i!=0)&(i!=0)&(j/i0)(j/i0)西北农林科技大学2.2if语句语句2.2.1基本基本if语句语句2.2.2else子句子句2.2.3级联式级联式if语句语句2.2.4悬空悬空else问题问题西北农林科技大学2.2.1基本基本if语句语句 通过测试表达式的值执行不同的语句块通过测试表达式的值执行不同的语句块 格式格式(1)if(表达式表达式)语句;语句;(2)if(表达式表达式)语句语句1;语句语句2;语句语句n;if(i=0&i=0&in)if(i=n)if(i=n)if(i=0)if(i=0)不能写成不能写成不能写成不能写成 if(i=0)if(i=0)floateps=1.0e-6;if(abs(f)eps)floateps=1.0e-6;if(abs(f)B)if(AB)if(AC)printf(“%d”,A);if(AC)printf(“%d”,A);elseprintf(“%d”,C);elseprintf(“%d”,C);elseelse if(CB)printf(“%d”,C);if(CB)printf(“%d”,C);elseprintf(“%d”,B);elseprintf(“%d”,B);西北农林科技大学2.2.3级联式级联式if语句语句 格式格式if(if(表达式表达式表达式表达式1)1)语句块语句块语句块语句块1;1;elseifelseif语句块语句块语句块语句块2;2;elseelse语句块语句块语句块语句块3;3;西北农林科技大学2.2.3级联式级联式if语句语句 例例2-3:BMI指数。指数。体质指数体质指数BMI=体重体重(kg)/身高身高(m)2if(BMI20)if(BMI20)elseif(BMI25)elseif(BMI25)elseelse 男性男性女性女性过轻过轻203534西北农林科技大学2.2.4悬空悬空else语句语句 else语句与最近的语句与最近的if语句配对语句配对 采用括号可避免上述问题采用括号可避免上述问题if(y!=0)if(y!=0)if(x!=0)if(x!=0)result=x/y;result=x/y;elseelseprintf(Error:yisequalto0n);printf(Error:yisequalto0n);if(y!=0)if(y!=0)if(x!=0)if(x!=0)result=x/y;result=x/y;elseelseprintf(Error:yisequalto0n);printf(Error:yisequalto0n);西北农林科技大学2.3switch语句语句 多路选择语句多路选择语句switch(表达式表达式)case常数常数1:语句序列语句序列1;break;case常数常数2:语句序列语句序列2;break;default:语句序列语句序列n;break;注意:注意:注意:注意:(1 1)表达式计算的值必须为整型或)表达式计算的值必须为整型或)表达式计算的值必须为整型或)表达式计算的值必须为整型或字符型;字符型;字符型;字符型;(2 2)breakbreak语句容易漏写。语句容易漏写。语句容易漏写。语句容易漏写。西北农林科技大学2.3switch语句语句 与与if语句的区别语句的区别(1)switch语句比语句比if语句流程更清晰语句流程更清晰(2)对于连续区间判断易采用)对于连续区间判断易采用if语句语句(3)对于整数或字符对应的离散数据易采用)对于整数或字符对应的离散数据易采用switch语句语句(4)switch语句效率可能更高语句效率可能更高西北农林科技大学例例2-4:简易计算器:简易计算器 编程设计一个简单的计算器程序,要求根据编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:用户从键盘输入的表达式:操作数操作数1运算符运算符op操作数操作数2计算表达式的值,指定的运算符为加(计算表达式的值,指定的运算符为加(+)、)、减(减(-)、乘()、乘(*)、除()、除(/)。)。西北农林科技大学例例2-5:计算某年某月对应天数:计算某年某月对应天数 输入年份和月份信息,编程实现自动输出该输入年份和月份信息,编程实现自动输出该月对应天数。月对应天数。西北农林科技大学3、循环结构、循环结构3.1while循环循环3.2for循环循环3.3dowhile循环循环3.4三种循环的选择三种循环的选择3.5循环嵌套循环嵌套西北农林科技大学3.1while循环循环 语法语法while(表达式表达式)语句块;语句块;当表达式的值非当表达式的值非0,重复执行语句块。,重复执行语句块。注意:注意:注意:注意:while(while(表达式表达式表达式表达式)后面没有后面没有后面没有后面没有“;”;”西北农林科技大学例例3-1:求:求1+1/2+1/3+1/4+1/100inti=1,n=100;doublesum=0;while(i=n)sum+=1.0/i;i+;西北农林科技大学例例3-2:辗转相除法求最大公约数:辗转相除法求最大公约数 算法思想:算法思想:84,24s1:84%24=12s2:24%12=012即为最大公约数即为最大公约数西北农林科技大学例例3-2:辗转相除法求最大公约数:辗转相除法求最大公约数 算法思想:算法思想:算法思想:算法思想:输入输入输入输入m,nm,nr=1;r=1;while(r!=0)while(r!=0)r=m%n;r=m%n;m=n,n=r;m=n,n=r;输出输出输出输出mm西北农林科技大学例例3-3:判断一个正整数是否为质数:判断一个正整数是否为质数inti=2,n;scanf(“%d”,&n);while(i*in)printf(“Primenumbern”);西北农林科技大学3.2for循环循环 语法语法for(表达式表达式1;表达式表达式2;表达式表达式3)语句块;语句块;当表达式当表达式2的值非的值非0,重复执行语句块。,重复执行语句块。注意:注意:注意:注意:for()for()后面没有后面没有后面没有后面没有“;”;”西北农林科技大学3.2for循环循环 等价于:等价于:表达式表达式1;while(表达式表达式2)语句块语句块;表达式表达式3;西北农林科技大学例例3-5:倒计时:倒计时inti;for(i=10;i=0;i-)printf(attttt%dtr,i);Sleep(1000);西北农林科技大学例例3-6:求:求1+1/2+1/3+1/4+1/100inti,n=100;doublesum=0;for(i=1;i=n;i+)sum+=1.0/i;西北农林科技大学3.3do.while循环循环 语法语法do语句块;语句块;while(表达式表达式);当表达式的值非当表达式的值非0,重复执行语句块。,重复执行语句块。西北农林科技大学例例3-7:输入合法性检查:输入合法性检查 输出某年某月对应天数,要求输出某年某月对应天数,要求1000年份年份3000、0月份月份13。doprintf(“Inputayear:”);scanf(“%d”,&year);while(year=3000);西北农林科技大学3.4三种循环的选择三种循环的选择 如果循环次数已知,一般用如果循环次数已知,一般用for 如果循环次数未知,一般用如果循环次数未知,一般用while 如果循环体至少要执行一次,一般用如果循环体至少要执行一次,一般用do-while西北农林科技大学死循环死循环 永远不会退出的循环为死循环永远不会退出的循环为死循环 forfor(;);(;);whilewhile(1);(1);dodo whilewhile(1);(1);西北农林科技大学3.5循环嵌套循环嵌套 循环体中有循环循环体中有循环 注意缩进和变量的命名注意缩进和变量的命名for(i=1;i=9;i+)for(j=1;j=i;j+)k=i*j;西北农林科技大学例例3-8:百钱买百鸡问题:百钱买百鸡问题 中国古代数学家张丘建在他的中国古代数学家张丘建在他的算经算经中提中提出了著名的出了著名的“百钱买百鸡问题百钱买百鸡问题”:鸡翁一,:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?百钱买百鸡,问翁、母、雏各几何?5x+3y+z/3=100 x+y+z=100西北农林科技大学例例3-8:百钱买百鸡问题:百钱买百鸡问题for(x=1;x20;x+)for(y=1;y33;y+)if(3*(100-5*x-3*y)=(100-x-y)printf(“%d%d%dn”,x,y,100-x-y);西北农林科技大学4.流程的转移控制流程的转移控制 break continue goto return exit()西北农林科技大学4.流程的转移控制流程的转移控制 break:跳出当层循环:跳出当层循环 continue:跳出当次循环,继续执行本层循:跳出当次循环,继续执行本层循环的下一次环的下一次intsum=0;intsum=0;for(inti=0;i3;i+)for(inti=0;i3;i+)for(intj=0;j3;j+)for(intj=0;j3;j+)if(1=j)if(1=j)breakbreak;sum+=3*i+j;sum+=3*i+j;printf(“%d”,sum);printf(“%d”,sum);intsum=0;intsum=0;for(inti=0;i3;i+)for(inti=0;i3;i+)for(intj=0;j3;for(intj=0;j3;j+)j+)if(1=j)if(1=j)continuecontinue;sum+=3*i+j;sum+=3*i+j;printf(“%d”,sum);printf(“%d”,sum);西北农林科技大学4.流程的转移控制流程的转移控制 goto:可从多重循环中一次性跳出:可从多重循环中一次性跳出 原则:少用或不用(违背结构化程序设计思原则:少用或不用(违背结构化程序设计思想)想)intsum=0;intsum=0;for(inti=0;i3;i+)for(inti=0;i3;i+)for(intj=0;j3;j+)for(intj=0;j3;j+)if(1=j)if(1=j)gotolabel1gotolabel1;sum+=3*i+j;sum+=3*i+j;label1label1:printf(“%d”,sum);:printf(“%d”,sum);西北农林科技大学作业作业(1)采用)采用for循环结构输出循环结构输出100以内的所有质数;以内的所有质数;(2)输入一个正数)输入一个正数x,采用牛顿法求解,采用牛顿法求解x1/3。西北农林科技大学本章小结本章小结(1)结构化程序设计)结构化程序设计(2)if.else.switch()case:break;(3)whilefordowhile(4)break,continue,goto