c語言s形矩陣函數(shù) c語言n×n矩陣

用C語言編寫一個矩陣運算的程序,高分!

//矩陣三元組之矩陣相加 相乘

10年積累的網站制作、做網站經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站制作后付款的網站建設流程,更有蒼梧免費網站建設讓你可以放心的選擇與我們合作。

#include iostream

using namespace std;

typedef int Elemtype;

#define MAXSIZE 12500 //最大非零元素

typedef struct Triple

{

Elemtype value;

int row,col;

}Triple;

typedef struct TSMatrix

{

Triple data[MAXSIZE+1];

int mu,nu,tu;

}TSMatrix;

TSMatrix T;

void InputMatrix(TSMatrix T) //輸入t個非零元素

{

cout"請輸入稀疏矩陣的信息,(行,列,非零元素個數(shù))"endl;

cinT.muT.nuT.tu;

int i;

cout"請輸入非零元素的信息(行,列,值),提醒(下標從1開始)"endl;

for(i=1;i=T.tu;++i)

{

cinT.data[i].rowT.data[i].colT.data[i].value;

}

}

void Output(TSMatrix T)

{

cout"矩陣的三元組表示(ROW=)"T.mu" COL="T.nu"非零個數(shù)="T.tuendl;

int i;

for(i=1;i=T.tu;++i)

{

cout"ROW(行):"T.data[i].row" COL(列):"T.data[i].col" Value(值)"T.data[i].valueendl;

}

}

void TransposeSMatrix(TSMatrix M,TSMatrix T) //矩陣的轉置

{

T.mu=M.nu;T.nu=M.mu;T.tu=M.tu;

int i,j,k=1;

for(i=1;i=M.nu;++i)

{

for(j=1;j=M.tu;++j)

if(M.data[j].col==i)

{

T.data[k].row=i;

T.data[k].col=M.data[j].row;

T.data[k].value=M.data[j].value;

++k;

}

}

}

void AddMastrix(TSMatrix M,TSMatrix T,TSMatrix Q) //矩陣相加

{

int index_a,index_b,i=1,j=1,k=1;

Q.mu=M.mu; Q.nu=M.nu;

while (i=M.tuj=T.tu)

{

index_a=(M.data[i].row)*(M.data[i].col)+M.data[i].col;

index_b=(T.data[j].row)*(T.data[j].col)+T.data[j].col;

if(index_aindex_b)

{

Q.data[k]=M.data[i];

i++;

k++;

}

else if(index_aindex_b)

{

Q.data[k]=T.data[j];

j++;

k++;

}

else if(index_a==index_b)

{

if((M.data[i].value+T.data[j].value)!=0)

{

Q.data[k]=M.data[i];

Q.data[k].value=M.data[i].value+T.data[j].value;

k++;

}

++i;

++j;

}

}

//復制剩余元素

for(;i=M.tu;++i)

{

Q.data[k]=M.data[i];

k++;

}

for(;j=T.tu;++j)

Q.data[k++]=T.data[j];

Q.tu=k-1;

}

void Multiply(TSMatrix M,TSMatrix T,TSMatrix Q) //相乘

{

if(M.nu!=T.mu)

{

cerr"兩矩陣相乘不合法"endl;

return ;

}

int *rowSize=new int[T.mu+1]; //存放每行非零元素的個數(shù)

int *rowStart=new int[T.mu+2]; //矩陣每行在三元組開始位置

int *temp=new int[T.nu+1]; //存放結果矩陣中每行的計算結果

int i,Current,k,ROWM,COLM,COLB;

for(i=1;i=T.mu;i++) rowSize[i]=0;

for(i=1;i=T.tu;++i) rowSize[T.data[i].row]++;

rowStart[1]=1;

for(i=2;i=T.mu+1;i++)

rowStart[i]=rowStart[i-1]+rowSize[i-1];

Current=1; k=1;

while (Current=M.tu)

{

ROWM=M.data[Current].row; //當前三元組數(shù)據中元素的行號

for(i=1;i=T.nu;++i) temp[i]=0;

while (Current=M.tuROWM==M.data[Current].row)

{

COLM=M.data[Current].col; //當前元素的列號,方便與T矩陣的行號相乘

for(i=rowStart[COLM];irowStart[COLM+1];i++) //對應T矩陣中每行的個數(shù)

{

COLB=T.data[i].col;

temp[COLB]+=(M.data[Current].value)*(T.data[i].value);

}

Current++;

}

for(i=1;i=T.nu;i++)

{

if(temp[i]!=0)

{

Q.data[k].row=ROWM;

Q.data[k].col=i;

Q.data[k].value=temp[i];

}

k++;

}

}

Q.mu=M.mu;Q.nu=T.nu;

Q.tu=k-1;

}

int main()

{

TSMatrix T,M,Q,S;

InputMatrix(M);

InputMatrix(T);

cout"兩矩陣相乘"endl;

Multiply(M,T,Q);

Output(Q);

cout"兩矩陣相加"endl;

AddMastrix(M,M,S);

Output(S);

system("pause");

return 0;

}

數(shù)據結構(使用C語言)關于矩陣

你的測試數(shù)據不符合條件,不是對稱矩陣。但函數(shù)調試已調試好了,無誤。

#include stdio.h

#define N 3

#define M (N*N+N)/2

void add(int C[],int A[],int B[])

{

for(int i=0;iM;i++)

C[i]=A[i]+B[i];

}

void print(int C[])

{

int i,j,t;

for(i=0;iN;i++)

{

for(int j=0;jN;j++)

{

if(i=j) t=(i+1)*i/2+j;

else t=(j+1)*j/2+i; //下三角存儲

printf("%d ",C[t]);

}

printf("\n");

}

}

int main(void)

{

int a[N][N]={{1,2,3},{10,20,30},{2,4,5}};

int b[N][N]={{20,40,50},{3,5,6},{30,50,60}};

int A[M],B[M],C[M];

int i,j,t=0,k=0;

for(i=0;i=2;i++)

for(j=0;j=i;j++)

{

A[t++]=a[i][j];

B[k++]=b[i][j];

}

add(C,A,B);

print(C);

return 0;

}

怎樣用C語言寫矩陣?

用二維數(shù)組,如下:

#include stdio.h

main()

{

int i, j, a[4][4];

for ( i = 1; i 4; i++ )

{

for ( j = 1; j 4; j++ )

{

scanf ("%d", a[i][j]);

}

}

//這樣就可以將一個3*3 的矩陣存在2維數(shù)組中了

for ( i = 1; i 4; i++ )

{

for ( j = 1; j 4; j++ )

{

printf (" %-4d ", a[i][j]);

}

printf ("\n");

}

//這樣就可以顯示矩陣

return 0;

}

網站欄目:c語言s形矩陣函數(shù) c語言n×n矩陣
標題路徑:http://muchs.cn/article34/doeocpe.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站設計手機網站建設App開發(fā)、商城網站全網營銷推廣、網頁設計公司

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

外貿網站建設