课程设计矩阵运算系统的设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(j=0;j<N;j++)
printf("%d ",b[i][j]);
}
printf("\n");
printf("Now print resource matrix c[%d][%d]=",M,N);
for(i=0;i<M;i++){
printf("\n");
for(j=0;j<N;j++)
printf("%d ",c[i][j]);
for(i=0;i<M;i++)
{
printf("\n");
for(j=0;j<N;j++)
printf("%d ",a[i][j]);
}
return 0;
}
void matrixMul(int b[][M],int c[][N])
{
int i,j,k;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
年月日
课程设计任务书
2009—2010学年第二学期
专业:统学号:姓名:
课程设计名称:c\c++程序设计课程设计
设计题目:矩阵运算系统的设计与实现
完成期限:自2010年7月5日至2010年7月16日共2周
设计依据、要求及主要内容(可另加附页):
用C/C++语言编写一个程序实现普通矩阵相加、相乘及稀疏矩阵转置问题,要求如下:
typedef struct tabletype
{
int mu; /*矩阵的行数*/
int nu; /*列数*/
int tu; /*非零元个数*/
Triple data[MAXSIZE]; /*非零元的三元组表,本程序中是从data[1]开始使用的*/
}Tabletype; /*三元组线性表*/
/*以下为函数声明,注意和书本上的参数类型不同,我用的形参全为指针*/
1)阐述设计思想,画出流程图;
2)对给定的矩阵A1、A2,实现矩阵相加、相乘;
3)对稀疏矩阵B,用三元组对矩阵中的元素进行存放,分别以行为主序和以列为主序求出稀疏矩阵B的转置矩阵T;
4)说明测试方法,写出完整的运行结果,较好的界面设计。
5)编写课程设计报告。
指导教师(签字):教研室主任(签字):
批准日期:2010年7月5日
#define M 3
#define N 3
//指针数组
int a[M][N];
int b[M][N];
int c[M][N];
void matrixMul(int b[][M],int c[][N]);
void matrixAdd(int b[][N],int c[][N]);
void matrixSub(int b[][N],int c[][N]);
摘要
设计了一个矩阵运算系统,该矩阵运算系统具有普通矩阵相加、相减、相乘及稀疏矩阵转置等功能。本运算系统以Microsoft Visual C++ 6.0作为系统开发工具,采用算数表达式处理算法来实现了矩阵的加、减、乘等混合运算和稀疏矩阵的转置矩阵运算。系统操作简单,界面清晰,便于用户使用。
关键词:普通矩阵; 运算;VC6.0
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&temp);
c[i][j]=temp;
}
}
//输出原矩阵
printf("Now print resource matrix b[%d][%d]=",M,N);
for(i=0;i<M;i++){
printf("\n");
{ printf("After TransposeSMatrix: \n");
out_matrix(&b);
}
else
{
printf("The matrix is zeros:\n");
out_matrix(&a);
}Hale Waihona Puke Baidu
/*以下为程序控制*/
printf("Input 'q' to quit and 'c' run again:");
C\C++程序设计课程设计
设计说明书
矩阵运算系统的设计与实现
学生姓名
学号
班级
成绩
指导教师
计算机科学与技术系
2010年7月16日
C/C++程序设计课程设计评阅书
题目
矩阵运算系统的设计与实现
学生姓名
学号
指导教师评语及成绩
指导教师签名:
年月日
答辩评语及成绩
答辩教师签名:
年月日
教研室意见
总成绩:
室主任签名:
{
for(k=0;k<N;k++)
a[i][j]+=b[i][k]*c[k][j];
}
}
void matrixAdd(int b[][M],int c[][N])
{
int i,j;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
a[i][j]=b[i][j]+c[i][j];
}
}
int main( void ) /*主函数*/
{
char ch;
Tabletype a = {0,0,0,{0,0,0}}; /*初始化为0,便于输入数据时的无效检测*/
Tabletype b; /*声明矩阵b*/
while(1)
{
printf(" @@@@@@@@@@@@@@本程序的功能是实现稀疏矩阵的快速转置@@@@@@@@@@@@@@@\n");
}
void matrixSub(int b[][M],int c[][N])
{
int i,j;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
a[i][j]=b[i][j]-c[i][j];
}
}
}
/*矩阵的快速转置*/
#include <stdio.h>
#include <stdlib.h>
do{
if((ch = getchar()) == 'q' || ch == 'Q')
{
DestroySMatrix(&a);
DestroySMatrix(&b);
exit(0);
}
}while((ch!='C') && (ch!='c'));
system("cls");
}
return 1;
}
void CreatSMatrix(Tabletype *a)
int main()
{
int i,j,temp=0;
printf("Please input int matrix b[%d][%d]\n",M,N);
for(i=0;i<N;i++)
for(j=0;j<N;j++)
{
scanf("%d",&temp);
b[i][j]=temp;
}
printf("Please input int matrix c[%d][%d]\n",M,N);
for(i=0;i<M;i++)
{
printf("\n");
for(j=0;j<N;j++)
printf("%d ",a[i][j]);
}
//输出矩阵相减结果
matrixSub(b,c);
printf("\n");
printf("Now printm matrixSub results matrix a[%d][%d]=B-C:",M,N);
for(j=0;j<N;j++)
printf("%d ",a[i][j]);
}
}
else
{
printf("matrix Error,check and try again!!! ");
}
//输出矩阵相加结果
matrixAdd(b,c);
printf("\n");
printf("Now printm matrixAdd results matrix a[%d][%d]=B+C:",M,N);
{
printf("注意:下标越界输入数据无效!\n请重新输入:行标范围:1--%d,列标范围1--%d!!!\n",a->mu,a->nu);
continue;
}
if( ((a->data[i].i) < (a->data[i-1].i)) ||
(((a->data[i].i) == (a->data[i-1].i)) && ((a->data[i].j) <= (a->data[i-1].j)))) /*非按行顺序输入*/
scanf("%d%d%d",&(a->data[i].i),&(a->data[i].j),&(a->data[i].e));
if(a->data[i].i < 1 || a->data[i].i > a->mu || a->data[i].j < 1 || a->data[i].j > a->nu) /*下标越界*/
{
printf("注意:输入数据无效!\n请按照按行存储的顺序输入数据!!!\n");
continue;
}
i++;
}
}
void DestroySMatrix(Tabletype *a)
{ /* 销毁稀疏矩阵a*/
(*a).mu=0;
(*a).nu=0;
(*a).tu=0;
}
printf(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
CreatSMatrix(&a);
printf("The source Matrix:\n");
out_matrix(&a);
if(FastTransposeSMatrix(&a,&b)) /*若a不为零矩阵则转置a,存入b中*/
#include <process.h>
#define MAXSIZE 200 /*矩阵中最大非零元的个数*/
typedef struct triple
{
int i; /*行标,本程序中从1开始的*/
int j; /*列标,本程序中从1开始的*/
int e; /*非零元*/
}Triple; /*三元组定义*/
{
int i;
printf("请输入矩阵的行数、列数和非零元个数,用空格间隔:");
scanf("%d%d%d",&(a->mu),&(a->nu),&(a->tu));
for(i=1;i<= a->tu;)
{
printf("请输入矩阵中第%d个非零元(按行标、列标、值的顺序,空格间隔):",i);
1 课题描述
矩阵运算系统是一个非常重要的运算,很多软件开发公司都开发了这个运算系统。现在我们用C语言编出这个运算系统。它的原理是对于输入的矩阵,进行相加、相乘以及相减。另外一个是稀疏矩阵的转置运算系统,按提示输入数值即可得到所要求的稀疏矩阵的转置矩阵。
运行环境:Visual C++ 6.0
2
经过对程序设计题目的分析可知,整个程序的设计实现大致分为四个模块,其中每一个模块对应一个函数,他们的功能分别是:1)矩阵相加运算函数(ADD),主要实现将两矩阵相加的功能;2)矩阵相乘运算函数(MUL),主要实现将两矩阵相乘的功能;3)矩阵相减函数(SNB);实现的功能是矩阵之间的减法4)稀疏矩阵矩阵转置函数(TRANPOSE)实现的功能是将稀疏矩阵进行转置。在这些函数当中,第1、2、4个函数的实现严格按照题目的要求,而第3个函数为自行设计的函数。程序的一次运行当中可以循环执行所有的功能,并根据需要终止程序的执行。 在这个程序中,将各个功能以子程序模块的形式编写。这样使所编写的程序简单明了,逻辑性思维表达明确,具有很强的可读性。流程图如下:
1)矩阵相乘流程图如图2.1所示:
图2.1
2)矩阵相加流程图如图2.2所示
图2.2
3)矩阵相减流程图如图2.3所示
图2.3
4)矩阵相减、相加、相乘MAIN函数如图2.4所示
图2.4
5)稀疏矩阵的转置流程图如图2.5所示
图2.5
3
/*矩阵相加、相减以及相乘*/
#include "stdio.h"
#include "stdlib.h"
void CreatSMatrix(Tabletype *); /*生成矩阵*/
void DestroySMatrix(Tabletype *); /*销毁矩阵*/
void out_matrix(Tabletype *); /*打印 矩阵*/
int FastTransposeSMatrix(Tabletype *,Tabletype *); /*快速转置算法*/
}
if (M == N)
{
matrixMul(b,c); //调用矩阵相乘
//输出矩阵相乘结果
printf("\n");
printf("Now printm matrixMul results matrix a[%d][%d]=B*C:",M,N);
for(i=0;i<M;i++)
{
printf("\n");
相关文档
最新文档