Ⅰ 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<iostream>
#include<iomanip>
using namespace std;
int main()
{
void move(int*pointer);//函數聲明
int a[3][3],i,j;
int*p;
cout<<"請輸入矩陣元素:"<<endl;
for(i=0;i<3;i++)//輸入數組
{
for(j=0;j<3;j++)
{
cin>>a<i>[j];
}
}
cout<<"輸出原矩陣:"<<endl;//輸出矩陣
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
cout<<setw(5)<<a<i>[j];
}
cout<<endl;
}
p=&a[0][0];//將數組首元素賦給指針變數p
move(p);//函數調用
cout<<"處理後的矩陣:"<<endl;
for(i=0;i<3;i++)//輸出處理後的矩陣
{
for(j=0;j<3;j++)
{
cout<<setw(5)<<a<i>[j];
}
cout<<endl;
}
return 0;
}
//交換函數
void move(int*pointer)
{
int i,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;
}
}
}
(2)c語言編程33矩陣的轉置擴展閱讀:
用函數
#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;
}
}
}
Ⅲ 將一個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++));//輸出轉置矩陣
}
(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<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,「循環變數"則從「初值"開始逐一遞減到「終值",每次執行一次循環體語句。
Ⅳ 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,然後下一步就可以開始編寫處理轉置的部分了: