习题课程序设计题.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《习题课程序设计题.ppt》由会员分享,可在线阅读,更多相关《习题课程序设计题.ppt(80页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 1 页程序设计的一般步骤程序设计的一般步骤1.分析题意,明确问题的性质分析题意,明确问题的性质数值计算数值计算/事务处理事务处理/逻辑分析逻辑分析/等等2.建立问题的描述模型建立问题的描述模型数学模型数学模型/过程模型过程模型3.设计设计/确定算法确定算法数学问题:分析解数学问题:分析解/数值解的求解算法数值解的求解算法非数学问题:非数学问题:n数据结构数据结构/算法分析与设计算法分析与设计n一般方法:穷举一般方法:穷举/递推递推/递归递归/分治分治/回溯回溯/.4.编程调试编程调试5.分析运行结果,如有必要,进一步优化分析运行结果,如有必要,进一步优化穷举法编程思路穷举法编程思路第 2
2、页l数学模型数学模型适宜进行穷举的数学模型适宜进行穷举的数学模型决定程序是否正确决定程序是否正确l穷举的范围穷举的范围一般用多重循环方式一般用多重循环方式注意控制每重循环的边界注意控制每重循环的边界第 3 页典型数值问题典型数值问题-例例6 6l例例4 4:百钱百鸡问题百钱百鸡问题。中国古代数学家张丘建在他的中国古代数学家张丘建在他的算经中提出了著名的算经中提出了著名的“百钱百鸡问题百钱百鸡问题”:鸡翁一,:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何百鸡,翁、母、雏各几何?l问题分析与算法设计问题分析与算法设计 设
3、:要买设:要买x x只公鸡,只公鸡,y y只母鸡,只母鸡,z z只小鸡,可得到方程只小鸡,可得到方程:x+y+z=100 x+y+z=100 5x+3y+z/3=100 5x+3y+z/3=100 取值范围:取值范围:0=0=x x、y y、z=100z=100 可以采用穷举法求解。可以采用穷举法求解。将变量将变量 x、y、z 的所有取值可能代入方程进行计算的所有取值可能代入方程进行计算第 4 页典型数值问题典型数值问题-例例6 6l穷举法基本思路穷举法基本思路当当x=0 x=0,y y=0 0,z=0z=0时:是否满足方程时:是否满足方程 z=1z=1时:是否满足方程时:是否满足方程 z=2
4、z=2时:是否满足方程时:是否满足方程 .z=100z=100时:是否满足方程时:是否满足方程当当x=0 x=0,y y=1 1,z=0z=0时:是否满足方程时:是否满足方程 z=1z=1时:是否满足方程时:是否满足方程 .z=100z=100时:是否满足方程时:是否满足方程当当x=0 x=0,y y=2 2,z=0z=0时:是否满足方程时:是否满足方程 .当当x=100 x=100,y y=100100,z=100z=100时:时:.z=100满足方满足方程?程?Y N输出输出z+z=0y=100y+y=0 x=100 x+x=0开始开始结束结束第 5 页典型数值问题典型数值问题-例例6 6
5、l程序程序z=100满足方满足方程?程?Y N输出输出z+z=0y=100y+y=0 x=100 x+x=0开始开始结束结束#include include void main()void main()int x,y,z,j=0;int x,y,z,j=0;for(x=0;x=100;x+)for(x=0;x=100;x+)for(y=0;y=100;y+)for(y=0;y=100;y+)for(z=0;z=100;z+)for(z=0;z=100;z+)if(x+y+z if(x+y+z=100&100&5*x+3*y+z/3=100)5*x+3*y+z/3=100)printf(.,+j
6、,x,y,z);printf(.,+j,x,y,z);第 6 页典型数值问题典型数值问题-例例6 6#include include void main()void main()int x,y,z,j=0;int x,y,z,j=0;for(x=0;x=100;x+)for(x=0;x=100;x+)forfor(y=0;y=100;y+)(y=0;y=100;y+)for for(z=0;z=100;z+)(z=0;z=100;z+)ifif (x+y+z(x+y+z=100&5*x+3*y+z/3100&5*x+3*y+z/3=100)100)printf(%2d:cock=%2d hen
7、=%2d chicken=%2dn,printf(%2d:cock=%2d hen=%2d chicken=%2dn,+j,x,y,z);+j,x,y,z);运行结果:运行结果:1:1:cock=0 hen=25 chicken=75cock=0 hen=25 chicken=75 2:cock=3 hen=20 chicken=77 2:cock=3 hen=20 chicken=77 3:cock=4 hen=18 chicken=78 3:cock=4 hen=18 chicken=78 4:cock=7 hen=13 chicken=80 4:cock=7 hen=13 chicken
8、=80 5:cock=8 hen=11 chicken=81 5:cock=8 hen=11 chicken=81 6:cock=11 hen=6 chicken=83 6:cock=11 hen=6 chicken=83 7:cock=12 hen=4 chicken=84 7:cock=12 hen=4 chicken=84例例例例C3C3C3C3第 7 页典型数值问题典型数值问题-例例6 6l丢失重要条件:丢失重要条件:z 应该能够被应该能够被整除。整除。#include void main()int x,y,z,j=0;for(x=0;x=20;x+)for(y=0;y=33;y+)f
9、or(z=0;z=100;z+)if(z%3=0&x+y+z=100&5*x+3*y+z/3=100)printf(%2d:cock=%2d hen=%2d chicken=%2dn,+j,x,y,z );l运行程序,正确的结果:运行程序,正确的结果:1:cock=0 hen=25 chicken=75 2:cock=4 hen=18 chicken=78 3:cock=8 hen=11 chicken=81 4:cock=12 hen=4 chicken=84z+=3)第 8 页典型数值问题典型数值问题-例例6 6l优化程序:优化程序:forfor(x=0;x=20;x+)(x=0;x=20
10、;x+)forfor (z=0;z100;z+=3)(z=0;z100;z+=3)y=100-x-z;y=100-x-z;if if(5*x+3*y+z/3(5*x+3*y+z/3=100)100)printf(%2d:cock=%2d hen=%2d chicken=%2dn,printf(%2d:cock=%2d hen=%2d chicken=%2dn,+j,x,y,z);+j,x,y,z);l优化程序:优化程序:forfor(x=0;x=20;x+)(x=0;x=20;x+)forfor(y=0;(y=0;y=(100-5*x)/3y=(100-5*x)/3;y+);y+)z=100-
11、x-y;z=100-x-y;if if(z%3(z%3=0&5*x+3*y+z/30&5*x+3*y+z/3=100)100)printf(%2d:cock=%2d hen=%2d chicken=%2dn,printf(%2d:cock=%2d hen=%2d chicken=%2dn,+j,x,y,z);+j,x,y,z);第 9 页趣味程序趣味程序百例百例2020:一个奇异三位数:一个奇异三位数l问题问题一一个个自自然然数数的的七七进进制制表表达达式式是是一一个个三三位位数数,而而这这个个自自然然数数的的九九进进制制表表示示也也是是一一个个三三位位数数,且且这这两两个个三三位位数数的数码
12、顺序正好相反,求这个三位数。的数码顺序正好相反,求这个三位数。l问题分析与算法设计问题分析与算法设计设七进制数形式为设七进制数形式为kjikji:则九进制表示的形式就为则九进制表示的形式就为ijkijk。取值范围取值范围:1=1=i i、k k=6=60=0=j j =6 =6 将将9 9进制数转化为十进制:进制数转化为十进制:将将7 7进制数转化为十进制:进制数转化为十进制:i*9*9+j*9+ki*9*9+j*9+ki+j*7+k*7*7i+j*7+k*7*7使用使用穷举穷举法法第 10 页趣味程序趣味程序百例百例2020:一个奇异三位数:一个奇异三位数l程序说明与注释程序说明与注释voi
13、d main()void main()int i,j,k;int i,j,k;forfor(i=1;i7;i+)(i=1;i7;i+)/*/*穷举穷举9 9进制的第进制的第1 1位数位数 */*/forfor(j=0;j7;j+)(j=0;j7;j+)/*/*穷举穷举9 9进制的第进制的第2 2位数位数 */*/forfor(k=1;k7;k+)(k=1;k7;k+)/*/*穷举穷举9 9进制的第进制的第3 3位数位数 */*/ifif(i*9*9+j*9+ki*9*9+j*9+k =i+j*7+k*7*7i+j*7+k*7*7)printf(%d%d%d(7)=%d%d%d(9)=%d(10
14、)n,printf(%d%d%d(7)=%d%d%d(9)=%d(10)n,k,j,i,i,j,k,i*9*9+j*9+k);k,j,i,i,j,k,i*9*9+j*9+k);l运行结果运行结果 503(7)=305(9)=248(10)503(7)=305(9)=248(10)例例例例C100_20C100_20C100_20C100_20第 11 页趣味程序趣味程序百例百例2121:4 4位反序数位反序数l问题问题设设N N是一个是一个4 4位数,它的位数,它的9 9倍恰好是其倍恰好是其反序数反序数,求,求N N。反序数就是将整数的数字倒过来形成的整数。反序数就是将整数的数字倒过来形成的整
15、数。例如:例如:12341234的反序数是的反序数是43214321。l问题分析与算法设计问题分析与算法设计设整数的千、百、十、个位为设整数的千、百、十、个位为i i、j j、k k、l l,则满足:则满足:(i*10i*103 3+j*10j*102 2+10+10k+l)*9k+l)*9=(l*10(l*103 3+k*10k*102 2+10+10j+i)j+i)l程序说明与注释程序说明与注释main()main()int i;int i;for for(i=1002;i1111;i+)(i=1002;i0)则则 i 为整数的平方。为整数的平方。可以采用试探的方法可以采用试探的方法:令令
16、 m 从从1开始逐步增开始逐步增加进行试探。加进行试探。m*m i?m=m+1成立成立不成立不成立输入一个整数输入一个整数 i输出输出 m 和和 i开始开始结束结束设试探初值设试探初值 m=1m*m=i?成立成立不成立不成立第 13 页典型数值问题典型数值问题-例例2 2scanf(”%d”,&i);m=0;while(m*mi)m+;if(m*m=i)printf(”%d%d”,m,i);m*m i?m=m+1成立成立不成立不成立输入一个整数输入一个整数 i输出输出 m 和和 i开始开始结束结束设试探初值设试探初值 m=1m*m=i?成立成立不成立不成立 int i,m;第 14 页典型数值
17、问题典型数值问题-例例2 2#include#include”s st tdio.hdio.h”int int main()main()int i,m;int i,m;scanf(scanf(”%d%d”,&,&i i););m=1;while(m*mi)m+;if(m*m=i)printf printf(“%d*%d=%dn%d*%d=%dn”,m,m,m,m,i i););return 0;return 0;forfor(m=1;m*mi;m+)(m=1;m*mi;m+);如果采用如果采用 for 语句该如何修改?语句该如何修改?表达式表达式1表达式表达式2表达式表达式3 for 语句的语
18、句的循环体循环体是什么?是什么?循环体为循环体为空语句空语句第 15 页典型数值问题典型数值问题-例例3 3l例例3 3:某地,车牌:某地,车牌4 4位数字,首位非位数字,首位非0.0.一辆卡车违犯一辆卡车违犯交通规则逃逸。现场交通规则逃逸。现场3 3人目击但都没有记住车号,只人目击但都没有记住车号,只记得一些特征。甲说:牌照的记得一些特征。甲说:牌照的前两位数字是相同的前两位数字是相同的;乙说:牌照的乙说:牌照的后两位数字是相同的后两位数字是相同的,但,但与前两位不与前两位不同同;丙是位数学家,他说:;丙是位数学家,他说:四位的车号刚好是一个四位的车号刚好是一个整数的平方整数的平方。请根据以
19、上线索尝试找出车号。请根据以上线索尝试找出车号。l问题分析与算法设计问题分析与算法设计 按照题目的要求造出一个前两位数按照题目的要求造出一个前两位数(i)i)相同、后两位相同、后两位数数(j)j)相同且相互间又不同的整数。相同且相互间又不同的整数。0 0 i=9i=90=j=90=j=31=31)第 16 页典型数值问题典型数值问题-例例3 30 0 i i=9=90=0=j j=9=31=31)i=9?j=0成立成立不成立不成立i=1k=1100*i+11*ji!=j?成立成立不成立不成立k是平方是平方?成立成立不成立不成立输出:输出:k,i,jj+j=9?成立成立不成立不成立i+结束结束f
20、or(i=1;i=9;i+)for(j=0;j=9;j+)if(i!=j)k=1100*i+11*j;判断判断k是否平方是否平方;第 17 页典型数值问题典型数值问题-例例3 3#include include”stdio.hstdio.hvoid main()void main()int i,j,k,m;int i,j,k,m;forfor(i=1;i=9;i+)(i=1;i=9;i+)/*i:/*i:车号前二位的取值车号前二位的取值*/*/for for(j=0;j=9;j+)(j=0;j=9;j+)/*j:/*j:车号后二位的取值车号后二位的取值*/*/ifif(i!=j)(i!=j)/
21、*/*判断两位数字是否相异判断两位数字是否相异*/*/k=i*1100+j*11;k=i*1100+j*11;for for(m=31;m*mk;m+)/*31*31=961*/(m=31;m*m0 x0;nm10nm10的整数的整数 采用穷举法求解。采用穷举法求解。第 19 页典型数值问题典型数值问题-例例4-IQ4-IQ游戏游戏void main(void main()int x,y,m int x,y,m,flag;flag;/*flag/*flag:标志变量:标志变量*/for for(x=0,flag=1;flag;x+)(x=0,flag=1;flag;x+)/*/*穷举穷举x*/
22、x*/y=100+x;y=100+x;/*/*计算计算y*/y*/forfor(m=1;m*m y;m+)(m=1;m*m y;m+);if if(m*m(m*m=y)y)/*/*判断判断y y是否为一个数的平方是否为一个数的平方*/forfor(;m*m y+68;m+)(;m*m y+68;m+);ifif(m*m (m*m=y+68)y+68)/*/*判断判断 y+68y+68*/printf(%dn,x);printf(%dn,x);flag=0;flag=0;/*flag/*flag置置0 0,结束循环,结束循环*/例例例例200-IQ200-IQ200-IQ200-IQ第 20 页
23、典型数值问题典型数值问题-例例4-IQ4-IQ游戏游戏1 1void main(void main()int y,m int y,m,flag;flag;/*flag/*flag:标志变量:标志变量*/for for(y y=1 10101,flag=1;flag;,flag=1;flag;y y+)+)/*/*穷举穷举y*/y*/forfor(m=1;m*m y;m+)(m=1;m*m y;m+);if if(m*m(m*m=y)y)/*/*判断判断y y是否为一个数的平方是否为一个数的平方*/forfor(;m*m y+68;m+)(;m*m y+68;m+);ifif(m*m (m*m=
24、y+68)y+68)/*/*判断判断 y+68y+68*/printf(printf(”%dn%dn”,y y-100-100););flag=0;flag=0;/*flag/*flag置置0 0,结束循环,结束循环*/例例例例200-IQ1200-IQ1200-IQ1200-IQ1第 21 页典型数值问题典型数值问题-例例4-IQ4-IQ游戏游戏2 2#include#include void main(void main()int m int m,n,n,flag;flag;/*flag/*flag:标志变量:标志变量*/for for(m m=1 10,flag=1;flag;0,fla
25、g=1;flag;m m+)+)/*/*通过穷举通过穷举m m,直接构造平方数,直接构造平方数 y*/y*/forfor(n n=1=1;n n*n n m*m*m m+68;+68;n n+)+);/*/*判断判断 m*m+68m*m+68 是否为平方数是否为平方数 */*/ifif(n n*n n =m*m*m m+68)+68)printf(printf(”%dn%dn”,m*m*m-100m-100););flag=0;flag=0;/*flag/*flag置置0 0,结束循环,结束循环*/例例例例200-IQ2200-IQ2200-IQ2200-IQ2第 22 页典型数值问题典型数值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题 课程 设计
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内