数据结构课程设计报告n维矩阵乘法


    
    数结构
    课程设计报告


    设计题目: n维矩阵法:A B-1

    专 业 计算机科学技术
    班 级 计
    学 生
    学 号
    指导教师
    起止时间 2007X32007X11




    学年第 I 学期


    具体务
    功:
    设计矩阵相程序首先键盘输入两矩阵ab容输出两矩阵输出ab-1结果
    分步实施:
    1初步完成总体设计搭框架确定机话界面确定函数数
    2完成低求:建立文件完成2维矩阵情况
    3进步求:通键盘输入维数n兴趣学扩充系统功
    求:
    1界面友函数功划分
    2总体设计应画流程图
    3程序加必注释
    4提供程序测试方案
    5程序定起测试宁功少运行起运行程序没价值
    二 软件环境
    Microsoft Visual C++ 60
    三 问题需求分析

    程序二维数组作矩阵存储结构通键盘输入矩阵维数n动态分配存空间创建n维矩阵矩阵建立通键盘输入矩阵元素值通文件读入矩阵项数(维数元素值)
    矩阵作进步操作(A*BA*B^(1))时先判断存中否已相关数存未数存提示户先输入相关数
    矩阵进行求逆时先利矩阵逆充条件:|A| 0 判断矩阵否逆矩阵行列式 |A| 0 提示该矩阵逆 |A| 0 求逆矩阵终端显示逆矩阵


    四 算法设计思想流程图

    1.抽象数类型

    ADT MatrixMulti{



    数象:D {a(Ij)|i 123…nj 12…na(ij)∈ElemSetn矩阵维数}

    数关系 R {RowCol}
    Row {| 1 < i < n 1 < j < n1}
    Col {| 1 < i < n1 1 < j < n}

    基操作
    Swap(&a&b)
    初始条件:记录ab已存
    操作结果:交换记录ab值
    CreateMatrix(n)
    操作结果:创建n维矩阵返回该矩阵
    Input(&M)
    初始条件:矩阵M已存
    操作结果:终端读入矩阵M元素值
    Print(&M)
    初始条件:矩阵M已存
    操作结果:终端显示矩阵M元素值
    ReadFromFile()
    操作结果:文件读入矩阵相关数
    Menu_Select()
    操作结果:返回菜单选项
    MultMatrix(&M1&M2&R)
    初始条件:矩阵M1M2R已存
    操作结果:矩阵M1M2作法运算结果放R中
    DinV(&M&V)
    初始条件:矩阵MV已存
    操作结果:求矩阵M逆矩阵结果放入矩阵V中
    MatrixDeterm(&Mn)
    初始条件:矩阵M已存
    操作结果:求矩阵M行列式值

    } ADT MatrixMulti


    2.矩阵求逆算法设计思想

    算法采高斯约旦法(全选元)求逆思想:
    首先k0n1作步:
    ① 第k行第k列开始右角子阵中选取绝值元素记住元素行号列号通行交换列交换交换元素位置步称全选元
    ② 元求倒:M(kk) 1 M(kk)


    ③ M(kj) M(kj) * M(kk)j 01…n1j k
    ④ M(ij) M(ij) – M(ik) * M(kj)ij 01…n1ijk
    ⑤ M(ik) M(ik) * M(kk)i 01…n1i k
    根全选元程中记录行列交换信息进行恢复恢复原:
    全选元程中先交换行(列)进行恢复原行(列)交换列(行)交换恢复

    3矩阵行列式求值运算算法设计思想

    利行列式性质:行列式等行(列)元素应代数余子式积
    D ∑a(ik)*A(ik) k 12…n
    D ∑a(kj)*A(kj) k 12…n
    利函数递调法实现求值

    4.函数间调关系
    Main()
    ReadFromFile()
    DinV()
    Swap ()
    Print()
    Menu_Select()
    MatrixDeterm()
    CreateMatrix()
    MultMatrix()
    Input()


    5流程图













    开始
    switch(Menu_Select())
    case 1
    case 3
    case 2
    n > 0

    输入矩阵维数n
    输入矩阵AB
    输出矩阵维数n
    system(pause)
    通键盘输入需矩阵求逆求出相应该逆阵显示求逆阵system(pause)矩阵逆返回菜单
    case 4
    RA*B显示矩阵R system(pause)
    case 5







    RA*B^(1)显示矩阵R
    system(pause)B逆返回菜单
    case 6
    指定文件中读入矩阵数
    case 0
    exit(0)
    结果






    五 源代码

    #include
    #include
    #include
    #include
    #include
    #include


    #define YES 1
    #define NO 0
    typedef float ElemType
    ElemType **A 矩阵A
    ElemType **B 矩阵B
    ElemType **R 矩阵R存放运算结果
    ElemType **V 矩阵V存放逆矩阵
    int n0 矩阵维数
    int flag1 标记
    void swap(ElemType *aElemType *b) 交换记录ab值
    {
    ElemType c
    c*a
    *a*b
    *bc
    }


    ElemType **CreateMatrix(int n) 创建n维矩阵返回该矩阵
    {
    int ij
    ElemType **M
    M (ElemType **)malloc(sizeof(ElemType *)*n)
    if(M NULL)
    exit(1)
    for(i0i {
    *(M+i) (ElemType *)malloc(sizeof(ElemType)*n)
    for(j0j *(*(M+i)+j) 0
    }
    return M
    }


    ElemType MatrixDeterm(ElemType **Mint n)
    *递法求n维矩阵行列式值返回运算结果*
    {
    int ijkls
    ElemType **T1
    ElemType **T2
    T1CreateMatrix(n)
    T2CreateMatrix(n)
    ElemType u


    ElemType value0 运算结果
    for(i0i {
    for(j0j {
    T1[i][j]M[i][j]
    T2[i][j]M[i][j]
    }
    }
    if(n2) 2维矩阵直接运算返回运算结果
    {
    valueT2[0][0]*T2[1][1]T2[0][1]*T2[1][0]
    return value
    }
    else
    {
    for(j0j {
    uT1[0][j]
    for(i1l0i {
    for(k0s0k {
    if(kj)
    continue
    else
    {
    T2[l][s]T1[i][k]
    s++
    }
    }
    l++
    }
    valuevalue+u*((int)pow(1j))*MatrixDeterm(T2n1)
    *行列式等某行元素代数余子式积*
    }
    return value
    }
    }



    int DinV(ElemType **MElemType **V)
    *全选元法求矩阵M逆矩阵结果存入矩阵V中*


    {
    int ijk
    ElemType d
    ElemType u
    int *JS*IS
    JS(int *)malloc(sizeof(int)*n)
    IS(int *)malloc(sizeof(int)*n)
    uMatrixDeterm(Mn) 返回矩阵A行列式值
    if(u0)
    return 1
    for(i0i for(j0j V[i][j]M[i][j]
    for(k0k {
    d0
    for(iki {
    for(jkj {
    if(fabs(V[i][j])>d)
    {
    dfabs(V[i][j]) d记录绝值元素值
    *绝值元素数组中行列坐标分存入IS[K]JS[K]*
    IS[k]i
    JS[k]j
    }
    }
    }
    if(d+10 10)
    return 0 元素0
    if(IS[k] k)
    *绝值元素第k行矩阵IS[K]行元素k行元素相交换*
    for(j0j swap(&V[k][j]&V[IS[k]][j])
    if(JS[k]k)
    *绝值元素第k列矩阵JS[K]列元素k列元素相交换*
    for(i0i swap(&V[i][k]&V[i][JS[k]])
    V[k][k]1V[k][k] 绝值元素求倒
    for(j0j

    *矩阵M第k行元素M[k][k]身外M[k][k]*
    if(jk)
    V[k][j]V[k][j]*V[k][k]
    for(i0i*矩阵第k行元素第k列元素外身减M[i][k]*M[k][j] 中ij元素身矩阵位置坐标*
    if(ik)
    for(j0j if(jk)
    V[i][j]V[i][j]V[i][k]*V[k][j]
    for(i0i *矩阵M第k列元素M[k][k]身外M[k][k]*
    if(ik)
    V[i][k]V[i][k]*V[k][k]
    }
    for(kn1k>0k)
    *根面记录行IS[k]列JS[k]信息恢复元素*
    {
    for(j0j if(JS[k]k)
    swap(&V[k][j]&V[JS[k]][j])
    for(i0i if(IS[k]k)
    swap(&V[i][k]&V[i][IS[k]])
    }
    free(IS)
    free(JS)
    return 0
    }

    void MultMatrix(ElemType **M1ElemType **M2ElemType **R)
    *矩阵M1M2 结果存入矩阵R*
    {
    int ijk
    for(i0i {
    for(j0j {
    R[i][j]0
    }
    }
    for(i0i {
    for(j0j

    {
    for(k0k {
    R[i][j]R[i][j]+M1[i][k]*M2[k][j]
    }
    }
    }
    }

    void Input(ElemType **M) 输入矩阵M元素值
    {
    int ij
    char str[10]
    char c'A'
    if(flag1)
    c'B'
    system(cls)
    printf(\n\n输入矩阵c(d*d)\ncnn)
    for(i0i {
    for(j0j {
    scanf(f*(M+i)+j)
    }
    }
    flag1
    gets(str) 吸收余字符
    }

    void Print(ElemType **M) 显示矩阵M元素值
    {
    int ij
    printf(\t)
    for(i0i {
    for(j0j {
    printf( 3fM[i][j])
    }
    puts()
    printf(\t\t)
    }
    }




    int Menu_Select()
    {
    char c
    do{
    system(cls)
    puts(\t\t*************n维矩阵法器*************)
    puts(\t\t| 1 通键盘输入项数 |)
    puts(\t\t| 2 显示矩阵AB |)
    puts(\t\t| 3 矩阵求逆显示逆矩阵 |)
    puts(\t\t| 4 求矩阵运算A*B显示运算结果 |)
    puts(\t\t| 5 求矩阵运算A*B^(1)显示运算结果|)
    puts(\t\t| 6 文件读入矩阵AB维数n |)
    puts(\t\t| 0 退出 |)
    puts(\t\t***************************************)
    printf(\t\t请选择(06))
    cgetchar()
    }while(c<'0'||c>'6')
    return (c'0')
    }


    void ReadFromFile() 指定文件读入矩阵维数矩阵元素值
    {
    int ij
    FILE *fp
    if((fpfopen(txtxtr))NULL)
    {
    puts(法开文件)
    system(pause)
    exit(0)
    }
    fscanf(fpd&n) 读入矩阵维数
    ACreateMatrix(n) 创建矩阵A B V R
    BCreateMatrix(n)
    VCreateMatrix(n)
    RCreateMatrix(n)
    for(i0i {
    for(j0j {
    fscanf(fpf&A[i][j])
    }
    }


    for(i0i {
    for(j0j {
    fscanf(fpf&B[i][j])
    }
    }
    puts(\n\n读文件成功)
    fclose(fp)
    flag1
    }



    int main()
    {
    int i
    char ch
    char str[10]
    for()
    {
    switch(Menu_Select())
    {
    case 1 flag1
    for()
    {
    system(cls)
    printf(\n\n\t矩阵维数n)
    scanf(d&n)
    gets(str)
    if(n>0)
    break
    else
    {
    printf(\n\t输入误请重新输入\n)
    puts()
    system(pause)
    }
    }
    ACreateMatrix(n)
    BCreateMatrix(n)
    VCreateMatrix(n)
    RCreateMatrix(n)
    Input(A)


    Input(B)
    break
    case 2 system(cls)
    if(flag1)
    {
    puts(\n\n\t存矩阵数请先输入数)
    system(pause)
    break
    }
    puts(\n)
    printf(\tA )
    Print(A)
    puts(\n)
    printf(\tB )
    Print(B)
    puts()
    system(pause)
    break
    case 3 system(cls)
    if(flag1)
    {
    puts(\n\n\t存矩阵数请先输入数)
    system(pause)
    break
    }
    for()
    {
    printf(\n\n\t输入需求逆矩阵(AB))
    hgetchar()
    cgetchar()
    hgetchar()
    if(c'A'||c'a')
    {
    iDinV(AV)
    if(i1)
    {
    puts(\n\n\t矩阵A行列式等0逆)
    system(pause)
    break
    }
    printf(\tA )
    Print(A)
    puts(\n)
    printf(A^(1) )


    Print(V)
    puts()
    system(pause)
    break
    }
    else if(c'B'||c'b')
    {
    iDinV(BV)
    if(i1)
    {
    puts(\n\n\t矩阵B行列式等0逆)
    system(pause)
    break
    }
    printf(\tB )
    Print(B)
    puts(\n)
    printf(B^(1) )
    Print(V)
    puts()
    system(pause)
    break
    }
    else
    puts(\n\n\t输入误请重新输入\n)
    }
    break
    case 4 system(cls)
    if(flag1)
    {
    puts(\n\n\t存矩阵数请先输入数)
    system(pause)
    break
    }
    MultMatrix(ABR)
    printf(\n\n\tA*B )
    Print(R)
    puts()
    system(pause)
    break
    case 5 system(cls)
    if(flag1)
    {
    puts(\n\n\t存矩阵数请先输入数)


    system(pause)
    break
    }
    iDinV(BV)
    if(i1)
    {
    puts(\n\n\t矩阵B行列式等0逆)
    system(pause)
    break
    }
    MultMatrix(AVR)
    printf(\n\nA*B^(1) )
    Print(R)
    puts()
    system(pause)
    break
    case 6 system(cls)
    ReadFromFile()
    puts()
    system(pause)
    break
    case 0 puts(\t\t正常退出)
    exit(0)
    break
    }
    }
    return 0
    }







    六 运行结果









    1.界面:


    2.输入6回车文文件txtxt中读入矩阵数:










    3.回车回菜单界面输入2回车显示文件读入矩阵数:


    4.回车回菜单界面输入3回车指定矩阵求逆:(里矩阵A逆仅矩阵B例)










    5.回车回菜单界面输入4回车求矩阵运算A*B:


    6.回车回菜单界面输入5回车求A*B^(1)值:


    7.回车回菜单界面输入0回车退出程序果需定矩阵维数元素值请利菜单里1号功行输入数进行种运算操作
    七 收获体会
    通次课程设计次复线性代数里矩阵相关知识n维矩阵求逆矩阵逆充分必条件(|A| 0)矩阵矩阵法运算行列式求值方法等样复量C语言里关数组重概念维数组动态分配问题数组指针关系等
    记学期新开设单片机基础课吴涛老师次强调定常锻炼编程力常说:编程思维体操方面力


    实力非常限远远班学通次课程设计充分体会句话精华
    电脑程序作体脑思维延伸程序功会脑思维断完善变更加强决定加强方面锻炼学激励断前进


    八 参考文献


    数结构(C语言版) 严蔚敏吴伟民 编著 清华学出版社
    C语言程序设计 洪维恩 编著 中国铁道出版社
    C语言程序设计教程 谭浩强 张基温 唐永炎 编著 高等教育出版社
    工程数学——线性代数 第四版 济学应数学系 编 高等教育出版社






    200712
    文档香网(httpswwwxiangdangnet)户传


    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载文档到电脑,查找使用更方便

    文档的实际排版效果,会与网站的显示效果略有不同!!

    需要 4 香币 [ 分享文档获得香币 ]

    下载文档

    相关文档

    数据结构和算法课程设计题目

    XX大学课程设计课程名称: 数 据 结 构 与 算 法院(部)名 称: 信息与计算科学学院组长姓名学号 同组人员姓名指导教师姓名: 设 计 时 间: 2010.6.7-...

    10个月前   
    362    0

    数据结构课程设计报告最小生成树Kruskal算法

    计算机科学与技术系课程设计报告 2014-2015学年第二学期课程数据结构课程设计名称Kruskal算法求最小生成树学生姓名 学号 专业班级 软件工程指导教师 2014年X月题目:设计...

    1年前   
    196    0

    哈夫曼树应用数据结构课程设计报告

    数据结构课程设计报告设计题目:哈夫曼树应用 专 业 : 软件工程 班 级 : 软件 学 生 : ...

    2年前   
    453    0

    数据结构课程设计报告——图书管理系统

    课程设计报告 课设课题: 课程设计——图书管理系统 学 院: 电 子 信 息 学 院 专 业: 网 络 工 程 ...

    3年前   
    666    0

    车牌号管理系统数据结构课程设计报告

    XX 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称: 车牌号管理系统 ...

    3年前   
    419    0

    数据结构实习报告

    数据结构实习报告  一、需求分析1、  程序所实现的功能;2、  程序的输入,包含输入的数据格式和说明;3、  程序的输出,程序输出的形式;4、  测试数据,如果程序输入的数据量比较大,需要给...

    8年前   
    1028    0

    数据结构(C语言版)课程设计报告表达式求值说明书

    XX大学数据结构课程设计说明书题目: 表达式求值 院 系: 计算机科学与工程学院 专业班级: 计算机班 学...

    3年前   
    530    0

    算法与数据结构的商品货架管理课程设计报告(还有程序源代码)

    课程设计课 程: 算法与数据结构 题 目: 商品货架管理 专 业: 计算机类 班 级: ...

    1年前   
    314    0

    数据结构课程设计报告多关键字排序高考排序

    XX工 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称: 多关键字排序 姓 ...

    5个月前   
    173    0

    设计散列表实现电话号码查找系统数据结构课程设计

    XX学院课程设计报告书专 业:计算机科学与技术 课程设计名称:《数据结构课程设计》题 目:设计散列表实现电话号码查找系统班 级: 学    号: 姓 ...

    2年前   
    570    0

    高校教材管理系统数据结构课程设计

    数据结构课程设计题 目: 高校教材管理系统 课 程 设 计 任 务 书一、课程设计题目: 高校教材管理系统...

    3年前   
    758    0

    数据结构文本编辑器课程设计

    数据结构课程设计报告一. 需求分析1.题目及要求名称:简单的文本编辑器内容:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行。要求:(1)...

    10个月前   
    274    0

    关于数据结构课程设计心得体会范文

    关于数据结构课程设计心得体会范文   关于数据结构课程设计心得体会(1)   这学期开始两周时间是我们自己选题上机的时间, 这学期开始两周时间是我们自己选题上机的时间,虽然 上机时间只...

    5年前   
    1404    0

    数据结构课程设计图的建立与输出

    数据结构课程设计设计题目:图的建立与输出系 别: 电子与信息工程学院 专 业: 电子信息工程 班 级: 级班 ...

    5个月前   
    161    0

    数据结构课程设计舞伴配对程序

    沈阳航空航天大学课 程 设 计 报 告课程设计名称:数据结构课程设计课程设计题目:舞伴配对程序院(系):计算机学院专 业:计算机科学与技术班 级: 学 号:姓 名:指导...

    1年前   
    271    0

    数据结构课程设计运动会分数统计(C语言版)

    数据结构课程设计运动会分数统计(C语言版)目 录第一章 绪 论 1 1.1 运动会分数统计系统的背景 1 1.2 运动会分数统计系统的任务和目标 1第二章 运动会分数统...

    3年前   
    615    0

    数据结构实验报告

    实验报告课程:数据结构 班级:网络工程 学号: 姓名: 实验1 链表的插入和删除一、实验目的 1、...

    1年前   
    321    0

    数据结构实践报告

     数据结构实践报告学 号: 姓 名: 班 级: ...

    1年前   
    569    0

    环保“四维矩阵”监管模式

    创新工作机制促进投诉受理工作再上新台阶 环保“四维矩阵”监管模式  近年来,**区经济社会迎来了又一轮的飞速发展,人民群众对周边环境的关心也日益增强,随之而来暴露出的环保问题亦是越来越多,...

    11年前   
    11310    0

    数据结构实验报告《三、串及其应用》

    数据结构实验报告- - - - 串及其应用之文学研究助手 专业班级: 电信班 ...

    3年前   
    1267    0

    文档贡献者

    文***品

    贡献于2020-06-29

    下载需要 4 香币 [香币充值 ]
    亲,您也可以通过 分享原创文档 来获得香币奖励!
    下载文档

    该用户的其他文档