當前位置:首頁 » 編程語言 » c語言編程33矩陣的轉置
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言編程33矩陣的轉置

發布時間: 2022-09-22 16:01:33

c語言程序設計3行3列矩陣轉置

第一個 內循環條件是j<3
也就是對每個元素都會做一次交換。
舉個例子,對於a[0][2] 會和a[2][0]交換, 這個是正確的,轉置的目的正是如此。
但運行到i=2 j=0 a[2][0]又和a[0][2]交換了一次, 導致實際上矩陣沒變。
而第二個就是正確做法, 將左下部分 和右上部分交換。 雙重循環遍歷的是左下部分元素。 而沒有涉及右上。

Ⅱ C語言、用指針方法實現一個3*3矩陣的轉置

#include&lt;iostream&gt;

#include&lt;iomanip&gt;

using namespace std;

int main()

{

void move(int*pointer);//函數聲明

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

int*p;

cout&lt;&lt;"請輸入矩陣元素:"&lt;&lt;endl;

for(i=0;i&lt;3;i++)//輸入數組

{

for(j=0;j&lt;3;j++)

{

cin&gt;&gt;a&lt;i&gt;[j];

}

}

cout&lt;&lt;"輸出原矩陣:"&lt;&lt;endl;//輸出矩陣

for(i=0;i&lt;3;i++)

{

for(j=0;j&lt;3;j++)

{

cout&lt;&lt;setw(5)&lt;&lt;a&lt;i&gt;[j];

}

cout&lt;&lt;endl;

}

p=&a[0][0];//將數組首元素賦給指針變數p

move(p);//函數調用

cout&lt;&lt;"處理後的矩陣:"&lt;&lt;endl;

for(i=0;i&lt;3;i++)//輸出處理後的矩陣

{

for(j=0;j&lt;3;j++)

{

cout&lt;&lt;setw(5)&lt;&lt;a&lt;i&gt;[j];

}

cout&lt;&lt;endl;

}

return 0;

}

//交換函數

void move(int*pointer)

{

int i,j,t;

for(i=0;i&lt;3;i++)

{

for(j=i;j&lt;3;j++)

{

t=*(pointer+3*i+j);//這是關鍵將矩陣轉置的條件

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

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

}

}

}



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

用函數

#include&lt;stdio.h&gt;

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&lt;3;i++)

{

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

}

move(p);

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

for(i=0;i&lt;3;i++)

{

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

}

return 0;

}

void move(int*s)

{

int i,j,t;

for(i=0;i&lt;3;i++)

{

for(j=i;j&lt;3;j++)

{

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

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

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

}

}

}

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

#include&lt;stdio.h&gt;

int main()

{

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

for(i=*a;i&lt;*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&lt;3;i++)

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

{

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

}

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

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

}

(3)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&lt;10;i++)

{

Console.WriteLine(i);

Console.ReadLine();

}

}

例子2:

static void Main(string[]args)

{

int i=0;

for(;i&lt;10;i++)

{

Console.WriteLine(i);

Console.ReadLine();

}

}

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

Pascal語言中的for循環

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

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

(1)遞增型for語句格式

for&lt;循環變數&gt;:=&lt;初值&gt;to&lt;終值&gt;do&lt;語句&gt;;

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

for&lt;循環變數&gt;:=&lt;初值&gt;downto&lt;終值&gt;do&lt;語句&gt;;

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

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

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

Ⅳ 3*3矩陣轉置 C語言 數組

思路:定了兩個二維數組分別存儲轉置前後的矩陣,接著for循環依次轉置即可。

//參考代碼

#include<stdio.h>
intmain()
{
inta[3][3]={{1,2,3},{4,5,6},{7,8,9}},b[3][3];
inti,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
b[j][i]=a[i][j];
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%2d",b[i][j]);
printf(" ");
}
return0;
}
/*
運行結果:
147
258
369
*/

Ⅳ 用c語言將一個3*3的整形矩陣轉置,不用指針方法(最基礎的方法)。急

樓主請等會,馬上好,在幫你編寫源代碼。

終於寫好了,以下是代碼:

// 用c語言將一個3*3的整形矩陣轉置,
#include<stdio.h>
void main()
{int a[3][3];
int b[3][3];
int i,j,t=0;
printf("請輸入原矩陣的9個元素");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{++t;
scanf("%d",&a[i][j]);
if(t%3==0)
{
printf(" ");
}

}//初始化矩陣;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
b[j][i]=a[i][j];
printf(" ");
printf("轉制後的矩陣為: ");
t=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
++t;
printf(" %d ",b[i][j]);
if(t%3==0)
printf(" ");
}
printf("謝謝使用************************************ ");
}

這是我運行的結果:

Ⅵ C語言,求3×3矩陣的轉置矩陣(在自身進行轉置)

#include<stdio.h>

int main()

{

int a1,b1;

int a[3][3];

int i,j;

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

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

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

printf("矩陣為 ");

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

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

{

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

if(j==2)

printf(" ");

}

printf(" ");

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

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

{

a1=a[i][j];

b1=a[j][i];

a[i][j]=b1;

a[j][i]=a1;

}

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

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

{

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


if(j==2)

printf(" ");

}

return 0;

}

Ⅶ c語言編程編寫程序實現矩陣(3行3列)的轉置(即行列互換),將轉置後的數組寫到out指針

#include<iostream.h>
void main()
{
int a[3][3],b[3][3];
int p=0;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
cin>>a[i][j];
b[j][i]=a[i][j];
}
}
cout<<"原矩陣為:"<<endl;
for(int m=0;m<3;m++)
{
for(int n=0;n<3;n++)
{
cout<<a[m][n]<<" ";
p++;
if(p%3==0)
cout<<endl;

}
}
cout<<endl;
cout<<"轉置後的矩陣為:"<<endl;
for(int c=0;c<3;c++)
{
for(int d=0;d<3;d++)
{
cout<<b[c][d]<<" ";
p++;
if(p%3==0)
cout<<endl;

}
}
}

Ⅷ C語言入門,將一個3 X 3矩陣轉置,求助!

你move()里的第三個句子寫錯了!!
temp=*(p+3*j+i);
*(p+3*j+i)=*(p+3*i+j);
*(p+3*j+i)=temp;
最後一個應該是:
*(p+3*i+j)=temp;
你的句子根本沒改。
最主要的問題是,你交換了兩次,又給換回來了
i=0,j=1時,a[0][1]跟a[1][0]交換
i=1,j=0時,a[1][0]跟a[0][1]交換
。。。
又換回來了
move()裡面應該改成:
for(i=0;i<3;i++)
for(j=0;j<i;j++)
{
temp=*(p+3*j+i);
*(p+3*j+i)=*(p+3*i+j);
*(p+3*i+j)=temp;
}

我剛剛寫錯了;
應該是:
for(i=0;i<3;i++)
for(j=0;j<i;j++)
輸出是:
Input the matrix:
0 1 2
3 4 5
6 7 8
The new matrix is:
0 3 6
1 4 7
2 5 8

Ⅸ C語言編程:求3*3矩陣的轉置矩陣

思路:定了兩個二維數組分別存儲轉置前後的矩陣,接著for循環依次轉置即可。
//參考代碼
#include<stdio.h>
int main()
{
int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},b[3][3];
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
b[j][i]=a[i][j];
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%2d ",b[i][j]);
printf("\n");
}
return 0;
}
/*
運行結果:
1 4 7
2 5 8
3 6 9
*/

Ⅹ C++題目: 寫一個函數將一個3*3的整型矩陣轉置。

1、首先在編輯器中准備好一個空白的c語言文件,引入C語言標准庫,在main函數中定義一個3x3階矩陣以及循環體中要用的變數i和j,以及一個用來交換數據的臨時變數tmp,然後下一步就可以開始編寫處理轉置的部分了: