第一讲-多分支嵌套结构的实现课件_第1页
第一讲-多分支嵌套结构的实现课件_第2页
第一讲-多分支嵌套结构的实现课件_第3页
第一讲-多分支嵌套结构的实现课件_第4页
第一讲-多分支嵌套结构的实现课件_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1第二部分

模块化程序设计2第二部分主要内容第一讲多分支嵌套结构的实现第二讲循环嵌套结构的实现第三讲数据文件及应用第四讲指针及应用3第一讲

多分支嵌套结构的实现4主要内容回顾程序的三种基本结构嵌套结构选择嵌套结构——if语句深入switch语句应用实例参考§2.2.2§2.3§2.45顺序结构选择结构三种基本结构的示意图循环结构6嵌套结构自顶向下,逐步细化的分析结果。三种基本结构中的语句组(顺序语句组、if分支语句组、else分支语句组、循环体语句组)可以包含任意结构的语句,从而形成不同的嵌套结构。嵌套结构没有特定的结构形式,由分析方法自然形成。7选择嵌套结构——if语句深入if语句的多种结构if和else的匹配原则8if语句的多种结构语句1表达式语句2真假if(条件表达式)

语句1else

语句2双分支结构(复习)十字路口或直行或右转弯单分支结构十字路口或直行或停选择嵌套结构多分支结构参考§2.2.29单分支结构if(条件)语句if(m==c)

m=m;elsem=c;if(c!=m)m=c;常见错误写法:语句1表达式真假示例:若m与c相同,m值不变,否则c的值给m正确写法:单分支结构示例-求绝对值#include<stdio.h>int

main(void){intnumber;

printf("Enteranumber:");

scanf("%d",&number);

if(number<0){number=-number;}

printf("Theabsolutevalueis%d.\n",number);return0;}10Enteranumber:10

Theabsolutevalueis10.Enteranumber:-300

Theabsolutevalueis300.sample21_02.cpp分析:负数求反,正数跳出编程实现11选择嵌套结构在if语句中又包含一个或多个if语句--if语句的嵌套参考§

2.2.212完整嵌套结构P39if(条件1)

if(条件2)语句1

else

语句2else

if(条件3)语句3

else

语句4表达式1表达式3语句4真假表达式2语句3语句1语句2真真假假注:条件多以表达式形式出现if(x<0){y=0;}elseif(x<=15){y=4*x/3;}

else{y=2.5*x-10.5;}13实例1(多分支)分段计算水费sample21_03.cpp#include<stdio.h>int

main(void){doublex,y;

printf("Enterx:");

scanf("%lf",&x);

if(x<0){y=0;}elseif(x<=15){y=4*x/3;}

else{y=2.5*x-10.5;}printf("f(%.2f)=%.2f\n",x,y);return0;}Enterx:-0.5f(-0.50)=0.00Enterx:9.5f(9.50)=12.67Enterx:21.3f(21.30)=42.75写出If语句完整程序,上机调试!2种嵌套if语句的比较y=x+1x<1y=y=x+21<=x<2y=x+3x>=214if(x<1)y=x+1;elseif(x<2)y=x+2;

elsey=x+3;if(x<2)

if(x<1)y=x+1;

elsey=x+2;elsey=x+3;

x<2x<1y=x+1y=x+2真

假真

y=x+3假假x<1x<2y=x+1y=x+2真

假真

y=x+3编程比较结果!15不对称嵌套结构示例:求实足年龄

sample21_04.cpp

age=sysY-bthY;

if(sysM<bthM)age=age-1;

else

if(sysM==bthM)

if(sysD<bthD) age=age-1;年龄=当前年份-生日年份如果生日月份还没到年龄减一岁否则如果生日月份已到但生日还没到年龄减一岁age=sysY-bthY;

if(sysM<bthM)age=age-1;else

if((sysM==bthM)&&(sysD<bthD)) age=age-1;用复杂条件表示:16else和if的匹配if(表达式1)if(表达式2)语句1else语句2elseif(表达式3)语句3else语句4if(表达式1)if(表达式2)语句1

elseif(表达式3)语句3else语句4else与最靠近它的、没有与别的else匹配过的if匹配if(表达式1)if(表达式2)语句1elseif(表达式3)语句3else语句417改变else和if的配对改写下列if语句,使else和第1个if配对。if(x<2)if(x<1)y=x+1;elsey=x+2;if(x<2){if(x<1)y=x+1;}elsey=x+2;if(x<2)if(x<1)y=x+1;

else;elsey=x+2;18多分支结构if(表达式1)语句1elseif(表达式2)语句2……elseif(表达式n-1)语句n-1else语句n#include<stdio.h>void

main(void){char

cLevel;

int

fScore;

printf("请输入成绩:");

scanf("%d",&fScore); /*输入成绩*/

if(fScore>100||fScore<0){

printf("\n输入成绩错误!");}

elseif(fScore>89) /*分数fScore>=90*/

cLevel='A';

elseif(fScore>79) /*分数90>fScore>=80*/

cLevel='B';

elseif(fScore>69) /*分数80>fScore>=70*/

cLevel='C';

elseif(fScore>59)/*分数70>fScore>=60*/

cLevel='D';

else

cLevel='E';/*分数fScore<60*/

printf("该成绩的等级为:%c\n",cLevel);}实例:

输入百分制成绩,按A、B、C、D、E输出相应等级。#include<stdio.h>main(){int

fScore;charcLevel;

printf("请输入成绩:");

scanf("%d",&fScore);

while(fScore

>100||fScore

<0){printf("\n输入有误,请重输。");

scanf("%d",&fScore);}

switch(fScore

/10){case10:case9:cLevel

='A';break;case8:cLevel

='B';break;case7:cLevel

='C';break;case6:cLevel

='D';break;case5:case4:case3:case2:case1:case0:cLevel

='E';}

printf("成绩是%d,相应等级是%c。",fScore,cLevel);}#include<stdio.h>void

main(void){char

cLevel;

int

fScore;

printf("请输入成绩:");

scanf("%d",&fScore);

if(fScore>100||fScore<0){

printf("\n输入成绩错误!");}

elseif(fScore>89)

cLevel='A';

elseif(fScore>79)

cLevel='B';

elseif(fScore>69)

cLevel='C';

elseif(fScore>59)

cLevel='D';

else

cLevel='E';

printf("该成绩等级:%c\n",cLevel);}default:cLevel='E';21switch(表达式){case常量表达式1:语句段1;break;case常量表达式2:语句段2;break;....…case常量表达式n:语句段n;break;default:语句段n+1;}表达式的值=常量表达式2的值表达式语句段1语句段2语句段n语句段n+1表达式的值=常量表达式1的值表达式的值=常量表达式n的值其他breakbreakbreakbreakswitch(fScore

/10){case10:case9:cLevel

='A';break;case8:cLevel

='B';break;case7:cLevel

='C';break;case6:cLevel

='D';break;

default:cLevel='E';}22switch语句处理多分支选择问题,3种情况1、在switch语句的每个语句段中都使用break语句,但不使用default

switch(表达式){case常量表达式1:语句段1;break;case常量表达式2:语句段2;break;....…case常量表达式n:语句段n;break;

default:语句段n+1;}2、在switch语句的每个语句段中都使用break语句,并使用default#include<stdio.h>main(){int

fScore;charcLevel;

printf("请输入学生成绩:");

scanf("%d",&fScore);

while(fScore

>100||fScore

<0){printf("\n输入有误,请重输。");

scanf("%d",&fScore);}

switch(fScore

/10){case10:case9:cLevel

='A';break;case8:cLevel

='B';break;case7:cLevel

='C';break;case6:cLevel

='D';break;case5:case4:case3:case2:case1:case0:cLevel

='E';}

printf("成绩是%d,相应等级是%c。",fScore,cLevel);}default:cLevel='E';

例2-5计算器程序。问题描述:任意输入两个数,根据用户选择的功能菜单,求出它们的和、差、积、除的结果。#include<stdio.h>void

main(void){double

dLOper,dROper,dResult; /*存放左右操作数*/

int

nFun; /*存放运算符*/

printf("--------------------------\n"); /*构造功能菜单*/

printf("加法运算--------1\n");

printf("减法运算--------2\n");

printf("除法运算--------3\n");

printf("乘法运算--------4\n");

printf("--------------------------\n");

printf("请输入功能选择:");

scanf("%d",&nFun);

if(nFun>4||nFun<1)

printf("输入错误!\n");

else{

printf("请输入两个操作数:");

scanf("%lf%lf",&dLOper,&dROper);/*输入左右操作数和运算符*/

switch(nFun){

case1:dResult=dLOper+dROper;break;/*加法*/

case2:dResult=dLOper-dROper;break;/*减法*/

case3:if(0.0==dROper){printf("右操作数不能为0\n");

return;}/*除法*/

else

dResult=dLOper/dROper;break;

default:dResult=dLOper*dROper;/*乘法*/ }

printf("计算结果为:%8.3lf\n",dResult);/*输出结果*/

}}263、在switch中不使用breakswitch(表达式){case常量表达式1:语句段1;case常量表达式2:语句段2;....…case常量表达式n:语句段n;default:语句段n+1;}27switch(表达式){case常量表达式1:语句段1;case常量表达式2:语句段2;....…case常量表达式n:语句段n;default:语句段n+1;}表达式的值=常量表达式2的值表达式语句段1语句段2语句段n语句段n+1表达式的值=常量表达式1的值表达式的值=常量表达式n的值其他fScore=89cLevel

=?switch(fScore/10){case10:case9:cLevel='A';case8:cLevel='B';case7:cLevel='C';case6:cLevel='D';default:cLevel='E';}求某年某月某日是该年的第几天sample21_14.cpp//y—年,m—月,d—日//days—计算的天数days=d;switch(m-1){case12:days+=31;case11:days+=30;case10:days+=31;case9:days+=30;case8:days+=31;

case7:days+=31;case6:days+=30;case5:days+=31;case4:days+=30;case3:days+=31;case2:days+=isLeap(y)?29:28;case1:days+=31;}

28复合赋值运算符P53days+=31→days=days+31在“=”前加上某些运算符——复合赋值运算符C语言可以构成复合运算符的有:+-*/%&^|<<>>详见P53:表3-1双目复合运算符常用:+=-=*=等自增,自减运算单目运算符所构成的复合赋值运算++自增1--自减1如:i++参与运算后,i+1++ii+1后,参与运算i--参与运算后,i-1--ii-1后,参与运算intx=0,y=0,i=1;x=i++;y=++i;printf("x=%d,y=%d,i=%d",x,y,i);x=1,y=3,i=3条件表达式P39一般形式:表达式1?表达式2

:表达式3值:若“表达式1”的值为真,则以“表达式2”为该条件表达式的值;否则以“表达式3”为该条件表达式的值。通常用于赋值语句中,如:days+=isLeap(y)?29:28;if(a>b)max=a;elsemax=b→max=(a>b)?a:b;32Is函数构造判断函数,返回1或0表示真或假调用时通常表示一个条件,运用if语句再作进一步处理。判奇数int

isOdd(intm)判偶数int

isEven(intm)判闰年int

isLeap(intyear)

33判奇数

int

isOdd(intm)

{if(m%2==1)return1;elsereturn0;}int

isOdd(intm)

{returnm%2;}34判偶数

int

isEven(intm)

{if(m%2==0)return1;elsereturn0;}int

isEven(intm)

{return!(m%2);}35判闰年int

isLeap(intyear){return((year%4==0&&year%100!=0)||year%400==0);}

完整程序:求2010年3月20日是2010年的第几天#include<stdio.h>int

isLeap(intyear);voidmain(){int

y,m,d,days;y=2010,m=3,d=20;

days=d;switch(m-1){case12:days+=31;case11:days+=30;case10:days+=31;case9:days+=30;case8:days+=31;case7:days+=31;case6:days+=30;case5:days+=31;case4:days+=30;case3:days+=31;

case2:days+=isLeap(y)?29:28;

case1:days+=31;}

printf("days=%d",days);}int

isLeap(intyear){return(year%4==0&&year%100!=0||year%400==0);}运行过程days=20m-1=22010%4!=0且2010%400!=0返回0days=20+28=48days=48+31days=79改为通用程序,从键盘输入年、月、日!37实例1假设自动售货机出售4种商品,薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可乐(cola),售价分别是每份3.0、2.5、4.0和3.5元。在屏幕上显示以下菜单当用户输入编号1~4,显示相应商品的价格;输入0,退出查询;输入其他编号,显示价格为0。[1]Selectcrisps[2]Selectpopcorn

[3]Selectchocolate[4]Selectcola

[0]Exit上机编程,调试实现!38#include<stdio.h>int

main(void){intchoice;doubleprice;printf("[1]Selectcrisps\n");printf("[2]Selectpopcorn\n");printf("[3]Selectchocolate\n");printf("[4]Selectcola\n");printf("[0]exit\n");

printf("Enterchoice:");

scanf("%d",&choice);

if(choice==0)return0;

switch(choice){case1:price=3.0;break;case2:price=2.5;break;case3:price=4.0;break;case4:price=3.5;break;default:price=0.0;break;

}

printf("pric

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论