课程设计:用C语言编写的稀疏矩阵运算器(加、减、乘、求逆)

#include<stdio.h>
#include<stdlib.h>
int system(const char *string);
#define maxsize 2000

typedef struct
{
	int row;
	int col;
	int data;
}triple;

typedef struct
{
	triple data[maxsize];
	int m,n,len;
}matrix;

typedef struct
{
	int row;
	int col;
	float data;
}triple_f;

typedef struct
{
	triple_f data[maxsize];
	int m,n,len;
}matrix_f;

matrix_f *Init_f()
{
	int i=0;
	matrix_f *A;
	A=(matrix_f*)malloc(sizeof(matrix_f));
	A->len=0;
	A->m=0;
	A->n=0;
	for(i=0;i<maxsize;i++)
	{
		A->data[i].col=0;
		A->data[i].row=0;
		A->data[i].data=0;
	}
	return A;
}


matrix *Init()
{
	int j=0;
	matrix *A;
	A=(matrix*)malloc(sizeof(matrix));
	A->len=0;
	A->m=0;
	A->n=0;
	for(j=0;j<maxsize;j++)
	{
		A->data[j].col=0;
		A->data[j].row=0;
		A->data[j].data=0;
	}
	return A;
}


void print_menu()
{
	char ch1='=';
	int i;

	for(i=0;i<80;i++)
		printf("%c",ch1);
}





void qiuni(matrix_f *A,matrix_f **C)
{
	/*参数声明*/
	int i=0,j=0,m=0,row=0,col=0,r1,k,tz=0,tem_row,tem_col,l;
	float n1,n2,t,x,n3,sum;
	matrix_f *B;

	/*变量运算*/
	B=Init_f();

	/*创建矩阵AI*/	/*这部分已完成,下面部分禁止修改*/
	m=0;j=0;
	B->m=A->m; B->n=2*(A->n); B->len=(B->m)*(B->n);
	tem_row=0; tem_col=0;
	for(i=0;i<B->len;i++)
	{	
		B->data[i].data=0;
		B->data[i].col=tem_col;
		B->data[i].row=tem_row;
		tem_col++;
		if(tem_col==B->n)
		{
			tem_col=0;
			tem_row++;
		}
	}

	for(i=0;i<A->len;i++)
		for(j=0;j<B->len;j++)
			if(B->data[j].row==A->data[i].row&&B->data[j].col==A->data[i].col)
				B->data[j].data=A->data[i].data;

	j=0;
	for(i=0;i<A->m;i++)
	{
		B->data[j*(B->n)+i+B->m].data=1;
		j++;
	}

	/*变换矩阵AI*/
	row=0;	col=0;	i=0;	j=0;	n1=1.0;		n2=1.0;
	r1=0;	k=0;	t=1.0;  l=0;	x=0;

	for(col=0;col<B->m;col++) 
	{	
	
		for(row=0;row<B->m;row++) 
        {
			if(row!=col)
            {
				for(i=0;i<B->len;i++)
					if(B->data[i].row==row&&B->data[i].col==col)
					{n1=B->data[i].data;break;}				
				for(j=0;j<B->len;j++)
					if(B->data[j].row==col&&B->data[j].col==col)
					{n2=B->data[j].data;break;}
				t=n1/n2; 
				for(r1=0;r1<(2*B->m);r1++)
                { 
					for(k=0;k<B->len;k++)
						if(B->data[k].row==col&&B->data[k].col==r1)
						{n3=B->data[k].data;break;} 
					x=n3*t; 
					for(l=0;l<B->len;l++)
						if(B->data[l].row==row&&B->data[l].col==r1)
						{B->data[l].data=B->data[l].data-x;break;}
                } 
            } 
        } 
	} 

	row=0;j=0;n1=0;col=0;i=0;
	for(row=0;row<B->m;row++)
	{
		for(j=0;j<B->len;j++)
			if(B->data[j].row==row&&B->data[j].col==row)
			{n1=B->data[j].data;break;}

		for(col=0;col<B->n;col++)
			for(i=0;i<B->len;i++)
				if(B->data[i].row==row&&B->data[i].col==col)
				{B->data[i].data=(B->data[i].data)/n1;break;}
	}

	row=0;col=0;sum=1;tem_row=0;tem_col=0;
	for(row=0;row<B->m;row++)
	{
		for(i=0;i<B->len;i++)
		{
			if(B->data[i].row==row&&B->data[i].col==row)
				sum=sum*(B->data[i].data);
		}
	}
	if(sum==0)
		printf("您所输入的矩阵没有逆矩阵!\n");
	else
	{
		(*C)->len=B->len/2;
		(*C)->m=B->m;
		(*C)->n=B->m;
		for(i=0;i<(*C)->len;i++)
		{
			(*C)->data[i].data=B->data[i+(tem_row+1)*B-
  • 5
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值