c語言輸出轉置矩陣
❶ c語言三元組輸入輸出的轉置矩陣
分類: 電腦/網路 >> 程序設計 >> 其他編程語言
解析:
用三元組存儲的稀疏矩陣的轉置運算
三元組採用行優先表示法,轉置後的矩陣的三元組同樣要採用行優先表示法
0 1 12
0 2 9
2 0 -3
3 5 14
3 2 24
4 1 18
5 0 15
5 3 -7
struct node
{
int i,j; 定義三元組的行、列號
int v; 三元組的值
};
struct sparmatrix
{
int rows,cols; 稀疏矩陣的行純指裂、列數
int terms; 稀疏矩陣的非零元個數
struct node data[maxsize]; 存放稀疏矩陣的三元組表
};
(1)按照A的列序進行轉置
由於A的列即為B的行,在a.data(原表)中,按列掃描,則得到的b.data(轉置表)必按行優先存放。
但為了找到A的每一列中所有的非零的元素,每次都必須從頭到尾掃描A的三元組表(有多少列,則掃描多少遍)
void transpose(struct sparmatrix a)
{
struct sparmatrix b; /*b為a的轉置*/
int ano,bno=0,col,i;
b.rows=a.cols; b.cols=a.rows;
b.terms=a.terms;
if (b.terms>0)
{
for ( col=0; col<a.cols; col++) /*按列號掃描*/
for( ano=0;ano<a.terms;ano++) /*對三元組掃描*/
if (a.data[ano].j==col) /*進行轉置*/
{ b.data[bno].j=a.data[ano].i;
b.data[bno].i=a.data[ano].j;
b.data[bno].v=a.data[ano].v;
bno++;
}
}
…………….
(2)按照A的行序進行轉置
即按a.data中三元組的次序進行轉置,並將轉置後的三元組放入b中恰當的位置。
若能在轉置前求出矩陣A的每一列col(即B中每一行)的第一個非零元轉置後在b.data中的正確位置pot[col](0≤col<a.cols),那麼在對a.data的三元組依次作轉置時,只要將三元組按列號col放置到b.data[pot[col]]中,之後將pot[col]內容加1,以指示第逗鉛col列的下一個非零做閉元的正確位置。
void fastrans(struct sparmatrix a)
{
struct sparmatrix b;
int pot[maxsize],col,ano,bno,t,i;
b.rows=a.cols; b.cols=a.rows;
b.terms=a.terms;
if(b.terms>0)
{
for(col=0;col<=a.cols;col++)
pot[col]=0;
for( t=0;t<a.terms;t++) /*求出每一列的非零元個數*/
{
col=a.data[t].j;
pot[col+1]=pot[col+1]+1;
}
pot[0]=0;
for(col=1;col<a.cols;col++) /*求出每一列的第一個非零元在轉置後的位置*/
pot[col]=pot[col-1]+pot[col];
for( ano=0;ano<a.terms;ano++) /*轉置*/
{ col=a.data[ano].j;
bno=pot[col];
b.data[bno].j=a.data[ano].i;
b.data[bno].i=a.data[ano].j;
b.data[bno].v=a.data[ano].v;
pot[col]=pot[col]+1;
}
}
❷ C語言編程:輸入一個2x3的矩陣,輸出它的轉置矩陣。
#include<stdio.h>拍判雀
int main()
{int a[2][3],b[3][2],i,j;
for(i=0;i<2;i++)
for(j=0;j<3;j++)
{scanf("%d",&a[i][j]);
沖嘩b[j][i]=a[i][j];
}
printf("========== ");
for(i=0;i<3;i++)
{for(j=0;j<2;j++)
printf("襲早%4d",b[i][j]);
printf(" ");
}
return 0;
}
❸ c語言~使用函數 完成3×3矩陣轉置,輸入一矩陣,輸出其轉置矩陣。
#include<stdio.h>
#defineN3
intarray[N][N];
voidtransition(intarray[][3])
{
inti,j,temp;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
{
temp=array[i][j];
array[i][j]=array[j][i];
array[j][i]=temp;
}
}
intmain(void)
{
voidtransition(intarray[][3]);
inti,j;
printf("請輸入數據 ");
高禪灶for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&array[i][j]);
printf(" ");
transition(array);
printf("調換數據如下 ");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%5d",array[i][j]);
printf(" ");
}
return0;
}
~~~~~~
我寫的代碼,你自襲廳己戚扮參考吧,很簡單的
❹ C語言編程實現2*3的矩陣轉置
#include<iostream>
usingnamespacestd;
voidzhuang(inta[3][3])
{intm,n,i;
for(m=0;m<2;m++)
for(i=0;i<3;i++)
{if(m!=1||i!=0)
{n=a[i][m];
a[i][m]=a[m][i];
a[m][i]=n;
}
}
}
intmain()
{
inta[3][3];
inti,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
cin>>a[i][j];
zhuang(a)做汪伏;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
cout<<a[i][j]<<"";
cout<<endl;
}
return0;
}
cout<<"處理後的矩陣:"<<endl;
for(i=0;i<3;i++)//輸出處理後的矩陣
{
for(j=0;j<3;j++)
{
cout<<setw(5)<<a<i>[j];
}
cout<<endl;
}
return0;
}
//交換函數
voidmove(int*pointer)
{
inti,j,t;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++)
{
t=*(pointer+3*i+j);//這是關鍵將矩陣轉置的條件
*(pointer+3*i+j)=*(pointer+3*j+i);
*(pointer+3*j+i)=t;
}
}
}
運行效果:
(4)c語言輸出轉置矩陣擴展閱讀:
在C語言或C++中,會把用來#include的文件的擴展名叫.h,稱其為頭文件。
#include文件的目的就是把多個編譯單元(也就是c或者cpp文件)公用的內容,單獨放在一個文件里減少整體代碼尺寸;或者提供跨工程公共代碼。在現行的c++版本中,應用這個頭文件應是#include<stdio.h>
stdio 就是指 「standard input & output"(標准輸入輸出)所以,源代碼中如用到標准輸純攜入輸出函數時,就要包含這個頭文件!
例如c語言中的 printf("%d"陵旅,i); scanf("%d",&i);等函數。
❺ C語言編譯,目的是輸入一個四行四列的矩陣,找出最小值並輸出轉置矩陣
#include<stdio.h>
intmain()
{
inta[4][4];
intb[4][4];//
inti,j,min;
introw,colum;//
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
}
min=a[0][0];
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
if(a[i][j]<min)
{
min=a[i][j];
row=i;//
colum=j;//
}
}
printf("min=%d row=%d colum=%d ",min,row,colum);//
printf(" ");
printf(" ");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
b[j][i]=a[i][j];
}
}
printf("b: ");
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
printf("%5d",b[i][j]);
}
printf(" ");
}
return0;
}
❻ c語言如何通過定義函數來轉置矩陣
#include <stdio.h>
int main()
{ struct aaa
{ int x;
int y;
};
struct aaa t,a[3][3]= {0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2};
int i,j;
for(i=0; i<3; i++)
{ for(j=0; j<3; j++)
printf("[%d,%d] ",a[i][j].x,a[i][j].y);
printf(" ");
}
printf("after: ");
for(i=0; i<3; i++)
for(j=0; j<i; j++)
{ t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
for(i=0; i<3; i++)
{ for(j=0; j<3; j++)
printf("[%d,%d] ",a[i][j].x,a[i][j].y);
printf(" ");
}
return 0;
}
或:
#include <stdio.h>
struct aaa
{ int x;
int y;
};
void zhuan(struct aaa a[][3])
{ struct aaa t;
int i,j;
for(i=0; i<3; i++)
for(j=0; j<i; j++)
{ t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
}
void prt(struct aaa a[][3])
{ int i,j;
for(i=0; i<3; i++)
{ for(j=0; j<3; j++)
printf("[%d,%d] ",a[i][j].x,a[i][j].y);
printf(" ");
}
}
int main()
{ struct aaa a[3][3]= {0,0,0,1,0,2,1,0,1,1,1,2,2,0,2,1,2,2};
prt(a);
zhuan(a);
printf("after: ");
prt(a);
return 0;
}
❼ C語言矩陣轉置
//經握銷過vc6調試成功段畢游
void transferMat(int a[] , int b[], int n) //a表示待轉置的矩陣,b表示輸出矩陣,n表數拍示元素個數
{
int i,j;
for(i=0; i<n; i++)
for(j=0; j<n; j++)
{
b[j,i]=a[i,j];
}
}