您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 《C语言程序设计教程》
《C语言程序设计教程》HuanghuaiUniversityDepartmentofComputerScience主讲:方志刚黄淮学院计算机科学系高等教育出版社谭浩强张基温等编著第三章C程序的流程设计•§1算法•§2C语句概述•§3选择结构程序设计–§3.1双分支结构(if-else)–§3.1~3.2多分支结构(elseif、switch)•§4循环结构程序设计2学时2学时本节4学时§1算法程序算法数据结构=+菜谱加工方法加工原料=+数据的类型和组织形式解决问题的方法和步骤每件事都需要事先设计出方法步骤。如:春节回家(收拾行李、买车票、按时乘车、到站下车、乘公交车回家)程序算法数据结构=+菜谱加工方法加工原料=+数据的类型和组织形式解决问题的方法和步骤一、算法的性质与组成要素•有穷性:算法是一个有穷动作序列,不能是无限的。•确定性:每一步的含义应唯一、明确,不能有歧义性。•有序性:算法只能有一个起始动作,每个动作仅有一个后继动作。•有0个或多个输入,有1个或多个输出:没有输出的算法没有意义。•操作:算术运算、关系运算、逻辑运算、函数运算、位运算、I/O操作等。•控制结构:控制算法各操作的执行顺序(不同顺序会得到不同结果)。结构化程序设计方法要求:一个程序只能由三种基本控制结构组成:顺序结构:算按书写顺序执行。选择结构:根据判断选择执行路径。循环结构:将一条或多条语句重复执行多次。性质组成要素二、算法的描述不够直观1、自然语言例如:求n!(1)输入n的值;(2)若n=0,则f=1,结束;否则:①f=1,i=1②f*i→f,即f=f*i③i+1→i即i=i+1④若i=n则返回②,否则结束。(3)f为所求。三种基本程序结构ABPABYNPAYNPAYNPAYN顺序结构分支结构(选择结构)循环结构当(while)型循环结构直到(untile)型循环结构P57图3.1常用的流程图符号起始框输出输出判断框处理框流程线连接点注释框2、传统流程图流程线的无限制使用,会导致程序无序跳转,造成难以理解。因此,规定使用三种基本程序结构组成算法。其共同特点是:①只有一个入口和一个出口②结构内每部分都有机会被执行,不存在死循环。(1)输入n的值;(2)若n=0,则f=1,结束;否则:①f=1,i=1②f*i→f,即f=f*i③i+1→i即i=i+1④若i=n则返回②,否则结束。(3)f为所求。自然语言开始i=nf=1,i=1结束i=i+1输出ff=f*iYNn=0YN输入nP59图3.4:求n!3、结构化流程图(N-S图)P成立不成立ABAB当P成立时A直到P成立为止A顺序结构分支结构(选择结构)当(while)型循环结构直到(untile)型循环结构输入nYn==0Nf=1f=1i=1f=f*ii=i+1i=n输出fi=nf=1,i=1i=i+1输出ff=f*iYNn=0YN输入nP59图3.6N-S图的三种基本结构P60图3.7:求n!4、问题分析图(PAD图)顺序结构分支结构循环结构P60图3.8PAD图的三种基本结构从上向下表示执行顺序从左到右表示层次关系ABPAB当PAn==0返回1f=1i=1当i=nf=f*ii=i+1返回f值P60图3.9:求n!5、伪代码表示用介于自然语言和计算机语言之间的文字和符号描述算法。beginifn=0f=1else{f=1i=1{f=f*ii=i+1}while(i=n)}printfend例:求n!的伪代码表示main(){intn,f,i;scanf(“%d”,&n);if(n==0)f=1;else{f=1;i=1;do{f=f*i;i=i+1;}while(i=n)}printf(“%d\n”,f);}求n!的程序代码:三、结构化程序设计方法基本思路结构化编码模块化设计自顶向下逐步细化从大问题分解到小问题模块是根据功能划分的部分用结构化语言表示算法课后阅读P61例3.1、例3.2§2C语句概述C语句流程控制语句流程控制语句选择结构(条件语句)双分支结构多分支结构if()…else语句elseif语句switch语句循环结构while()…语句do…while()语句for()…语句流程转向语句条件转向语句中止循环或switch语句:break跳过其后语句返回循环开始:continue函数返回语句:return()无条件转向语句goto语句表达式语句简单表达式语句赋值语句:赋值表达式;函数调用语句:函数名(实参);空语句:;复合表达式语句逗号表达式;基本语句复合语句用{}括起来的一组语句表达式;(分程序)P68如:a=3、i++、x+y、i=i+1是表达式a=3;i++;x+y;i=i+1;是语句if((a=b)0)t=a;(a=b是赋值表达式)不能写为:if((a=b;)0)t=a;(a=b;是赋值语句)一、表达式语句表达式语句简单表达式语句赋值语句:赋值表达式;函数调用语句:函数名(实参);空语句:;复合表达式语句逗号表达式;表达式;表达式加上分号可以构成一条语句是C语言的特色。二、流程控制语句流程控制语句流程控制语句选择结构(条件语句)双分支结构多分支结构if()…else语句elseif语句switch语句循环结构while()…语句do…while()语句for()…语句流程转向语句条件转向语句无条件转向语句goto语句中止循环或switch语句:break跳过其后语句返回循环开始:continue函数返回语句:return()while(){……break;……}……break;while(){……continue;……}……continue;……gotoer;……er………………goto标号;三、复合语句1、复合语句是用{}括起来的一组语句,相当于一个语句。2、复合语句中可包含复合语句。3、复合语句又称为分程序。在复合语句中可以定义变量,这些变量只在分程序中有效。四、停止函数exit1、功能:立即停止当前程序运行,退回到操作系统状态。2、参数:为int型。参数为0:属正常停止;为其它值:参数即为造成停止的错误类型。3、使用exit()函数,应在程序前使用:#include“stdio.h”main(){inta;……{intb;b=3;printf(“%d\n”,a+b);}……}§3选择结构程序一、if语句的三种结构选择结构(条件语句)双分支结构多分支结构if()…else语句elseif语句switch语句if(条件)语句1;(1)不平衡结构if(条件)语句1;else语句2;(2)平衡结构if(条件1)语句1;elseif(条件2)语句2;elseif(条件3)语句3……else语句n;(3)elseif结构1、条件可以是关系表达式、逻辑表达式、算术表达式(非0即真)2、else前面的语句带分号,但整个if语句并未结束。勿认为else是一条语句,else子句不能单独使用,它必须与if配对使用。3、if和else后的语句如果是多条语句时,应用{}括起来构成一个复合语句。说明x0是否|x|=-x|x|=xP69例3:求一个数的绝对值。main(){doublea,abstr(doublex);printf(“Enterrealnumbera:”);scanf(“%lf”,&a);printf(“abs(%lf)=%lf\n”,a,absr(a));}doubleabstr(doublex){if(x0.0)x=-x;elsex=x;return(x);}doubleabstr(doublex){if(x0.0)x=-x;return(x);}平衡If语句不平衡If语句main(){inta,b,x;scanf(“%d%d”,&a,&b);if(b0)x=a+b;printf(“x=%d\n”,x);if(b0)x=a-b;printf(“x=%d\n”,x);}P15习题8:求a+|b|的值。if(b0)x=a+b;elsex=a-b;printf(“x=%d\n”,x);{}{}P70例4:求三数中的最大数。main(){floata,b,c,m;floatf(floatx,floaty,floatz);printf(“Enter3realnumbera,b,c:”);scanf(“%f%f%f”,&a,&b,&c);m=f(a,b,c);printf(“Themaxis%f\n”,m);}floatf(floatx,floaty,floatz){floatmax=x;if(zy)if(zx)max=z;elseif(yz)max=y;return(max);}zx是否max=zmax=xzy是否yz是否max=yreturn(max)在if语句中又包含一个或多个if语句,称为if语句的嵌套。else总是与它前面距它最近的if匹配。可用{}号改变匹配关系。思考:上面程序是否有误?if(zy){if(zx)ma=z;}elseif(yz)ma=y;P72例5:求一元二次方程ax2+bx+c=0的根。b=0是否无根单根-c/bd=b*b-4*a*ca=0是否d=0是否实根虚根a=0:b=0:无根b≠0:只有一个实根-c/ba≠0:判别式=0:实根x=判别式0:虚根aacbab2422#include“math.h”voidf(floata,floatb,floatc){if(a==0.0)if(b==0.0)printf(“noanswer\n”);elseprintf(“%f\n”,-c/b);else{floatd,t1;d=b*b-4*a*c;t1=-b/(2*a);t2=sqrt(fabs(d)/(2*a);if(d=0)printf(“%f,%f\n”,t1+t2,t1-t2);elseprintf(“%f+%fi,%f-%fi\n”,t1,t2);}}elseif结构(if…else多重嵌套的变形)if(条件1)语句1;elseif(条件2)语句2;elseif(条件3)语句3……else语句n;补充:求税率0.15n5000.10n300x=0.075n1000.05n500其它main(){floatn,x;scanf(“%f”,&n);if(n500)x=0.15;elseif(n300)x=0.10;elseif(n100)x=0.075;elseif(n50)x=0.05elsex=0;printf(“%f\n”,x);}P74例6:用elseif结构求二元一次方程的根。b=0是否无根单根-c/bd=b*b-4*a*ca=0是否d=0是否实根虚根#include“math.h”voidf(floata,floatb,floatc){if(a==0.0&&b==0.0)printf(“noanswer\n”);elseif(a==0.0&&b!=0.0)printf(“%f\n”,-c/b);elseif(a!=0.0){floatd,t1;d=b*b-4*a*c;t1=-b/(2*a);t2=sqrt(fabs(d)/(2*a);if(d=0)printf(“%f,%f\n”,t1+t2,t1-t2);elseprintf(“%f+%fi,%f-%fi\n”,t1,t2);}}a!=0是否d=b*b-4*a*ca=0且b=0是否a=0且b!=0是否单根-c/b无根d=0是否实根虚根1x0y=0x=0-1x0能否改为下面三种形式:补充举例:存在else与if的匹配问题,应用{}改变匹配关系。if(x=0)if(x0)y=1;elsey=0;elsey=-1;y=-1;if(x!=0)if(x0)y=1;elsey=0;y=0;if(x=0)if(x0)y=1;elsey=-1;正确y=-1;if(x!=0){if(x0)y=1;}elsey=0;y=0;if(x=0){if(x0)y=1;}elsey=-1;有函数,编程给出x值,可输出y
本文标题:《C语言程序设计教程》
链接地址:https://www.777doc.com/doc-2864551 .html