第二轮上机:3-4结构化程序基本结构.ppt
- 文档编号:11190026
- 上传时间:2023-05-29
- 格式:PPT
- 页数:113
- 大小:899KB
第二轮上机:3-4结构化程序基本结构.ppt
《第二轮上机:3-4结构化程序基本结构.ppt》由会员分享,可在线阅读,更多相关《第二轮上机:3-4结构化程序基本结构.ppt(113页珍藏版)》请在冰点文库上搜索。
第2轮上机目的:
结构化程序基本结构,2.1用顺序结构设计程序2.2用分支结构设计程序2.3用循环结构设计程序2.4联合使用3种基本结构处理复杂问题,2.1.1交换两个数据2.1.2设计菜单,2.1用顺序结构设计程序,2.1.1交换两个数据,在日常生活中经常需要进行交换操作,如交换两杯水。
同样在C语言中也经常需要交换两个数据,例如,为了保证在a中存放较大者,当b比a大时,需要交换变量a和b中的值。
问题的提出,【实例2-1】编写程序,从键盘输入两个数,并交换它们的值。
任务与分析,2.1.1交换两个数据,P26,程序代码,#includemain()intx,y,t;printf(Inputxandy:
);scanf(%d%d,程序设计一般包括问题分析、确定算法、确定数据结构。
归纳分析,算法是用计算机解决某个特定问题的步骤,其特性:
有穷性确定性有效性有0个或多个输入数据有1个或多个输出数据,算法是最关键,顺序结构流程图:
归纳分析,交换算法需要借用第3个变量,如同交换两杯水需要借用第3个杯子一样。
语句“t=x;x=y;y=t;”不能写成“x=y;y=x;”,归纳分析,编写程序,从键盘输入3个数分别存放在a、b和c中,并交换a和b的值,再交换a和c值。
P27,2.1.2设计菜单,P27,问题的提出,日常生活中经常使用菜单,例如,根据显示的菜单点播歌曲或节目、在自动售票机上购票等,这些操作都是先给用户显示可选择的菜单。
显示菜单可用printf函数实现,输入选项可用scanf函数实现。
【实例2-2】编写程序,设计如下用户管理菜单。
任务与分析,2.1.2设计菜单,P27,|*|-Usermanagement-|1-Addnewuser|2-Changeuserpassword|3-Showuserinformation|4-exit|*|,操作步骤,#includemain()定义整型变量a显示菜单输入选项显示选项,inta;,printf(|*|n);printf(|-Usermanagement-|n);printf(|1-Addnewuser|n);printf(|2-Changeuserpassword|n);printf(|3-Showuserinformation|n);printf(|4-Exit|n);printf(|*|n);,scanf(%d,printf(Select%dn,a);,归纳分析,
(1)菜单用printf函数显示,界面可根据个人爱好自由设计。
(2)选项可用整型,也可用字符型。
若用字符型,输入语句改为“scanf(%c,”,归纳分析,P29,2.2.1处理两个分支问题2.2.2处理一个分支又包含另一分支问题2.2.3处理多个分支问题,2.2用分支结构设计程序,P29,在程序设计中,经常根据两个不同的条件去执行不同的语句组。
例如,根据小朋友的年龄判断能否入学。
这类问题一般通过if语句来实现。
问题的提出,2.2.1处理两个分支问题,P29,任务与分析,2.2.1处理两个分支问题,P29,【实例2-3】根据函数式对输入的x值,计算y的值。
操作步骤,#includemain()定义整型变量x、a和b定义双精度实型变量y输入x的值if(x的值为2)显示错误信息else计算分子计算分母计算y的值输出x和y的值,intx,a,b;,doubley;,scanf(%d,if(x=2),printf(Error!
n);,a=x*x*x+2*x-5;,b=x-2;,y=(double)a/b;,printf(x=%d,y=%lfn,x,y);,关系运算符,、=、=、=、!
=,强制类型转换,操作步骤,intall;,#includemain()定义整型变量x、a和b定义双精度实型变量y输入x的值if(x的值为2)显示错误信息else计算分子计算分母计算y的值输出x和y的值,intx,a,b;,doubley;,scanf(%d,if(x=2),printf(Error!
n);,a=x*x*x+2*x-5;,b=x-2;,y=(double)a/b;,printf(x=%d,y=%lfn,x,y);,缩进格式,【实例2-4】输入学生平时成绩和期末成绩,计算总评成绩。
总评成绩由平时成绩的40%和期末成绩的60%产生。
如果学生在该门课的竞赛中获奖,则平时成绩附加10分,期末成绩附加15分。
P31,操作步骤,#includemain()定义整型变量a和b定义字符型变量ch定义双精度实型变量total输入a和b的值输入ch的值if(ch的值为“y”或“Y”)平时成绩加10分期末成绩加15分计算总评成绩输出平时成绩、期末成绩和总评成绩,inta,b;,charch;,doubletotal;,scanf(%d%d,scanf(%c,if(ch=y|ch=Y),a=a+10;,b=b+15;,total=a*0.4+b*0.6;,printf(%d,%d,%.2lfn,a,b,total);,逻辑运算符,&|!
带else的if语句格式:
if(表达式)语句i1语句i2语句inelse语句e1语句e2语句en,归纳分析,归纳分析,不带else的if语句格式:
if(表达式)语句i1语句i2语句in,归纳分析,根据销售员一个月的销售额提成。
如果销售额为两万元以上,则提成销售额的3%,否则,仅提成500元。
假设某销售员的基础工资为1500元,输入该销售员一个月的销售额,输出他的实际工资。
P34,根据职工的情况调整工资。
如果工龄为20年以上,但基本工资低于800元,则基本工资补50元。
输入一个职工的工龄和基本工资,输出该职工的工龄和调整后的基本工资。
P34,根据学生的性别判断该学生是否男生,对于男生,再判断是否大于20岁。
此类问题需要在if语句中又包含另一个if语句。
问题的提出,2.2.2处理一个分支又包含另一分支问题,P34,【实例2-5】改写实例2-4,输入学生平时成绩和期末成绩,计算总评成绩。
总评成绩由平时成绩的40%和期末成绩的60%产生。
如果学生在该门课的竞赛中获奖,则对于平时成绩高于90分学生,平时成绩按100分处理,否则附加10分,对于期末成绩高于85分的学生,期末成绩按100分处理,否则附加15分。
任务与分析,2.2.2处理一个分支又包含另一分支问题,P34,操作步骤,#includemain()定义整型变量a和b定义字符型变量ch定义双精度实型变量total输入a和b的值输入ch的值,if(ch的值为“y”或“Y”)if(平时成绩90)将平时成绩按100处理else平时成绩加10分if(期末成绩85)将期末成绩按100处理else期末成绩加15分计算总评成绩输出平时成绩、期末成绩和总评成绩,操作步骤,#includemain()定义整型变量a和b定义字符型变量ch定义双精度实型变量total输入a和b的值输入ch的值,inta,b;charch;doubletotal;,scanf(%d%d,if(ch的值为“y”或“Y”)if(平时成绩90)将平时成绩按100处理else平时成绩加10分if(期末成绩85)将期末成绩按100处理else期末成绩加15分计算总评成绩输出平时成绩、期末成绩和总评成绩,if(ch=y|ch=Y),a90,a=100;,a=a+10;,b85,b=100;,b=b+15;,total=a*0.4+b*0.6;,printf(%d,%d,%.2lfn,a,b,total);,嵌套的if语句,【实例2-6】编写程序,求下面分段函数的值,要求x的值从键盘输入。
P36,操作步骤,#includemain()定义双精度实型变量x和y输入x的值if(x1)y得到1elseif(x20)y得到x2-5的值elsey得到20输出x和y的值,doublex,y;,scanf(%lf,y=1;,y=x*x-5;,y=20;,printf(x=%lf,y=%lfn,x,y);,操作步骤,#includemain()if(x1)elseif(x20)else,doublex,y;,scanf(%lf,y=1;,y=x*x-5;,y=20;,printf(x=%lf,y=%lfn,x,y);,elseif(x20)y=x*x-5;elsey=20;,最常用的嵌套if语句格式:
if(表达式1)语句组1elseif(表达式2)语句组2elseif(表达式3)语句组3else语句组n+1,归纳分析,改写实例2-4,输入学生平时成绩和期末成绩,计算总评成绩。
总评成绩由平时成绩的40%和期末成绩的60%产生。
如果学生在该门课的竞赛中获奖,则平时成绩附加10分,期末成绩附加15分。
如果附加分后平时成绩或期末成绩超过100分,按100处理。
P38,编写程序,判断从键盘输入的是控制字符、数字、大写字母、小写字母还是其他字符。
P38,在日常生活中,常常需要根据多个不同的情况做出相应的动作。
例如,在一月至十二月中选择某月,就显示该月的销售额。
在C语言中处理这类问题时,一般使用switch语句。
问题的提出,2.2.3处理多个分支问题,P39,任务与分析,【实例2-7】改写实例2-2。
根据已设计的用户管理菜单选择某项,显示相应的菜单名。
菜单如下:
|*|-Usermanagement-|1-Addnewuser|2-Changeuserpassword|3-Showuserinformation|4-exit|*|,2.2.3处理多个分支问题,P39,操作步骤,#includemain()定义整型变量a显示用户管理菜单等待输入选项,操作步骤,switch(选项)选项1:
1-Addnewuser选项2:
2-Changeuserpassword选项3:
3-Showuserinformation选项4:
4-Exit否则:
Error!
操作步骤,#includemain()定义整型变量a显示用户管理菜单等待输入选项,printf(|*|n);printf(|-Usermanagement-|n);printf(|1-Addnewuser|n);printf(|2-Changeuserpassword|n);printf(|3-Showuserinformation|n);printf(|4-Exit|n);printf(|*|n);,inta;,scanf(%d,操作步骤,switch(选项)选项1:
1-Addnewuser选项2:
2-Changeuserpassword选项3:
3-Showuserinformation选项4:
4-Exit否则:
Error!
switch(a),case1:
printf(1-Addnewusern);,case2:
printf(2-Changeuserpasswordn);break;,break;,case3:
printf(3-Showuserinformationn);break;case4:
printf(4-Exitn);break;,default:
printf(Error!
n);break;,switch语句的一般形式:
switch(表达式)case表达式1:
语句组1break;case表达式2:
语句组2break;case表达式n:
语句组nbreak;default:
语句组n+1break;,归纳分析,编写程序,从键盘输入一个数字09,输出对应的英文单词(如从键盘输入1,程序输出one)。
P40,2.3.1用for语句处理循环问题2.3.2用while语句处理循环问题2.3.3用do-while语句处理循环问题2.3.4用break语句控制循环结束,2.3用循环结构设计程序,P41,2.3.1用for语句处理循环问题,P41,在日常生活中经常需要处理确定重复次数的循环问题,例如,掷100次骰子后,分别统计点数1至6出现的次数。
此类问题用C语言解决时,一般使用for语句。
问题的提出,【实例2-8】编写程序,在屏幕上显示如下内容。
-1-*-2-*-3-*-4-*-5-*,任务与分析,2.3.1用for语句处理循环问题,P41,操作步骤,#includemain()定义循环变量ifor(i=1;i=5;i+)显示-i-显示*,inti;,printf(-%d-n,i);,printf(*n);,i5?
i增1,是,i=1,显示*,显示-i-,-1-,*,i=2,-2-,*,i5?
i增1,是,i=1,显示*,显示-i-,-1-,*,i=3,-2-,*,-3-,*,i5?
i增1,是,i=1,显示*,显示-i-,-1-,*,i=4,-2-,*,-3-,*,-4-,*,i5?
i增1,是,i=1,显示*,显示-i-,-1-,*,i=5,-2-,*,-3-,*,-4-,*,-5-,*,i5?
i增1,是,i=1,否,显示*,显示-i-,-1-,*,i=6,-2-,*,-3-,*,-4-,*,-5-,*,【实例2-9】编写程序,计算1至100的累加和。
P44,操作步骤,#includemain()定义循环变量i和存放和值的sum给sum赋0for(i=1;i=100;i+)给sum累加i显示sum的值,inti,sum;,sum=0;,sum=sum+i;,printf(sum=%dn,sum);,sum=sum+1;sum=sum+2;sum=sum+3;sum=sum+99;sum=sum+100;,【实例2-10】编写程序,分别计算1至100中所有2的倍数之和、所有3的倍数之和以及所有5的倍数之和。
P45,操作步骤,#includemain()定义循环变量i和sum2、sum3、sum5分别给sum2、sum3、sum5赋0for(i=1;i=100;i+)if(i为2的倍数)给sum2累加iif(i为3的倍数)给sum3累加iif(i为5的倍数)给sum5累加i显示sum2、sum3、sum5的值,inti,sum2,sum3,sum5;,sum2=sum3=sum5=0;,if(i%2=0),sum2=sum2+i;,if(i%3=0),sum3=sum3+i;,if(i%5=0),sum5=sum5+i;,printf(%d,%d,%dn,sum2,sum3,sum5);,for语句的一般形式:
for(表达式1;表达式2;表达式3)语句1语句2语句n,归纳分析,归纳分析,编写程序,计算2+5+8+11+101的值。
2-9,编写程序,分别计算1至100中所有偶数之和与奇数之和。
2-10,编写程序,分别统计1至1000中个位是3的数个数和3的倍数个数。
P47,2.3.2用while语句处理循环问题,P47,在日常生活中也经常需要处理不确定重复次数的循环问题,例如,重复掷骰子,直到点数6出现20次为止。
此类问题用C语言解决时,一般使用while语句。
问题的提出,【实例2-11】编写程序,输入若干职工的工资(以负数结束输入),计算平均工资。
任务与分析,2.3.2用while语句处理循环问题,P47,操作步骤,#includemain()定义整型变量n,并赋初值0定义双精度变量w、sum、ave,给sum赋0输入工资while(工资大于等于0)将工资累加到sum中累加职工人数,即n增1输入工资计算平均工资输出平均工资,intn=0;,doublew,sum=0,ave;,scanf(%lf,w=0,sum=sum+w;,n+;,scanf(%lf,ave=sum/n;,printf(ave=%.2lfn,ave);,w0?
是,sum=sum+w,n增1,输入工资,1632.5892.51698.31523.72035.7-1,sum=0+1632.5,n=0+1,w0?
是,sum=sum+w,n增1,输入工资,1632.5892.51698.31523.72035.7-1,sum=0+1632.5,n=0+1,sum=1632.5+892.5,n=1+1,w0?
是,sum=sum+w,n增1,输入工资,1632.5892.51698.31523.72035.7-1,sum=0+1632.5,n=0+1,sum=1632.5+892.5,n=1+1,sum=2525.0+1698.3,n=2+1,w0?
是,sum=sum+w,n增1,输入工资,1632.5892.51698.31523.72035.7-1,sum=0+1632.5,n=0+1,sum=1632.5+892.5,n=1+1,sum=2525.0+1698.3,n=2+1,sum=4223.3+1523.7,n=3+1,w0?
是,sum=sum+w,n增1,输入工资,1632.5892.51698.31523.72035.7-1,sum=0+1632.5,n=0+1,sum=1632.5+892.5,n=1+1,sum=2525.0+1698.3,n=2+1,sum=4223.3+1523.7,n=3+1,sum=5747.0+2035.7,n=4+1,w0?
是,sum=sum+w,n增1,输入工资,1632.5892.51698.31523.72035.7-1,sum=0+1632.5,n=0+1,sum=1632.5+892.5,n=1+1,sum=2525.0+1698.3,n=2+1,sum=4223.3+1523.7,n=3+1,sum=5747.0+2035.7,n=4+1,否,7782.7,5,【实例2-12】编写程序,计算的近似值,直到最后一项小于10-6为止。
最后输出计算结果。
P49,操作步骤,#includemain()定义长整型变量i,并赋初值1定义双精度型变量t和sum,并分别赋初值1和0while(t大于等于10-6)给sum累加ti增1计算新的一项后赋给t输出计算结果,inti=1;,doublet=1,sum=0;,t=1e-6,sum=sum+t;,i+;,t=(double)1/i;,printf(sum=%lfn,sum);,while语句的一般形式:
while(表达式)语句1语句2语句n,归纳分析,归纳分析,编写程序,从键盘任意输入数据,如果是偶数就进行累加,当累加值大于等于100时,结束输入,并输出输入的所有偶数与计算结果。
2-12,编写程序,统计从键盘输入的字符个数,以回车作为结束。
P50,2.3.3用do-while语句处理循环问题,在日常生活中也常遇到先无条件完成一项操作,然后根据判断条件确定是否重复执行,最典型的问题就是先显示菜单,然后根据需要决定是否重复显示该菜单。
这时使用do-while语句实现循环控制。
问题的提出,P51,【实例2-13】改写实例2-7。
重复显示用户管理菜单,选择某项后显示相应的菜单号。
菜单如下:
|*|1-Add|2-Change|3-Show|4-exit|*|,任务与分析,2.3.3用do-while语句处理循环问题,P51,操作步骤,#include#include#includemain()定义整型变量ado清屏显示用户管理菜单,inta;,printf(|*|n);printf(|1-Add|n);printf(|2-Change|n);printf(|3-Show|n);printf(|4-Exit|n);printf(|*|n);,system(cls);,操作步骤,从菜单选择一项switch(选项)选项1:
显示1选项2:
显示2选项3:
显示3选项4:
显示4否则:
显示Error!
while(没选择4),scanf(%d,a,case1:
printf(1n);break;,case2:
printf(“2n);break;,case3:
printf(“3n);break;,case4:
printf(“4n);break;,default:
printf(Error!
n);,a!
=4,getch();,起暂停作用,do-while语句的一般形式:
do语句1语句2语句nwhile(表达式);,归纳分析,归纳分析,编写程序,计算1357n当和值大于等于500时的最小n值及和值。
P53,2.3.4用break语句控制循环结束,P53,在重复进行某些操作的过程中,有时满足某种条件,就提前终止循环,例如,用户输入的密码错误时,可以重新输入,但输入了3次后仍错误,就不允许再继续输入。
在解决这类问题时需要使用break语句。
问题的提出,【实例2-14】6位评委给一个候选人打分,采用一票否决制,即只要有一位评委给了零分,此候选人就被淘汰。
编写程序,输入各评委的分数,输出总分数,对于被淘汰的候选人,只显示相应信息。
任务与分析,2.3.4用break语句控制循环结束,P53,操作步骤,#includemain()定义整型变量i、a、sum,sum赋0for(i=1;i=6;i+)输入评委的分数if(a=0)退出循环将分数累加到sum中if(i=6)显示被淘汰的信息else显示获得的总分,inti,a,sum=0;,scanf(%d,break;,sum=sum+a;,printf(Failed!
n);,printf(total:
%dn,sum);,break语句只能在switch语句和循环语句中使用,其作用是结束switch语句或退出循环。
归纳分析,归纳分析,编写程序,从键盘输入1个大于2的整数n,判断n是不是素数。
所谓素数是指那些大于1,且除了1和它本身以外,不能被其他任何数整除的数。
如:
2、3、5、7、11、等都是素数;4、6、8、9、等则不是素数。
为了判断输入的数x是否为素数,最简单的方法是用x逐一除以2,3,4,直到x1,若x不能被其中任何数整除,则x就是素数;若x被其中某一个数整除,则x就不是素数。
P55,2.4联合使用3种基本结构处理复杂问题,P55,在日常生活中需要解决各种各样的复杂问题,这些问题一般单靠某一种基本结构是解决不了的,如果把3种基本结构联合使用,就能够解决所有复杂问题。
问题的提出,2.4联合使用3种基本结构处理复杂问题,P55,【实例2-15】重复输入某年年份和月份,输出该年该月所包含的天数。
每年1、3、5、7、8、10、12月份天数是31,而4、6、9、11月份天数是30,对于闰年,2月份天数是29,对于平年,2月份的天数是28。
如果某年份被4整除且不被100整除、或者某年份被400整除,则该年是闰年,否则为平年。
任务与分析,操作步骤,#includemain()定义整型变量year、month、daydo输入年份和月份switch(月份)对1、3、5、7、8、10、12:
给day赋31对4、6、9、11:
给day赋30对2:
if(闰年)给day赋29else给day赋28对其他输入:
给day赋100if(day!
=100)输出年份、月份、天数else显示错误信息while(day!
=100);,程序代码,#includemain()intyear,month,day;doprintf(Inputyearandmonth:
);scanf(%d%d,switch(month)case1:
case3:
case5:
case7:
case8:
case10:
case12:
day=31;break;,case4:
case6:
case9:
case11:
day=30;break;case2:
if(year%4=0,if(day!
=100)printf(%d,%d,%dn,year,mont
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二轮 上机 结构 程序 基本