第二章第5节 §25结构化程序设计方法 1)具有结构化的算法,即由三种基本结构组成 重点 2)程序设计风格及结构,清晰、规范、模块化 )自顶向下厂先作整体方案设计,再进行各部分设 方法2)渐步细化计,最后进行细化设计。 3)模块化设计:将程序分成若干个功能单一(独立 )的子程序,由主程序调用子程序。 4)结构化编码用结构化程序设计语言来编程序。 如:C, Pascal, Qbasic
§2.5 结构化程序设计方法 第二章 第5节 1)具有结构化的算法, 即由三种基本结构组成 2)程序设计风格及结构,清晰、规范、模块化 重点 1)自顶向下 先作整体方案设计,再进行各部分设 2)渐步细化 计,最后进行细化设计。 3)模块化设计: 将程序分成若干个功能单一(独立 )的子程序,由主程序调用子程序。 4)结构化编码 采用结构化程序设计语言来编程序。 如:C , Pascal, Qbasic 方法
例“百钱买百鸡” 第二章第5节 公鸡 钱一只 coke 母鸡3钱一只 hen 雏鸡1钱三只 chick 考虑到小数的计算误差 解:(1)基本思路 coke+hen+chick=100 5*coke+3*hentchick/3=100 (2)-15*coke+9*hen+chick=300(2) 范围:coke:0-19(不能为20,否则总钱数为100,但hen、 chick=0 hen:0-33(若为34,总钱>100) chick:0—100(不能大于100,否则鸡总和>100 步聚: s1:取cock=0→19,step1 s2:求符合条件的hen, kick(满足方程2)且为正整数) 算法: cocke cocke 当cock<=19 当(cock<=19)时执行: {求满足条件的hen,chck; 求符合条件的 Then. chick cock=cock+1 cock=cock+1
例 “百钱买百鸡” 第二章 第5节 公鸡 5 钱一只 coke 母鸡 3 钱一只 hen 雏鸡 1 钱三只 chick 解: (1) 基本思路 coke+hen+chick=100 (1) 5*coke+3*hen+chick/3=100 (2) 15*coke+9*hen+chick=300 (2) 范围: coke: 0—19 (不能为20,否则总钱数为100,但hen、chick=0) hen: 0 — 33 (若为34,总钱>100) chick: 0 — 100 (不能大于100,否则鸡总和>100) 步聚: s1: 取cock=0→19, step 1 s2: 求符合条件的hen, ckick (满足方程(1)(2)且为正整数) 算法: cock=0 当(cock<=19)时,执行: {求满足条件的hen, chick; cock=cock+1; } ?? cock=0 求符合条件的hen,chick cock=cock+1 当cock<=19 考虑到小数的计算误差
S2:细化 第二章第5节 法一:解方程(cock为己知) 同时满足: chick=(2*cock+200)*3/8 令→∫( chick>0)&&( (chick-(int)(chick=0 hen=(100-7*cock)/4 l(hen>0)&&(hen-(int(hen))==0) 法二 21取hen=0→33,sep1细化S2,1 chick=100-c0 ck-hen s22求符合条件的 kick s222条件 算法: 15*cock+g*hen+chick300 hen=0 当(hen<=33时执行: 求满足条件的 Chick; hen=hen+l chick=100-coke-hen 15*cock+9*hen+chick=300 hen=0 F 当hen<=33 输出 求符合条件的 chick cOc hen hen=hen+ chick
法二 : s2.1 取 hen =0 → 33, step 1 s2.2 求符合条件的 ckick 第二章 第5节 法一: 解方程(cock为己知) chick = (2*cock+200)*3/8 hen = (100-7*cock)/4 S2: 细化 算法: hen=0 当(hen 0)&&(chick-(int)(chick) ==0) (hen > 0)&&(hen-(int)(hen))==0) chick=100-coke-hen 15*cock+9*hen+chick=300 T ? F 输出: cock hen chick
第二章第5节 汇总: cocke acock<=19 hen=0 当hen<=33 chick=100-coke-hen 15*cock+9*hen+chick300 T F 输出 k en chick hen=hen+1 cock=cock+I
cock=0 cock=cock+1 当cock<=19 hen=0 hen=hen+1 当hen<=33 chick=100-coke-hen 15*cock+9*hen+chick=300 T ? F 输出: cock hen chick 汇总: 第二章 第5节
第二章第5节 程序: main fint cock, hen, chick; cocke: while(cock<=19) hen=0 while(hen<=33) chick=100-hen-cock; if(15*cock+9*hen+chick)==300) printf(cock, hen, chick=%d, % d, %odn", cock, hen, chick) else hen++ cock++:
第二章 第5节 程序: main( ) {int cock,hen,chick; cock=0; while(cock<=19) { hen=0; while(hen<=33) {chick=100-hen-cock; if((15*cock+9*hen+chick)= =300) printf(“cock, hen, chick =%d,%d,%d\n”,cock,hen,chick); else ; hen++; } cock++; } }
第二章习题讲解 241有两个瓶子A和B分另盛放醋和酱油要求将它们互换 取一个空瓶C A←-B B←C 242依次将10个数输入,要求将其中最大的数打印出来 法1∠输入x max←x,i←-1 N Y xmax B max←X B 输出 max 输入x A
第二章 习题讲解 2.4-1 有两个瓶子A和B,分另盛放醋和酱油,要求将它们互换 取一个空瓶C C←A A←B B←C 2.4-2 依次将10个数输入,要求将其中最大的数打印出来. 输入x max ←x; i ←1 i ←1+1 imax max ←x 输出max A A B B 法1 N Y
法2 ∠输入x max←X1 N B xmaX 1+1+1 max←X 输入x A B max 问题依次将10个数输入,要求将其中最小的数打印出来?22
输入x max ←x; i ←1 i ←1+1 imax max ←x 输出max A A B B 法2 问题 依次将10个数输入,要求将其中最小的数打印出来????? N Y
24-2输入10个数,找出最大一个数,并打印出来 main( fint max, x, 1 printf("nol=cY scanf%d”,&x) maxX - while(imax)max-X ritt max max)
2.4-2 输入10个数, 找出最大一个数,并打印出来 main( ) {int max,x,i; printf(“no1=“); scanf(“%d”,&x); max=x; i=1; while(imax) max=x; } printf(“max=%d”,max); }
243有3个数ab,c要求按大小顺序把它们打开印出来 main 输入a,bc Bint a.b.cx: printf(“a,b,e=“) Y scanf(“%d,%d,%d”,&a2c) b< x←b:b X: b-CC=X; N printi(“a2b,c=%d,%d,%d”, a, b,c); 输出a,bc
2.4-3 有3个数a,b,c,要求按大小顺序把它们打开印出来. 输入a,b,c ac) { x=b;b=c;c=x;} printf(“a,b,c=%d,%d,%d”, a,b,c); }
247求两个数mn的最大公约数 思考最大公约数的范围:~m,n中的最小值 输入mn 输入mn 求b=min{mnh 求b=min{mn} Y ob=0? and n%b (m%b=0? and n%b=0 Y
2.4-7 求两个数m,n的最大公约数 输入m,n 求b=min{m,n} m%b=0? and n%b=0? b=b-1 输出b 输入m,n 求b=min{m,n} !(m%b=0? and n%b=0?) b=b-1 输出b Y N Y N 思考 最大公约数的范围: 1~ m,n中的最小值