C语言程序设计案例教程(二)156



《C语言程序设计案例教程(二)156》由会员分享,可在线阅读,更多相关《C语言程序设计案例教程(二)156(156页珍藏版)》请在装配图网上搜索。
1、单击此处编辑母版文本样式,,第二级,,第三级,,第四级,,第五级,,单击此处编辑母版标题样式,,,Date:,28 November 2024,,Date:,28 November 2024,C语言程序设计案例教程,(二,),,,Date:,28 November 2024,第8次〔关系运算符、条件运算符〕,,本章主要知识点,根本的数据类型,,常量和变量,,结构体数据类型,,C语言各种运算符和表达式的应用,,复习,,关系运算符及表达式,,条件运算符及表达式,,授课要点,,问题引入,星光大道评委正在给最后决赛的两名选手打分,到底谁是冠军呢?我们现在只能根据最后的总分来决定。结果由选手的成绩要进行
2、比较得出。,,问题分析,表示两个操作数或表达式的大小关系,采用,关系运算符,,关系运算符及表达式举例,返回本节目录,#include,,void main(),,{,,,int a,b;,,printf("a=");,,scanf("%d",,,printf("b=");,,scanf("%d",,,printf("a>b:%d\n",a>b);,,printf("a
3、,a!=b);,,},观察以下程序的结果。,按以下图录入的结果是:,,模仿练习,使用关系表达式描述两个选手成绩,sa,和,sb,的关系:,,A,是冠军,,B,是亚军,,A,是亚军,,B,是冠军,,成绩相同,需要加时赛,,,,C语言中的关系运算符共有六种,它们是:,,> = <= != ==,,大于 小于 大于等于 小于等于 不等于 等于,,,关系运算符的运算结果为0〔假〕或为1〔真〕,,,关系表达式的优先级:低于算术运算符、高于逻辑运算符,,其中 !=和==符号低于>,=,<=,关系运算符及表达式总结,,关系运算符及表达式,,条
4、件运算符及表达式,,授课要点,,问题引入,学校根据同学的总评成绩评一、二、三等奖学金,总评成绩为,90,分及以上为一等奖学金、,88,分及以上为二等奖学金,,85,分及以上为三等奖学金。你的奖学金是几等呢?,,,问题分析,采用,条件运算符及表达式,可解决以上问题,,,问题求解,#include ,,void main(),,{,,float score;,,printf(",请输入总评成绩,:");,,scanf("%f",,,(score>=90)?printf(",一等奖学金,"):(score>=88)?printf(",二等奖学金,"):(score>=85)?printf(",三等奖
5、学金,"):printf(",没有奖学金,");,,},,模仿练习,使用条件表达式表示奖学金的评奖方式,学校根据同学的总评成绩评特等、一等、二等奖学金,总评成绩为,90,分及以上为特等奖学金、,88,分及以上为一等奖学金,,85,分及以上为二等奖学金。,,,条件运算符及表达式,,总结,条件运算符是“?:〞,是C语言中唯一的三目运算符,用条件运算符将两个表达式连接起来的符合C语法规那么的式子称为条件表达式。,,2.条件表达式的一般形式:,,表达式1?表达式2:表达式3 ;,,,,操作过程:先计算表达式1的值,假设为“真〞,那么计算表达式2的值,整个条件表达式的值就是表达式2的值;假设表达式1的值
6、为“假〞,那么计算表达式3,整个条件表达式的值就是表达式3的值。,,,条件运算符优先级低于逻辑运算符,其结合性是右结合。,,,,返回本节目录,,小组讨论并总结,比较赋值运算〔=〕符和等于〔= =〕的区别,,比较运算符的结果为什么?,,条件运算表达式如何计算?,,结论1——赋值运算符和等于运算符比较,,赋值运算符表示为,=,,其结果为将,=,右边的值赋给左边的变量,左边只能为变量,,等于运算符表示为,==,,其结果为逻辑值真和假,不修改任何变量的值,左右两边可为常量或变量,,结论2——比较运算符的结果,比较运算符的结果为0〔假〕,1〔真〕,,,,,结论,3——,条件运算符的运算方法,,,,,表达
7、式1?表达式2:表达式3 ;,,操作过程:先计算表达式1的值,假设为“真〞,那么计算表达式2的值,整个条件表达式的值就是表达式2的值;假设表达式1的值为“假〞,那么计算表达式3,整个条件表达式的值就是表达式3的值。,,条件运算符可以嵌套,过程与上类似,,学以致用,运动会上,跳高场上A同学跳的比B同学高,如何表示?,,100米短跑,A同学比B同学跑得快,如何表示?,,找一些生活中常见的例子,用比较运算表达式描述,,作业,——,每人必做,1,、用条件表达式描述:取三个数的最大者。,,2,、输入一名学生的某科成绩,输出等级。,,成绩,>,=,85,等级:,A,,成绩,>,=,70,等级:,B,,成绩
8、,>,=,60,等级:,C,,成绩,<60,等级:,D,,作业,——,小组必做,学以致用:,,找一些生活中常见的例子,用条件运算表达式描述,,例如:某银行存款,5,万块以上可以办金卡、存款,20,万以上可以办,VIP,特种卡,其余为一般信用卡,根据存款金额判断某用户的银行卡种类。,,,IT Education & Training,,Date:,28 November 2024,第9次〔逻辑运算符〕,,本章主要知识点,根本的数据类型,,常量和变量,,结构体数据类型,,C语言各种运算符和表达式的应用,,复习,,逻辑运算符及表达式,,数据类型转换,,授课要点,,问题引入,年份,要判断该年是否为闰年
9、?〔该年份能够被400整除,或者能够被4整除并且不能被100整除〕,,问题分析,表示两个操作数或表达式能够同时满足多个条件或满足多个条件之一,采用,逻辑运算符,,问题解决,返回本节目录,#include /*该程序利用逻辑表达式判断是否为闰年*/,,void main(),,{,,int year;,,printf("请输入年份判断是否为闰年:");,,scanf(“%d〞, /*输入年份*/,,year%400==0||(year%4==0 /*逻辑表达式*/,,},判断输入的年份是否为闰年?,,模仿练习,1,、判断字符,ch,是否为大写字母的表达式,,2,、判断字符,ch
10、,是否为字母的表达式,,,,,逻辑表达式的结果为逻辑值,真,1,或假,0,,,在进行条件判断时,非,0,为真,,0,为假,,其结果可以赋值给整型变量或字符型变量,,注意:,,逻辑运算符的运算为,短路运算,,即在,&&,左边值为,0,时不再计算右边,,||,左边值为,1,时不再计算右边,,,如:,x=1;y=1,计算,--,x&&--y,后,x,y,的值,,,x=1;y=1,,计算,++,x||++y,,后,x,y,,的值,逻辑运算符及表达式总结,,,,三种逻辑运算符:,,〔1〕 && 逻辑与 〔二元运算〕,,〔2〕 || 逻辑或 〔二元〕,,〔3〕 ! 逻辑非 〔一元〕,,
11、参照逻辑运算真值表,有以下运算规那么:,,1.a&&b 当且仅当a和b都为1值为1,否那么为0,,2.a||b 当且仅当a和b都为0值为0,否那么1,,3. !a 其值和a的值相反,,注: &&运算符优先级高于||运算符,逻辑运算符及表达式总结,,,运算符及表达式总结:,表达式运算顺序:先判断优先级,先按优先级高的运算符计算,如优先级相同,那么看结合性。,,优先级:,,括号→单目运算符→ 算术运算符→关系运算符 → 逻辑运算符→三目运算符 →赋值运算符 →逗号运算符,,2结合性:,,所有的单目运算和三目运算符,赋值运算符为自右向左,其余为自左向右。,,模仿练习,x=1,y=10,z
12、=(,x,y,);,求,x,y,z,的值?,,X=1,y=10,z=x=y;,求,x,y,z,的值?,,,,复习,,逻辑运算符及表达式,,数据类型转换,,授课要点,,问题引入,设,x=2.5,a=7,y=4.7,,求表达式的值:,x+a%3*(int)(x+y)%2/4-9,,,问题分析,,计算上式,容易将结果误写为-6.25,,编写程序,将该式在VC环境下调试,结果为-6.5,,原因:a%3*(int)(x+y)%2/4局部计算的结果应为0,因为整型数和整型数运算的结果为整型,而非小数0.25。在运算过程中必须弄清不同数据类型间计算时发生的数据类型转换,,数据类型转换〔隐式转换〕,自动转换条
13、件:,,不同类型数据进行混合运算自动转换,规那么如以下图:,,double,float,long,unsigned,int,char,short,低,高,说明,:,必定的转换,运算对象类型不同时转换,,显式转换〔强制转换〕,一般形式:,,〔类型名〕〔表达式〕,,有如下定义: float x,y;,,( int ) (x+y);,,注:得到所与类型的中间变量,原来的变,,量类型不变。,,较高类型向较低类型转换时可能发生精度损失,例 main(),,{ float x;,,int i;,,x=9.8;,,i=(int)x;,,printf(“x=%f,i=%d〞,x,i);,,},,结果
14、:x=9.800000,i=9,,转换规那么,〔1〕单、双浮点型→整型:小数局部舍弃,,,有效位截取〔字符型低8位〕,,〔2〕整型→浮点型:数值不变,存储到浮,,点型变量中,,〔3〕假设运算符两边均为整型,那么结果按整,,形处理,,〔4〕假设运算符一边以上为浮点型,小数,,局部保存,,补充:sizeof()运算符,,sizeof(,类型名,/,变量名,),该函数用来得到该类型,/,该变量存储在内存中所占的字节数:,,如:在,VC,环境中,,sizeof(short),的值为,2,,sizeof(int ),的值为,4,,,如有定义,float x,y;,,在,VC,环境中,,sizeof(x
15、),的值为,4,,sizeof(y),的值为,4,,,,模仿练习,将整型数,20,转换为浮点型,如何转换?,,使用,sizeof,( ),运算符求,char,、,int,、,short,、,long,、,float,、,double,、,long double,等类型在,VC,环境中的存储字节数,,,小组讨论并总结,逻辑运算表达式的值和算术运算表达式的值区别是什么?,,&&,运算符和,||,运算符什么时候出现短路运算,,各逻辑运算符的优先级别讨论,,结论1——逻辑运算、算术运算值比较,,逻辑运算结果只能为0或1,算术运算结果可为相应范围内的整型或实型值,,当算术运算结果作为逻辑运算的运算对象时
16、,非0认定为逻辑值1,否那么为0,,,结论,2——&&,运算符和,||,运算符短路运算,,&&,运算符的左边出现,0,,||,运算符的左边出现,1,,,,,,,结论,3——,逻辑运算符的优先级别讨论,,,,!为单目运算符,其优先级高于所有双目运算符,,&&、||运算符优先级低于算术运算和比较运算符,高于条件运算符,,&&运算符优先级高于||运算符,,学以致用,找出生活中一些满足多个条件的运算,并且用逻辑表达式表示,,例如:实型变量,x1,、,x2,和,x3,中依次存放着语文、数学和外语的入学考试成绩,录取的标准是平均分及格,而且三门成绩中至少有一门超过,75,,写出判断能否录取的表达式。,,作
17、业,——,每人必做,1.,求表达式的值:,17,,!(2<=6),,!(15),,2.,输入两门功课,其中有一门大于,80,分为过关,写出判断过关的表达式。,,3.,输入两门功课,其中有两门功课成绩都大于,85,分为优秀,写出成绩优秀的表达式,,作业,——,小组必做,学以致用:,,寻找身边的实际问题,用逻辑表达式来描述,,例如:乘坐公交车,刚上车并且没买票,那么要购票。,,,Date:,28 November 2024,第三章,,结 构 化 程 序 设 计,,授课要点,控制流程的三种根本结构,,算法实现的步骤,,流程图的绘制,,问题,1,:塑造迷人的身材,外表美丽的你,是否拥有迷人的身材?,,
18、,魔鬼身材的计算标准:,,标准体重=〔身高-100〕×0.9〔单位:千克〕,,问题,1,分析,算法分析,,√输入:身高,,√处理:根据公式标准体重=〔身高-100〕×0.9进行计算,,√输出:体重,,√控制结构之一:顺序结构,,算法描述——流程图,,流程图的根本符号表示,开始和结束 数据输入输出 选择框,,,,数据处理 数据处理方向,,流程图,——,顺序结构,顺序结构流程图表示,A,B,★提示:,执行顺序与处理块的,,顺序相同,根据流线,,从上往下依次执行。,,流程图的绘制,——,魔鬼身材的计算,,1.,输入身高,,,2.,计算标准体重,,,3.,输出标准
19、体重,sweight=(height-100)*0.9,结束,开始,输入身高,height,输出标准体重,sweight,,学生模仿练习,绘制流程图,——,顺序结构,,【,练习,1】,求学生三门课程的平均分,,,问题,2,:拥有健康的体型,标准体重=〔身高-100〕×0.9〔单位:千克〕,,其数值的正负10%为健康。,也许您正在叹息自己没有魔鬼的身材,但是,,,请记住:健康让您充满活力,更具魅力!,,问题,2,分析,算法分析,,输入:用户的身高、体重,,处理:,,〔1〕根据公式标准体重=〔身高-100〕×0.9进行计算,,〔2〕判断用户的体重是否在标准体重的正负10%内,,输出:体重是否在标准
20、范围内,,控制结构之二:分支结构——单分支结构,,算法描述——流程图,,流程图,——,分支结构,条件,P,A,B,Y,N,执行顺序:,,,,根据条件P进行,,判断,如果条件,,成 立那么执行A部,,分的数据处理,,,否那么执行B局部,,的数据处理,然,,后执行分支结构,,后的局部。,,,流程图的绘制—健康体型的判断〔单分支〕,,1.输入身高、体重,,2.计算标准体重,,3.比较是否在正常范围,,,4.根据不同结果输出,sweight=(height-100)*0.9,结束,输入身高,height,,体重,weight,输出体重超标,(weight>sweight*1.1)||(weight
21、weight*0.9),输出体重正常,开始,Y,N,,,学生模仿练习,绘制流程图——分支结构〔单分支〕,,【练习2】判断学生三门课程的平均分是否及格,,问题,2,扩展:拥有健康的体型,标准体重=〔身高-100〕×0.9〔单位:千克〕,,其数值的正负10%为健康。,也许你测试的结果是:体重超标!,,可是你更关心的结果是:偏瘦或偏胖?,,问题,2,分析,算法分析,,输入:用户的身高、体重,,处理:,,〔1〕根据公式标准体重=〔身高-100〕×0.9进行计算,,〔2〕分三种情况讨论:,,a.体重超过标准体重*1.1:偏胖,,b.体重低于标准体重*0.9:偏瘦,,c.体重在正常范围内: 标
22、准,,输出:体重属于偏胖、偏瘦、正常,,控制结构之二:分支结构——多分支结构,,算法描述——流程图,,流程图的绘制——健康体型的判断〔多分支〕,,sweight=(height-100)*0.9,结束,输入身高,height,,体重,weight,输出体重正常,weight>sweight*1.1,输出体型偏胖,开始,weight 23、状况,标准体重=〔身高-100〕×0.9〔单位:千克〕,,其数值的正负10%为健康。,健康的您,也许很想知道自己的父母、朋友和同学 们是否都和您一样健康。,,问题,3,分析,算法分析,,输入:多个用户的身高、体重,,处理:,,〔1〕根据公式标准体重=〔身高-100〕×0.9进行计算,,〔2〕判断多个用户的体重是否在标准体重的正负10%内,,输出:多个用户的体重是否正常,,控制结构之三:循环结构,,算法描述——流程图,,流程图,——,循环结构,〔1〕当型 〔2〕直到型,条件,P,A,Y,N,A,条件,P,Y,N,执行顺序:先对条件P进行判断,条 24、件成立执行A,并且再次判断,如果条件成立继续以上过程,当条件不成立时那么跳出循环,执行顺序:先执行循环体A一次,再对条件P进行判断,条件成立,如果条件成立再次执行A,重复以上过程,当条件不成立时那么跳出循环,,,流程图的绘制,——,朋友们的健康状况,,结束,(weight>sweight*1.1)||(weight 25、按照以下标准判断,10,名学生三门课程的平均分属于哪种等级:,,,85,分以上,:A,,70,~,85:B,,60,~,70:C,,,低于,60:D,,,小组讨论并总结,算法实现的步骤。,,流程图的作用。,,常用的绘制流程图的工具有哪些。,,结论1——算法实现的根本步骤,算法分析,,输入、输出、处理,,控制结构〔顺序、分支、循环〕,,算法的描述,,自然语言,,流程图,,程序的实现,,C语言,,结论,2——,流程图的作用,程序流程图是人们对解决问题的方法、思路或算法的一种描述。,,流程图的优点:,,〔a〕采用简单标准的符号,画法简单;,,〔b〕结构清晰,逻辑性强;,,〔c〕便于描述,容易理解。, 26、,结论,3——,常用的绘制流程图的工具,Visio,,Office,工具,,SmartDraw,,FlowBiz Charter,,亿图图示专家,(EDraw Max),,学以致用,寻找你身边的一个实际问题,用流程图描述出解决问题。,,例如,学院对学生上网收费按流量计算,标准如下:,,低于2G 30元,,超过2G以上 按公式计算p = 2+(f –2)*5,,其中,上网费用为p(price的缩写),流量为f(flow的缩写)。,,,上网收费计算,需要输入学生上网流量,要考虑:单人上网收费计算;知道需要计算所得税的具体人数〔如10人〕上网费用的计算;不知道具体人数多人上网费用的计算。 27、,,作业,——,每人必做,1、思考如何求一个数的绝对值,用流程图描述。,,2、请将判定闰年的算法用流程图描述出来。,,3、输出50个学生中成绩高于80分者的学号和成绩。,,4、绘制“学生成绩管理系统〞流程图〔主菜单局部-循环〕,,成绩管理系统主菜单介绍,,成绩管理系统主菜单提示,1.显示界面如下图,,2.用户输入不同数据有不同的输出显示,,3.从选项0~6依次判断,假设输入值与某个值匹配,那么输出该选项的功能。否那么输出用户输入选项错误提示。,,4.当有选项功能输出后,判断是否结束程序,是那么结束程序,否那么将继续显示主菜单,继续选择,,作业,——,小组必做,1、学以致用:寻找你身边的一个实际 28、问题,描述该问题并画出流程图。例如,上网搜索所得税的计算方法,并针对以下情况进行所得税的计算:单个人所得税的计算;假设知道需要计算所得税的人数如10人所得税的计算;不知道具体人数所得税的计算。,,2、绘制“猜数字游戏〞的流程图。编程先由计算机“想〞一个1到100之间的数请人猜,如果人猜对了,那么计算机给出提示:“Right!〞, 否那么提示:“Wrong!〞,并告诉人所猜的数是大(Too high)还是小(Too low),最多可以猜10次。如果猜了10次仍未猜中的话,那么停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。,,,Neusoft Insti 29、tute of Information,办公室:C7座201,,办公室 :,,EMAIL:,,课件下载 ftp://,,,Date:,28 November 2024,第三章,,结 构 化 程 序 设 计,,结构化程序设计,——,分支结构,,复习,,if,语句,,使用,if,语句嵌套,,switch,语句,,,授课要点,,体重问题,标准体重=〔身高-100〕×0.9〔单位:千克〕,,其数值的正负10%为健康。,,你是否拥有一个健康的体型呢?,,,如何用C程序实现以上体型判断?,,问题分析,据标准,一个人的体重有两种可能性:体重在标准范围内、体重超标。流程图描述为两分支结构,采用,if- 30、else,结构,即可解决。,,if-else,描述分支结构,根据已有流程图,进行描述,,将分支结构局部流程图转换为if-else结构描述,B,条件,P,A,Y,N,,if(,条件,P),,{A},,else,,{B},A,和,B,为处理模块,,问题求解:流程图转换为程序,程序,sweight=(height-100)*0.9,输入身高,height,,体重,weight,开始,结束,输出体重超标,(weight>sweight*1.1)||(weight 31、t; /*用户身高*/,,float sweight,weight; /*标准体重,用户体重*/,,printf("\n请输入您的身高,以cm为单位:");,,scanf("%d", /*输入身高,单位为cm*/,,printf("\n请输入您的体重,以kg为单位:");,,scanf(“%f〞, /*从键盘输入体重,单位为kg*/,,sweight=(height-100)*0.9; /*计算标准体重*/,,if((weight>(sweight*1.1))| 32、|(weight<(sweight*0.9))) //超过标重,,printf("\n您的体重超过正常范围,请注意改善!");,,else //在正常范围内,,printf("\n恭喜您!您的体重很完美!");,,},,模仿练习,根据流程图用if-else结构编写程序,,,【练习1】输入学生的三门课程成绩(实数,0~100之间),计算平均分并判断是否及格,成绩大于等于60输出平均分及格,否那么输出平均分不及格。,,复习,,if,语句,,使用,if,语句嵌套,,switch,语句,,,授课要点,,体重问题拓展,也许你测试的结果是:体重超标!,,可是你更关心的结果是:偏瘦或偏胖?,,,标 33、准体重=〔身高-100〕×0.9〔单位:千克〕,,其数值的正负10%为健康。,,体重问题拓展分析,(,多分支,),根据问题描述,体型的判断有三种结果:健康体型、偏胖、偏瘦,流程图描述采用两次分支结构,采用,嵌套的,if-else,结构,即可解决。,,,采用多分支结构〔多个if-else结构〕进行判断方式,条件,1,条件,2,A,C,B,N,Y,N,if(,条件,1),,{ A },,else,,{,,if(,条件,2),,{B},,else,,{C},,},A,、,B,、,C,为处理块,,多分支结构流程图,N,结束,输出体重正常,weight 34、ht>sweight*1.1,输出体型偏胖,Y,N,,嵌套的if-else局部代码,if(weight>(sweight*1.1)) /*,偏胖*,/,,,printf(“\n,您的体型偏胖,请注意改善!,");,,else,,{,,if(weight<(sweight*0.9)) /*,偏瘦*,/,,,printf(“\n,您的体型偏瘦,请注意改善!,");,,else /*,在正常范围内*,/,,,printf("\n,恭喜您!您的体重很完美!,");,,},,,,程序,sweight=(height-100)*0.9,输入身高,height,,体重,weight 35、,开始,N,结束,输出体重正常,weight 36、g,,stand_weight=(height-100)*0.9; //计算标准体重,,if(weight>(sweight*1.1)) //超重,,printf(“\n您的体型偏胖,请注意改善!");,,else,,{,,if(weight<(sweight*0.9)) //偏轻,,printf(“\n您的体型偏瘦,请注意改善!");,,else //在正常范围内,,printf("\n恭喜您!您的体重很完美!");,,},,},,模仿练习,根据流程图用if-else嵌套结构编写程序,,【练习2】输入学生的三门课程成绩(实数,0~100之间),计算平均分并判断平均分属于哪种等级 37、,,〔85分以上:A 70~85:B 60~70:C 低于60:D〕,,if,语句嵌套总结,用于表达多个判断条件,多分支结构,,一般形式:,,,if (〈,表达式,1〉),,{,语句,1},,else if ( <,表达式,2>),,{,语句,2},,else,,{,语句,3},,执行顺序:,,先对表达式1进行判断,条件成立执行语句1,否那么对表达式2进行判断,条件成立执行语句2,否那么执行语句3,★ 注意:,,当采用省略else形式时,要注意 if 和 else 的配对规那么。用else 与前面最接近它且未配对的if 配对。,,复习,,if,语句,,使用,if,语句嵌套,,s 38、witch,语句,,,授课要点,,问题,2:,打印课程表,,假设星期一到星期五的课程各不相同,请将课程表打印出来。,,判断方法:逐一用输入的星期几day和1~7比较,假设相同输出该天的课程,假设不相同继续比较,输入的day如果不在1~7之间那么显示输入错误,,问题分析,从星期一到星期天共7天,假设采用if-else嵌套,层数太多,而对天数的判断条件比较简单,分支较多的多分支结构,采用switch结构最简洁合理。,,,1.算法描述——流程图,,2.采用switch结构描述流程图,,1.,流程图,开始,结束,输入星期几,day,day= =1,day= =2,day= =4,day= =3,day 39、= =5,day= =6,day= =7,输出课程,1,输出课程,2,输出课程,3,输出课程,4,输出课程,5,输出无课,显示输入错误,Y,Y,Y,Y,Y,Y,Y,N,N,N,N,N,N,N,,,2.,采用,switch,结构实现课程表输出,#include ,,main( ),,{,,int day;,,printf( "please enter your day:");,,scanf("%d",,,switch(day) /*对day进行判断*/,,{,,case 1 : printf(“\n今天上课程1!〞);break; /*输入为1时的输出*/,,case 2 : p 40、rintf(“\n今天上课程2!〞);break; /*输入为2时的输出*/,,case 3: printf (“\n今天上课程3!〞);break; /*输入为3时的输出*/,,case 4 : printf (“\n今天上课程4!〞);break; /*输入为4时的输出*/,,case 5 : printf (“\n今天上课程5!〞);break; /*输入为5时的输出*/,,case 6 :,,case 7 : printf(“今天无课!〞);break; /*输入为6、7时的输出*/,,default: printf(“你输入的数不在1~7之间,输入错误 41、!〞); /*输入1-7以外的 输出*/,,},,},,模仿练习,根据流程图用switch结构编写程序,,【练习3】输入学生的成绩等级〔字符型,’A’~’D’〕,判断其成绩分数的范围,,〔 ’A’ : 85分以上 ’B’: 70~85 ’C’: 60~70 ’ D’ :低于60〕,,switch,语句总结,switch,语句用于实现判断条件单一,,,而实现较多分支的选择结构。,一般形式:,,,switch(<,表达式,>),,{,,case <,常量表达式,1>,:,<,语句序列,1>,,case <,常量表达式,2>,:,<,语句序列,2>,,,,,,case <,常量表达式,n>,: 42、,<,语句序列,n>,,default: <,语句序列,n+1>,,},,执行顺序:,,先对switch后括号中的表达式进行运算,依次和常量表达式1到常量表达式n匹配,假设表达式的值与某个常量表达式的值相同,那么执行相应的语句序列,遇到break跳出switch结构,如果没有与任何常量表达式相同,那么执行default后的语句序列n+1,,break,语句举例,调试以下程序,漏掉了break语句,分别输入A~D,分析程序运行结果,,#include ,,void main(),,{,,char grade; /*grade为字符型*/,,printf("\n请输入等级A~D: 43、");,,scanf("%c",,,switch(grade) /*grade判断*/,,{,,case ‘A’:printf(“85~100\n〞); /*等级A输出*/,,case ‘B’:printf(“70~84\n〞); /*等级B输出*/,,case ‘C’:printf(“60~69\n〞); /*等级C输出*/,,case ‘D’:printf(“<60\n〞); /*等级D输出*/,,default:printf(“error\n〞); /*其他情况输出*/,,},,},★,,思考:,,要让程序根据不同的等级输出相应的 44、分数段,应如何修改?,,小组讨论并总结,1.在switch语句中,break的作用是什么?如果忽略break,程序将出现什么运行结果?,,2.在多分支结构中,什么时候用if-else嵌套,什么时候用switch结构更好?,,3.嵌套if语句的匹配原那么。,,结论,1——switch,中,break,作用,break,的使用,:,,1.,用在,switch,结构中,跳出,switch,结构,,2.,用于循环体中,跳出所在的一层循环体,,,在,switch,中漏掉,break,将执行条件成立分支后有所有分支,直到遇到下一个,break,,提示:通常在每一个,case,语句结束后都要写上,break 45、;,,结论,2——,多分支语句选择,多分支结构实现:if-else嵌套结构和switch结构,,选择方法:,,if-else嵌套结构:,,判断条件比较复杂,无法采用一个简单常量表达式,分支数量较少时采用,,switch结构:,,判断条件单一,分支的数量较多时采用switch结构,,结论3——嵌套if语句的匹配原那么,嵌套if语句中if与else没有成对出现时,要注意匹配原那么:,,,else总是与在同一层中的离它最近的未配对的if 配对,,学以致用,寻找你身边的一个实际问题,编写解决问题的程序,用到选择结构。例如:用C语言中的if-else语句实现以下程序:某求职系统中存放某单位新入职的工资金 46、额,请用户输入他所期望的工资数,如果输入值大于系统存放的金额那么显示:“您的期望值过高,我公司无法满足您的要求!〞如果输入值小于等于系统存放的金额那么显示“您的期望值在我公司能力范围内!欢送您的应聘。〞,,学以致用,又如:用C语言中的if-else语句实现某系统验证用户名和登陆密码的程序:系统内存放用户名和登陆密码〔整型变量〕,用户从键盘分别输入用户名和登陆密码,判断用户输入的与系统存放的是否相同,如果用户名和的登陆密码均正确,那么显示“登陆成功〞。如果仅用户名错误那么显示“登陆失败,用户名错误〞,如果仅登陆密码错误那么显示“登陆失败,密码错误〞,如果用户名和登陆密码全都错,那么显示“登陆失败 47、,用户名和密码全都错误〞。,,作业,——,每人必做,,1、求一个数的绝对值。,,2、实现判定闰年的算法。,,3、输出50个学生中成绩高于80分者的学号和成绩。,,4、键盘输入三个整数,编程实现按从大到小的顺序输出。,,5、完成“学生管理系统〞〔非循环主菜单〕:用switch结构实现。,,成绩管理的工程的主菜单实现,1.主菜单的实现,用非循环实现,功能选择采用switch():,,包含七个选项:,,〔1〕录入学生记录,,〔2〕修改学生记录,,〔3〕查询学生信息,,〔4〕统计学生成绩,,〔5〕显示学生信息,,〔0〕退出程序,,学生成绩管理系统主菜单,,作业,——,小组必做,,1.学以致用:到网上搜 48、索资料,找出日常生活中会用到 选择结构这种控制流程的例子,用C语言进行实现。,,例如,可以搜索“成都市医疗保险个人帐户金〞的计算 方法,用C语言中的if-else语句进行实现。,,,Date:,28 November 2024,第三章,,结 构 化 程 序 设 计,,问题,1,:,5,人的健康状况,标准体重=〔身高-100〕×0.9〔单位:千克〕,,其数值的正负10%为健康。,健康的您,也许很想帮助他人了解自己是否健康。恰好你身边就有,5,名测试者,他们也很想关心自己的健康状况,输入他们的身高、体重。帮助他们了解体重是否正常或体重超标!还是偏瘦或偏胖?,,问题分析,算法分析,,输入:5个用户的 49、身高、体重,,处理:,,〔1〕根据公式: 体重=〔身高-100〕×0.9 进行计算,,〔2〕判断5个用户的体重是否在标准体重的正负10%内,,输出:5个用户的体重是否正常,,控制结构之三:for循环结构,,算法描述——流程图,,结束,开始,人数,i,小于等于,5,人数,i,为,1,人数,i,加,1,sweight=(height-100)*0.9,输入身高,height,输出体重超标,输出体重正常,Y,N,(weight>sweight*1.1)||(weight 50、main() //主函数,,{,,int height; //用户身高,,float sweight,weight; //标准体重,用户体重,,printf("\n请输入您的身高,以cm为单位:");,,scanf("%d", //输入身高,单位为cm,,printf("\n请输入您的体重,以kg为单位:");,,scanf(“%f〞, //从键盘输入体重,单位为kg,,sweight=(height-100)*0.9; //计算标准体重,,if((weight> 51、(sweight*1.1))||(weight<(sweight*0.9))) //超过标重,,printf("\n您的体重超过正常范围,请注意改善!");,,else //在正常范围内,,printf("\n恭喜您!您的体重很完美!");,,},,顺序+选择结构程序解决此问题时,蓝色局部的代码段要重复写5次。显然顺序+选择结构解决重复的相同问题并不适合,且还会随解决问题规模的增长程序逐渐增大,低效、不易修改及扩展。,,循环结构实现,#include //,输入输出库函数,,void main() //,主函数,,{,,int height,i; 52、 //,用户身高,,,float sweight,weight; //,标准体重,用户体重,,,for(i=1;i<=5;i++),,{,,printf("\n,请输入您的身高,,,以,cm,为单位:,");,,scanf("%d", //,输入身高,,,单位为,cm,,printf("\n,请输入您的体重,,,以,kg,为单位:,");,,scanf("%f", //,从键盘输入体重,,,单位为,kg,,sweight=(height-100)*0.9; //,计算标准体重,,,if((we 53、ight>(sweight*1.1))||(weight<(sweight*0.9))) //,超过标重,,,printf("\n,您的体重超过正常范围,请注意改善!,");,,else //,在正常范围内,,,printf("\n,恭喜您!您的体重很完美!,");,,},,},,模仿练习,循环结构,——for,循环结构,,【,练习,1】,打印自己的名字,20,遍。,,,问题,2,:如何计算,1,+,2,+,3,+,…100,?,,循环结构实现,#include //,输入输出库函数,,void main() //,主函数,,{,,,int i, 54、iSum=0;,,for(i=1;i<=100;i++),,iSum+=i;,,printf("1+2+3+…+100=%d\n",iSum);,,},,,模仿练习,循环结构——for循环结构,,【练习2】求1~100中所有偶数的和,,【练习3】计算并输出1-3+5-7+……-99+101的值,,【练习5】计算并输出数列1 –1/3 + 1/5 - 1/7 + 1/9 - 1/11 + …… + 1/101,,【练习6】从键盘读入一整数n〔n <= 10〕,计算n的阶乘n!〔n! = 1 × 2 × 3 …… × n〕,并将结果输出。,,for结构本卷须知,for的结构中,提供了条件初始化, 55、条件和条件改变的位置。虽然在三者同一行上,但并不是依次连接地执行。,,条件初始化的表达式首先被执行〔并且只被执行一次〕;,,然后程序检查条件是否成立,如果成立就执行循环体中的语句,否那么直接结束循环。,,执行完一遍循环以后,程序执行“条件改变〞语句。,,建议对for循环结构的语句块使用花括号。这样可以让程序的结构看上去更清晰 。,,for的所有表达式均可省略,,循环结构设计的分析方法,循环结构用于描述一些重复执行的语句。,,循环结构分析步骤:,,〔1〕分析循环条件或退出条件及执行次数,,〔2〕分析循环的语句,,〔3〕分析循环控制条件〔用什么变量控制循环次数或退出条件〕,,〔4〕选择某种语句来描 56、述〔while,do…while,for〕,,,Date:,28 十一月 2024,第三章,,结 构 化 程 序 设 计,,问题:多人的健康状况,标准体重=〔身高-100〕×0.9〔单位:千克〕,,其数值的正负10%为健康。,当你想为更多的人进行测试,且测试人数无法准确统计时。你越来越需要建立一个可对任意人数健康进行测试,且开始和终止都可由你控制的软件。,,问题分析,算法分析,,输入:多个用户的身高、体重,,判断:身高为0,退出程序,,处理:,,〔1〕根据公式标准体重=〔身高-100〕×0.9进行计算,,〔2〕判断多个用户的体重是否在标准体重的正负10%内,,输出:多个用户的体重是否正常,,控 57、制结构之三:while循环结构,,算法描述——流程图,,结束,开始,Height==0,sweight=(height-100)*0.9,输出体重超标,输出体重正常,Y,N,(weight>sweight*1.1)||(weight 58、oat sweight,weight; //,标准体重,用户体重,,,while(height!=0),,{,,printf("\n,请输入您的体重,,,以,kg,为单位:,");,,scanf("%f",,,sweight=(height-100)*0.9;,,if((weight>(sweight*1.1))||(weight<(sweight*0.9))),,printf("\n,您的体重超过正常范围,请注意改善!,");,,else,,printf("\n,恭喜您!您的体重很完美!,");,,printf("\n,请输入您的身高,,,以,cm,为单位:,");,,s 59、canf("%d",,,},,},,while,语句结构,while(,条件表达式,),,{,,,循环体语句;,,,……,;,,},,,,模仿练习,循环结构——while循环结构,,【练习1】循环输入某学生的假设干门课程成绩,并计算学生的总分,当学生输入-1时表示成绩输入完毕 。,,【练习2】用while结构计算1+2+3……+100的值。,,while语句本卷须知,1.其特点为"先判断,再执行",循环体可能一次也不执行。,,2.当循环体为多个语句时,必须用{ }括起来,,3.循环最终能够结束,那么条件判断的表达式值能够满足退出条件,执行一次循环体后,表达式或循环体的某个值必定有变化。,,4. 60、条件表达式的计算比循环体的执行多一次,,,〔不满足循环条件的那一次〕,,do-while,结构实现,#include //,输入输出库函数,,void main() //,主函数,,{,,int height,i; //,用户身高,,,float sweight,weight; //,标准体重,用户体重,,,do,,{,,printf("\n,请输入您的身高,,,以,cm,为单位:,");,,scanf("%d",,,printf("\n,请输入您的体重,,,以,kg,为单位:,");,,scanf( 61、"%f",,,sweight=(height-100)*0.9;,,if((weight>(sweight*1.1))||(weight<(sweight*0.9))),,printf("\n,您的体重超过正常范围,请注意改善!,");,,else,,printf("\n,恭喜您!您的体重很完美!,");,,}while(height!=0);,,},,do-while,语句结构,do,,{,,,循环体语句;,,,……,;,,} while(,条件表达式,);,,,,模仿练习,【练习1】尝试能否用do-while结构实现:循环输入某学生的假设干门课程成绩,并计算学生的总分,当学生输入-1时表示 62、成绩输入完毕 。,,【练习2】用do-while结构计算1+2+3……+100的值。,,【练习3】求3个数的最小公倍数。,,【练习4】计算正整数num的各位数字之积。,,do-while 语句应注意,,与while 语句的区别:,,1.进入循环体后,先执行一次,再判断至少执行一次循环体。,,2.判断条件次数和循环体执行次数相同。,,3.while ( )后的';'〔分号〕不能少,,4.C语言中do-while 结构中条件表达式为真时执行循环体,否那么退出,与其他语言相区别。,,选择三种循环的一般思路,,如果循环次数,用for,,,如果循环次数未知,用while,,,如果循环体至少要执行一次,用 63、do-while,,,只是思路,不是定律,,循环语句的选择,三种结构的转化关系:,,,do,,{,,,语句,,}while(,表达式,),;,表达式,1,;,,While(,表达式,2),,{,语句,,表达式,3,;,,},for(,表达式,1,;表达式,2,;表达式,3),,语句,语句,,while(,表达式,),,{,语句,,},,循环语句的选择,三种结构的转化关系举例:,,,i=1;,,do,,{ printf(“i=%d\n〞,i);,,i++;,,}while(i<5);,i=1;,,while(i<5),,{ printf(“i=%d\n〞,i);,,i++;,,},for(i= 64、1;i<5;i++),,printf(“i=%d\n〞,i);,i=1;,,while(i<5),,{ printf(“i=%d\n〞,i);,,i++;,,},,小组讨论并总结,一般情况,如何选择采用,while,还是,for,或,do-while,结构,,while,、,for,、,do-while,的一般格式有什么区别,,while,和,do-while,执行过程有什么区别,,结论,1——,一般情况,如何选择采用,while,还是,for,或,do-while,结构,当确定需要循环时,首先要确定需要入口条件循环还是退出条件循环。,,假定需要入口条件循环,在循环涉及到初始化和更新变量时使 65、用,for,循环较为适当,而在其他条件下使用,while,循环更好些。对涉及到索引计数的循环用,for,循环是更好的选择。,,对于那些至少需要执行一次循环的情况,应该把,do-while,循环做为首选。,,结论,2——while,、,for,、,do-while,的一般格式有什么区别,while,循环和,for,循环都是入口条件循环,执行循环之前先检查判断条件。,,do-while,语句的流程是先执行,后判断。,,结论,3——while,和,do-while,执行过程有什么区别,while,循环是入口条件循环,在每次执行之前先检查判断条件,这样循环中的语句就有可能一次也不执行。,,do-whi 66、le,循环是退出条件循环,判断条件在执行循环之后进行检查,这样循环体中的语句至少被执行一次。,,学以致用,寻找你身边的一个实际问题,编写解决问题的程序,用到循环结构。例如:假设你在某公司工作,老板要你打印一张表,买主可以用它来购置特定部件的费用。单个部件的价格从1元到9元不等。因此,你要打印一张像下面这样的数字表:,,部件费用明细表,,1 2 3 4 5 6 7 8 9,,2007年4月7日,,作业,——,每人必做,1,、,编写程序实现功能:求出,1+2+3+4+ … +100,的值,并显示结果。,,2,、编写程序实现功能:求出,n!,=,1×2×3×…×n,的值,并显示结果。,,3,、写一个小型计算器。,,附:小型计算器简单介绍,,附:小型计算器程序编写要求:,1,.有简单运算选择界面,,2,.采用循环实现菜单显示,,3,.采用,switch,结构实现菜单的选择,,4,.运算对象为两个操作数,从键盘输入,,5,.运算结果输出,,作业,——,小组必做,1、学以致用:寻找你身边的一个实际问题,编写解决问题的程序,用到循环结构。例如使用循环结构实现一个常用字符的ASCII码
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。