當前位置:首頁 » 編程語言 » c語言33矩陣轉置矩陣

c語言33矩陣轉置矩陣

發布時間: 2025-05-08 13:38:49

⑴ 將一個3x3的矩陣轉置,怎樣用c語言

#include<stdio.h>

int main()

{

int a[3][3];int*i;

for(i=*a;i<*a+9;scanf("%d",i++));//輸入矩陣

void trans(int(*p)[3]);//聲明轉換函數

trans(a);

}

void trans(int(*p)[3])

{

int i,j,t,*k;

for(i=0;i<3;i++)

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

{

t=*(*(p+i)+j);*(*(p+i)+j)=*(*(p+j)+i);*(*(p+j)+i)=t;//行列交換

}

for(i=0;i<3;i++,printf(" "))

for(k=*(p+i);k<*(p+i)+3;printf("%2d",*k++));//輸出轉置矩陣

}

(1)c語言33矩陣轉置矩陣擴展閱讀:

C#中for語句的語法:

for(initialization;Boolean expression;update control variable)

statement

其中,statement(語句)是for循環主體,要麼是一個語句,要麼是用大括弧{}封閉的代碼塊。[3]

例子1:

static void Main(string[]args)

{

for(int i=0;i<10;i++)

{

Console.WriteLine(i);

Console.ReadLine();

}

}

例子2:

static void Main(string[]args)

{

int i=0;

for(;i<10;i++)

{

Console.WriteLine(i);

Console.ReadLine();

}

}

例子2運算得到例子1相同的結果。

Pascal語言中的for循環

循環次數已知時,可以用for語句實現循環結構。

for語句有兩種格式:遞增型和遞減型。

(1)遞增型for語句格式

for<循環變數>:=<初值>to<終值>do<語句>;

(2)遞減型for語句格式,

for<循環變數>:=<初值>downto<終值>do<語句>;

其中,「循環變數"為一個有序類型的數據,

在第一種形式中,使用的是保留字to,循環變數則從「初值"開始逐一增加到「終值";

在第二種形式中,使用的是保留字downto,「循環變數"則從「初值"開始逐一遞減到「終值",每次執行一次循環體語句。

⑵ c語言:寫一個函數,將輸入的3*3的整形矩陣進行轉置 用函數

#include<stdio.h>

int main()

{

void move(int *s);

int a[3][3];int i=0;

int *p=&a[0][0];

printf("請輸入一個3*3的數組: ");

for(i=0;i<3;i++)

{

scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);

}

move(p);

printf("轉置後的結果: ");

for(i=0;i<3;i++)

{

printf("%d %d %d ",a[i][0],a[i][1],a[i][2]);

}

return 0;

}

void move(int *s)

{

int i,j,t;

for(i=0;i<3;i++)

{

for(j=i;j<3;j++)

{

t=*(s+3*i+j);

*(s+3*i+j)=*(s+3*j+i);

*(s+3*j+i)=t;

}

}

}

(2)c語言33矩陣轉置矩陣擴展閱讀:

在C語言或C++中,會把用來#include的文件的擴展名叫 .h,稱其為頭文件。

#include文件的目的就是把多個編譯單元(也就是c或者cpp文件)公用的內容,單獨放在一個文件里減少整體代碼尺寸;或者提供跨工程公共代碼。在現行的c++版本中,應用這個頭文件應是#include<stdio.h>

stdio 就是指 「standard input & output"(標准輸入輸出)所以,源代碼中如用到標准輸入輸出函數時,就要包含這個頭文件!

例如c語言中的 printf("%d",i); scanf("%d",&i);等函數。

引用方法

#include <stdio.h>

(註:在TC2.0中,允許不引用此頭文件而直接調用其中的函數,但這種做法是不標準的。也不建議這樣做。以避免出現在其他IDE中無法編譯或執行的問題。)

標准函數

int getchar()//從標准輸入設備寫入一個字元

int putchar()//向標准輸出設備讀出一個字元

int scanf(char*format[,argument…])//從標准輸入設備讀入格式化後的數據

int printf(char*format[,argument…])//向標准輸出設備輸出格式化字元串

char* gets(char*string)//從標准輸入設備讀入一個字元串

int puts(char*string)//向標准輸出設備輸出一個字元串

int sprintf(char*string,char*format[,…])//把格式化的數據寫入某個字元串緩沖區。

⑶ !!!跪求C語言實現矩陣運算(加,減,乘、求逆、轉置)

#include<stdio.h>
#include<math.h>

void jiafa()
{
int m,n;
float a[20][20],b[20][20],c[20][20];
int i,j;

printf("請輸入矩陣行數:");
scanf("%d",&m);
printf("請輸入矩陣列數:");
scanf("%d",&n);

printf("請輸入第一個矩陣:");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%f",&a[i][j]);

printf("請輸入第二個矩陣:");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%f",&b[i][j]);

printf("矩陣相加的結果為:");
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
{
c[i][j]=a[i][j]+b[i][j];
printf("%4f ",c[i][j]);
}
printf("\n");
}
}

void jianfa()
{
int m,n;
float a[20][20],b[20][20],c[20][20];
int i,j;

printf("請輸入矩陣行數:");
scanf("%d",&m);
printf("請輸入矩陣列數:");
scanf("%d",&n);

printf("請輸入第一個矩陣:");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%f",&a[i][j]);

printf("請輸入第二個矩陣:");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%f",&b[i][j]);

printf("矩陣相減的結果為:");
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
{
c[i][j]=a[i][j]-b[i][j];
printf("%4f ",c[i][j]);
}
printf("\n");
}
}

void chengfa()
{
int m,n;
float s;
float a[20][20],b[20][20],c[20][20];
int i,j,k;

printf("請輸入矩陣行數:");
scanf("%d",&m);
printf("請輸入矩陣列數:");
scanf("%d",&n);

printf("請輸入第一個矩陣:");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%f",&a[i][j]);

printf("請輸入第二個矩陣:");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%4f",&b[i][j]);

for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
{
s=0;
for(k=0;k<n;k++)
{
s=s+a[i][k]*b[k][j];
c[i][j]=s;
}
}
}
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
{
printf("%4f ",c[i][j]);
}
printf("\n");
}
}

void zhuan()
{
int m,n;
float a[20][20],b[20][20];
int i,j;

printf("請輸入矩陣行數:");
scanf("%d",&m);
printf("請輸入矩陣列數:");
scanf("%d",&n);

printf("請輸入一個矩陣:");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%f",&a[i][j]);

for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
b[i][j]=a[j][i];
printf("%4f ",b[i][j]);
}
printf("\n");
}
}

void qiuni()
{
int N;
printf("輸入矩陣的階數N:\n");
scanf("%d",&N);
float a[10][10],b[10][20],c[10][10],t;
int i,j,m;
printf("請輸入行列式不為0的矩陣A(%d階):\n",N); //矩陣A的各元素存入二維數組a中。
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%f",&a[i][j]);
//增廣矩陣(A|E)存入二維數組b中
for(i=0;i<N;i++)
for(j=0;j<N;j++)
b[i][j]=a[i][j];

for(i=0;i<N;i++)
for(j=N;j<2*N;j++)
b[i][j]=0;

for(i=0;i<N;i++)
b[i][N+i]=1;

for(m=0;m<N;m++) //對每行進行處理。
{
t=b[m][m]; //預存b[m][m]。
i=m;
while(b[m][m]==0)
{
b[m][m]=b[i+1][m];
i++;
}

if(i>m)
{
b[i][m]=t; //實現交換。

//交換其它各列相應位置的元素
for(j=0;j<m;j++)
{
t=b[m][j];
b[m][j]=b[i][j];
b[i][j]=t;
}
for(j=m+1;j<2*N;j++)
{
t=b[m][j];
b[m][j]=b[i][j];
b[i][j]=t;
}

}

for(i=m+1;i<N;i++)
for(j=2*N-1;j>=m;j--)
b[i][j]-=b[i][m]*b[m][j]/b[m][m]; //m=0時,將第一行的-b[i][0]/b[0][0]倍加到以下各行。這樣以下每行第一個元素b[i][0]就為0。

for(j=2*N-1;j>=m;j--)
b[m][j]/=b[m][m]; //對第m行作行變換,同除以b[m][m],使b[m][m]為1。

}

printf("第一步變換後得到的增廣矩陣為:\n");
for(i=0;i<N;i++)
{
for(j=0;j<2*N;j++)
printf("%3.5f ",b[i][j]);
printf("\n"); //實現了:每個i對應一個換行。
}

m=N-1;
while(m>0)
{
for(i=0;i<m;i++)
for(j=2*N-1;j>=m;j--) //千萬注意,此處j必須遞減,否則b[i][m]先變為0,後面的計算就無效!
b[i][j]-=b[i][m]*b[m][j];
m--;
}

printf("最後得到的增廣矩陣為:\n");
for(i=0;i<N;i++)
{
for(j=0;j<2*N;j++)
printf("%3.5f ",b[i][j]);
printf("\n"); //實現了:每個i對應一個換行。
}

for(i=0;i<N;i++) //將逆矩陣存入二維數組c中。
for(j=0;j<N;j++)
c[i][j]=b[i][N+j];

printf("故逆矩陣為:\n");

for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%3.5f ",c[i][j]);
printf("\n"); //實現了:每個i對應一個換行。
}

}

main()
{
int w;
printf("1矩陣加法\n");
printf("2矩陣減法\n");
printf("3矩陣乘法\n");
printf("4矩陣轉置\n");
printf("5矩陣求逆\n");
printf("\n");
printf("請選擇要進行的運算:");
scanf("%d",&w);

switch(w)
{
case 1:jiafa();break;
case 2:jianfa();break;
case 3:chengfa();break;
case 4:zhuan();break;
case 5:qiuni();break;
}

return 0;
}

⑷ 用C語言的指針方法處理:寫一函數,將一個3*3的整形矩陣轉置

方型矩陣轉置比較簡單,對上三角或下三角做交換即可。

#include "stdio.h"

void Transpose(int (*matrix)[3])
{
int temp;
int i, j;

for(i=1;i<3;i++)/*轉置*/
{
for(j=0;j<i;j++)
{
temp = *(*(matrix+j)+i);
*(*(matrix+j)+i) = *(*(matrix+i)+j);
*(*(matrix+i)+j) = temp;
}
}
}

void main()
{
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
Transpose(a);
for(int i = 0;i<3;i++)
{
for(int j=0;j<3;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}

熱點內容
福利社源碼 發布:2025-05-08 17:37:03 瀏覽:618
c淘寶源碼 發布:2025-05-08 17:36:29 瀏覽:518
煉金演算法 發布:2025-05-08 17:30:37 瀏覽:817
醫保卡初始密碼怎麼查 發布:2025-05-08 17:24:56 瀏覽:197
wind資料庫學生版 發布:2025-05-08 17:01:38 瀏覽:899
衛生間密碼多少 發布:2025-05-08 16:59:14 瀏覽:513
薇服務中配置哪些東西 發布:2025-05-08 16:34:46 瀏覽:688
24台電腦伺服器 發布:2025-05-08 16:32:40 瀏覽:197
linux操作系統培訓 發布:2025-05-08 16:28:53 瀏覽:902
畢設計演算法 發布:2025-05-08 16:27:44 瀏覽:161