c语言33矩阵转置矩阵
⑴ 将一个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");
}
}