- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
【例5.23】 (穷举法)换钞票 要将一张面值100元的钞票换成5元、1元和0.5元面值的钞票,并要求一共换成100张且每种不少于1张。编程输出所有可能的算法。 分析:设5元票i张,1元票j张,0.5元票k张,可列方程: i+j+k=100 (张数之和为100张) 5i+j+0.5k=100 (面值总和为100元) 这里有三个变量两个方程,无法解。只能用“穷举法”一个个地去试。这是用计算机解题的一种常用的编程方法,它的基本思路是: 一一枚举各种可能的情况并判断哪一种可能符合要求,这是一种在没有其他办法情况下的办法,是一种最“笨”的方法,然而对一些无法用解析法求解的问题往往能奏效。在编程中利用循环来处理枚举问题是很方便的。 穷举法换钞票程序1 for (i=1;i=100;I++;) For (j=1;j=100;j++) For (k=1;k=100;k++) { S= i+j+k; t= 5*i+j+0.5*k; IF (S==100) (t==100) Printf(“%d,%d,%d”,i,j,k); } 这个程序采用了三重循环嵌套,执行最内层循环的次数可以算出为1003=100万次,显然运行时间太长。 分别计算钞票的张数 及面值和 【例5.23】 穷举法换钞票程序2 for (I=1;I=11;I++) FOR (j=1;j= 99–I;j++ ) IF (5*i+j+0.5*(100–i–j)=100) Printf(“%d,%d,%d”,i,j, (100–i–j)) 这个程序执行循环体(99–88)?11?2=1023次,同前一个程序的100万次相比,只是千分之一,大大节省了程序运行时间。 【例5.24】打印“九九乘法表” 回顾九九乘法表: 1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 … … 8*1=8 8*2=16 8*3=24 …… 8*8=64 9*1=9 9*2=18 9*3=27 …… 9*9=81 如何实现: 被乘数的变化从1到9,输出的行数也是9 乘数的变化比较复杂, 例如第3行,则从1到3,第9行,则从1到9, 因此乘数从1开始,到对应的行值为止. 分析:二重循环实现控制。外层循环控制被乘数,内层循环 控制乘数。由于“九九乘法表”打印呈梯形,所以使内层循环 变量每次循环的最大值与行数相同。 一级算法: for(i=1;i=9;i++) { for(j=1;j=i;j++) { 1. 输出i*j 2. 换行 } } 思考: 如何将结果反向输出, 即输出 9*9=81 9*8=72 … 9*1=9 … 1*1=1 源程序: #include stdio.h Void main() {int I,j; for(i=1;i=9;i++) { for(j=1;j=i;j++) { printf(“%d*%d=%d”,I,j,I*j); printf(“\n”); } } 【例5.25】输出如下图形: * *** ***** ******* #include stdio.h Void main() {int I,j,n; scanf(“%d”,n); for(i=1;i=n;i++) { for(j=1;j=2*i-1;j++) { printf(“*”); } printf(“\n”); } 【例5.25】输出如下图形: * *** ***** ******* ***** *** * #include stdio.h Void main() {int i,j,n; scanf(“%d”,n); for(i=1;i=n;i++) { for(j=1;j=2*i-1;j++) printf(“*”); printf(“\n”); } for(i=n-1;i=1;i- -) { for(j=1;j=2*i-1;j++) printf(“*”); printf(“\n”); } } * * goto 语句 一般形式:goto 语句标号; 说明: goto为无条件转向语句。 语句标号必须是合法的标识符。不能用整数作标号。 用途: 与if语句一起构成循环结构; 从多层循环体的内层循环跳到外层循环。 结构化程序设计 方法主张限制使用 goto语句,因为滥用 goto语
原创力文档


文档评论(0)