资源描述
*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,*,*,单击此处编辑母版标题样式,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,*,*,单击此处编辑母版标题样式,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版标题样式,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,*,*,单击此处编辑母版标题样式,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,*,*,单击此处编辑母版标题样式,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版标题样式,*,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,*,*,单击此处编辑母版标题样式,*,*,单击此处编辑母版标题样式,*,*,单击此处编辑母版标题样式,C,语言程序设计,第,四,章 程序流程控制,2024/11/30,1,内容提要,算法,的基本概念以及表示方法,简单介绍流程图,C,程序的,3,种基本流程,控制结构:,顺序结构、选择结构(也叫分支结构)、循环结构,,每种结构的控制语句:,if,、,switch,控制选择结构,for,、,while,、,dowhile,控制循环结构,break,、,continue,、,goto,等,语句的用法,循环嵌套程序的设计及运行过程,一些常用算法的基本思想:,分段函数求解问题,判断一个整数是否为质数,求两个正整数的最大公约数,各种求和问题,掷骰子游戏的多种解法,求阶乘,打印规则的图形,穷举问题的多种求解方法,2024/11/30,2,算法与语句,算法,(,Algorithm,)就是为解决一个具体问题而采取的有限的操作步骤,算法通过,语句,来实现,计算机算法分两类:,数值运算算法,、,非数值运算算法,程序,=,数据结构,+,算法,算法的正确性衡量标准:,有穷性:,算法包含有限步操作,确定性:,每一步都应确定无歧义,有效性:,每一步都应能有效执行且能得到确定的结果,0,或多个输入,:,程序允许无输入,1,或多个输出:,任何程序都必须有输出,哪怕是提示信息,解决求数值解的问题,解决需要用分析推理、逻辑推理才能解决的问题,数据的描述和组织形式,对操作或行为的描述,即操作步骤,2024/11/30,3,算法与语句,常用的算法描述方法有:自然语言、,传统流程图,、,NS,流程图、伪代码等,这里只介绍传统流程图。,例:求,n!,的算法思想:,n!=1*2*3*n,由于计算机执行乘法时每次只能求两个数相乘,因此上面的公式在程序中必定需要通过,反复相乘,来实现。,需要设定一个变量,n,,表明求多少的阶乘;,第二个变量,,存当前累乘的结果;,第三个变量,存当前将要与累乘器相乘的因子,并且该因子的变化是从,1,到,n,每次增加,1,流程图如下页所示,2024/11/30,4,no,开始,n0?,输入,n,图,4.2,计算,n!,的传统流程图,fac,=1,i=1,fac,=,fac,*i,i=i+1,i=n?,yes,输出,fac,值,no,结束,输出错提示,yes,开始,结束框,输入,/,输出框,判,断,框,一般,处理框,循环,结构,3,种基本结构的,特点:单入口,,单出口,流程线,选择,结构,顺序结构,2024/11/30,5,C,语句分类,C,语言的语句有,五大类:,(1)9,种,控制语句,:这一类语句用于实现流程控制,选择结构和循环结构必须通过控制语句实现。,ifelse,语句,:是实现选择结构最常用的语句,switch,语句:,用于控制某些多分支的选择结构,for(),语句,:最常用最灵活的循环控制语句,当型循环,while(),语句,:循环结构最安全的控制语句,当型循环,dowhile,(),语句,:控制先执行后判断的直到型循环结构,continue,语句,:表示提前结束本次循环,忽略其后循环体中的其他语句,break,语句,:可用于,switch,语句,(,结束,switch),或循环体中,(,结束本层循环,),goto,语句,:流程跳转语句,很灵活,可实现各种结构,建议少用或不用,return,语句,:专门用于函数返回,被调函数执行到,return,就返回到调用点,(2),变量声明语句,:,用来定义变量,形如:,int,a,b,;,(3),表达式语句,:,C,语言中任何一个表达式最后加上分号构成表达式语句,,赋值语句和函数调用语句,是最常用的表达式语句,(4),复合语句,:,以一对大括号括起的,0,或多条语句,在语法上仍为一条语句,(5),空语句,:,只有一个分号构成的语句,表示什么也不做,2024/11/30,6,顺序结构,顺序结构的特点,:语句按顺序依次执行,不涉及到任何条件的判断。,顺序结构所使用的语句,:变量声明语句、读写函数调用语句、赋值语句、,return,语句等。无需用其他流程控制语句,优点,:结构简单易懂,缺点,:对程序的健壮性、完备性往往无法兼顾,例:,程序,4.1,从键盘上输入,a,,,b,,,c,的值,并以它们为三角形的三条边,求三角形的面积。,算法思想:,根据数学知识,设一个变量,s,用于求三角形周长的一半,即,s=(a+b+c)/2,,再利用一般三角形求面积的公式求解:,2024/11/30,7,程序,4.1,求任意三角形的面积,#include,#include,/,包含平方根函数,sqrt,的声明,int,main(),double,a,b,c,s,area,;,/,定义,5,个,double,变量,printf(“Please,input,a,b,c:n,”);,/,屏幕提示,scanf(%lf%lf%lf,&a,&b,&c,);,/,输入,a,b,c,的值,s=(a+b+c)/2;,/,求周长的一半,area=,sqrt(s,*(s-a)*(,s-b,)*(,s-c,);,/,求面积,printf(area,=%,fn,area,);,/,输出面积,return 0;,顺序结构,输入,3 4 5,输出,area=6.000000,编程提示,:存原始数据的变量,用读入方式使其获得的值更灵活,也可赋值,但是通用性下降,编程提示,:如果变量的值需要根据其他变量或一定的计算规则计算出来,则使用赋值语句而不能读入,问题,1,:,可能会输入负数,问题,2,:,即使输入的都是正数,未必能构成一个三角形,顺序结构,无法解决需要作出判断的问题!,2024/11/30,8,选择结构的特点,:通过某一个或若干条件的约束,有选择性地执行特定语句,-,在符合一定条件时,执行特定操作;在不符合条件时,,不执行操作,或,执行另外的操作,选择结构使用的流程控制语句,:,if,语句、,switch,语句,优点,:保证程序的健壮性、完备性,ifelse,语句形式,:,if,(,表达式,),语句块,1,else,语句块,2,执行过程,:,先计算,表达式,若,非,0(,真,),则执行语句,块,1,;,如果表达式为,0(,假,),则执行语句,块,2,选择结构,不平衡的,ifelse,语句,(,单分支,if,),ifelse,语句,(,双分支,if,),表达式可以是任何类型的,条件表达式和逻辑表达式最常用,语句块通常用复合语句实现,若复合语句内只有一条语句,则一对大括号可以不写,表达式,真,假,语句块,1,语句块,2,不平衡的,ifelse,语句,(,if,语句,),不执行操作,2024/11/30,9,程序,4.1,求任意三角形的面积,#include,#include,/,包含平方根函数,sqrt,的声明,int,main(),double,a,b,c,s,area,;,/,定义,5,个,double,变量,printf(“Please,input,a,b,c:n,”);,/,屏幕提示,scanf(“%lf%lf%lf”,&a,&b,&c,);,/,输入,a,b,c,的值,s=(a+b+c)/2;,area=,sqrt(s,*(s-a)*(,s-b,)*(,s-c,);,/,求面积,printf(“area,=%,fn”,area,);,/,输出面积,return 0;,选择结构,(if,语句,),问题,1,:,可能会输入负数,问题,2,:,即使输入的都是正数,未必能构成一个三角形,顺序结构,无法解决需要作出判断的问题!,程序,4.2,改进程序,4.1,,在构成三角形时求面积,否则给提示信息,if,(a0&b0&c0&a+b,c&a+c,b&b+c,a),else,printf(Error,input!n);,此,else,分支,不能省略,,否则在不能构成三角形时将没有任何输出,就不是一个正确的算法了,2024/11/30,10,程序,4.3,生成,50,以内的两个随机数,比较大小,输出较大者及两者之差的值。若第,1,个数大于第,2,个数,输出,you are lucky!,#include,#include,/,含,srand,和,rand,函数的原型,#include,/,含,time,函数的原型,int,main(),int,a,b;,/,定义两个整型变量,a,和,b,srand(time(NULL,);,/,调用当前系统时钟产生随机种子,a=rand()%50;,/,产生一个,50,以内的随机数赋给,a,b=rand()%50;,/,产生另一个,50,以内的随机数赋给,b,if(a,b),/,如果,a,大于,b,printf(“the,larger number is,a:%dn”,a,);,/,输出较大者,printf(a-b,=%,dn,a-b,);,/,输出,a,与,b,的差值,else,/,如果,a,不大于,b,即,ab),printf(“you,are lucky!n”);,/if,语句,return 0;,选择结构,(if,语句,),若删除此句,则每次产生的随机数都是一样的,这是调用系统时钟产生随机种子,上机运行观察结果,上机测试观察运行结果并分析:,(1),删除,srand(time(NULL,);,(2),删除,else,后的一对大括号,若删除此一对括号,则语句,printf(“b,-a=%,dn”,b,-a);,成为一条不受条件控制的语句,2024/11/30,11,ifelse,语句形式,:,if,(,表达式,),语句块,1,else,语句块,2,if,语句形式,:,if,(,表达式,),语句块,1,最常用的嵌套,ifelse,语句形式,:,if,(,表达式,1),语句块,1,else,if,(,表达式,2),语句块,2,else,语句块,n,选择结构,(if,语句,),在语句块处还可以嵌入,if,或,ifelse,语句,形成形式多,样的嵌套,if,语句,以解决多,分支,(,=3,),的处理问题,else,总是与其前面与之最靠近的并且未与其它,else,匹配过的,if,相对应;,每个,else,都代表了与其对应,if,完全相反的条件,编程时应充分利用,else,所代表的条件简化程序,整个嵌套的,ifelse,语句从语法上仍为一条语句,2024/11/30,12,选择结构,(if,语句,),程序,4.4,用嵌套,if,进行符号函数求解,#,include,int,main(),int,x,sign,;,printf(Please,input x:);,scanf(%d,&x,);,if,(x0),sign=1;,else,if,(
展开阅读全文