当前位置:首页 > 2014040206027 - 刘明哲 - 作业1 - 第一章课后作业
实验报告课程名称:计算机软件技术基础 学 院:物理电子学院 专 业:电子信息与科学技术 学生姓名:刘明哲
学 号:2014040206029
日 期:2015年03月22日
1.3利用减半递推技术,写出长度为n的数组中最大元素的递归算法(用C/C++描述)。设n=2^k,其中k>=1。
程序说明:
如果数组中只有一个元素,则该元素即数组中的最大元素,否则将数组对半分为前半部分和后半部分;
分别求出数组前半部分和后半部分的最大值m1、m2并比较二者大小,若m1>m2,则m1为数组中的最大值,否则m2为数组中的最大值;
程序清单:
#include
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(d1>d2) d=d1; else
d=d2; return(d); } }
main() {
int a[10]={1,2,3,4,5,6,7,8,9,10}; printf(\ 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|
程序清单:
#include
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(\输入二分法取值边界 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)) result=c; printf(\ } else { printf(\ } getchar(); getchar(); return 0; } 调试说明: 运行结果: 1. 程序暂时无法实现自主输入各项系数的功能,原因不明,尚且有待改进; 2. 程序运行结束后窗口立即自动关闭,不过在最后添加一行getchar()后问题得到初步解决; 1.5编写用回溯法求解皇后问题的算法(用C/C++描述)。 程序说明: 程序清单: 调试说明: 运行结果:
共分享92篇相关文档