数据结构矩阵相关操作的课程设计

合集下载

数据结构+课程设计+稀疏矩阵的操作(计算机学院)

数据结构+课程设计+稀疏矩阵的操作(计算机学院)

计算机科学技术学院学生课程设计(论文)题目:学生姓名:学号:所在院(系):专业:班级:指导教师:职称:年月日计算机科学技术学院本科学生课程设计任务书注:任务书由指导教师填写。

课程设计(论文)指导教师成绩评定表稀疏矩阵的操作1.课程设计的目的本课程设计是为了配合《数据结构》课程的开设,通过设计一完整的程序,使学生掌握数据结构的应用、算法的编写、类C语言的算法转换成C程序并用TC上机调试的基本方法。

利用三元组实现稀疏矩阵的有关算法。

2.问题描述2.1稀疏矩阵采用三元组表示,求两个具有相同行列数的稀疏矩阵A和B的相加矩阵C,并输出C。

2.2求出A的转置矩阵D,输出D。

3. 基本要求稀疏矩阵是指那些多数元素为零的矩阵。

利用“稀疏”特点进行存储和计算可以大大节省存储空间,提高计算效率。

实现一个能进行稀疏矩阵基本运算的运算器。

以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相加、相减和相乘的运算。

稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则通常以阵列形式列出。

4.结构设计4.1.以“带行逻辑链接信息”的三元组顺序表表示稀疏矩阵,实现两个矩阵相加、相减和相乘的运算。

4.2.稀疏矩阵的输入形式采用三元组表示,而运算结果的矩阵则通常以阵列形式列出。

4.3.首先应输入矩阵的行数和列数,并判别给出的两个矩阵的行、列数对于所要求作的运算是否相匹配。

可设矩阵的行数和列数均不超过20。

4.4.程序可以对三元组的输入顺序加以限制,例如,按行优先。

注意研究教材的算法,以便提高计算效率。

5.在用三元组表示稀疏矩阵时,相加或相减所得结果矩阵应该另生成,乘积矩阵也可用二维数组存放5.算法思想5.1.主函数设置循环和选择语句进行运算循环和选择,进行稀疏矩阵的加法,减法,乘法,转置和是否继续运算5个分支开关进行运算选择。

5.2.设置函数分别实现稀疏矩阵的输入,输出,加法,减法,乘法。

5.3.在数组结构体中设置存放每行第一个非零元在其数组存储结构单元的位置的存储单元,若该行无非零元,则存为06.模块划分6.1typedef struct存放各行第一个非零元在存储数组中的位置,若该行无非零元,则其rpos[]值为零6.2 createsmatrix(rlsmatrix *M) 矩阵输入函数,输入各行非零元及其在矩阵中的行列数6.3 FasttransposeRLSMatrix(RLSMatrix M,RLSMatrix *Q) 矩阵快速转置6.4 HeRLSMatrix(RLSMatrix *M,RLSMatrix *N,RLSMatrix *Q) 矩阵求和6.5 ChaRLSMatrix(RLSMatrix *M,RLSMatrix *N,RLSMatrix *Q) 矩阵求差6.6 JiRLSMatrix(RLSMatrix M,RLSMatrix N,RLSMatrix *Q) 矩阵求积7.算法实现7.1首先定义非零元个数的最大值和存放各行第一个非零元在存储数组中的位置#include<stdio.h>#define MAXSIZE 100 /* 非零元个数的最大值*/typedef struct triple{int i,j; /* 行下标,列下标*/int e; /* 非零元素值*/}triple;typedef struct tsmatrix{triple data[MAXSIZE+1]; /* 非零元三元组表,data[0]未用*/int mu,nu,tu; /* 矩阵的行数、列数和非零元个数*//* 各列第一个非零元的位置表rpos[0]未用*/}rlsmatrix;7.2创建稀疏矩阵矩阵的行数,列数,和非零元素的个数并按行序顺序输入第%d 个非零元素所在的行(1~%d),列(1~%d),元素值。

数据结构课程设计报告---矩阵的运算

数据结构课程设计报告---矩阵的运算

数据结构课程设计报告题目:专业:班级:学号:姓名:指导老师:时间:一、课程设计题目及所涉及知识点设计题目是“矩阵的运算”;所涉及的知识点主要是:1、利用数组的形式来储存数据,在main函数里面,实现对于数据的输入操作,利用switch语句进行选择来执行操作,利用for语句与do……while语句来实现功能的循环操作。

2、矩阵的加法、减法、乘法、数乘、转置的基本算法方式。

3、通过switch语句进行选择来执行操作,来实现每个算法的功能。

二、课程设计思路及算法描述设计思路:用程序实现矩阵能够完成矩阵的转置运算;矩阵的数乘运算;矩阵的加法运算;矩阵的减法运算;矩阵的乘法运算;这几种矩阵的简单的运算。

用数组把将要运算的矩阵储存起来,然后实现矩阵的这几种运算。

在main函数里面,来实现对于数据的输入操作,利用switch语句进行选择来执行操作,利用for语句来实现功能的循环操作。

算法:算法1:矩阵的转置运算;首先是把将要运算的矩阵存放在数组中,矩阵的转置运算,就是把你将要进行运算的A矩阵的行ar和列ac,把A矩阵的行ar作为B矩阵的bc,A矩阵的列ac作为B矩阵的br,这样得到的新矩阵B的行br和列bc就是矩阵A的转置。

算法如下:for(i=0;i<ar;i++)for(j=0;j<ac;j++)B[j][i]=A[i][j];算法2:矩阵的数乘运算;首先是把将要运算的矩阵存放在数组中,矩阵的数乘运算,就是实现用一个实数k 去A矩阵。

实数k去乘矩阵的每一行和每一列,得到的一个新的矩阵B,这样就解决了矩阵的数乘运算。

算法如下:for(i=0;i<ar;i++)for(j=0;j<ac;j++)B[i][j]=k*A[i][j];算法3:矩阵的加法运算;首先是把将要运算的矩阵存放在数组中,矩阵的加法运算,就是要实现A矩阵与B 矩阵进行加法运算。

事实上就是A矩阵的每一行ar与B矩阵的每一行br进行加法运算,而得到的一个新的矩阵C的每一行cr就是A矩阵的ar行与B矩阵的br行的和;A矩阵的每一列ac与B矩阵的每一列bc进行加法运算,而得到的一个新的矩阵C的每一列cc 就是A矩阵的ac列与B矩阵的bc列的和。

c课程设计矩阵运算

c课程设计矩阵运算

c 课程设计矩阵运算一、教学目标本节课的教学目标是让学生掌握矩阵的基本运算,包括矩阵的加法、减法、数乘以及矩阵的乘法。

通过学习,学生应能理解矩阵运算的定义和规则,并能运用这些运算解决实际问题。

此外,学生还应掌握矩阵运算的数学原理,提高逻辑思维和数学运算能力。

在情感态度价值观方面,学生应培养对数学学科的兴趣,增强自信心,培养团队合作精神。

二、教学内容本节课的教学内容主要包括矩阵的基本运算和数学原理。

首先,介绍矩阵的加法、减法、数乘和矩阵的乘法,通过举例说明这些运算的定义和规则。

然后,讲解矩阵运算的数学原理,包括线性方程组的解法、行列式的计算以及矩阵的逆矩阵。

最后,通过实际案例让学生运用矩阵运算解决实际问题,提高学生的应用能力。

三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法。

首先,采用讲授法,清晰地讲解矩阵运算的定义和规则,以及数学原理。

其次,采用讨论法,让学生分组讨论矩阵运算的应用案例,培养学生的思考和表达能力。

此外,还采用案例分析法,让学生分析实际问题,运用矩阵运算解决问题。

最后,通过实验法,让学生动手实践,加深对矩阵运算的理解。

四、教学资源为了支持教学内容和教学方法的实施,本节课将准备以下教学资源。

首先,教材和相关参考书,为学生提供系统的学习资料。

其次,多媒体资料,如PPT、教学视频等,用于直观地展示矩阵运算的过程和应用案例。

此外,还将提供实验设备,如计算器、电脑等,让学生进行实际操作,提高实践能力。

通过丰富多样的教学资源,丰富学生的学习体验,提高学习效果。

五、教学评估本节课的教学评估将采用多元化的评估方式,以全面、客观地评价学生的学习成果。

评估方式包括平时表现、作业、考试等。

平时表现主要评估学生的课堂参与度、提问回答等,通过观察学生的表现来了解他们的学习状态。

作业方面,将布置适量的练习题,要求学生在规定时间内完成,通过批改作业了解学生对矩阵运算的理解和掌握程度。

考试方面,将设置期中考试和期末考试,考试内容涵盖本节课的全部知识点,通过考试来检验学生的学习成果。

矩阵运算的课程设计

矩阵运算的课程设计

矩阵运算的课程设计一、课程目标知识目标:1. 理解矩阵的定义,掌握矩阵的基本元素和结构特点;2. 学会矩阵的加、减、乘运算,并能够运用这些运算解决实际问题;3. 掌握矩阵的转置、逆矩阵的概念及其运算方法;4. 了解矩阵运算在现实生活中的应用,如线性方程组求解、图像处理等。

技能目标:1. 能够熟练运用矩阵运算公式进行计算,提高解题速度和准确性;2. 能够运用矩阵运算解决实际问题,培养分析问题和解决问题的能力;3. 能够运用矩阵软件(如MATLAB)进行矩阵运算,提高计算效率。

情感态度价值观目标:1. 培养学生对矩阵运算的兴趣,激发学习热情;2. 培养学生的团队协作精神,学会与他人共同探讨问题;3. 引导学生认识到矩阵运算在科学技术发展中的重要性,增强学生的国家使命感和社会责任感。

课程性质:本课程为高中数学选修课程,适用于对数学有一定基础的学生。

学生特点:学生具备一定的代数基础,对矩阵概念有一定了解,但对矩阵运算尚不熟悉。

教学要求:结合学生特点,注重启发式教学,通过实例分析、问题解决等方法,使学生掌握矩阵运算的基本技能,并培养其运用矩阵运算解决实际问题的能力。

在教学过程中,关注学生的情感态度价值观的培养,提高学生的学习兴趣和积极性。

最终实现课程目标的分解与达成。

二、教学内容1. 矩阵的定义与基本概念:回顾矩阵的定义,讨论矩阵的行、列、元素等基本属性。

教材章节:第二章第一节2. 矩阵的加、减运算:讲解矩阵加、减法的规则,通过例题演示运算方法。

教材章节:第二章第二节3. 矩阵的乘法运算:介绍矩阵乘法法则,分析矩阵乘法与实数乘法的异同。

教材章节:第二章第三节4. 矩阵的转置与逆矩阵:阐述转置矩阵的概念,探讨逆矩阵的定义及性质。

教材章节:第二章第四节5. 矩阵的应用:介绍矩阵在解决线性方程组、图像处理等方面的应用。

教材章节:第二章第五节6. 矩阵运算软件实践:指导学生使用MATLAB软件进行矩阵运算,提高计算效率。

c课程设计矩阵类

c课程设计矩阵类

c 课程设计矩阵类一、教学目标本章节的教学目标旨在让学生掌握矩阵类的基本概念、性质和运算方法。

知识目标要求学生能够理解矩阵的定义、矩阵的元素运算、矩阵的转置和逆矩阵的概念。

技能目标要求学生能够运用矩阵的运算法则进行矩阵的加减乘除运算,以及求解线性方程组。

情感态度价值观目标则是培养学生的团队合作意识和问题解决能力。

二、教学内容本章节的教学内容主要包括矩阵的基本概念、矩阵的运算、矩阵的转置和逆矩阵。

首先,介绍矩阵的定义和矩阵的元素运算,让学生理解矩阵的基本性质。

然后,教授矩阵的加减乘除运算规则,并通过示例让学生掌握这些运算方法。

接着,讲解矩阵的转置和逆矩阵的概念,并教授如何求解线性方程组。

三、教学方法为了激发学生的学习兴趣和主动性,将采用多种教学方法。

首先,通过讲授法,向学生介绍矩阵的基本概念和运算方法。

其次,利用案例分析法,通过具体的例子让学生理解和应用矩阵的运算规则。

然后,采用讨论法,让学生分组讨论并解决线性方程组的问题。

最后,进行实验法,让学生亲自动手进行矩阵的运算实验,加深对矩阵的理解。

四、教学资源为了支持教学内容和教学方法的实施,将选择和准备适当的教学资源。

教材将是主要的教学资源,用于提供矩阵类的基本概念和运算方法的理论知识。

参考书将提供更多的例题和习题,帮助学生巩固所学知识。

多媒体资料将用于展示矩阵的运算过程和实验结果,增加学生的学习兴趣。

实验设备将用于进行矩阵的运算实验,让学生亲身体验矩阵的运算过程。

五、教学评估本章节的教学评估将采用多元化的评估方式,以全面、客观地评价学生的学习成果。

评估方式包括平时表现、作业和考试。

平时表现将根据学生在课堂上的参与度、提问和回答问题的积极性进行评估。

作业将包括课后习题和项目任务,以巩固学生对矩阵类的理解和应用能力。

考试将包括期中考试和期末考试,以检验学生对矩阵类的掌握程度。

此外,还将在课堂上进行小组讨论和口头报告,以评估学生的团队合作和口头表达能力。

数据结构课程设计稀疏矩阵

数据结构课程设计稀疏矩阵

稀疏矩阵应用摘要本课程设计主要实现在三元组存储结构与十字链表存储结构下输入稀疏矩阵,并对稀疏矩阵进行转置,相加,相乘操作,最后输出运算后的结果。

在程序设计中,考虑到方法的难易程度,采用了先用三元组实现稀疏矩阵的输入,输出,及其转置,相加,相乘操作的方法,再在十字链表下实现。

程序通过调试运行,结果与预期一样,初步实现了设计目标。

关键词程序设计;稀疏矩阵;三元组;十字链表1 引言1.1课程设计任务本课程设计主要实现在三元组存储结构与十字链表存储结构下输入稀疏矩阵,并对稀疏矩阵进行转置,相加,相乘操作,最后输出运算后的结果。

稀疏矩阵采用三元组和十字链表表示,并在两种不同的存储结构下,求两个具有相同行列数的稀疏矩阵A和B的相加矩阵C,并输出C;求出A的转置矩阵D,输出D;求两个稀疏矩阵A和B的相乘矩阵E,并输出E。

1.2课程设计性质数据结构课程设计是重要地实践性教学环节。

在进行了程序设计语言课和《数据结构》课程教学的基础上,设计实现相关的数据结构经典问题,有助于加深对数据结构课程的认识。

本课程设计是数据结构中的一个关于稀疏矩阵的算法的实现,包括在三元组和十字链表下存储稀疏矩阵,并对输入的稀疏矩阵进行转置,相加,相乘等操作,最后把运算结果输出。

此课程设计要求对数组存储结构和链表存储结构非常熟悉,并能熟练使用它们。

1.3课程设计目的其目的是让我们在学习完C、数据结构等课程基础上,掌握多维数组的逻辑结构和存储结构、掌握稀疏矩阵的压缩存储及转置,相加,相乘等基本操作,并用不同的方法输出结果,进一步掌握设计、实现较大系统的完整过程,包括系统分析、编码设计、系统集成、以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。

2需求分析2.1设计函数建立稀疏矩阵及初始化值和输出稀疏矩阵的值本模块要求设计函数建立稀疏矩阵并初始化,包括在三元组结构下和十字链表结构下。

首先要定义两种不同的结构体类型,在创建稀疏矩阵时,需要设计两个不同的函数分别在三元组和十字链表下创建稀疏矩阵,在输入出现错误时,能够对错误进行判别处理,初始化稀疏矩阵都为空值,特别注意在十字链表下,对变量进行动态的地址分配。

数据结构课程设计(矩阵的运算)

数据结构课程设计(矩阵的运算)

数据结构课程设计报告题目:_____________________________________专业:_____________________________________班级:_____________________________________学号:_____________________________________姓名:_____________________________________指导老师:__________________________________时间:_____________________________________、课程设计题目及所涉及知识点设计题目是“矩阵的运算” ,所涉及的知识点主要是:1、数据结构中的对于结构体的定义,用typedef struct 来实现,根据所设计的问题在结构体里面定义数据类型及其变量,用define 定义数组的大小,然后利用typedef 来实现对于变量的未知类型确定正确的类型。

2、利用数组的形式来储存数据,在实现不同操作过程中,有的用一维结构体数组(三元组顺序表)来存储,有的用二维数组来储存。

3、转置的过程中利用的是快速转置的方法,附设了num 和cpot 两个辅助变量。

4、矩阵的加法、减法、乘法、逆运算的基本算法方式。

5、通过调用每个函数,来实现每个算法的功能。

、课程设计思路及算法描述设计思路:1、首先是对于转置的考虑,要运用快速转置的方法实现,必须用三元组顺序表来储存数据,所以在第一个结构体中存在int 类型的行数(mu )列数(nu )以及非零元素的个数(tu );然后第二个结构体中分别有非零元素的行下标(i)、列下标(j)和元素数值(e),最后在第一个结构体中实现对第二个结构体成为数组结构体类型。

2、对于其余加法、减法、乘法和逆运算则是运用另一个结构体来实现,里面只有矩阵的行数、列数和一个二维数组(用float 来定义类型)。

数据结构矩阵

数据结构矩阵

实验4 矩阵实验目的:1、掌握特殊线性结构数组。

2、掌握二维数组的简单应用。

3、掌握矩阵的三元组表示方法4、掌握矩阵的转置。

实验内容:1、对一个稀疏矩阵而言,按提示输入其行号、列号及每一个元素值,程序将建立稀疏矩阵的三元组存储结构,并将三元组存储结构的稀疏矩阵转置,程序还将显示转置前后稀疏矩阵的三元组结构。

答:#include <malloc.h>#include <stdio.h>#define MAXLEN 40typedef struct{ int i, j;int v;}NODE;typedef struct{ int m, n, t;NODE data[MAXLEN];}SPMA TRIX;SPMA TRIX transpose(SPMA TRIX a){/*稀疏矩阵(三元组存储结构)转置算法*/int p, q, col;SPMA TRIX b;b.m=a.n; b.n=a.m; b.t=a.t;if(a.t!=0){q = 1;for (col=1; col<=a.n; col++) //访问b三元组的每一行for (p=1; p<=a.t; p++) //访问a三元组的每一行if(a.data[p].j==col) //如果b三元组的行对应a数组的列,就进行转置{ b.data[q].j=a.data[p].i;b.data[q].i=a.data[p].j;b.data[q].v=a.data[p].v;q++;}}return b;}void printmatrix(SPMA TRIX c){/*稀疏矩阵(三元组存储结构)显示*/int n,i;n=c.t;for(i=1;i<=n;i++)printf("[%d]行号=%d 列号=%d 元素值=%d\n",i,c.data[i].i,c.data[i].j,c.data[i].v);}void main(){ SPMA TRIX a;SPMA TRIX b;int i,j,r,c,t,n;n=1;printf("\n\n输入矩阵行号数: ");scanf("%d",&r);printf("\n\n输入矩阵列号数: ");scanf("%d",&c);a.m=r; a.n=c;printf("\n\n");for(i=0;i<r;i++) /*输入矩阵元素值*/for(j=0;j<c;j++){printf("输入元素[%d,%d]值: ",i+1,j+1);scanf("%d",&t);if(t!=0) {a.data[n].i=i+1; /*非零元素存入稀疏矩阵三元组存储结构中*/a.data[n].j=j+1; a.data[n].v=t; n=n+1;}}n=n-1; a.t=n; /*a.t中为稀疏矩阵非零元素个数*/printf("\n\n稀疏矩阵三元组表示: \n\n");printmatrix(a); /*稀疏矩阵(三元组存储结构)转置*/b=transpose(a);printf("\n\n转置后稀疏矩阵三元组表示: \n\n");printmatrix(b);printf("\n\n");}文- 汉语汉字编辑词条文,wen,从玄从爻。

数据结构课程设计 报告 (十字链表实现稀疏矩阵的加法)

数据结构课程设计 报告 (十字链表实现稀疏矩阵的加法)

一、问题描述十字链表实现稀疏矩阵的加法1、功能要求:根据用户输入的矩阵,实现稀疏矩阵的求和运算,并输出结果。

2、输入要求:矩阵的数据在程序运行的时候由用户提供,先由用户输入稀疏矩阵的行数、列数和非零元个数。

再根据非零元个数,输入这些非零元,还需要用户为这些非零元输入行、列和非零元的值。

这样,一个稀疏矩阵就输入完成。

若输入4 3 2则表示这个稀疏矩阵有4行3列2个非零元然后用户需要为这两个非零元输入行、列、非零元的值如:1 2 24 1 1表示第一个非零元行为1,列为2,,值为2;第二个非零元行为4,列为1,值为1。

此过程输入的稀疏矩阵为:0 2 00 0 00 0 01 0 03、输出要求:输出按矩阵输出,按行列依次输出,非零元则输出非零元的值,不是非零元则输出“0”。

各元素之间用空格隔开。

最后输出完整的矩阵。

二、概要设计1.稀疏矩阵的抽象数据类型定义如下:ADT SparseMatrix {数据对象: D={a ij|i=1,2,3……m,j=1,2,3……n;a ij属于ElemSet,m和n分别是稀疏矩阵的行数和列数}数据关系: R={ Row, Col }Row={<a ij,a ij+1>|1<=i<=m,1<=j<=n-1}Col={<a ij,a i+1j>|1<=i<=m-1,1<=j<=n}基本操作:CreateSMatrix(&M);//建立稀疏矩阵MDestroySMatrix(&M);//销毁稀疏矩阵M;TransposeSMatrix(M);//求稀疏矩阵的转置矩阵AddSMatrix(&M,&N);//求稀疏矩阵M和N之和MulSMatrix(&M,&N);//求稀疏矩阵M和N之积}ADT SparseMatrix2、存储结构选择采用十字链表存储稀疏矩阵,它是稀疏矩阵链式表示的一种较好的表示方法。

数据结构程序设计-矩阵的运算

数据结构程序设计-矩阵的运算

二.概要设计:
1、抽象数据类型定义如下: ADT SparseMatrix{ 数据对象D:D={aij|i=1,2,3…,m;j=1,2,3…,n; ai ∈ElemSet,m和n分别称为矩阵的行数和列数} 数据关系R: R={Row,Col} Row={<ai,j,ai,j+1>|1≤i≤m, 1≤j≤n-1} Col={<ai,ai+1,j>|1≤i≤m-1, 1≤j≤n} 基本操作 本程序中,用三元组顺序表作为存储结构。 (1)、CreatSMatrix (TSMatrix &M) 操作结果:创建矩阵M。 (2)、AddSMatrix(TSMatrix A,TSMatrix B,TSMatrix &C,int n) 初始条件:矩阵A和B的行数和列数对应相等。 操作结果:求矩阵A、B的和C=A+B。 (3)、SubMatrix (TSMatrix *a,TSMatrix *b) 初始条件:矩阵A和B的行数和列数对应相等。 操作结果:求矩阵A、B的和C=A+B。 (4)、MultiplicationMatrixPow (TSMatrix *a,TSMatrix *b,TSMatrix *c) 初始条件:矩阵A和B的行数和列数匹配 操作结果:求矩阵A、B的和C=A*B。 (5) OutputSMatrix(TSMatrix M) 初始条件:矩阵M已存在 操作结果:输出矩阵M 2、 本程序包含5个模块
for(i=1;i<=M->mu;i++)//输出矩阵 { for(j=1;j<=M->nu;j++) printf("%5d",a[i][j]); printf("\n"); } } //*************矩阵的求和运算*****************// int AddSMatrix(TSMatrix *M,TSMatrix *N,TSMatrix *Q)//求 采用三元组顺序表存储表示的稀疏矩阵M和N的和,结果赋给矩阵Q { int i,j,p,q,x=0,y=0; if((M->mu<=0)||(M->nu<=0)||(M->tu<=0)||(N->mu<=0)||(N>nu<=0)||(N->tu<=0))//判断行数列数非零元素个数是否符合匹配 return ERROR; if(M->mu!=N->mu||M->nu!=N->nu)//判断A与B的行列数 是否相等的 return ERROR; Q->mu=M->mu;//矩阵Q的初始化 Q->nu=M->nu; Q->tu=0; for(i=1;i<=Q->mu;i++) { for(j=1;j<=Q->nu;j++)//寻找矩阵M,N中非零元素相等 的行列 { for(p=1;p<=M->tu;p++)//求矩阵M行列中所对应的 非零元素的值 赋值给X { if((i==M->data[p].row)&&(j==M->data[p].col))// 如果i是矩阵M中非零元素行,j是其列 { x=M->data[p].e;

c课程设计矩阵类

c课程设计矩阵类

c 课程设计矩阵类一、教学目标本课程的教学目标是使学生掌握矩阵类的相关知识,包括矩阵的定义、矩阵的运算、矩阵的性质和矩阵的应用。

具体来说,知识目标要求学生能够准确地描述矩阵的概念,熟练地进行矩阵的加、减、乘、除等运算,理解矩阵的性质,如可逆性、行列式等,并能够应用矩阵解决实际问题。

技能目标要求学生能够运用矩阵的知识解决数学问题,如线性方程组的求解、矩阵的逆的求解等。

情感态度价值观目标要求学生对矩阵类知识产生兴趣,能够积极地参与课堂讨论和实践活动,培养学生的创新思维和团队合作精神。

二、教学内容本课程的教学内容主要包括矩阵的定义和运算、矩阵的性质和应用。

具体来说,首先介绍矩阵的概念,包括矩阵的元素、矩阵的行和列、矩阵的规模等;然后讲解矩阵的运算,包括矩阵的加、减、乘、除等,以及矩阵的运算规律和运算性质;接着介绍矩阵的性质,如可逆性、行列式等,以及矩阵的性质的应用;最后讲解矩阵的应用,如线性方程组的求解、矩阵的逆的求解等,以及矩阵在实际问题中的应用。

三、教学方法为了实现本课程的教学目标,采用多种教学方法进行教学。

首先,采用讲授法,向学生讲解矩阵类的相关知识,包括矩阵的定义、运算、性质和应用;其次,采用讨论法,学生进行小组讨论,让学生通过交流和合作解决问题,培养学生的创新思维和团队合作精神;再次,采用案例分析法,给学生提供实际的案例,让学生运用矩阵的知识解决问题,提高学生的应用能力;最后,采用实验法,让学生进行实验操作,验证矩阵的性质和运算规律,提高学生的实践能力。

四、教学资源为了支持本课程的教学内容和教学方法的实施,准备了一系列的教学资源。

主要使用的教材是《线性代数》,该书详细介绍了矩阵类的相关知识,包括矩阵的定义、运算、性质和应用。

此外,还准备了一些参考书籍,如《矩阵分析与应用》、《线性方程组及其求解方法》等,供学生进行深入学习。

同时,准备了一些多媒体资料,如教学视频、PPT课件等,用于辅助教学。

此外,还准备了一些实验设备,如计算器、计算机等,供学生进行实验操作。

数据结构--稀疏矩阵课程设计

数据结构--稀疏矩阵课程设计

安徽理工大学数据结构课程设计说明书题目: 稀疏矩阵的运算院系:计算机科学与工程学院专业班级:计算机10-*班学号: 201030****学生姓名: ******指导教师:2011年 12 月 28 日安徽理工大学课程设计(论文)任务书计算机科学与工程学院学号201030**** 学生姓名***** 专业(班级)计10-* 设计题目稀疏矩阵的运算设计技术参数系统平台:Windows XP开发工具:Microsoft Visual C++ 6.0设计要求(1)存储结构选择三元组存储方式;(2)实现一个稀疏矩阵的转置运算;(3)实现两个稀疏矩阵的加法运算;(4)实现两个稀疏矩阵的减法运算;(5)实现两个稀疏矩阵的乘法运算。

工作量课程设计报告要求不少于3000字。

源程序要求不少于300行工作计划11月9日-11月22日查找相关资料11月23日-11月26日 DOS菜单界面设计11月27日-12月5日设计算法12月6日-12月20日编写代码12月21日-12月28日撰写实验报告参考资料[1]秦锋.数据结构(C语言版).北京:清华大学出版社,2011[2]温秀梅,丁学均.Visual C++面向对象程序设计.北京:清华大学出版社,2009[3]何钦铭,颜晖.C语言程序设计.北京:高等教育出版社,2008指导教师签字教研室主任签字2011年 11 月 8 日安徽理工大学课程设计(论文)成绩评定表学生姓名:***** 学号:201030**** 专业班级:计10-* 课程设计题目:稀疏矩阵的运算指导教师评语:成绩:指导教师:年月日目录1 问题描述 (1)2 需求分析 (1)3 总体设计 (2)3.1 Matrix结构的定义 (2)3.2 系统流程图 (3)4 详细设计 (4)4.1 “菜单”界面 (4)4.2 建立矩阵 (4)4.3 显示矩阵 (6)4.4 矩阵的转置 (7)4.5 矩阵的加法运算 (8)4.6 矩阵的减法运算 (9)4.7 矩阵的乘法运算 (10)5 程序运行 (11)5.1 输入矩阵 (11)5.2 矩阵转置 (11)5.3 矩阵加法 (12)5.4 矩阵减法 (12)5.5 矩阵乘法 (13)5.6 退出及错误提示 (13)6 总结 (14)参考文献 (15)1 问题描述(1)题目内容:设计稀疏矩阵运算系统实现两个稀疏矩阵的加法、减法、乘法以及转置操作。

数据结构课程设计 特殊矩阵运算

数据结构课程设计 特殊矩阵运算

特殊矩阵运算1.1程序功能简介对特殊矩阵能够在界面上以人们熟悉的方式显示,可以对特殊矩阵进行加法运算和减法运算,矩阵转置。

按照要求使用了多种数据结构来求解问题,具体为二维数组和类似图的数据结构。

由于题目要求使用多种数据结构,因此分开写了两段程序,均实现了上述要求的功能,以下将分开说明。

先说明的是用二维数组实现的程序,后说明的是用图结构实现的程序。

1.2关于输入、输出形式及数据范围1.2.1使用二维数组实现的程序输入、输出范围为:-73786976294838206000到73786976294838206000,足以解决绝大多数的矩阵运算问题。

1.2.2输入的格式进入程序后首先展现的是功能选择界面,如下图:此时可通过输入对应功能的数字来选择功能。

在此程序中不同功能输入格式不同:选择功能 1.矩阵转置时需要输入要进行转置操作的矩阵,首先输入矩阵的行数和列数,以逗号隔开,之后依次按矩阵形式输入矩阵即可,各数值之间以空格隔开。

选择功能2.矩阵数乘时需要输入要进行数乘操作的矩阵,此输入格式同上,之后输入一个实数,即要进行数乘的数即可。

功能3.矩阵加法与4.矩阵减法输入格式和5.矩阵乘法相同,按上述操作输入两个矩阵即可,需要注意的是矩阵减法默认顺序为先输入的矩阵减去后输入的矩阵。

当按照格式输入时可以实现以上功能,但输入错误数据时,例如进行行列数不同的矩阵相加减时则会返回无法操作,请重新输入的提示。

具体情况见下文测试部分。

1.3.1使用图结构实现的稀疏矩阵运算器程序输入、输出范围同上。

1.3.2输入的格式进入程序后首先展现的是功能选择界面,如下图:选择功能部分输入同上。

在进行矩阵输入时采取三元组的形式,这是由于稀疏矩阵的多零元性质。

首先输入矩阵的行数、列数、非零元个数,以空格隔开,输入完毕后确认,开始输入各个非零元。

输入非零元时按“所在行下标所在列下标值”的形式输入,需要注意的是输入时只能从所在行小的开始按顺序输入,不能先输入行数大的数据再输入行数小的数据。

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

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

数据结构课程设计报告设计题目:n维矩阵乘法:A B-1专业计算机科学与技术班级计051本学生林垂敏学号29指导教师潘崇起止时间2007-2008 学年第I学期一、具体任务功能:设计一个矩阵相乘的程序,首先从键盘输入两个矩阵a,b的内容,并输出两个矩阵,输出ab-1结果。

分步实施:1.初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2.完成最低要求:建立一个文件,可完成2维矩阵的情况;3.进一步要求:通过键盘输入维数n。

有兴趣的同学可以自己扩充系统功能。

要求:1.界面友好,函数功能要划分好2.总体设计应画一流程图3.程序要加必要的注释4.要提供程序测试方案5.程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。

二、软件环境Microsoft Visual C++ 6.0三、问题的需求分析程序以二维数组作为矩阵的存储结构,通过键盘输入矩阵维数n,动态分配内存空间,创建n维矩阵。

矩阵建立后再通过键盘输入矩阵的各个元素值;也可以通过文件读入矩阵的各项数据(维数及各元素值)。

当要对矩阵作进一步操作(A*B或A*B^(-1))时,先判断内存中是否已经有相关的数据存在,若还未有数据存在则提示用户先输入相关数据。

当要对矩阵进行求逆时,先利用矩阵可逆的充要条件:|A| != 0 判断矩阵是否可逆,若矩阵的行列式|A| = = 0 则提示该矩阵为不可逆的;若|A| !=0 则求其逆矩阵,并在终端显示其逆矩阵。

四、算法设计思想及流程图1.抽象数据类型ADT MatrixMulti{数据对象:D = {a(I,j)|i = 1,2,3,…,n;j = 1,2,…,n;a(i,j)∈ElemSet,n为矩阵维数}数据关系: R = {Row,Col}Row = {<a(i,j),a(i,j+1)>| 1 <= i <= n , 1 <= j <= n-1}Col = {<a(i,j),a(i+1,j)>| 1 <= i <= n-1 , 1 <= j <= n} 基本操作:Swap(&a,&b);初始条件:记录a,b已存在。

课程设计--设计一个矩阵运算器

课程设计--设计一个矩阵运算器

课程设计--设计一个矩阵运算器《数据结构C语言版》课程设计一、题目内容的描述设计一个矩阵运算器【问题描述】设计一个矩阵运算器,对矩阵进行乘方(^)、加(+)、减(-)、乘(*)、转置等运算;【基本要求】(1) 参见数据结构题集P136页4.1(2) 求含有乘方(^)、加(+)、减(-)、乘(*)运算;。

(3) 写出课程设计报告【测试数据】分别选定一组测试数据进行测试,验证程序的正确性。

二、应用程序功能的详细说明1(输入矩阵运算器:说明该程序只适用于矩阵运算;2. 提供功能选择的界面:以菜单的形式提供功能选择,可以对所要进行的功能进行选择,最后系统自动实行此操作。

3. 矩阵的加法:先创建两个矩阵,要求两个矩阵的行和列分别相等。

调用矩阵的加法函数,系统自动输出新的相加后的矩阵。

4. 矩阵的减法:先创建两个矩阵,要求两个矩阵的行和列分别相等。

调用矩阵的减法函数,系统自动输出新的相减后的矩阵。

5.矩阵的乘法:先创建两个矩阵,要求第一个矩阵的列和第二个矩阵的行相等。

调用矩阵的乘法函数,系统自动输出新的相乘后的矩阵。

6. 矩阵的转置:先创建矩阵,输入矩阵的行和列数,调用矩阵的转置函数,系统自动输出新的转置后的矩阵。

7. 方阵的乘方:先创建一个方阵,输入方阵的阶乘,调用方阵的乘方函数,然后系统自动输出新的方阵。

三、输入数据类型、格式和内容{const int Max=100;int a[Max][Max],b[Max][Max],g[Max][Max],c[Max][Max],h[Max][Max];} Const int Max=100;定义矩阵的最大存储空间为100;int a[Max][Max],b[Max][Max],g[Max][Max],c[Max][Max],h[Max][Max];在函数中定义五个矩阵。

四、主要函数申明void createjuzheng(int d[Max][Max],int m,int n)创建矩阵函数;void shuchujuzheng(int z[Max][Max],int m,int n)输出矩阵函数;void juzhengchengfang(int m,int n,int p)矩阵乘方函数;void juzhengjiafa(int m,int n) 矩阵加法函数;void juzhengjianfa(int m ,int n) 矩阵减法函数;void juzhengchengfa(int m,int n) 矩阵乘法函数;void juzhengzhuanzhi(int m,int n) 矩阵转置函数;switch(o)创建矩阵运算菜单。

大学数学矩阵课程设计

大学数学矩阵课程设计

大学数学矩阵课程设计一、课程目标知识目标:1. 理解矩阵的基本概念,掌握矩阵的运算规则,包括矩阵的加、减、乘及矩阵的逆;2. 掌握矩阵的行列式和秩的定义,并能够运用其性质解决相关问题;3. 了解矩阵的特征值和特征向量,并能够运用其进行矩阵对角化。

技能目标:1. 能够运用矩阵解决线性方程组问题,掌握高斯消元法;2. 学会使用矩阵进行线性变换,理解其在物理、工程等领域的应用;3. 能够运用数学软件进行矩阵运算,提高计算效率和精确度。

情感态度价值观目标:1. 培养学生对矩阵数学的兴趣,激发其探索精神,增强解决问题的自信心;2. 培养学生的团队协作能力,使其在讨论和分享中学习,体会数学的严谨性和逻辑性;3. 引导学生了解矩阵理论在科学技术发展中的重要作用,培养其社会责任感和创新意识。

课程性质:本课程为大学数学专业基础课,以理论教学为主,实践操作为辅。

学生特点:学生具备一定的数学基础,具有较强的逻辑思维能力和学习主动性。

教学要求:注重理论与实践相结合,通过案例分析和数学软件操作,提高学生的实际应用能力。

同时,关注学生的个体差异,进行针对性教学,确保课程目标的实现。

将目标分解为具体学习成果,便于后续教学设计和评估。

二、教学内容1. 矩阵的基本概念与性质:包括矩阵的定义、特殊矩阵(单位矩阵、对角矩阵等)、矩阵的转置、共轭矩阵、矩阵的相等与不等。

2. 矩阵的运算:矩阵的加、减、数乘、矩阵乘法、矩阵的逆、伴随矩阵、矩阵的行列式、矩阵的秩。

3. 线性方程组的矩阵表示:高斯消元法、矩阵的行最简形式、齐次线性方程组和非齐次线性方程组的解。

4. 矩阵的特征值与特征向量:特征值、特征向量的定义、计算方法,矩阵对角化的条件与过程。

5. 矩阵的应用:线性变换、矩阵在物理学、工程学等领域的应用实例。

6. 数值计算方法:矩阵运算的数值稳定性、误差分析,使用数学软件(如MATLAB)进行矩阵运算。

教学内容安排和进度:第一周:矩阵的基本概念与性质;第二周:矩阵的运算;第三周:线性方程组的矩阵表示;第四周:矩阵的特征值与特征向量;第五周:矩阵的应用;第六周:数值计算方法。

矩阵操作__C++课程设计报告

矩阵操作__C++课程设计报告

淮阴工学院C++程序设计课程设计报告选题名称:矩阵操作系(院):计算机工程学院专业:物联网工程班级:物联网1131 姓名:王浩学号: 1131316130 指导教师:张亚红许超俊胡荣林学年学期: 2013 ~2014学年第 2 学期2014年6月2日目录1课题需求 (1)1.1 课题来源及意义 (1)1.2 预期目标 (2)1.3 需解决的问题 (2)2涉及到的基础知识 (2)2.1数组 (2)2.2选择结构 (3)2.3循环结构 (4)2.4其他控制语句 (4)2.5函数 (5)3系统设计 (6)3.1 翻转的设计 (6)3.2 卷动的设计 (8)3.3 转动的设计 (10)4 代码编写及注释 (12)4.1主程序 (12)5 程序调试 (23)6 运行结果与测试 (23)总结 (24)参考文献 (25)1课题需求数学上,一个m×n矩阵乃一m行n列的矩形阵列。

矩阵由数组成,或更一般的,由某环中元素组成。

本课题是对矩阵(二维数组)进行翻转、卷动和旋转三个操作,每个操作中又要考虑方向、角度等问题。

1.1 课题来源及意义矩阵就是由方程组的系数及常数所构成的方阵。

把用在解线性方程组上既方便,又直观。

例如对于方程组。

x+b1y+c1z=d1aa2x+b2y+c2z=d2a3x+b3y+c3z=d3来说,我们可以构成两个矩阵:b1c1a1b1c1d1aa2b2c2a2b2c2d2a3b3c3a3b3c3d3因为这些数字是有规则地排列在一起,形状像矩形,所以数学家们称之为矩阵,通过矩阵的变化,就可以得出方程组的解来。

矩阵这一具体概念是由19世纪英国数学家凯利首先提出并形成矩阵代数这一系统理论的。

矩阵的研究历史悠久,拉丁方阵和幻方在史前年代已有人研究。

1693年,微积分的发现者之一戈特弗里德·威廉·莱布尼茨建立了行列式论(theory of determinants)。

1750年,加布里尔·克拉默其后又定下了克拉默法则。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计题目矩阵乘法教学院计算机学院专业09计算机科学与技术班级姓名指导教师年月日目录1 概述 (3)2 设计目的 (3)3 设计功能说明 (3)4 详细设计说明 (3)5 流程图 (4)6 调试及结果 (5)1程序调试 (5)2运行编译连接过程......................................................... 5-8 7 总结 (9)附录...........................................................................10-24 参考文献 (25)成绩评定表 (26)1 概述数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁只有进行实际操作,将理论应用于实际中,才能确实掌握书中的知识点。

通过课程设计,不仅可以加深学生对数据结构基本概念的了解,巩固学习成果,还能够提高实动手力。

为学生后继课程的学习打下良好的基础。

2 设计目的《数据结构》课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。

因此,要求学生能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。

通过程序的编译掌握对程序的调试方法及思想,并且让学生学会使用一些编程技巧。

促使学生养成良好的编程习惯。

1.使学生能够较全面地巩固和应用课堂中所学的的基本理论和程序设计方法,能够较熟练地完成程序的设计和调试。

2.培养学生综合运用所学知识独立完成程序课题的能力。

3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。

4.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的素质。

5.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。

6.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。

3 设计功能分析本设计的功能如下:1、对于用户给定的矩阵相乘可以进行存储,并且用户可以更改2、根据用户的要求可以选择相应的功能加减乘及转置3、然后显示用户输入的矩阵进行运算并得到结果后保存到文件4 详细设计说明本程序用数据存储的方式建立矩阵。

然后用相加,减,乘,转置的方式计算出最终的矩阵5 流程图6 调试及运行结果1、程序调试1)使用Microsoft visual c++ 编辑软件进行源程序的编写。

2)使用Microsoft visual c++软件进行编译,步骤:单击“组建”选择“编译”。

3)使用Microsoft visual c++运行程序并调试,步骤:单击“组建”选择“执行”。

2、运行及编译连接过程1)现在进行调试2)下面进行编译3)开始运行程序4)首先进行选择,先选1号进行加法运算这时候系统会弹出TXT文本5)做完加法以后,进行选择,选“Y”继续,然后进行减法运行同样,程序接着把两个YXT文本弹出来6)同样上面的操作,选择3,进行乘法运行在弹出的TXT文本里面输入矩阵A,关闭后,在另一个弹出的TXT中输入矩阵B最后输出矩阵B,并弹出结果的TXT7)最后选择4,进行矩阵转置的调试转置后的结果8)选择N程序结束7 总结课程设计终于做完了,虽然有些疲劳和困倦,但也让我收获了很多。

数据结构已经学了一个学期,有许多知识都存在似懂非懂的现象,这种现象通过实际的上机操作,实际应用,已经减少了许多。

对这些知识也有了更深的理解和很好的掌握。

许多困惑,有许多已经通过实际操作解决了,并能够深刻认识。

通过课程设计,明白到了原来开发一个小小的实用系统,是需要考虑到很多方面的问题的,这些都是要在实践中摸索的,这与平时做练习是不同的,但也因为平时有许多的练习基础,会使你做起程序来,更加得心应手。

另外就是要把错误总结,有许多错误是平时自己一手制造的,因此很深刻,但也有些错误是自己还没有接触的,这就应该看多些有关的书记以及别人的总结,使自己不犯这些错误。

这样长期总结,会对自己有很大的帮助。

附录实现的程序代码:#include<iostream>#include <stdio.h>#include <stdlib.h>using namespace std;#include"void Transposition.h"#include"void MatrixMutiply.h"/* 给int 类型定义别名datatype */typedef int datatype;/* 函数声明部分*/datatype** Create(int m, int n);void Reset(datatype**, int, int);void Input(datatype**, int, int);void Output(datatype**, int, int);void Summation(datatype**, datatype**, datatype**); void Subtraction(datatype**, datatype**, datatype**); void MatrixFree(datatype** , int);/* 定义三个矩阵的行列大小*/int row_a, col_a;int row_b, col_b;int row_c, col_c;/* 定义文件指针*/FILE *fp;int main(){{system("color 1c");}datatype **a, **b, **c, **d;printf(" ###########################################\n");printf(" ##### 欢迎您使用矩阵系统######\n");printf(" ##### 系统功能: ######\n");printf(" ##### 计算两个矩阵相加,相减; ######\n");printf(" ##### 矩阵相乘;矩阵转置######\n");printf("###########################################\n");printf(" ## 请选择您需要的运算,按回车键结束##\n");printf("###########################################\n");printf(" ########### 1:矩阵相加###########\n");printf(" ########### 2:矩阵相减###########\n");printf(" ########### 3:矩阵相乘###########\n");printf(" ########### 4:矩阵转置###########\n");printf("###########################################\n");char flag;do{int x;cout<<" 请输入要操作的选项(1--4):";cin>>x;switch (x){case 1:{/* 进行矩阵加法运算*/Summation(a, b, c);};break;case 2:{/* 进行矩阵减法运算*/Subtraction(a, b, c);};break;case 3:{/* 进行矩阵乘法运算*/MatrixMutiply();};break;case 4:{/* 进行矩阵转置运算*/Transposition();};break;default : cout<<"无此选项请确定后再输入!"<<endl;break;}cout<<"是否继续操作?(y/n)"<<endl;cin>>flag;}while (flag=='y'||flag=='Y');}/* 为矩阵动态分配内存的函数*/datatype** Create(int m, int n){int i;datatype **Matrix;Matrix = (datatype **) malloc(sizeof(datatype *) * m);for(i = 0; i < m; i++){Matrix[i] = (datatype *) malloc(sizeof(datatype) * n);}return Matrix;}/* 初始化矩阵函数*/void Reset(datatype** Matrix, int m, int n) {int i,j;for(i = 0; i < m; i++){for(j = 0; j < n; j++){Matrix[i][j] = 0;}}}/* 读入数据函数*/void Input(datatype** Matrix, int m, int n) {int i,j;for(i = 0; i < m; i++){for(j = 0; j < n; j++){fscanf(fp,"%d", &Matrix[i][j]);}}}/* 输出数据函数*/void Output(datatype** Matrix, int m, int n) {int i,j;for(i = 0; i < m; i++){for(j = 0; j < n; j++){fprintf(fp,"%4d ", Matrix[i][j]);}fprintf(fp,"\n");}}/* 释放矩阵内存函数*/void MatrixFree(datatype** Matrix, int m){int i;for(i = 0; i < m; i++){free(Matrix[i]);}free(Matrix);}/* 矩阵加法运算函数*/void Summation(datatype** a, datatype** b, datatype** c) {int i,j;/* 以只读方式打开输入文件in.txt */if((fp = fopen("in.txt","r")) == NULL){printf("Cannot open this file.\n");exit(0);}/* 创建并读入矩阵a */fscanf(fp,"%d%d", &row_a, &col_a);a=Create(row_a, col_a);Input(a,row_a, col_a);printf("***** 矩阵A *****\n");for(i=0;i<row_a;i++){for(j=0;j<col_a;j++)printf("%4d",a[i][j]); //实数格式printf("\n");}/* 创建并读入矩阵b */fscanf(fp,"%d%d", &row_b, &col_b);b = Create(row_b, col_b);Input(b,row_b, col_b);//输出矩阵bprintf("***** 矩阵B *****\n");for(i=0;i<row_b;i++){for(j=0;j<col_b;j++)printf("%4d",b[i][j]); //实数格式printf("\n");}/* 判断两个矩阵能否相加*/if(row_a == row_b && col_a == col_b){row_c = row_a;col_c = col_b;}else{printf("Matrix Can't Mutiply !\n");fprintf(fp,"Matrix Can't Mutiply !\n");exit(0);}/* 关闭输入文件*/fclose(fp);/* 以写入方式打开输出文件out.txt */if((fp = fopen("out.txt","w")) == NULL){printf("Cannot open this file.\n");exit(0);}/* 创建并初始化结果矩阵c */c = Create(row_c, col_c);Reset(c, row_c, col_c);for(i=0;i<row_c;i++){for(j=0;j<col_c;j++){c[i][j]=a[i][j]+b[i][j];}}//矩阵加法printf("***** 矩阵加法*****\n");for(i=0;i<row_a;i++){for(j=0;j<col_b;j++)printf("%4d",c[i][j]); //实数格式printf("\n");}/* 输出结果矩阵C */Output(c, row_c, col_c);/* 关闭输入文件*/fclose(fp);system("in.txt");/* 关闭输出文件*/fclose(fp);system("out.txt");/* 释放矩阵内存*/MatrixFree(a,row_a);MatrixFree(b,row_b);MatrixFree(c,row_c);}/* 矩阵减法运算函数*/void Subtraction(datatype** a, datatype** b, datatype** c) {int i,j;/* 以只读方式打开输入文件in.txt */if((fp = fopen("in.txt","r")) == NULL){printf("Cannot open this file.\n");exit(0);}/* 创建并读入矩阵a */fscanf(fp,"%d%d", &row_a, &col_a);a=Create(row_a, col_a);Input(a,row_a, col_a);printf("***** 矩阵A *****\n");for(i=0;i<row_a;i++){for(j=0;j<col_a;j++)printf("%4d",a[i][j]); //实数格式printf("\n");}/* 创建并读入矩阵b */fscanf(fp,"%d%d", &row_b, &col_b);b = Create(row_b, col_b);Input(b,row_b, col_b);//输出矩阵bprintf("***** 矩阵B *****\n");for(i=0;i<row_b;i++){for(j=0;j<col_b;j++)printf("%4d",b[i][j]); //实数格式printf("\n");}/* 判断两个矩阵能否相减*/if(row_a == row_b && col_a == col_b){row_c = row_a;col_c = col_b;}else{printf("Matrix Can't Mutiply !\n");fprintf(fp,"Matrix Can't Mutiply !\n");exit(0);}/* 关闭输入文件*/fclose(fp);/* 以写入方式打开输出文件out.txt */if((fp = fopen("out.txt","w")) == NULL){printf("Cannot open this file.\n");exit(0);}/* 创建并初始化结果矩阵c */c = Create(row_c, col_c);Reset(c, row_c, col_c);for(i = 0; i < row_c; i++){for(j = 0; j < col_c; j++){c[i][j] = a[i][j] - b[i][j];}}//矩阵减法printf("***** 矩阵减法*****\n");for(i=0;i<row_a;i++){for(j=0;j<col_b;j++)printf("%4d",c[i][j]); //实数格式printf("\n");}/* 输出结果矩阵C */Output(c, row_c, col_c);system("in.txt");/* 关闭输出文件*/fclose(fp);system("out.txt");/* 释放矩阵内存*/MatrixFree(a,row_a);MatrixFree(b,row_b);MatrixFree(c,row_c);}矩阵乘法的分代码:#include "stdio.h"void MatrixMutiply(){int m,g,f,n;int i,j,k;printf("\n请输入矩阵A的行数和列数( >0 ):\n");scanf("%d%d",&m,&g);printf("请输入矩阵B的行数和列数( >0 ):\n");scanf("%d%d",&f,&n);if(f==g) //判断能否相乘{//矩阵aFILE *fpa;printf("请输入矩阵A的元素\n");system("cheng-a.txt");fpa=fopen("cheng-a.txt","r"); //读文件cheng-a.txtif(fpa==NULL){printf("文件写打开失败");exit (0);}double **a=NULL;/*二级指针用来代表一个二维数组,在声明指针的时候将其赋值为NULL;释放后再赋值为NULL在一些进行有效性判断的地方用a==NULL来判断指针是否为空指针*/a=(double**)malloc(m*sizeof(double*));/*这句是动态定义二维数组的行数。

相关文档
最新文档