收藏 分销(赏)

c语言程序设计3教学课件全书电子讲义.ppt

上传人:快乐****生活 文档编号:9249661 上传时间:2025-03-18 格式:PPT 页数:492 大小:4.77MB 下载积分:20 金币
下载 相关 举报
c语言程序设计3教学课件全书电子讲义.ppt_第1页
第1页 / 共492页
c语言程序设计3教学课件全书电子讲义.ppt_第2页
第2页 / 共492页


点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,1,章 程序设计基础,1.1,计算机内的数据表示,1.2,算法及其表示,1.3,程序设计语言,1.4,结构化程序设计,1.1,计算机内的数据表示,数制及其转换,常用计数方法,十进制计数法,进制计数法是,“,逢十进一,”,的,例如:,(1234.56),10,110,3,210,2,310,1,410,0,510,1,610,2,各位的权值分别为:,10,3,、,10,2,、,10,1,、,10,0,、,10,1,、,10,2,。,二进制计数法,二进制计数法是,“,逢二进一,”,的。,例如:,(1001101.11),2,=12,6,02,5,02,4,12,3,12,2,02,1,12,0,12,1,12,2,各位的权值分别为:,2,6,、,2,5,、,2,4,、,2,3,、,2,2,、,2,1,、,2,0,、,2,1,、,2,2,、,2,3,。,1.1,计算机内的数据表示,八进制数与十六进制数,八进制计数法是,“,逢八进一,”,的,数码为:,0,、,1,、,2,、,3,、,4,、,5,、,6,、,7,。,例如:,(621),8,=68,2,28,1,68,0,各位的权值分别为:,8,2,、,8,1,、,8,0,。,十六进制计数法是,“,逢十六进一,”,的,数码为,0,、,1,、,2,、,3,、,4,、,5,、,6,、,7,、,8,、,9,、,A,、,B,、,C,、,D,、,E,、,F,。,例如:,(8A1F),16,=816,3,1016,2,116,1,1516,0,各位的权值分别为:,16,3,、,16,2,、,16,1,、,16,0,。,1.1,计算机内的数据表示,数制转换,任意进制转换为十进制,由,r,制数转换为十进制数可按照如下公式进行多项式展开求和即可:,K,n,K,n,1,K,1,K,0,.K,1,K,2,K,m,K,n,r,n,K,n,1,r,n,1,K,1,r,1,K,0,r,0,K,1,r,1,K,2,r,2,K,m,r,m,十进制转换为任意进制,可以采用除基取余法将十进制整数转换为,r,进制整数:将十进制整数除以,r,,得到商和余数,余数对应为,r,进制数低位的值;继续让商再除以,r,,得到商和余数,,重复此操作,直至商为,0,,如此得到的一系列的余数就是相应,r,进制数的各位数字,先得到的是低位,后得到的是高位。,1.1,计算机内的数据表示,例如,将,(29),10,转换为二进制整数:,因此,,(29),10,(11101),2,2 29,2 14 1,低位,2 7 0,2 3 1,2 1 1,0 1,高位,1.1,计算机内的数据表示,可采用乘基取整法将十进制小数转换为,r,进制小数:将十进制小数乘以,r,,去掉乘积的整数部分,再将余下的纯小数乘以,r,,,重复此操作,直至乘积等于,0,或达到所需的精度为止,如此得到的一系列整数就是,r,进制小数的各位数字,先得到的是高位,后得到的是低位。,例如,将,(0.625),10,转换为二进制小数:,0.6252=1.25 1,高位,0.252=0.5 0,0.52=1 1,低位,因此,,(0.625),10,(0.101),2,由于整数和小数的转换方法截然不同,将十进制数转换为,r,进制数时,整数部分和小数部分要分开来进行转换。,r,进制小数能精确的转换为十进制小数,但十进制小数通常不能精确的转换为,r,进制小数。,1.1,计算机内的数据表示,二进制与八进制、十六进制之间的转换,对于一个二进制数,只要依次(整数部分由低位到高位,小数部分由高位到低位)将其每,3,位或,4,位分成一组,就可以直接转换为八进制数或十六进制数。,例如,,(1 000 101 111 010 011.011 01),2,(105423.53),8,(1000 1011 1101 0011.01101),2,(8B13.B8),16,将八进制数中的每一位用,3,位二进制数表示,将十六进制数中的每一位用,4,位二进制数表示,就能转换为对应的二进制数。,1.1,计算机内的数据表示,原码,反码及补码,在计算机中,,“,位,”,是数据的最小单位。计算机中的存储量是以字节来计算的,一个字节是,8,位二进制位。在计算机内,一般规定:用,0,表示正号,“,”,,用,1,表示负号,“,”,;符号位放在数值位之前。一个数连同其符号在机器中的二进制表示形式称为机器数,它所代表的数值称为机器数的真值。,机器数的一般格式为:,符号位 数值位,1.1,计算机内的数据表示,原码,原码表示法是符号位用,0,表示正数,用,1,表示负数,数值位表示数值本身。,例如:,27,原,=0 0 0 1 1 0 1 1 ,27,原,=1 0 0 1 1 0 1 1,在原码表示法中,,0,的表示方法不唯一:,0,原,=0 0 0 0 0 0 0 0 ,0,原,=1 0 0 0 0 0 0 0,。,反码,反码表示法中正数与负数的表示方法不同,正数的反码与原码同形,如:,27,反,=0 0 0 1 1 0 1 1,负数的反码为:符号位仍为,1,,数值位是对原码取反,如:,27,反,=1 1 1 0 0 1 0 0,在反码表示法中,,0,的表示也不唯一:,0,反,=0 0 0 0 0 0 0 0 ,0,反,=1 1 1 1 1 1 1 1,。,1.1,计算机内的数据表示,补码,正数的补码与原码、反码同形,如:,18,原,18,反,18,补,0 0 0 1 0 0 1 0,负数的补码为:符号位为,1,,数值位等于原码的数值位取反,再加,1,,或者说:,x,补,x,反,1,;,如:,18,原,1 0 0 1 0 0 1 0 ,18,反,1 1 1 0 1 1 0 1 ,18,补,1 1 1 0 1 1 1 0,补码形式的数据进行运算时,符号位和数值位一样的参与运算。例如,计算,36,58,,,36,补,1 1 0 1 1 1 0 0 ,58,补,0 0 1 1 1 0 1 0 1 1 0 1 1 1 0 0,0 0 1 1 1 0 1 0,溢出,1 0 0 0 1 0 1 1 0,在补码表示法中,,0,的表示是唯一的,假设用一个字节存放数据,0,补,0 0 0 0 0 0 0 0,1.2,算法及其表示,算法,为解决一个问题而采取得方法和步骤,称为算法。,算法就是被精确定义的一组规则,规定先做什么,再做什么,以及判断某种情况下做哪种操作。,例如,下面是用自然语言表示的对三个数进行从小到大排序的算法。,输入三个数,x,、,y,、,z,;,将,x,与,y,比较,若,x,y,,交换,x,与,y,的值;,将,x,与,z,比较,若,x,z,,交换,x,与,z,的值;,将,y,与,z,比较,若,y,z,,交换,y,与,z,的值;,输出此时的三个数,x,、,y,、,z,1.1,计算机内的数据表示,算法的特性和目标,算法必须具有以下五个特性:,确定性,算法中的每一步都必须有确切的含义,不允许存在二义性;对于相同的输入数据,必须有相同的输出结果。,可行性,算法中的每一步操作都能通过可以实现的基本运算,执行有限次来完成,并最终得到确定的结果。,有穷性,一个算法必须总是在执行有限个操作步骤和可以接受的时间内完成其执行过程。也即是说,对于一个算法,要求其在时间和空间上均是有穷的。,1.2,算法及其表示,输入,一个算法有零个或多个输入数据。有些算法需要提供输入数据,有些算法则不需要。,输出,一个算法应该有,1,个或多个输出数据。,算法应达到的目标,正确性,可读性,健壮性,高效率与低存储空间需求,1.2,算法及其表示,算法的表示,自然语言,传统流程图,传统流程图是用规定的一组图形符号、流程线和文字说明来表示各种操作的算法表示方法。,1.2,算法及其表示,1.2,算法及其表示,流程图只包括三种基本程序结构,顺序结构,选择结构,真,处理,A,处理,B,假,条 件,选择结构,处理,A,处理,B,顺序结构,1.2,算法及其表示,循环结构,真,处理,A,假,条 件,直到型循环结构,假,真,处理,A,条 件,当型循环结构,开始,输入,x,y,z,结 束,输出,x,、,y,、,z,对三个数进行排序,交换,x,、,y,假,真,xy?,交换,x,、,z,假,真,xz?,交换,y,、,z,假,真,yz?,1.2,算法及其表示,N-S,流程图,顺序结构,选择结构,顺序结构,处理,A,处理,B,分支结构,条 件,处理,A,处理,B,成立,不成立,1.2,算法及其表示,循环结构,当条件成立时继续,处理,A,当型循环结构,处理,A,直到条件成立时结束,直到型循环结构,1.2,算法及其表示,输入,x,y,z,xy?,Y N,交换,x,、,y,xz?,Y N,交换,x,、,z,yz?,Y N,交换,y,、,z,输出,x,、,y,、,z,三个数进行从小到大排序,1.2,算法及其表示,伪码,伪码是用一种介于自然语言和计算机语言之间的文字和符号来描述算法。,例如,用伪码描述上述算法:,input x,y,z,xmax,if y max then ymax,if z max then zmax,output max,1.3,程序设计语言,程序与程序设计语言,程序,计算机程序是,指为,让计算机完成特定的任务而设计的指令序列。,程序设计语言,机器语言,汇编语言,高级语言,面向对象的语言,C,语言简介,C,语言的历史,1.3,程序设计语言,C,程序的结构,C,程序是一种函数结构,一般由一个或若干个函数组成,;,其中必有一个名为,main(),的主函数,程序的执行就是从这里开始的。,【,例,1.1,】,编写程序判断一个整数是否是,3,的倍数,如果是输出,“,YES,”,,否则输出,NO,”,。,main()/*main,函数的首部,*,/,/*main,函数体的开始,*,/,int m;/*,定义整型变量,m*/,printf(nPlease input a integer:);/*,输出提示信息,*,/,scanf(%d,/*,读入变量的值,*,/,if(m%3=0)printf(YES);,else printf(NO);/*,如果,flag,值为,0,,输出,“,YES,”,,否则输出,“,N0,”,*/,1.3,程序设计语言,运行情况如下:,Please input a integer:20,NO,【,例,1.2,】,编写程序求任意三个整数中的最小值。,main()/*main,函数的首部,*,/,/*main,函数体的开始,*,/,int n1,n2,n3;/*,定义三个整型变量,*,/,int minnum;/*,定义变量,minnum,,用于存放最小值,*,/,printf(nEnter three integers:);/*,输出提示信息,*,/,scanf(%d,%d,%d,/*,读入变量的值,*,/,minnum=min(n1,n2,n3);/*,调用自定义函数,min,,将所求的最小值赋给变量,minnum*/,printf(nMaximum is:%d,minnum);/*,输出,minnum,值,*,/,1.3,程序设计语言,int min(int x,int y,int z)/*num,函数的首部,*,/,/*num,函数体的开始,*,/,int m;,m=x;/*,默认第一个数最小,*,/,if(ym)m=y;/*,如果第二个数更小,则修改,m*/,if(zm)m=z;/*,如果第三个数更小,则修改,m*/,return m;/*,将,m,的值作为函数值返回,*,/,/*max,函数体的结束,*,/,运行情况如下:,Enter three integers:18,25,12,Maximum is:12,1.3,程序设计语言,C,程序的结构特点,C,程序是由函数构成的。,函数由函数首部和函数体两部分组成。,一般函数的格式如下:,类型名,函数名(函数参数表),声明部分,执行部分,函数体中也可以没有任何内容,即构成一个空函数。,一个源程序有一个且只能有一个,main,函数(又称主函数)。,C,程序的执行总是从,main,函数开始的,在调用其它函数后,最后回到,main,函数中结束整个程序的执行。,1.3,程序设计语言,C,程序书写格式自由。既允许在一行内写多个语句,也允许将一个语句分写在多行上,但每个语句必须以分号结束。,“,/*,*/,”,表示对函数或语句的功能作注释。在,“,/,”,和,“,*,”,之间不能有空格,且,“,/*,”,和,“,*,/,”,必须配对使用。注释是供人阅读的,并不参与编译和运行。注释可以出现在程序的任何地方,添加必要的注释可以提高程序的可读性。,源程序中可以使用预处理命令,(,如,include,命令、,define,命令,),,预处理命令以,“,#,”,开头,一般预处理命令应放在源文件或源程序的最前面。,1.3,程序设计语言,C,程序的一般形式如下:,预编译处理命令,全局变量定义,main(),声明部分,执行部分,sub 1()/*,自定义函数,*,/,sub n()/*,自定义函数,*,/,1.3,程序设计语言,C,程序的特点,简洁、紧凑,模块化、结构化,功能强大,可移植性好,C,语言的不足,运算符多,难以掌握,C,程序中常常为了类型转换上的方便不要求类型检查,这就导致有些情况下即使要求类型一致,但实际类型不一致也不出错,而产生莫名其妙的运算结果。,C,语言中对数组进行处理时对数组元素的下标不做越界检查,若程序中引用数组元素时越界,容易造成数据的混乱,甚至更严重的错误。,1.4,结构化程序设计,结构化程序设计方法,结构化程序设计方法是一种用来编写清晰、可读性好、易修改性强的程序的严格的设计方法。,结构化程序设计方法要求程序仅由三种基本结构:顺序结构、选择结构和循环结构经组合、嵌套而成。而且,要求每个程序模块是单入口单出口的;程序中没有永远执行不到的语句,没有死循环(无终止的循环)。,结构化程序设计方法要求采用,“,模块化,”,的设计方法。,程序的设计过程采用,“,自顶向下,逐步求精,”,的策略。,1.4,结构化程序设计,程序设计的步骤,分析问题,确定数据结构。,确定算法。,编写程序。,调试运行程序。,建立文档资料。,程序设计的风格,第,2,章 简单的数据类型、运算符及表达式,2.1,常量和变量,2.2,基本数据类型,2.3,运算符及表达式,2.4,类型转换,2.1,常量和变量,标识符,字符集,C,语言的字符集是指,C,程序中允许出现的字符,分为:,英文字母(大、小写):,A,,,B,,,C,,,,,Z,;,a,,,b,,,c,,,,,z,数字:,0,,,1,,,2,,,,,9,特殊字符:,,,*,,,/,,,_,,(,),!,,$,,,,,&,,,,,,,,,.,,,,“,,,,,,?,,,|,以及空格等,转义字符:,n,,,t,,,v,,,b,,,r,,,f,,,a,,,“,,,,,,,ddd,,,xhh,等,2.1,常量和变量,标识符,C,语言中各种对象的名字用标识符表示。所谓标识符就是由字母(,a-z,A-Z,)、数字(,0-9,)和下划线(,_,)组成,并且第一个字符必须为字母或下划线开头的一系列字符。,标识符是表示符号常量名、变量名、函数名、类型名、文件名等的字符序列。,例如,合法的标识符和变量名:,data1,Day,x,,,program_1,aver,sum,非法的标识符和变量名:,J.Agate,$50,ayz;,b=,x,y=z;,c=x=y;,printf(nx=%d y=%d z=%d,x,y,z);,printf(na=%d b=%d c=%d,a,b,c);,程序的输出结果是,x=8 y=8 z=7,a=0 b=0 c=1,4.1,关系运算、逻辑运算与条件运算,逻辑运算符与逻辑表达式,逻辑运算符与表达式,逻辑表达式是指由逻辑运算符连接若干个表达式所构成的表达式。,C,语言中提供三种逻辑运算符:,&,(逻辑与),,|,(逻辑或),,!,(逻辑非)。,逻辑运算符的运算规则是:,&,:当且仅当两个运算量的值均为非,0,时,其运算结果值为,1,,其余情况均为,0,;,|,:当且仅当两个运算量的值均为,0,时,其运算结果值为,0,,其余情况均为,1,;,!:当运算量的值为,0,时,运算结果为,1,,当运算量的值为,1,时,运算结果为,0,。,4.1,关系运算、逻辑运算与条件运算,例如:,表示“三门课成绩均为及格”的逻辑表达式为:,(math,60)&(phys,60)&(engl,60),表示“三门课成绩中至少有一门不及格”的逻辑表达式为:,(math60)|(phys60)|(engl=A,printf(output:%c,c);,条件运算符的优先级,条件运算符的优先级高于赋值运算符,但低于算术运算符、自增自减运算符、逻辑运算符和关系运算符。,例如:,y=x0?x+1:x*x/2,条件运算符具有右结合性,例如:,x0?1:x=60.0),printf(n Passed);/*,如果成绩及格,则输出“,Passed”*/,运行情况如下:,Enter a score:85,Passed,Enter a score:50,4.2 if,语句,双分支选择结构,if-else,语句的形式为:,if,(表达式)语句,1,else,语句,2,if-else,语句的执行过程:先判断或计算表达式的值,若结果为,“,真,”,(非,0,),则执行,if,子句;否则执行,else,子句。,4.2 if,语句,【,例,4.6】,将例,4.4,改为:如果成绩及格,则输出,“,Passed,”,;否则输出,“,Failed,”,。,main(),float score;,printf(nEnter a score:);,scanf(%f,if(score=60.0)printf(nPassed);,else printf(nFailed);,运行情况如下:,Enter a score:85,Passed,再运行:,Enter a score:50,Failed,4.2 if,语句,嵌套的,if,语句,if,语句嵌在,if,子句中,if(,表达式,1),if(,表达式,2),语句,1,else,语句,2,else,语句,3,if,语句嵌在,else,子句中,if(,表达式,1),if(,表达式,2),语句,1,else if(,表达式,3),语句,2,else,语句,3,4.2 if,语句,较为规范、容易掌握的嵌套的,if,语句的结构形式,if,(表达式,1,)语句,1,else if,(表达式,2,)语句,2,else if,(表达式,3,)语句,3,else if,(表达式,n,)语句,n,else,语句,n+1,【,例,4.8】,输入一个学生成绩,当成绩,90,时,输出,“,Very good,”,;当,80,成绩,90,时,输出,“,Good,”,;当,60,成绩,80,时,输出,“,Passed,”,;当成绩,60,时,输出,“,Failed,”,。,4.2 if,语句,main(),float score;,printf(nEnter a score:);,scanf(%f,if(score=90),printf(nVery good);,else if(score=80),printf(nGood);,else if(score=60),printf(nPassed);,else printf(nFailed);,4.2 if,语句,运行情况:,Enter a score:95,Very good,再运行:,Enter a score:55,Failed,4.2 if,语句,if,后面的表达式可以是,C,语言中任意合法的表达式,常常是关系表达式或逻辑表达式。但无论是哪种类型的表达式,在处理时,系统都会将其理解为逻辑值,即表达式的值只区分为,0,和非,0,。,if,子句和,else,子句必须以分号结束,且,else,子句不能作为单独的语句使用,它必须是,if,语句的一部分,与,if,配对使用。为了使程序结构清晰、便于阅读,对于复杂的,if,语句应使用适当的缩进格式。,在,if,和,else,后面可以只含一个语句,若需要有多个操作语句,则必须用花括号,将这些语句括起来作为复合语句来使用。,在,if,语句的嵌套中,要注意,if,和,else,的配对关系。从最内层开始,,else,总是与它上面最近的尚未曾配对,if,配对。,4.3 switch,语句,C,语言中提供了,switch,语句用于直接实现多分支选择结构。,switch,语句的一般形式为:,switch,(表达式),case,常量表达式,1,:语句,1,;,case,常量表达式,2,:语句,2,;,case,常量表达式,n,:语句,n,;,default:,语句组,n+1,;,switch,语句的执行过程为:先计算,switch,后面的表达式的值;然后使其顺次花括号内同各个,case,后的常量表达式的值相比较,若找到相等的常量表达式,i,,则执行该常量表达式冒号后的语句,i,;若找不到匹配的常量表达式,此时要考虑是否有,default,选项,若有,则执行,default,后面的语句直到结束;否则什么也不执行。,4.3 switch,语句,在执行过程中,若遇到,break,语句,则跳出,switch,结构,将程序流程转向,switch,结构外的下一条语句执行;若没有,break,语句,则从该语句组为入口,依次执行其后的所有冒号后面的语句。,【,例,4.9】,用,switch,语句实现例,4.8,。,main(),int score,mark;,printf(nEnter score:);,scanf(%d,mark=-1;,if(score=0&score=100),mark=score/10;,4.3 switch,语句,switch(mark),case 10:,case 9:printf(nVery good);break;/*,成绩,90*/,case 8:printf(nGood);break;/*80,成绩,90*/,case 7:,case 6:printf(nPassed);break;/*60,成绩,80*/,case 5:,case 4:,case 3:,case 2:,case 1:,case 0:printf(nFailed);break;/*,成绩,60*/,default:printf(nEnter error!);/*,处理错误的输入*,/,4.3 switch,语句,switch,结构使用要注意以下几点:,switch,后面表达式的类型,一般为整型、字符型或枚举类型(枚举类型将在以后的章节中介绍)。,每个,case,后面常量表达式的值必须互不相同,即不允许对表达式的同一个值有两种或两种以上的处理方案。,尽管各个,case,和,default,出现的次序不影响程序的执行结果,但是把,default,放在最后是一种良好的程序设计习惯。,多个,case,可共有一组执行语句。,case,后面的常量表达仅起语句标号的作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行下去,不再进行判断。,4.3 switch,语句,switch,语句又称为开关语句。当仅需执行一个开关时,则在该,case,后面的语句中必须包含一个,break,语句,让其执行后跳出,switch,语句,否则会一直执行到最后,或遇到下一个,case,中的,break,语句为止。,当,case,后面包含一条以上的执行语句时,可以不用花括号括起来,系统会自动识别并顺序执行所有语句。,default,是可选项。但良好的程序设计习惯是,在每个,switch,语句中,写上一条,default,语句来集中处理例外条件,从而防止一些条件没有被测试到。,4.4,选择结构程序设计举例,【,例,4.10】,求一元二次方程的根。,#include math.h,main(),float a,b,c,disc,x1,x2,rpart,ipart;,printf(nnplease input a,b,c:);,scanf(%f,%f,%f,/*,输入方程的系数*,/,printf(The equation);,if(fabs(a)=1E-6)/*,若,a,等于,0,,则不是一元二次方程*,/,printf(is not quadratic);exit(0);,else disc=b*b-4*a*c;,if(fabs(disc)1E-6),/*0,,有两个不等实根*,/,4.4,选择结构程序设计举例,x1=(-b+sqrt(disc)/(2*a);,x2=(-b-sqrt(disc)/(2*a);,printf(has two distinct real roots:%8.4f,%8.4f,x1,x2);,else/*0,,有两个共厄复根*,/,rpart=-b/(2*a);,ipart=sqrt(-disc)/(2*a);,printf(has two complex roots:);,printf(n%8.4f+%8.4fi,rpart,ipart);,printf(n%8.4f-%8.4fi,rpart,ipart);,4.4,选择结构程序设计举例,程序的运行情况如下:,please input a,b,c:1,2,1,The equation has two equal roots:-1.0000,please input a,b,c:2,8,6,The equation has distinct real roots:-1.0000,-3.000,please input a,b,c:1,2,3,The equation has two complex roots:,-1.0000+1.4141i,-1.0000-1.4141i,4.4,选择结构程序设计举例,【,例,4.12】,某商店售货,按购买货物的款数多少分别给予不同的优惠折扣:,购货不足,250,元的,没有折扣;,购货满,250,元,不足,500,元,折扣,5%,;,购货满,500,元,不足,1000,元,折扣,7.5%,;,购货满,1000,元,不足,2000,元,折扣,10%,;,购货满,2000,元,折扣,15%,。,用嵌套的,if,结构实现。,4.4,选择结构程序设计举例,4.4,选择结构程序设计举例,main(),float m,d,amount;,printf(nEnter your money for buying:);,scanf(%f,if(m250)d=0;,else if(m500)d=5;,else if(m1000)d=7.5;,else if(m2000)d=10;,else d=15;,amount=m*(1-d/100);,printf(namount=%6.2f,amount);,4.4,选择结构程序设计举例,运行情况:,Enter your money for buying:680,amount=629.00,再运行:,Enter your money for buying:1350,amount=1215.00,用,switch,结构实现。,设置,mark,标记变量:,mark=m/250,,根据,mark,的值而确定相应的折扣。,程序如下:,main(),float m,d,amount;,int mark;,printf(nEnter your money for buying:);,scanf(%f,4.4,选择结构程序设计举例,mark=m/250;,switch(mark),case 0:d=0;break;,case 1:d=5;break;,case 2:,case 3:d=7.5;break;,case 4:,case 5:,case 6:d=10;break;,default:d=15;,if(d0)printf(nEnter error!);,else amount=m*(1-d/100);,printf(namount=%6.2f,amount);,4.4,选择结构程序设计举例,【,例,4.13】,编一程序将以英寸为单位表示的长度转换为以厘米为单位表示的长度;或者反之,从厘米转换为英寸。,已知:,1,英寸,=2.54,厘米,因为要求两种单位可以互相转换,所以,设置一个变量,select,,用于选择,,select=1,表示将英寸转换为厘米,,select=2,表示将厘米转换成英寸。,用,if,语句实现:,main(),int select;,float leng,r=2.54;,printf(nPlease choose(1:inch to cm,2:cm to inch):);,scanf(%d,printf(Enter the leng:);,scanf(%f,if(select=1)printf(n%6.2f inch=%6.2f cm,leng,leng*r);,else if(select=2)printf(n%6.2f cm=%6.2f inch,leng,leng/r);,4.4,选择结构程序设计举例,运行情况:,Please choose(1:inch to cm,2:cm to inch):1,Enter the leng:12,12.00 inch=30.48 cm,再运行:,Please choose(1:inch to cm,2:cm to inch):2,Enter the leng:12,12.00 cm=4.72 inch,4.4,选择结构程序设计举例,用,switch,结构实现:,main(),int select;,float leng,r=2.54;,printf(nPlease choose(1:inch to cm,2:cm to inch):);,scanf(%d,printf(Enter the leng:);,scanf(%f,switch(select),case 1:printf(n%6.2f inch=%6.2f cm,leng,leng*r);break;,case 2:printf(n%6.2f cm=%6.2f inch,leng,leng/r);break;,default:printf(Enter error!)n);,第,5,章 循环结构程序设计,5.1 while,循环,5.2 do-while,循环,5.3 for,循环,5.4,循环结构的嵌套,5.5,转向语句,5.6,循环结构程序设计举例,5.1 while,循环,while,语句用于构成,“,当型,”,循环结构。,while,语句的一般形式为:,while(,表达式,),循环体语句,while,循环结构的执行过程是:首先计算表达式(循环条件)的值,若结果为,“,真,”,(非零),则执行循环体语句;然后再次计算表达式的值,重复上述过程,直到表达式的值为,“,假,”,(零)时结束循环,流程控制转到循环结构的下一语句。,5.1 while,循环,【,例,5.1】,从键盘上输入一个整数,n,,求,n!,,利用,while,语句编程实现。,main(),int n,i,s;,printf(nEnter n:);,scanf(%d,i=1;s=1;/*,给变量,i,、,s,赋初值*,/,while(i=n)/*,循环继续的条件*,/,s=s*i;/*,进行累乘求积*,/,i+;/*,乘数增值*,/,printf(nn!=%d,s);/*,输出计算的结果*,/,运行情况如下:,Enter n:5,n!=120,5.1 while,循环,使用,while,循环结构应注意以下几点:,while,循环结构的特点是,“,先判断,后执行,”,。如果表达式的值一开始就为,“,假,”,,则循环体一次也不执行。,循环体中,如果包含一个以上的语句,则应用花括号括起来,以复合语句的形式出现。,循环体内一定要有改变循环继续条件的语句,使得循环趋向于结束,否则循环将无休止的进行下去,即形成,“,死循环,”,。为使循环能够正确开始运行,还要做好循环前的准备工作,,【,例,5.2】,从键盘上输入,30,个学生的成绩,对其进行处理:如果成绩及格,则输出,“,Passed,”,;否则输出,“,Failed,”,。,5.1 while,循环,5.1 while,循环,main(),int n=1;/*,循环控制变量赋初值*,/,float score;,while(n=60.0),printf(Passed n);,else printf(Failed n);,n+;/*,循环控制变量增值*,/,5.2 do-while,循环,do-while,语句构成的循环结构类似于,“,直到型,”,循环,,do-while,语句的形式为:,do,循环体语句,while(,表达式,);,do-while,循环结构的执行过程:首先执行一次循环体语句,然后计算表达式(循环条件)的值。若结果为,“,真,”,(非零),则再次执行循环体,再计算表达式的值,如此重复下去,直到表达式的值为,“,假,”,(零)时,循环结束,流程控制转到循环结构的下一语句。,5.2 do-while,循环,【,例,5.3】,用,do-while,循环结构实现例,5.1,。,main(),int n,i,s;,printf(nEnter n:);,scanf(%d,i=1;s=1;,do,s=s*i;,i+;,while(i=n);,printf(nn!=%d,s);,5.2 do-while,循环,使用,do-while,循环结构应注意以下几点:,当,do-while,循环体包含一个以上的语句时应该用花括号括起来,以复合语句形式出现;循环体内也一定要有改变循环条件的语句,使循环趋向于结束。,下面的两个程序可以明显的看出,while,循环和,do-while,循环的区别。,5.2 do-while,循环,当输入,1,时,两个程序的运行结果是一样的:,The sum is 18,i=4,当输入,5,时,第一个程序的运行结果是:,The sum is 6,i=6,第二个程序的运行结果是:,The sum is 0,i=5,for,语句是功能强大的构成,“,当型,”,循环结构的循环语句。它不但可以用于循环次数已知的情况,而且还可以用于循环次数不定的情况。,程序形式:,for,(表达式,1,;表达式,2,;表达式,3,),循环体语句,5.3 for,循环,for,循环结构的执行过程:首先进行表达式,1,的运算,然后计算表达式,2,的值,若结果为真(非零),则执行循环体语句,最后进行表达式,3,的运算。再次计算表达式,2,的值,若结果为,“,真,”,(非零),再执行循环体语句,最后再进行表达式,3,的运算。如此循环重复下去,直到计算表达式,2,的结果为,“,假,”,(零)时,循环结束,流程控制转到循环结构的下一语句。,【,例,5.4】,用,for,循环结构实现例
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服