当前位置:首页 » 编程语言 » 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,然后下一步就可以开始编写处理转置的部分了: