文档详情

2014040206027_刘明哲_作业1_第一篇课后作业.docx

发布:2017-06-13约1.57千字共5页下载文档
文本预览下载声明
实验报告课程名称:计算机软件技术基础 学  院:物理电子学院 专  业:电子信息与科学技术 学生姓名:刘明哲 学  号:2014040206029日  期:2015年03月22日 1.3利用减半递推技术,写出长度为n的数组中最大元素的递归算法(用C/C++描述)。设n=2^k,其中k=1。 程序说明: 如果数组中只有一个元素,则该元素即数组中的最大元素,否则将数组对半分为前半部分和后半部分; 分别求出数组前半部分和后半部分的最大值m1、m2并比较二者大小,若m1m2,则m1为数组中的最大值,否则m2为数组中的最大值; 程序清单: #includestdio.h int max(int array[],int m,int n) { int d,d1,d2; if(m==n) return(array[m-1]); else { d1=max(array,m,(m+n)/2); d2=max(array,(m+n)/2,n); if(d1d2) d=d1; else d=d2; return(d); } } main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; printf(maximum=%d\n,max(a,1,10)); return 0; } 调试说明: 运行结果: 程序无法运行 1.4编写二分法求方程实根的减半递推算法(用C/C++描述)。 程序说明: 首先取给定区间的中点c=(a+b)/2; 然后判断f(c)是否为0.若f(c)=0,则说明c即为所求的根,求解过程结束;若f(c)!=0,则根据以下原则将区间减半; 若f(a)f(c)0,则取原区间的前半部分;若f(b)f(c)0,则取原区间的前后部分; 最后判断减半后的区间长度是否已经很小; 若|a-b|l,则过程结束,取(a+b)/2为根的近似值;若|a-b|=l,则重复上述的减半过程。 程序清单: #includestdio.h #includemath.h double function(double x) { return(2*x*x*x-3*x*x+2*x-6);//初始化方程 } int main() { double lit=0.1; double a,b; printf(请输入取值范围:\n); scanf(%lf%lf,a,b);//输入二分法取值边界 double c=(a+b)/2; double result; while (fabs (function(c)) lit)//判断中点的函数值是否大于极限值,满足则进行递推 { if(function(c)0) { b=c; } if(function(c)0) { a=c; } c=(a+b)/2; } if(fabs(function(c))lit)//判断中点的函数值是否小于极限值,满足则近似看成方程组的零点 { result=c; printf(the result is:%f\n,result); } else { printf(error\n); } getchar(); getchar(); return 0; } 调试说明: 运行结果: 程序暂时无法实现自主输入各项系数的功能,原因不明,尚且有待改进; 程序运行结束后窗口立即自动关闭,不过在最后添加一行getchar()后问题得到初步解决; 1.5编写用回溯法求解皇后问题的算法(用C/C++描述)。 程序说明: 程序清单: 调试说明: 运行结果:
显示全部
相似文档