C语言每日一练
2021年9月20日

题目描述

求一个矩阵的转置

分析

在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。

把m×n矩阵A的行换成同序数的列得到一个n×m矩阵,此矩阵叫做A的转置矩阵。

代码实现上:由于转置不会影响二维数组中一维下标和二维下标相同的元素,所以,这些元素的连线就是转置的对称轴。实现转置,只需对对称轴一侧的元素执行替换操作,如果对矩阵每个元素都进行操作,则会让每个元素替换两次,导致矩阵“转置”后不发生变化。

代码实现

由于要保证转置后的二位数组不越界,所以下面的代码只考虑方阵(即矩阵行数和列数相等)。

#include <stdio.h>int main()
{int N = 0; //矩阵行数和矩阵列数int i = 0;int j = 0;int tmp = 0;/* 获取矩阵行数M和列数N */printf("请输入矩阵的行数(列数)\n");scanf("%d", &N);int matrix[N][N];/* 获取矩阵元素 */for(i = 0; i< N; i++){printf("请输入矩阵第%d行元素\n", i);for(j = 0; j < N; j++){scanf("%d", &matrix[i][j]);}}/* 打印矩阵 */printf("输入的矩阵为:\n");for(i = 0; i < N; i++){for(j = 0; j < N; j++){printf("%d\t", matrix[i][j]);}printf("\n");}/* 矩阵转置 */for(i = 0; i< N; i++){for(j = i + 1; j < N; j++) //只对转置对称线右边的元素操作{tmp = matrix[i][j];matrix[i][j] = matrix[j][i];matrix[j][i] = tmp;}}/* 打印矩阵的转置 */printf("矩阵转置:\n");for(i = 0; i < N; i++){for(j = 0; j < N; j++){printf("%d\t", matrix[i][j]);}printf("\n");}return 0;
}

运行结果


错误版本

这是以前的错误版本,如果使用行数列数不同的矩阵数组,那么应该另外定义一个新的数组存放转置后的矩阵,不然会出现数组越界问题。

#include <stdio.h>int main()
{int M = 0; //矩阵行数int N = 0; //矩阵列数int i = 0;int j = 0;int tmp = 0;/* 获取矩阵行数M和列数N */printf("请输入矩阵的行数和列数\n");scanf("%d%d", &M, &N);int matrix[M][N];/* 获取矩阵元素 */for(i = 0; i< M; i++){printf("请输入矩阵第%d行元素\n", i);for(j = 0; j < N; j++){scanf("%d", &matrix[i][j]);}}/* 打印矩阵 */printf("输入的矩阵为:\n");for(i = 0; i < M; i++){for(j = 0; j < N; j++){printf("%d\t", matrix[i][j]);printf("%p\t", &matrix[i][j]);}printf("\n");}/* 矩阵转置 */for(i = 0; i< M; i++){for(j = i + 1; j < N; j++) //只对转置对称线右边的元素操作{tmp = matrix[i][j];matrix[i][j] = matrix[j][i];matrix[j][i] = tmp;}}/* 打印矩阵的转置 */printf("矩阵转置:\n");for(i = 0; i < N; i++){for(j = 0; j < M; j++){printf("%d\t", matrix[i][j]);printf("%p\t", &matrix[i][j]);}printf("\n");}return 0;
}

运行结果

转置后数组越界了-----matrix[2][x]是非法空间
原数组最大空间地址为0x0060FE40,转置后,变成了0060FE48(越界了8Byte,实际上是12Byte,因为matrix的宽度为3个整型空间,即12Byte)

C语言每日一练——第12天:求一个矩阵的转置相关推荐

  1. C语言每日一练——第85天:三色球问题

    C语言每日一练 2022年3月8日 文章目录 题目描述 问题分析 代码实现 运行结果 网上参考 题目描述 一个口袋中放有12个球,已知其中3个是红的,3个是白的,6个是黑的,现从中任取8个,问共有多少 ...

  2. C语言每日一练——第64天:自动发牌程序

    C语言每日一练 2021年12月7日 文章目录 题目描述 问题分析 代码实现 运行结果 网上参考 题目描述 一副扑克有52张牌,打桥牌时应将牌分给4个人.请设计一个程序完成自动发牌的工作.要求:黑桃用 ...

  3. C语言每日一练——第67天:谁在说谎问题

    C语言每日一练 2021年12月12日 文章目录 题目描述 问题分析 代码实现 运行结果 网上参考 题目描述 现有张三.李四和王五3个人,张三说李四在说谎,李四说王五在说谎,而王五说张三和李四两人都在 ...

  4. C语言每日一练——第79天:高次方数的尾数

    C语言每日一练 2022年1月27日 文章目录 题目描述 问题分析 代码实现 运行结果 题目描述 求13的13次方的最后三位数 问题分析 根据乘法竖式计算我们可以发现,要得到乘法结果的后三位,只需要用 ...

  5. C语言每日一练——第86天:出售金鱼问题

    C语言每日一练 2022年3月12日 文章目录 题目描述 问题分析 代码实现 运行结果 网上参考 题目描述 小明将养的一缸金鱼分5次出售:第1次卖出全部的一半加1/2条:第2次卖出余下的三分之一加1/ ...

  6. C语言每日一练——第63天:狼追兔子问题

    C语言每日一练 2021年12月2日 文章目录 题目描述 问题分析 代码实现 运行结果 网上参考 题目描述 一只兔子躲进了10个环形分布的洞中的一个.狼在第一个洞中没有找到兔子,就隔一个洞,到第3个洞 ...

  7. 6 获取数组中最小值_C语言每日一练8——数组中最大值和最小值

    题目: 利用指针函数,求某数组中的最大值和最小值. 实现代码: /* ================================================================= ...

  8. C语言每日一练——第73天:谁是窃贼问题

    C语言每日一练 202年1月8日 文章目录 题目描述 问题分析 代码实现 运行结果 网上参考 题目描述 警察审问4名窃贼嫌疑犯.现在已知,这4人当中仅有一名是窃贼,还知道这4个人中的每个人要么是诚实的 ...

  9. C语言每日一练——第35天:打印菱形

    C语言每日一练 2021年10月13日 题目描述 输入菱形的高度n(必须为奇数),即正中间星号的个数,打印出用星号组成的菱形 分析 要打印菱形,先要构想要打印的图形样子,就比如下图这种: 我们可以根据 ...

  10. C语言每日一练——第28天:要求输出国际象棋棋盘

    C语言每日一练 2021年10月6日 题目描述 要求输出国际象棋棋盘 分析 先看看国际象棋的棋盘的长相: 可以看出,国际象棋棋盘呈正方形,里面包含8x8总共64个小方格,它们黑白相间.要想在控制台输出 ...

最新文章

  1. dos模式下切换电脑用户
  2. Leetcode 25 K个一组翻转链表 (每日一题 20210719)
  3. Hyperledger Fabric 超级账本 Java 开发区块链环境构建
  4. 肝!Python 网络编程
  5. python线程与进程
  6. 音视频技术开发周刊 | 231
  7. 精妙SQL语句收集(转)
  8. php遍历子分类的函数,emlog程序获取主分类下的所有子分类ID函数
  9. Android获取CPU信息(CPU名字和主频)
  10. 麦马计算机专业对化学的要求,2018麦克马斯特大学最新入学要求+热门专业全解析...
  11. 一个应用程序中最多只能有一个窗口java_在Windows 中,同时显示多个应用程序窗口的正确方法是 ______ 。_学小易找答案...
  12. mapinfo在线地图插件_官方插件“战争游戏”使用指南 公测同步开启
  13. 阿尔派X09电脑调音软件 DSP调音软件下载
  14. 通信原理大作业--基于MATLAB的数字通信系统仿真设计
  15. VB.net 进度条使用
  16. Linux的加密和安全
  17. 并发请求:统计数据收集模式
  18. 谷歌微软服务器容量价格,云价格大比拼:谷歌 vs AWS vs 微软Azure
  19. 全宇宙最强AI 聊天机器人模型ChatGPT惊艳来袭,你还不上车?居然能写演讲稿和帮忙写代码
  20. 学计算机女生考研什么专业好就业,适合女生考研易就业的十大专业有哪些

热门文章

  1. 基于单片机的超市储物柜设计_智能储物柜开题报告.docx
  2. 大数据多样性体现在包括_微生物组16S测序又有大动作!升级至NovaSeq PE250,数据量免费升至5万Tags...
  3. 机械革命笔记本开关键盘亮度
  4. C++ 使用Intel Media SDK 实现H.264硬编码
  5. xp系统打印机服务器报错,互联网要点:Win7系统连接XP共享打印机报错0X000004如何解决...
  6. 北京亚控笔试题目(2014年10月9日)
  7. 各种电脑/软件/生活/音乐/动漫/电影技巧汇总,你肯定能发现你需要的使用技巧,你的生活绝对会因此简化很多,具体操作见本专栏相关文章或点击链接
  8. 三位数码管电路设计实验
  9. “33岁,阿里程序员,税后年薪170万,我征婚有要求,有错吗?”
  10. 正睿(比赛--Day10)