资源预览内容
第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
第9页 / 共17页
第10页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
算法与程序设计实验报告二4学时实验目的:1、掌握迭代算法的三方面工作;2、了解递推算法,掌握递推算法的思想;3、掌握递归算法的程序编写;。4、了解分治算法的思想;5、熟练使用二分查找方法实现代码的编写。实验内容:1、n!的递归算法的编写2、裴波那契(Fibonacci)数列的定义为:它的第 1项和第2项均为1,以后各项为其前两项之和。假如裴波那契数列中的第n项用Fib(n)表示,如此计算公式为:1(n=1 或 2)Fib (n)=IFib( n-1)+Fib( n-2)(n=2)试编写出计算Fib( n)的递归算法3、在一个给定的n个元素的有序序列中查找出与给定关键字x一样的元素的具体位置。即输入一个n个元素的序列,其中n个元素是按从小到大的顺序排 列的,查找是否存在给定的值X。实验代码:1、n!的递归算法的编写。#in cludeelsereturn n *digu i(n-1);void mai n()int n;printf(”请输入待求阶乘数(小于15的一个数):);sca nf(%d,&n);printf(结果为:%dn,digui(n);2、计算Fib(n)的递归算法#i ncludelong Fib( int n ) if ( n=1 | n=2 )/终止递归条件return 1;elsereturnFib( n-1)+Fib( n-2);void mai n()int n;printf(”请输入裴波那契数列的待求项数:”);scan f(%d, &n);printf(裴波那契数列第%d项值为ldn,n,Fib(n);3、二分查找法的实现。#i ncludeint BinarySearch(int a,int n,int x) /* 二分查找功能函数 */int l=0,r =n ,i;while(l=r)i=(l+r)/2 ;if(x=ai) return i;else if (xai) r=i-1;else l=i+1;return -1;void maopao(int a)/*冒泡排序功能函数*/int i,j;int n=10;for(i=0;i n ;i+)for(j=0;jaj+1)int temp;temp=aj;aj=aj+1;aj+1=temp;void mai n()int i,a10,x;int flag=-1;printf(”请输入10个带查找数据空格分隔:”);for(i=0;i10;i+) scan f(%d, &ai);maopao(a);printf(”带查序列有序化后变为:); for(i=0;i10;i+)prin tf(%d,ai);prin tf(n ”);printf(”请输入待查关键字:);scan f(%d, &x);flag=B in arySearch(a,10,x);if(flag=-1)printf(”未找到带查关键字!n); | elsen,flag+1);printf(”找到关键字,位于有序序列的第%d个位置!算法与程序设计实验报告三4学时实验目的:6、了解贪心算法思想7、掌握贪心法典型问题,如背包问题、作业调度问题等。实验内容:4、 键盘输入一个高精度的正整数 nn10位去掉任意s个数字后剩下的数字按原左 右次序组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数最 小。5、设计实现超市收银程序,假设顾客在超市购置各种商品,来到收银台结账,收银员具有面值为100,20, 10,5和1元的纸币和各种面值为 5角、2角、1角的硬币。 设计程序计算顾客各种所买商品的钱数,并根据顾客所付的钱数输出零钱的数目与 要找的各种货币的数目。算法思想:贪心算法的根本思路1建立数学模型来描述问题。2.把求解的问题分成假如干个子问题。3对每一子问题求解,得到子问题的局部最优解。4. 把子问题的解局部最优解合成原来解问题的一个解。实验代码:1. 键盘输入一个高精度的正整数nn10位去掉任意s个数字后剩下的数字按原左右次序组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数最小。#in clude#in elude #defi ne M 100main () char chM;int rM, dM,l, s,i,j,k;printf(”请输入正整数:”);gets(ch);printf(请输入删除的位数:);sca nf(%d, &s);l=0;for(i=0;chi!=0;i+)ri=i;l+;for(i=0;is;i+)for(j=0;jchj+1)break;if(j=l-i)k=l-i-1;else k=j;di=rk;for(j=k;jl-i-1;j+)chj=chj+1;rj=rj+1;chj=0;printf(”删除%d后最小的整数为:sn,s,ch);printf(”删除的数位为:);for(i=0;is;i+)prin tf(%dt,di+1);prin tf(n);return 0 ;2. 设计实现超市收银程序,假设顾客在超市购置各种商品,来到收银台结账,收银员具有 面值为100,20, 10, 5和1元的纸币和各种面值为5角、2角、1角的硬币。设计程序计算顾客各种所买商品的钱数,并根据顾客所付的钱数输出零钱的数目与要找的各种货币的数 目。#in clude#in cludevoid mai n()double price,total=0,givem on ey,leam on ey;int n ,i,k=0,m=0,x=0,y=0;printf(”请输入商品的数目:”);sca nf(%d,&n);printf(”输入每件商品的价格:n); for(i=1;i=100)leam on ey=leam on ey-100;k+;if(leamo ney=20)leam on ey=leam on ey-20;x+;if(leamo ney=10)leam on ey=leam on ey-10; printf(1O 元=1Xn”);while(leam on ey=5)leam on ey=leam on ey-5; printf(5 元=1Xn);while(leam on ey=1)leam on ey=leam on ey-1;m+;if(leam on ey=0.5)leam on ey=leam on ey-0.5; printf(5 角=1n);while(leam on ey=0.2)leam on ey=(float)(leam on ey-0.2);y+;if(leamo ney=0.1)leam on ey=(float)(leam on ey-0.1);prin tf(1 角=1X n);算法与程序设计实验报告四4学时实验目的:8、流程图的绘制。9、背包问题求解。实验内容:6、绘制如下各题的程序流程图。1. 输人一个数到变量 a,输出它的绝对值。分别用单双分支绘制单分支结构算法:1输入任意数并赋值给变量 a ;2判断a是否小于0,如果a小于0 ,取a的相反数; 3输出a。双分支结构算法:1输人任意数并赋值给变量a ;2判断a是否小于0,如果a小于0如此输出a的相反数,否如此输出a。2. 最值问题:1求输人的两个数中的最大值。2求输人的三个数中的最大值。3求输入的十个数中的最大值。3. 循环求和不同的控制循环方法1求输人20个数的和。计数法(知道循环次数,可以采用循环变量i来控制循环次数)2求输入的假如干个学生成绩的和,输入-1表示完毕。 标志法不能确定次数,可以用输入的数据的值来进展控制3对输入的数据求和, 当所求的和超过 100如此停止输入并输出求和结果设此题中输人的数皆为正数。没有指出输人数据的具体个数,且不能依据对输入数据的值来控制循环,控制循 环的关键就在于对循环体中变量s的判断7、利用贪心策略解决背包问题。现有载重为M公斤的背包和n种货物。第i种货物的重量为Wi,它的总价值为Pi,假定M Wi、Pi均为整数。设计程序给出装货方法, 使装入背包的货物总价值达到最大。实验代码:1. 输人一个数到变量 a,输出它的绝对值。/输尼/TY厂输Aa /输出淖/ 输出a CMD单分支结构算法流程图C绪束)双分支结构関法流程图N.i f/ 轴人a.hc /N.胡/ / 输出c 掃出b / 输竝 /2. 最值问题:(开始刁I ”/输从b /1求输人的两个数中的最大值。2求输人的三个数中的最大值。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号