矩阵转置---c语言实现
问题描述:
编写一个程序,将一个3行3列的矩阵转置。
问题分析:
要解决该问题应该清楚什么是矩阵的转置。矩阵转置在数学上的定义为:设A为m x n阶矩阵(即m行n列)的矩阵,其第i行第j列的元素是a(i,j),即:
A=a(i,j)mxn
定义A的转置为这样一个nxm阶矩阵B,满足:
B=a(j,i)mxn
即b(i,j)=a(j,i)(B的第i行第j列元素是A的第j行第i列元素,记为A' = B)
假设有如下的矩阵A:
1 2 3
4 5 6
7 8 9
则经过转置后,即将矩阵的第i行变成了现在的第i列,则原来的矩阵A变为如下矩阵B:
1 4 7
2 5 8
3 6 9
算法设计:
解决矩阵问题时通常都是先将矩阵存放在一个二维数组中,而当矩阵发生变化时,二维数组中的对应元素也会发生变化。
以问题分析中提到的A矩阵为例,要实现A的转置,首先应将其存放在一个二维数组n中,该二维数组中的元素及其内容如表A所示。
n[0][0] n[0][1] n[0][2]
1 2 3
n[1][0] n[1][1] n[1][2]
4 5 6
n[2][0] n[2][1] n[2][2]
7 8 9
把A转置后,二维数组中元素的内容会发生变化。A转置后,二维数组n中的元素内容如表B所示。
n[0][0] n[0][1] n[0][2]
1 4 7
n[1][0] n[1][1] n[1][2]
2 5 8
n[2][0] n[2][1] n[2][2]
3 6 9
转置后矩阵主对角线上的数组元素n[0][0],n[1][1],n[2][2]的值并没有发生变化,只是位于对角线右上方的三个元素的值进行了交换。具体为:n[0][1]与n[1][0]进行了交换,n[0][2]与n[2][0]进行了交换,n[1][2]与进行了交换。
根据这个发现就可以来设计算法,在对一个3x3阶矩阵转置时,只需将主对角右上方的数组元素n[0][1],n[0][2],n[1][2],分别与对角线左下方的数组元素n[1][0],n[2][0],n[2][1]的值,通过一个临时变量进行交换即可,总共只要进行3次交换就可以实现矩阵的转置。
下列是完整的代码:
#include <stdio.h>
int mian()
{
int n[3][3] = {1,2,3,4,5,6,7,8,9};
int i,j,temp;
printf(" 原始矩阵:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d",n[i][j]);/*输出原始矩阵*/
printf("\n");
}
for(i=0;j<3;i++)
for(j=0;j<3;j++)
{
if(j>i)
{
/*将主对角线右上方的数组元素与主对角线左下方的数组元素进行单方向交换*/
temp = n[i][j];
n[i][j] = n[j][i];
n[j][i] = temp;
}
}
printf("转置矩阵:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d",n[i][j]);/*输出原始矩阵的转置矩阵*/
printf("\n");
}
return 0;
}
运行结果:
原始矩阵:
1 2 3
4 5 6
7 8 9
转置矩阵:
1 4 7
2 5 8
3 6 9
知识点补充:
已知有一个3x4的矩阵,要求编程求出其中值最大的那个元素所在的行号和列号及该元素的值。
显然,要解决这个问题必须要遍历矩阵中的每个元素,因此,程序的结构就是一个双重的for循环,在循环体中进行的就是矩阵元素的比较,找出最大元素。
下面是完整的代码:
#include <stdio.h>
int main()
{
int i,j,row = 0,column = 0,max;
inta[3][4] = {{2,7,3,6},{8,1,9,5},{10,4,2,5}};
max = a[0][0];/*设置max的初值*/
/*矩阵中每一个元素逐一与max进行比较*/
for(i=0;i<=2;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{
max = a[i][j];
row = i;
column = j;
}
printf("矩阵的最大值为:%d,其所在行为第%d行,所在列为第%d列\n",max,row,column);
return 0;
}
运行结果:
矩阵的最大值为:10,其所在行为第2行;所在列为第0列
此文章内容以及实例来源于《c语言学习app》,仅供学习/参考,谢谢共享
附宋词一首
作者:寇准
江南春
波渺渺,柳依依,孤村芳草远,斜日杏花飞。
江南春尽离肠断,蘋慢汀州人未归。
矩阵转置---c语言实现相关推荐
- c语言 矩阵转置_C语言中的矩阵转置
c语言 矩阵转置 Here is the program for transpose of matrix in C. 这是在C中转置矩阵的程序. We first read a matrix of s ...
- c++矩阵转置_C语言:数据结构-稀疏矩阵的压缩存储
(1)稀疏矩阵的特点 在一个m×n的矩阵中,设矩阵中有i个元素不为零,并令△=i/(m×n),称△为稀疏因子.通常当△≤0.05时.认为该矩阵为稀疏矩阵. 对这类矩阵实现压缩存储的基本思路是只需要存储 ...
- 老活新整——矩阵转置(C语言版矩阵转置)
#include <stdio.h> void reverse(int a[][4]); int main() {int a[3][4] = { {1,2,3,4},{5,6,7,8},{ ...
- C语言链表的转置算法,c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置.doc...
c语言编程集 数据结构 顺序表 点链表 数制转换 矩阵转置 #include "stdio.h" #include "malloc.h" /*typedef s ...
- C语言输出转置矩阵解题步骤,C语言实现矩阵转置
讲解对象:C语言实现矩阵转置 作者:融水公子 rsgz 1随机函数生成矩阵 #include #include #include int main(){ int i,j; int a[5][3]; p ...
- C语言 - 矩阵转置
C语言 - 矩阵转置 输入NM的矩阵,输出它的转置矩阵. Input 第一行为整数N,M(1≤N,M≤100). 接着是一个NM的矩阵. Output 转置矩阵. Example Input 2 3 ...
- c语言函数矩阵转置代码,C语言实现矩阵转置
讲解对象:C语言实现矩阵转置 作者:融水公子 rsgz 1随机函数生成矩阵 #include #include #include int main(){ int i,j; int a[5][3]; p ...
- c语言三元组稀疏矩阵的转置实验报告,稀疏矩阵三元组实现矩阵转置算法实验报告.doc...
稀疏矩阵三元组实现矩阵转置算法实验报告.doc 1实验三稀疏矩阵的三元组表示实现矩阵转置算法学院专业班学号姓名一.实习目的1掌握稀疏矩阵的三元组顺序表存储表示:2掌握稀疏矩阵三元组表示的传统转置算法的 ...
- 基于visual Studio2013解决C语言竞赛题之0705矩阵转置
题目 解决代码及点评 /* 5. 写一函数,将一个3×3的矩阵转置. */ #include <stdio.h> #include <stdlib.h>void main ...
- c语言学习-将一个2*3的矩阵转置为3*2的矩阵
将一个2x3的矩阵转置为3x2的矩阵 程序流程图: 代码: #include<stdio.h> void main() {int ch[2][3]={{1,2,3},{4,5,6}}; i ...
最新文章
- boost智能指针之shared_ptr,scoped_ptr,intrusive_ptr,weak_ptr源码简析
- drive数据集_英伟达的最强人脸GAN开源了,它吃的高清数据集也开源了
- Android编程获取手机型号,本机电话号码,sdk版本及firmware版本号(即系统版本号)...
- Oracle OCM 认证指南
- WeStrom自定义设置修改快捷键
- stackless python初体验
- pytorch Sampler
- 不要上网更新计算机系统的补丁程序,360安全卫士更新补丁后系统不能联网怎么办...
- 51与JDY31蓝牙模块通讯,51驱动JDY31蓝牙APP点灯
- VS2013编译eXosip2-5.0.0
- 重磅!程序员工资不会上涨的几个现象
- 闪电对计算机或网络设备的威胁,计算机网络的雷电防护_计算机网络
- 关于先有鸡还是先有蛋问题的科学的探讨
- 【xitongshoucang.com】vista登录界面在win 7系统中如何保留
- 反编译任何微信小程序,以及独立分包、插件的处理方式
- Android机顶盒开发工具小结
- 环球高斯PD-PN859电路板维修印刷机水墨控制板维修
- 2019福建高中计算机会考操作,2019年福建省普通高中学生学业基础会考.doc
- python3-多个装饰器的执行顺序
- 24v中间继电器怎么控制220v交流接触器