C语言学习记录——矩阵转换(定义一个数组实现或定义两个数组实现)

简介: C语言学习记录——矩阵转换(定义一个数组实现或定义两个数组实现)

题目要求

有一个2 × 3的矩阵,将之转置为3 × 2的矩阵,并显示出这个转置后的矩阵。

如:

 

转置后:

先用两个数组的方法解决一下题目

代码(定义两个数组)

#include <stdio.h>
int main()
{
  //根据题目要求,建立两个二维数组
  //arr存储转置前的矩阵,num存储转置后的矩阵
 
  int arr[2][3] = { {1,2,3},{4,5,6} };
  int num[3][2];
 
  //row-行号下标,col-列号下标
 
  int row, col;
 
  //将原来的矩阵打印出来
  printf("2*3:\n");
  for (row = 0; row < 2; row++)
  {
    for (col = 0; col < 3; col++)
    {
      printf("%2d", arr[row][col]);
    }
    printf("\n");
  }
  
  //将转置的矩阵存进数组num
 
  for (row = 0; row < 3; row++)
  {
    for (col = 0; col < 2; col++)
    {
      num[row][col] = arr[col][row];
    }
  }
 
  //打印出新的矩阵
  printf("3*2:\n");
  for (row = 0; row < 3; row++)
  {
    for (col = 0; col < 2; col++)
    {
      printf("%2d", num[row][col]);
    }
    printf("\n");
  }
  return 0;
}

运行结果图(定义两个数组)

接下来再用一个数组的方法解决一下题目

代码(定义一个数组

#include <stdio.h>
int main()
{
  //因为原矩阵为2*3,新矩阵为3*2,总共要占用3行3列
  //故建立数组时,定义为arr[3][3],防止出现数组越界的情况
 
  int arr[3][3] = { {1,2,3},{4,5,6},{0,0,0} };
  int row,col;
 
  printf("2*3:\n");
  for(row = 0; row < 2; row++)
  {
    for (col = 0; col < 3; col++)
    {
      printf("%2d", arr[row][col]);
    }
    printf("\n");
  }
 
  printf("3*2:\n");
  for (col = 0; col < 3; col++)
  {
    for (row = 0; row < 2; row++)
    {
      printf("%2d", arr[row][col]);
    }
    printf("\n");
  }
  return 0;
}

运行结果图(定义一个数组)

简易思路图解

小结

题目的关键点在于理解二维数组的下标,并且熟悉了解二维数组的行和列。

使用数组的时候更要注意数组越界的问题,如果出现了数组越界,打印出来的值将是不确定值。

目录
相关文章
|
1月前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
155 14
|
1月前
|
传感器 算法 安全
【C语言】两个数组比较详解
比较两个数组在C语言中有多种实现方法,选择合适的方法取决于具体的应用场景和性能要求。从逐元素比较到使用`memcmp`函数,再到指针优化,每种方法都有其优点和适用范围。在嵌入式系统中,考虑性能和资源限制尤为重要。通过合理选择和优化,可以有效提高程序的运行效率和可靠性。
121 6
|
1月前
|
C语言
【C语言】全局搜索变量却找不到定义?原来是因为宏!
使用条件编译和 `extern` 来管理全局变量的定义和声明是一种有效的技术,但应谨慎使用。在可能的情况下,应该优先考虑使用局部变量、函数参数和返回值、静态变量或者更高级的封装技术(如结构体和类)来减少全局变量的使用。
41 5
|
1月前
|
编译器 C语言
【C语言】宏定义在 a.c 中定义,如何在 b.c 中使用?
通过将宏定义放在头文件 `macros.h` 中,并在多个源文件中包含该头文件,我们能够在多个文件中共享宏定义。这种方法不仅提高了代码的重用性和一致性,还简化了维护和管理工作。本文通过具体示例展示了如何定义和使用宏定义,帮助读者更好地理解和应用宏定义的机制。
55 2
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
79 5
|
2月前
|
存储 算法 C语言
C语言中常见的字符串处理技巧,包括字符串的定义、初始化、输入输出、长度计算、比较、查找与替换、拼接、截取、转换、遍历及注意事项
本文深入探讨了C语言中常见的字符串处理技巧,包括字符串的定义、初始化、输入输出、长度计算、比较、查找与替换、拼接、截取、转换、遍历及注意事项,并通过案例分析展示了实际应用,旨在帮助读者提高编程效率和代码质量。
139 4
|
2月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
2月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
2月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
2月前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
65 4