《控制结构与语句.ppt》由会员分享,可在线阅读,更多相关《控制结构与语句.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、控制结构与语句 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望第第4章章 控制结构与语句控制结构与语句4.1 算法与程序算法与程序4.2 结构化程序设计结构化程序设计4.3 顺序结构顺序结构4.4 选择结构选择结构4.5 循环结构循环结构4.6 多重循环结构多重循环结构4.7 实际应用举例实际应用举例4.1 算法与程序n n著名计算机科学家沃思(Nikiklaus Wirth)提出:数据结构 算法 程序 数据结构描述数据的类型、组织形式 算法描述对数据的操作步骤n
2、 n程序数据结构算法程序设计方法程序数据结构算法程序设计方法语言工具和环境语言工具和环境 1 算法的概念算法的概念 做事都有做事都有方法、步骤(顺序)方法、步骤(顺序)决定事情成败决定事情成败1.1.算法:计算机求解某一问题而采用的具体方法、算法:计算机求解某一问题而采用的具体方法、步骤。步骤。2.2.两大类计算机算法:数值运算算法(求解值解、两大类计算机算法:数值运算算法(求解值解、成熟)、非数值运算算法(事务管理、广泛)。成熟)、非数值运算算法(事务管理、广泛)。3.3.算法的描述:有穷性、确定性、有效性等。算法的描述:有穷性、确定性、有效性等。4.4.算法描述:描述算法的方法有多种算法描
3、述:描述算法的方法有多种 归纳为二大归纳为二大类:文字和图形(符号)。类:文字和图形(符号)。2 常用的算法描述方法常用的算法描述方法 1.1.带序号的自然语言描述易懂却不直观,不严格2.2.流程图:灵活、自由、形象、直观,可表示任何算法 输入、输出处理判断起止连接点流程线2 常用的算法描述方法常用的算法描述方法3.N-S3.N-S图(盒图):特点:完全去掉带箭头图(盒图):特点:完全去掉带箭头 的流程的流程线,算法的所有处理步骤都写在一个大矩形框线,算法的所有处理步骤都写在一个大矩形框(表示简单、符合结构化思想)(表示简单、符合结构化思想)4.4.伪代码:用介于自然语言与计算机语言之间的文伪
4、代码:用介于自然语言与计算机语言之间的文字及符号来描述算法(方便、易懂、便于向计字及符号来描述算法(方便、易懂、便于向计算机语言过渡)算机语言过渡)例例4-1计算计算S=1+2+100,写出其算法。,写出其算法。自然语言描述:1.1.0 0S S单元单元2.2.1 1n n单元单元3.3.S S n n S S4.4.n+1 n+1 n n5.5.判断判断n 100?n 100?是,转是,转3 3;否则转;否则转6 66.6.输出输出S S的值的值流程图描述流程图描述N-SN-S图描述图描述伪代码描述伪代码描述0S1nif n 100S+n Sn+1 nprint S4.2 结构化程序的三种基
5、本结构结构化程序的三种基本结构1 1966年提出三种基本结构,用三种基本结构作为表示一种良好算法的基本单元:顺序、选择、循环。任何复杂的算法都是由这三种基本结构按一定规律组成 a 顺序结构顺序结构如:a=1;b=2;c=a+b;b 选择结构选择结构 如:if(x!=0)if(x!=0)y=sin(x)/x;y=sin(x)/x;elseelse y=1;y=1;c 循环结构循环结构 n n根据条件根据条件P P决定是否重复循环体中的操作。决定是否重复循环体中的操作。2 三种基本结构的共同点三种基本结构的共同点1)1)单入口单出口2)2)结构内的每一部分都有机会被执行3)3)不存在“死循环”3
6、结构化程序设计的优点结构化程序设计的优点用三种基本结构组成的程序是结构化程序n n优点:易编、易读、易懂、易维护n n强调程序设计风格和程序结构的规范化n n核心思想:自顶而下,逐步细化,模块化设计,结构化编码,如学校办公自动化系统4 结构化程序设计过程结构化程序设计过程1)1)确定算法:分析问题,(建立数学模型,选择公式),写出算法描述2)2)编写程序:用计算机语言写出实现算法的程序3)3)上机调试:输出(编辑)程序编译、连接、执行程序输出结果例例4 42 2:让某学生解方程:让某学生解方程 ax ax2 2+bx+c=0+bx+c=0 1 1 1 1)分析问题)分析问题)分析问题)分析问题
7、 这是一个一元二次方程这是一个一元二次方程这是一个一元二次方程这是一个一元二次方程2 2 2 2)确定解题方案及步骤)确定解题方案及步骤)确定解题方案及步骤)确定解题方案及步骤 确定确定确定确定a a a a、b b b b、c c c c的值的值的值的值 求出求出求出求出b b b b2 2 2 2-4ac-4ac-4ac-4ac的值的值的值的值 如果如果如果如果 b b b b2 2 2 2-4ac0-4ac0-4ac0-4ac0(双实根)(双实根)(双实根)(双实根)X1=X1=X1=X1=X2=X2=X2=X2=如果如果如果如果 b b b b2 2 2 2-4ac=0-4ac=0-4
8、ac=0-4ac=0(单实根)(单实根)(单实根)(单实根)X1=X2=X1=X2=X1=X2=X1=X2=如果如果如果如果 b b b b2 2 2 2-4ac0-4ac0-4ac0-4ac0(双复根)(双复根)(双复根)(双复根)X1=X1=X1=X1=X2=X2=X2=X2=3 3 3 3)根据上述步骤编制程序)根据上述步骤编制程序)根据上述步骤编制程序)根据上述步骤编制程序4 4 4 4)调试程序,输出结果)调试程序,输出结果)调试程序,输出结果)调试程序,输出结果5 程序、程序设计和程序设计语言程序、程序设计和程序设计语言n n程序:使用语言给计算机的一组指令序列n n程序设计:为求
9、解特定问题而编写的正确有效的程序n n程序设计语言:编写程序所用的语言4.3 顺序结构程序设计顺序结构程序设计n n 在顺序结构程序中,各语句(或命令)是按照位置的先后在顺序结构程序中,各语句(或命令)是按照位置的先后次序,顺序执行的,且每个语句都会被执行到。次序,顺序执行的,且每个语句都会被执行到。例例4 43 3 输入任意三个整数,求它们的和及平均值。输入任意三个整数,求它们的和及平均值。/*/*案例代码文件名:案例代码文件名:AL3_10.C*/AL3_10.C*/*/*功能:设计一个顺序结构程序,求三个整数的和及平均值。功能:设计一个顺序结构程序,求三个整数的和及平均值。*/*/mai
10、n()main()int num1,num2,num3,sum;int num1,num2,num3,sum;float aver;float aver;printf(“Please input three numbers:”);printf(“Please input three numbers:”);scanf(“%d,%d,%d”,&num1,&num2,&num3);/*scanf(“%d,%d,%d”,&num1,&num2,&num3);/*输入三个整数输入三个整数*/*/sum=num1+num2+num3;sum=num1+num2+num3;/*/*求累计和求累计和*/*/a
11、ver=sum/3.0;aver=sum/3.0;/*/*求平均值求平均值*/*/printf(“num1=%d,num2=%d,num3=%dn”,num1,num2,num3);printf(“num1=%d,num2=%d,num3=%dn”,num1,num2,num3);printf(“sum=%d,aver=%7.2fn”,sum,aver);printf(“sum=%d,aver=%7.2fn”,sum,aver);思考思考思考思考:能否将:能否将“aver=sum/3.0;”“aver=sum/3.0;”中中“3.0”“3.0”改为改为“3”“3”?1 顺序结构程序组成顺序结构
12、程序组成在顺序结构程序中,一般包括以下几个部分:在顺序结构程序中,一般包括以下几个部分:a a程序开头的编译预处理命令。程序开头的编译预处理命令。在在程程序序中中要要使使用用标标准准函函数数(又又称称库库函函数数),除除printfprintf()()和和scanf()scanf()外外,其其它它的的都都必必须须使使用用编编译译预预处处理理命命令令,将相应的头文件包含进来。将相应的头文件包含进来。b b顺顺序序结结构构程程序序的的函函数数体体中中,是是完完成成具具体体功功能能的的各个语句和运算,主要包括:各个语句和运算,主要包括:(1 1)变量类型的说明。)变量类型的说明。(2 2)提供数据语
13、句。)提供数据语句。(3 3)运算部分。)运算部分。(4 4)输出部分。)输出部分。2 C语句函数语句函数一、语句用来对数据进行加工(完成操作任务)。是构成程序的基本单位,通常一个C程序由若干个函数(系统、用户)组成。每一函数由若干条语句组成。每条语句总是以“;”结束。3、C语句的分类语句的分类可分为三大类:可分为三大类:简单语句简单语句、复合语句复合语句、空语句空语句()简单语句()简单语句1 1、表达式语句:由一个表达式后跟、表达式语句:由一个表达式后跟“;”组成组成赋值语句:赋值表达式加一个;号。如:赋值语句:赋值表达式加一个;号。如:s=3.14159*r*r;i+;s=3.14159
14、*r*r;i+;函数调用语句:函数调用表达式加一个;号。如函数调用语句:函数调用表达式加一个;号。如printf(hello,world n);printf(hello,world n);2 2、结构控制语句:控制、结构控制语句:控制 程序流程程序流程选择语句:选择语句:if.elseif.else循环语句循环语句:for while do.while:for while do.while转向语句:转向语句:continue break return gotocontinue break return goto(二)复合语句:将一组语句括在一对(二)复合语句:将一组语句括在一对 中中如:如:w
15、hile(i 100)while(i 100)sum+=i;sum+=i;i+;i+;说明:说明:a a、复合语句的、复合语句的 之后不能有之后不能有“;”“;”。b b、复合语句中的语句可以是简单语句、复合语句、空语句。、复合语句中的语句可以是简单语句、复合语句、空语句。(三)空语句:(三)空语句:;/*/*仅仅只有一个仅仅只有一个;号号*/*/空语句什么也不做。有时用作被转向点,或为循环语句提供空体。如:空语句什么也不做。有时用作被转向点,或为循环语句提供空体。如:for(i=0;i=10;i+)for(i=0;i=10;i+);顺序结构例题顺序结构例题例例例例4-44-4:输入华氏温度,
16、将其转化成摄氏温度输出。:输入华氏温度,将其转化成摄氏温度输出。:输入华氏温度,将其转化成摄氏温度输出。:输入华氏温度,将其转化成摄氏温度输出。转换公式:转换公式:转换公式:转换公式:C C5(F-32)/95(F-32)/9#include#include void main()void main()float f,c;float f,c;printf(“printf(“输入一个华氏温度输入一个华氏温度输入一个华氏温度输入一个华氏温度n”)n”);scanf(“%f”,&f);scanf(“%f”,&f);c=c=5.05.0/9*(f-32);/9*(f-32);printf(“c=%0.
17、2f”,c);printf(“c=%0.2f”,c);例例例例4-54-54-54-5:计算任意两个整数的和并输出结果。计算任意两个整数的和并输出结果。计算任意两个整数的和并输出结果。计算任意两个整数的和并输出结果。求任意两个数和的算法:求任意两个数和的算法:求任意两个数和的算法:求任意两个数和的算法:n n输入输入输入输入a,ba,bn n sum suma+b a+b n n输出输出输出输出sumsum#include stdio.hvoid main()int a,b,sum;scanf(%d,%d,&a,&b);sum=a+b;printf(sum=%d,sum);输入a,b求和输出和
18、sumn n例例例例4-64-64-64-6 给出一个大写字母,要求按字母顺序打印出给出一个大写字母,要求按字母顺序打印出给出一个大写字母,要求按字母顺序打印出给出一个大写字母,要求按字母顺序打印出3 3个个个个字母,指定的字母是三个字母中间的一个字母。输入字母,指定的字母是三个字母中间的一个字母。输入字母,指定的字母是三个字母中间的一个字母。输入字母,指定的字母是三个字母中间的一个字母。输入的字母不能为的字母不能为的字母不能为的字母不能为A A或或或或Z Z。#include#include main()main()char c1,c2,c;char c1,c2,c;printf(Pleas
19、e enter a character:n);printf(Please enter a character:n);c=getchar();c=getchar();c1=c-1;c2=c+1;c1=c-1;c2=c+1;putchar(c1);putchar(c);putchar(c1);putchar(c);putchar(c2);putchar(c2);n n例例例例4-7 4-7 4-7 4-7 输入三角形的三边长,要求用下述公式计算三角输入三角形的三边长,要求用下述公式计算三角输入三角形的三边长,要求用下述公式计算三角输入三角形的三边长,要求用下述公式计算三角形的面积:形的面积:形的面
20、积:形的面积:sqrt(s(s-a)(s-b)(s-c),sqrt(s(s-a)(s-b)(s-c),其中其中其中其中 s=(a+b+c)/2 s=(a+b+c)/2#include#include#include#include void main()void main()float a,b,c,s,area;float a,b,c,s,area;printf(enter a,b,c:n);printf(enter a,b,c:n);scanf(%f,%f,%f,&a,&b,&c);scanf(%f,%f,%f,&a,&b,&c);s=(a+b+c)/2;s=(a+b+c)/2;area=s
21、qrt(s*(s-a)*(s-b)*(s-c);area=sqrt(s*(s-a)*(s-b)*(s-c);printf(a=%7.2f,b=%7.2f,printf(a=%7.2f,b=%7.2f,c=%7.2n,a,b,c);c=%7.2n,a,b,c);printf(area=%7.2fn,area);printf(area=%7.2fn,area);良 好 的 源 程 序 书 写 风 格顺序程序段左对齐顺序程序段中的所有语句(包括说明语句),一律与本顺序程序段的首行左对齐。4.4 选择结构选择结构(重点重点)n n定义:根据给定条件,从两条或多条路径中 选择下一步要执行的操作路径。n
22、n形式:两种形式 if 语句,switch语句uu4.4.1 if 4.4.1 if 语句语句 uu(1)(1)双分支双分支uu(2)(2)单分支单分支uu(3)(3)嵌套的嵌套的if if语句语句uu4.4.24.4.2switchswitch语句语句n n定义:用来判定所给定的条件是否满足,根据判定义:用来判定所给定的条件是否满足,根据判定义:用来判定所给定的条件是否满足,根据判定义:用来判定所给定的条件是否满足,根据判定的结果决定执行给出的两种操作之一的语句。定的结果决定执行给出的两种操作之一的语句。定的结果决定执行给出的两种操作之一的语句。定的结果决定执行给出的两种操作之一的语句。n
23、n形式:双分支、单分支、形式:双分支、单分支、形式:双分支、单分支、形式:双分支、单分支、if if语句嵌套语句嵌套语句嵌套语句嵌套(1)双分支形式)双分支形式 (if-elseif-else 形式)形式)形式)形式)n nif if(表达式表达式表达式表达式)语句语句语句语句1;1;n nelseelse 语句语句语句语句2;2;表达式语句1语句2非0为04.4.1 if 语句语句n表达式一般为逻辑或者关系表达式n语句可以为简单语句、复合语句例例4.4-14.4-1:输入一个学生的输入一个学生的C C语言考试成绩给整型变语言考试成绩给整型变量量gradegrade,确定是否需重修该课程,如果
24、成绩大于等,确定是否需重修该课程,如果成绩大于等于于6060分,则输出分,则输出“Pass”“Pass”;否则输出;否则输出“Fail”“Fail”。#include stdio.h void main()int grade;int grade;scanf(“%d”,scanf(“%d”,&grade);&grade);if(grade=60)if(grade=60)printf(“Passn”);printf(“Passn”);else else printf(“Failn”);printf(“Failn”);grade=60输出Pass输出Fail非0为0(2)单分支形式)单分支形式 (i
25、f if 形式)形式)形式)形式)n nif if(表达式表达式表达式表达式)语句语句语句语句1;1;表达式表达式语句语句1非0例4.4-2:输入两个实数分别给变量a、b,要求编程实现由小到大输出。#include stdio.h#include stdio.h void main()void main()float a,b,t;float a,b,t;scanf(%f,%f,&a,&b);scanf(%f,%f,&a,&b);if(ab)if(ab)t=a;a=b;b=t;t=a;a=b;b=t;printf(%5.2f,%5.2fn,a,b);printf(%5.2f,%5.2fn,a,b
26、);n复复合合语语句句ab非0两数交换两数交换输出a、b输入a、bt=aa=bb=t例例4.4-3 三数比较大小三数比较大小任给任给a a、b b、c c三个数,按从大到小的顺序输出。三个数,按从大到小的顺序输出。分析:1)对于任意两个数a、b:若ab,则输出a、b 否则输出b、a2)对于三个数,有6种可能:abc,acb bac,bca cab,cba3)使用判断交换法若ab,则交换a和b若ac,则交换a和c结果a最大若bbc交换方法:设a=5,b=8,a=b;b=a需引入中间变量:ta;a=b;b=a;atb例例4.4-3的的盒图和程序盒图和程序#include#include void
27、main()void main()int a,b,c,t;int a,b,c,t;printf(“Input a,b,c:”);printf(“Input a,b,c:”);scanf(“%d,%d%d”,&a,&b,&c)scanf(“%d,%d%d”,&a,&b,&c)if(ab)t=a;a=b;b=t;if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(ac)t=a;a=c;c=t;if(bc)t=b;b=c;c=b;if(b=90打印AS=80打印BS=70打印CS=60打印D打印ETFFFFTTT例例例例4.4-44.4-4程序代码程序代码#include“
28、stdio.h”#include“stdio.h”void main()void main()int s;int s;scanf(“%d”,&s);scanf(“%d”,&s);if(s=90)printf(“A”);if(s=90)printf(“A”);else if(s=80)printf(“B”);else if(s=80)printf(“B”);else if(s=70)printf(“C”);else if(s=70)printf(“C”);else if(s=60)printf(“D”);else if(s=60)printf(“D”);else printf(“E”);else
29、 printf(“E”);2、匹配规则:、匹配规则:C语言规定,语言规定,else总是总是和它上面离它最近和它上面离它最近的未配对的的未配对的if配对。配对。1、书写格式:递缩格式、书写格式:递缩格式同层语句行对齐,内层同层语句行对齐,内层向右缩进若干字符。向右缩进若干字符。2、if双分支嵌套及其变形双分支嵌套及其变形if(P1)if(P1)if(P2)A if(P2)A else B else Belseelse if(P3)C if(P3)C else D else Dif(P1)if(P1)if(P2)A if(P2)A else B else Belse Celse Cif(P1)Ai
30、f(P1)Aelseelse if(P3)C if(P3)C else D else D例例4.4-54.4-5 :编写程序,输入一个编写程序,输入一个x值,输出对应的值,输出对应的y值。值。函数为函数为 -1 (x0)在在在在if if子句中嵌套子句中嵌套子句中嵌套子句中嵌套在在在在elseelse子句中嵌套子句中嵌套子句中嵌套子句中嵌套if(x=0)if(x0)y=-1;else y=0;else y=1;if(x0);y=3x+2;n n if(x=2)printf(“y0”);n n if(1=x=1&x=94.4.2 switch语句语句 亦称多分支选择语句。它比用嵌套的亦称多分支选
31、择语句。它比用嵌套的if if语句实现多路分支语句实现多路分支问题,其程序结构清晰、易读。问题,其程序结构清晰、易读。switch语句的基本格式:语句的基本格式:switch(switch(表达式表达式表达式表达式)case case C1C1:语句:语句:语句:语句1 1;break;break;case case C2C2:语句:语句:语句:语句2 2;break;break;case case CnCn:语句:语句:语句:语句n n;break;break;default default :语句:语句:语句:语句n+1;n+1;/*/*可缺省可缺省可缺省可缺省*/*/*表达式(整型、字符
32、型或枚举型)*/C1Cn 常量(整数、字符)常量表达式(如3+4)不含变量或函数语句1语句n 可为简单语句,复合语句或空语句。说明:说明:1 1 1 1、计算表达式计算表达式计算表达式计算表达式e e的值,若与常量表达式的值,若与常量表达式的值,若与常量表达式的值,若与常量表达式cici值一致,值一致,值一致,值一致,则从语句则从语句则从语句则从语句i i,开始执行;直到遇到,开始执行;直到遇到,开始执行;直到遇到,开始执行;直到遇到breakbreak语句语句语句语句或或或或switchswitch语句的语句的语句的语句的“”“”。2 2 2 2、若与任何常量表达式值均不一致时,则执行若与任
33、何常量表达式值均不一致时,则执行若与任何常量表达式值均不一致时,则执行若与任何常量表达式值均不一致时,则执行defaultdefault语句或执行后续语句。语句或执行后续语句。语句或执行后续语句。语句或执行后续语句。3 3 3 3、常量表达式常量表达式常量表达式常量表达式cici仅起语句标号作用,不作求值判仅起语句标号作用,不作求值判仅起语句标号作用,不作求值判仅起语句标号作用,不作求值判断断断断每个每个每个每个casecasecasecase的常量表达式的值必须互不相同的常量表达式的值必须互不相同的常量表达式的值必须互不相同的常量表达式的值必须互不相同。4 4 4 4、各个、各个、各个、各个
34、casecasecasecase的出现次序不影响执行结果。的出现次序不影响执行结果。的出现次序不影响执行结果。的出现次序不影响执行结果。5 5、多个多个多个多个casecase语句可共用一组执行语句。语句可共用一组执行语句。语句可共用一组执行语句。语句可共用一组执行语句。示例示例示例示例1 1include void main()char s;scanf(“%c”,&s);switch(s)case A:printf(“85100n”);case B:printf(“7084n”);case C:printf(“6069n”);case D:printf(“60n”);default:prin
35、tf(“错误输入n”);运行结果:6069 60 错误输入 输入“C”,观察输出结果。示例示例示例示例1 1解决方法break语句:include void main()char s;scanf(“%c”,&s);switch(s)case A:printf(“85100n”);break;case B:printf(“7084n”);break;case C:printf(“6069n”);break;case D:printf(“60n”);break;default:printf(“错误输入n”);运行结果:6069讨论讨论讨论讨论 switch(s)语句中的s实际上并非真正的条件选择,
36、而只是一种跳转指示(与if语句不同),表示下面应该跳转到什么位置继续执行。而各case实际上只是一个跳转处的标记。当程序跳转到某个case处时,并非只执行此case行的程序组,而是从此处开始一直向下执行各条语句,直到整个switch开关体结束(“”)。如果要使每个case处相当于一种if(s)else的效果,必须在其语句组最后加上break语句。输入“C”,观察输出结果。示例示例示例示例1 1解决方法break语句:include void main()char s;scanf(“%c”,&s);switch(s)case A:printf(“85100n”);break;case D:pri
37、ntf(“60n”);break;case C:printf(“6069n”);break;case B:printf(“7084n”);break;default:printf(“错误输入n”);各个各个case的出现次的出现次序不影响执行结果序不影响执行结果 运行结果:6069输入“C”,观察输出结果。示例示例示例示例2 2include void main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(
38、“a=%d,b=%dn”,a,b);求程序运行结果。结果:a=2,b=1。如果x=2?结果:a=1,b=1 如果x=3?结果:a=1,b=1 例例3 3:输入两个运算量和一个运算符,完成加、输入两个运算量和一个运算符,完成加、减、乘、除运算,输出运算结果。减、乘、除运算,输出运算结果。#includestdio.h void main()int x,y,z;char ch;printf(Enter an operator(+,-,*,/):n);ch=getchar();printf(Enter two numbers:);scanf(%d,%d,&x,&y);switch(ch)case+:
39、z=x+y;printf(x+y=%d n,z);break;case-:z=x-y;printf(x-y=%d n,z);break;case*:z=x*y;printf(x*y=%d n,z);break;case/:if(y=0)printf(division by zeron);else z=x/y;printf(x/y=%d,z);break;default:printf(The error operator!n);例例4:4:用公式用公式f=p*w*s*(1-d)计算运输费。计算运输费。吨公里运价吨公里运价运输距离运输距离折扣折扣货重货重250(公里公里)d=0250s500 d=
40、0.02500s1000 d=0.051000s2000 d=0.082000s3000 d=0.103000s d=0.15用不带else的if语句、if-else语句完成上述例题,并做对比。?要根据运输距离计算折扣d,关键是要构造switch后的表达式,根据题目,选择 c=s/250 来求c的值。if(s=3000)c=12;else c=s/250;程序中当c的值为2,3时,d的值都是0.05,则这两个case语句可以共同使用一个语句。分析说明#include void main()int c,s;float p,w,d,f;scanf(%f,%f,%d,&p,&w,&s);if(s=3
41、000)c=12;else c=s/250;switch(c)case 0:d=0;break;case 1:d=2;break;case 2:case 3:d=5;break;case 4:case 5:case 6:case 7:d=8;break;case 8:case 9:case 10:case 11:d=10;break;case 12:d=15;break;default:printf(unknown!);f=p*w*s*(1-d/100.0);printf(freight=%15.4f,f);100,20,300100,20,300freight=freight=588000.
42、0000588000.0000n小结小结:1)算法与程序结构)算法与程序结构2)顺序结构)顺序结构3)选择结构)选择结构n作业:作业:习题习题1(1)()(3)习题习题4(1)()(6)例例4-2 百鸡问题百鸡问题n n张丘建算经中提出张丘建算经中提出“百鸡问题百鸡问题”:鸡翁一值:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?鸡,问鸡翁、母、雏各几何?1 1)分析:分析:cocks+hens+chicks=100cocks+hens+chicks=1005*cocks+3*hens+chicks/3=1005*cocks
43、+3*hens+chicks/3=100其中:其中:0 cocks 19 0 hens 33 0 chick 1000 cocks 19 0 hens 33 0 chick 100思路:依次取思路:依次取cockscocks的值域中的值,然后求其余两的值域中的值,然后求其余两数,看是否合乎题意。可采用累试法数,看是否合乎题意。可采用累试法 枚举法枚举法 。细化过程细化过程算法描述:算法描述:cocks=0cocks=0当当cocks 19cocks 19时时 hens=0 hens=0当当hens 33hens 33时时 找满足题意的找满足题意的chickschicks数数 hens hens
44、加加1 1 cockscocks加加1 1 算法描述:算法描述:cocks=0cocks=0当当cocks 19cocks 19时时 找满足题意的找满足题意的henshens、chickschicks数数 cocks cocks加加1 1 算法描述:算法描述:cocks=0cocks=0当当cocks 19cocks 19时时 hens=0hens=0当当hens 33hens 33时时chicks=100-cocks-henschicks=100-cocks-hens 如果(如果(5*cocks+3*hens+chicks/35*cocks+3*hens+chicks/3)100100则输出
45、则输出 hens hens加加1 1 cockscocks加加1 1 程序清单程序清单void main()void main()int cocks=0,hens,chicks;int cocks=0,hens,chicks;while(cocks=19)while(cocks=19)hens=0;hens=0;while(hens=33)while(hens=33)chicks=100 cocks hens;chicks=100 cocks hens;if(5.0*cocks+3.0*hens+chicks/3.0=100 if(5.0*cocks+3.0*hens+chicks/3.0=100)printf(“%d%d%d n”,cocks,hens,chicks);printf(“%d%d%d n”,cocks,hens,chicks);hens+;hens+;cocks+;cocks+;