c语言计算矩阵的n次方,N矩阵的n次方运算及折半查找报告--数据结构(C语言)(8页)-原创力文档...

. .

. . .

数据结构作业报告

—①N矩阵的n次方运算报告

—②折半查找报告

:江海强

班级:070921班

学号上机时间:2010-9-29

报告时间:2010-9-10

摘要

1.实验目的

本实验主要是让我们了解函数的调用与返回,理解递归函数的执行过程,学会利用递归函数解决实际问题。

2.实验方法

①本程序利用全局数组变量b[N][N]来统筹整个程序,有一个主函数和一个子函数,其中子函数为矩阵换算的函数,也作为递归函数。而递归就是本程序的主要实验方法。

②本程序也定义了一个全局指针变量*mid,也是有一个主函数和一个子函数,其中子函数为折半查找的函数,也作为递归函数。而递归也就是本程序的主要实验方法。

3.实验结果

①由运行出来的结果可以看出,即使为一次方,此矩阵运算的结果与实际运算得到的结果完全是一样,所以此程序是正确的,成功的。

②由运行出来的结果可以看出,折半查找所找到的数的位置经过验证也是正确、无误的。即使输入要查找的数不在数组中,则程序会输出error来说明查找失败。故此程序也是正确的,成功的。

注:这两个程序是用C语言编辑完成的。其中①代表的是N矩阵的n次方运算的程序设计,②代表的是折半查找的程序设计,如果没有特别说明,以下的①②都是代表这样的意思。

一.问题重述

①给出一个N阶矩阵A,利用递归编程快速计算矩阵A的n次幂

②给出一组按从小到大排序的数组,利用递归编程实现折半查找,查找出所要求查找的数所在的位置

二.算法描述

这两个程序除了运用一些条件语句,判断语句之外,主要运用了递归算法。

①本程序中的子函数的复杂度为O(N2+N2+N3),即为O(N3),而递归算法运用了子函数N-1次,所以复杂度为(N-1)O(N3)。

②本程序中折半查找的平均查找长度为ASL,要考虑到是否查找成功,则

开始

开始

输入N阶矩阵a

输入N阶矩阵a[N][N]

结束调用子函数jzhs

结束

调用子函数jzhs()

输出运用for循环计算矩阵相乘

输出

运用for循环计算矩阵相乘

再自身调用子函数jzhs()

再自身调用子函数jzhs()

再调用

再调用……直到调用了子函数N-1次为止

再运用for循环计算矩阵相乘

再运用for循环计算矩阵相乘

结束输出开始

结束

输出

开始

直到调用到*mid=key或者key不存在数组中

直到调用到*mid=key或者key不存在数组中

输入数组a[N]和所要查找的数key

自身调用子函数search(a,key,lo,(mid--))自身调用子函数search(a,key,(mid++),hi)

自身调用子函数search(a,key,lo,(mid--))

自身调用子函数

search(a,key,(mid++),hi)

调用子函数seach()

*mid>key?否

*mid>key?

运用for语句赋值*mid,比较*mid与key的大小

先不讨论*mid=ke

先不讨论

*mid=key

三.变量说明

①全局变量N代表的是矩阵为N阶,全局变量n代表的是N阶矩阵的n次方,而a[N][N]则代表的是N阶矩阵。

②全局变量N代表的是数组a[N]的个数,key是所要查找的数,*lo、*hi和*mid分别代表数组的头、尾和中间指针,并且随着运算而变化。

四.函数与思路说明

①本程序分为一个主函数和一个子函数,其中子函数为jzhs()子函数。其中jzhs()子函数将主函数中调入的N阶矩阵,通过三个for循环,计算出N阶矩阵的二次方。再将得出的矩阵和原来的矩阵自身调用,输入到jzhs()子函数中,即得到N阶矩阵的三次方,利用这样的递归进行运算直到算出矩阵的n次方为止。

②本程序也分为一个主函数和一个子函数,其中子函数为seach()子函数。其中seach()子函数将主函数调入的数组,通过指针指向数组的头和尾,求出*mid指向中间数组。若*midkey,则调用自身函数search(a,key,lo,(mid--)),直到查找到所要查的数或者要查找的数不在数组中为止。

②:

②:

1.第一次运行结果:

从小到大排序好的数列为:

1 2 3 4 5 6 7 8 9

要查找的数是:4

查找到的数是:4

其存储位置为:0012FF60

2.第二次运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值