C语言程序设计第4章(姜恒远著).ppt

上传人:tia****nde 文档编号:12805539 上传时间:2020-05-25 格式:PPT 页数:101 大小:1.37MB
返回 下载 相关 举报
C语言程序设计第4章(姜恒远著).ppt_第1页
第1页 / 共101页
C语言程序设计第4章(姜恒远著).ppt_第2页
第2页 / 共101页
C语言程序设计第4章(姜恒远著).ppt_第3页
第3页 / 共101页
点击查看更多>>
资源描述
第4章结构化程序设计,主要内容,4.1结构化算法及其表示4.2结构化程序开发,4.1结构化算法及其表示,4.1.1算法举例4.1.2基本算法结构及其表示,4.1.1算法举例,算法:计算机所执行的操作和执行操作的顺序算法种类数值计算算法:如方程求根、积分计算非数值计算算法:如排序、查找算法举例求一个整数的绝对值计算5!,4.1.2基本算法结构及其表示,理论证明,无论多复杂的算法都可由顺序结构、选择结构和循环结构三种基本的算法结构中的一种或几种组成顺序(sequencestructure)结构操作步骤顺序执行,只有一个入口和一个出口选择(selectionstructure)结构根据某个条件判断的结果控制不同分支的操作执行循环结构(repetitionstructure)满足一个指定条件,对算法中的计算或处理步骤重复计算若干次(每次使用不同的数据)什么是结构化算法?,基本算法结构,4.1.2基本算法结构及其表示,表示算法的方法有:自然语言、流程图、伪代码、N-S图和PAD图等流程图利用不同的几何图形表示不同性质的操作,用流程线指示算法的执行顺序形象直观、易于理解、但算法复杂时结构不清晰伪代码利用介于自然语言和计算机程序设计语言之间的符号和文字集合描述算法表示方式自由、较容易转化成程序,算法的表示,4.1.2基本算法结构及其表示,流程图的组成部分:表示实际处理步骤的操作框指明执行控制流的流程线便于阅读理解流程图的特殊符号和文字说明国家标准GB1525-89规定了一套流程图的标准化符号和使用约定,流程图,4.1.2基本算法结构及其表示,流程图符号,4.1.2基本算法结构及其表示,椭圆形:用于表示流程图的开始和结束;平行四边形:数据的输入和输出;矩形:各种处理;菱形:表示条件判断,一般在其内部注明判断的条件,它只有一个入口,但可以有若干个出口;流程线:表示流程控制执行方向,用直线来表示,如果是非标准流向的线常在流程线的头或尾加上箭头来强调控制转移方向;小圆圈:表示连接符,是流程线的断点;注释符:用以标识注释的内容,帮助阅读者更好地理解流程图中的算法,流程图符号的含义,4.1.2基本算法结构及其表示,三种基本算法结构的流程图,4.1.2基本算法结构及其表示,流程图表示实例,4.1.2基本算法结构及其表示,开始输入x如果整数x的值大于或等于0绝对值等于x否则绝对值等于-x输出绝对值结束,求一个数的绝对值的算法伪代码,4.1.2基本算法结构及其表示,BEGIN2i1sIFi5issi+1iprintsEND,求5!的算法伪代码,4.2结构化程序开发,4.2.1结构化程序设计方法4.2.2表示顺序算法结构的语句4.2.3表示选择算法结构的语句4.2.4表示循环算法结构的语句4.2.5break语句和continue语句4.2.6无条件转移语句,4.2.1结构化程序设计方法,结构化程序设计方法的思想:自顶向下、逐步细化例子:计算1!+2!+n!第一步细化可把顶层分成三个部分来解决:S1:确定nS2:计算各个数的阶乘和S3:输出所有数的阶乘和,设计方法示例,4.2.1结构化程序设计方法,第二步细化的结果为:S1:定义变量n,由键盘输入n的值S2.1:定义变量j,使变量j从1、2、变化到nS2.2:对于j的每一次取值,计算其阶乘S2.3:定义变量sum,将每一次阶乘结果累加到sumS3:输出最终的累加结果sum,设计方法示例,4.2.1结构化程序设计方法,第三步细化的结果为:S1:定义变量n,由键盘输入n的值S2.1:定义变量j,使变量j从1、2、变化到nS2.2.1:定义变量i,使变量i从2、3、变化到jS2.2.2:如果ij则执行:S2.2.3:定义变量s,使issS2.3:定义变量sum,使sum+ssum;S3:输出最终的累加结果sum。,设计方法示例,4.2.1结构化程序设计方法,最终的求精结果为:S1:定义变量n、s、sum、j和iS2:由键盘输入n的值S3:将变量sum置初值0S4:将变量j置初值1,并从1、2、变化到nS4.1:将变量s置初值1S4.2:将变量i置初值2,并使变量i从2、3、变化到jS4.2.1:如果ij则执行:S4.2.2:使iss;S4.2.3:使i+1i;S4.3:使sum+ssum;S4.4:使j+1j;S5:输出累加结果sum,设计方法示例,4.2.1结构化程序设计方法,语句是构造程序的基本成分。C语言中的语句主要有以下几类:声明语句表达式语句复合语句空语句条件语句循环语句跳转语句,语句,4.2.2表示顺序算法结构的语句,构成顺序算法结构的语句主要有:表达式语句复合语句空语句,4.2.2表示顺序算法结构的语句,表达式语句:任何一个表达式后加上分号构成的语句赋值表达式语句赋值表达式加上分号,如i=5;赋值语句与赋值表达式的区别函数调用表达式语句函数调用表达式加上分号,如printf(“Y”);混合形式,如y=sin(x)*(a=b)+3;无意义的表达式语句,如x*y;,表达式语句,4.2.2表示顺序算法结构的语句,复合语句:使用“”将若干条语句组合起来,在程序中作为一条语句看待。一般形式为:声明序列语句序列,复合语句,4.2.2表示顺序算法结构的语句,例1(含声明序列的复合语句)inta,b,c;/*a,b,c只在该复合语句中有效*/c=a*b;例2(常见形式)while(i=(大于或等于)=(等于)!=(不等于),关系运算符,4.2.3表示选择算法结构的语句,关系表达式:由关系运算符、运算操作数(可以是各种表达式)及圆括号,按一定规则组成的运算式。例如:53x=y97!=a关系表达式的运算结果:真为1,假为0。53结果为1,97!=a结果是什么?,关系表达式,4.2.3表示选择算法结构的语句,关系运算符的优先级,4.2.3表示选择算法结构的语句,74=3等价于(74)=35+331,关系运算符的优先级示例,4.2.3表示选择算法结构的语句,字符型变量的比较:a=b实型变量的比较:d=b*b-4*a*c;if(fabs(d)0)计算两个实根else计算两个共扼复根,关系表达式中操作数的特殊性,4.2.3表示选择算法结构的语句,逻辑运算:反映两个操作数之间的逻辑关系C语言中的逻辑运算符有:!(逻辑非)scanf(“%f,%f”,例4.5交换两个变量的值,4.2.3表示选择算法结构的语句,if语句有三种结构形式:(2)两路选择结构的if语句,一般形式为:if(表达式)语句1else语句2,if语句的形式2,4.2.3表示选择算法结构的语句,两路选择if语句执行流程,4.2.3表示选择算法结构的语句,#includeintmain(void)intx,a;scanf(“%d”,例4.1求一个整数的绝对值,4.2.3表示选择算法结构的语句,if语句有三种结构形式:(3)多路选择结构的if语句,一般形式为:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式n-1)语句n-1else语句n,if语句的形式3,4.2.3表示选择算法结构的语句,多路选择if语句的执行流程,4.2.3表示选择算法结构的语句,例4.6输入一个正整数,如果是奇数输出odd,如果是偶数输出even,否则(等于0)输出zero,#includeintmain(void)unsignednum;scanf(“%u”,4.2.3表示选择算法结构的语句,例4.7判别输入的字符是数字、字母、空白(即空格、新行和Tab字符)还是其他字符的程序例,#includeintmain(void)charc;c=getchar();if(c=0,4.2.3表示选择算法结构的语句,例4.6输入一个整数,如果是奇数输出odd,如果是偶数输出even,否则输出zero1:if(num0)2:if(num%2!=0)3:printf(“odd”);4:else5:printf(“even”);6:else7:printf(“no”);,if语句的嵌套,4.2.3表示选择算法结构的语句,if语句的嵌套实例流程图,4.2.3表示选择算法结构的语句,else语句总是与它前面最近的一个没有匹配过else的if语句匹配。,if(表达式1)if(表达式2)if(表达式3)语句1else语句2,if(表达式1)if(表达式2)if(表达式3)语句1else语句2,else匹配原则,4.2.3表示选择算法结构的语句,if(表达式1)if(表达式2)if(表达式3)语句1else语句2,if(表达式1)if(表达式2)if(表达式3)语句1else语句2,if语句的嵌套形式,4.2.3表示选择算法结构的语句,1:if(表达式1)2:if(表达式2)3:语句14:语句25:else6:语句37:else8:语句4,if语句的嵌套形式,4.2.3表示选择算法结构的语句,例4.8由计算机“想”一个数请人猜,如果人猜错了,计算机给出提示指出人所猜的数是太大还是太小;如果人猜对了,则输出祝贺信息和该数。,#include#include#includeintmain(void)intnumber,x;randomize();number=random(32767);printf(ninputx:);scanf(%d,4.2.3表示选择算法结构的语句,if(x!=number)if(xnumber)printf(nlarger);elseprintf(nsmaller);elseprintf(Congratulations!);printf(“Theactualnumberis%dn”,x);,例4.8,4.2.3表示选择算法结构的语句,条件编译的形式1:#if表达式程序段1#else程序段2#endif,示例:#if1printf(“x=%dn”,x);#elseprintf(“sqrt(x)=%f”,sqrt(x);#endif,条件编译形式1,4.2.3表示选择算法结构的语句,条件编译的形式2:#ifdef标识符程序段1#else程序段2#endif,示例:#defineDEBUG#ifdefDEBUGprintf(“x=%dn”,x);#endif,条件编译形式2,4.2.3表示选择算法结构的语句,对于如下的if语句:if(表达式)x=表达式1;elsex=表达式2;可用条件表达式实现。条件表达式的形式为:表达式1?表达式2:表达式3条件表达式的求值过程?上述if语句用条件表达式如何表示?,条件运算符与条件表达式,4.2.3表示选择算法结构的语句,#includeintmain(void)intnum,sign;scanf(“%d”,例4.9输入一个整数,计算其平方数,但要求求的平方数使用原数的符号,4.2.3表示选择算法结构的语句,整个条件表达式的结果类型按表达式的求值规则确定,如-32?1.0:1的结果类型是double条件运算符的三个操作数只能是表达式,如ab?a=b:b=a;是错误的条件表达式条件运算符“?:”是一个顺序点运算符,例如“intm=10,n=5,k;”,则执行k=n+?m:m+;后k,m和n的值分别为-10,10和6三目条件运算符具有右结合性且由其构成的条件表达式允许嵌套,但实际是按顺序点求值规则从左往右计算的。例如e=ad?b:d;,条件表达式的使用注意点,4.2.3表示选择算法结构的语句,多分支选择语句switch,其一般形式为:switch(表达式)case整型常量表达式1:语句序列1;break;case整型常量表达式2:语句序列2;break;case整型常量表达式n:语句序列n;break;default:语句序列n+1,switch语句,4.2.3表示选择算法结构的语句,switch(score/10)case10:printf(“An”);break;case9:printf(“An”);break;case8:printf(“Bn”);break;case7:printf(“Cn”);break;case6:printf(“Dn”);break;default:printf(“En”);,利用switch语句实现按照成绩高低输出分数等级,4.2.3表示选择算法结构的语句,如果switch语句中没有使用default子句,则在所有比较都不相等时,不执行任何操作行完一个case后的语句序列后,如果没有遇到break语句,会继续执行紧随其后的下一个case后的语句序列,直到遇到一条break语句为止。例如:case10:case9:printf(“An”);break;/*case10与case9执行的动作相同*/,switch语句的使用说明,4.2.3表示选择算法结构的语句,switch语句可以嵌套。例如:switch(x)case1:switch(y)case1:printf(“Onen”);break;case2:printf(“Twon”);break;break;case2:printf(“Three”);,switch语句的使用说明,4.2.3表示选择算法结构的语句,具体要求:提示输入格式。键盘输入形式为xopy,x和y代表任一实型数,op代表运算符“+、-、*、/”中的任一个;检查输入的运算符是否正确,若输入有误,显示出错信息;检查除法运算是否可行;若输入正确,在“=”后显示运算结果。,例4.10实现具有四则算术运算功能的简单计算器程序,4.2.3表示选择算法结构的语句,#includeintmain(void)floatx,y;charop;printf(Pleaseinputxopyn);scanf(%f%c%f,例4.10实现具有四则算术运算功能的简单计算器程序,4.2.3表示选择算法结构的语句,case-:printf(%f%c%f=%fn,x,op,y,x-y);break;case*:printf(%f%c%f=%fn,x,op,x*y);break;case/:if(y!=0)printf(%f%c%f=%fn,x,op,x/y);elseprintf(Divideerror,divisoris0!n);break;default:printf(Invalidoperation!n);break;,例4.10实现具有四则算术运算功能的简单计算器程序,4.2.4表示循环算法结构的语句,例1:计算1+2+100之和例2:计算1!+2!+n!之和C语言提供的循环结构语句while语句do-while语句for语句,4.2.4表示循环算法结构的语句,while语句的一般形式为:while(表达式)语句while语句中表达式的要求while语句中语句的要求while语句的执行流程,while语句,4.2.4表示循环算法结构的语句,while语句的特点:循环体可能一次都不执行表达式或循环体中应包含能使循环结束的操作,否则会造成死循环适用于循环次数不确定的循环程序设计,while语句,4.2.4表示循环算法结构的语句,#includeintmain(void)inti=2,s=1;while(i=5)s=s*i;i+;printf(“The5!=%dn”,s);,例4.2计算5!,4.2.4表示循环算法结构的语句,#includeintmain(void)inti=1,sum=0;while(i1e-8),s+=x;k+=2;sign*=-1;x=sign/(double)k;s*=4;printf(“pi=%lfn”,s);,4.2.4表示循环算法结构的语句,do-while语句的一般形式为:do语句while(表达式);do-while语句的执行流程do-while与while的区别,do-while语句,4.2.4表示循环算法结构的语句,do-while语句常用于循环体至少需要执行一次的问题中例如:累加从标准输入设备上读入的正整数直至读入的数为0doscanf(“%d”,do-while语句的特点,4.2.4表示循环算法结构的语句,#includeintmain(void)inti=1,sum=0;dosum=sum+i;i+;while(i=100);printf(“1+2+100=%dn”,sum);,例4.14用do-while语句实现1+2+100,4.2.4表示循环算法结构的语句,#include#includeintmain(void)doublex,s1,s2=1;doscanf(“%lf”,if(x=0),例4.15用牛顿迭代公式求当|sn+1-sn|10-6时x的平方根,x从键盘上输入,4.2.4表示循环算法结构的语句,printf(“x0n”);while(x=1e-6);printf(“nsqrt(%lf)=%lfn”,x,s2);,例4.15,4.2.4表示循环算法结构的语句,for语句的一般形式为:for(表达式1;表达式2;表达式3)语句表达式1,表达式2和表达式3均可缺省,全部缺省的形式为:for(;)语句表达式的标准缺省值恒为1,for语句,4.2.4表示循环算法结构的语句,for语句等价于:表达式1;while(表达式2)语句表达式3;while语句等价于:for(;表达式;)语句,for语句与while语句,4.2.4表示循环算法结构的语句,for语句的最常见形式为:for(赋值表达式;循环控制表达式;循环变量修改表达式)语句例如:for(i=0;i10;i+)putchar(getchar();,for语句的最常见形式,4.2.4表示循环算法结构的语句,4.2.4表示循环算法结构的语句,for语句的三个表达式均可以缺省for语句允许同时对多个循环控制变量值进行修改for(x=0,y=100;x100;x+,y-)for语句的循环体语句可以放到表达式3的位置for(i=0;i10;putchar(getchar(),i+);for语句的第一个表达式位置定义一个或多个变量for(inti=0;i=100;i+),for语句的灵活性,4.2.4表示循环算法结构的语句,#includeintmain(void)intfahr;for(fahr=0;fahr1;t/=10)putchar(k/t+0);k%=t;putchar(k+0);,4.2.4表示循环算法结构的语句,嵌套循环:在一个循环结构的循环体内又包含另一循环结构的循环例如while()while()语句while(.)for(;)语句,嵌套循环,4.2.4表示循环算法结构的语句,#includeintmain(void)inti,j,k,t=0;for(i=0;i=0)printf(%5d%5d%5dt,i,j,k);t=t+1;if(t%5=0)printf(n);,例4.19编写程序,实现一元人民币换成一分、两分、五分的所有兑换方案,4.2.4表示循环算法结构的语句,程序共输出兑换方案541种:00100019802960394049205900688078608840982184218501905191319212000,例4.19编写程序,实现一元人民币换成一分、两分、五分的所有兑换方案,4.2.4表示循环算法结构的语句,#include#includeintmain(void)intx,y,z;printf(“n%5s%5s%5snn”,“x”,“y”,“z”);for(x=-5;x12;x+)for(y=-10;y10;y+)for(z=-6;z19;z+)if(int)pow(x,3)+(int)pow(y,3)+(int)pow(z,3)=3)printf(“%5d%5d%5dn”,x,y,z);,例4.20对于-5x11,-10y9,-6z18,求x3+y3+z3=3的全部整数解,4.2.5break语句和continue语句,功能:在switch语句中结束switch语句的执行在循环语句中,强制结束循环语句的执行形式:break;,break语句,4.2.5break语句和continue语句,#includeintmain(void)unsignedn,count=0;for(n=100;n1000;n+)if(n%11=0)count+;if(count11)printf(“%7d”,n);elsebreak;,例4.21找出100-999之间是11的倍数的前10个整数,4.2.5break语句和continue语句,#includeintmain(void)inti,j;for(i=1;i60)printf(“%d*%d=%dn”,i,j,i*j);break;,例4.21找出10以内的两个数,其乘积是最接近60并比60大的数,输出这两个数及其乘积,4.2.5break语句和continue语句,程序的输出结果为:7*9=638*8=649*7=6310*7=70,例4.21找出10以内的两个数,其乘积是最接近60并比60大的数,输出这两个数及其乘积,4.2.5break语句和continue语句,#includeintmain(void)inti,j,found=1;for(i=1;i60)printf(“%d*%d=%dn”,i,j,i*j);found=0;break;,例4.21找出10以内的两个数,其乘积是最接近60并比60大的数,输出这两个数及其乘积,4.2.5break语句和continue语句,功能:用来跳过循环体内continue后面的语句,并开始新的一轮循环形式:continue;例如for(i=1;i=10;i+)if(i%2!=0)continue;printf(“%dt”,i);,continue语句,4.2.6无条件转移语句,有条件转移控制语句无条件转移控制语句breakcontinuereturngoto,4.2.6无条件转移语句,goto语句的一般形式为:goto语句标号;语句标号语句标号按标识符的命名规则由程序设计者自定语句标号用来标识函数中某个除声明语句外的语句位置语句标号与其标识的语句之间用冒号分隔,作为goto语句的转向目标同一函数中的所有语句标号都不能相同,但可与函数中的变量名同名,不会产生冲突语句标号的作用域是所在函数,4.2.6无条件转移语句,#includeintmain(void)longs=1,t=1,n;scanf(“%ld”,例4.23用goto语句与if语句实现循环,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!