c语言行列的互换及常见的错误类型

简介: c语言行列的互换及常见的错误类型

c语言行列的互换

正确代码

#include<stdio.h>
void main()
{
  int a[2][3] = { {1,2,3},{4,5,6} }, i, j, b[3][2];
  for (i = 0; i < 2; i++)
  {
    for(j=0;j<3;j++)
    b[j][i] = a[i][j];
  }
  for (i = 0; i < 2; i++)
  {
    for (j = 0; j < 3; j++)
    {
      printf("%d ", b[i][j]);
    }
    printf("\n");
  }
}

输出结果

1 4 2
2 5 3

注意点:一定是将互换后的数组元素重新放在一个数组中,而不是互换直接打印。

错误代码1

#include<stdio.h>
void main()
{
  int a[2][3] = { {1,2,3},{4,5,6} }, i, j, b[3][2];
  for (i = 0, j = 0; i < 3, j < 3; i++, j++)
  {
    b[j][i] = a[i][j];
  }
  for (i = 0, j = 0; i < 3, j < 3; i++, j++)
  {
    printf("%d", b[i][j]);
    if(i==j)
      printf('\n');
  }
}
1

这种错误的点在于将双层循环改编成了单层,看似代码简短了不少,但实则逻辑已经发生了改变。

错误在于:变量i和j都是同时循环的,那么只能遍历到i,j下标相等的数组元素,所以一定不要犯这个错误哦。


错误代码2

#include<stdio.h>
void main()
{
  int a[2][3] = { {1,2,3},{4,5,6} }, i, j, b[3][2];
  for (i = 0; i < 2; i++)
  {
    for (j = 0; j < 3; j++)
      b[i][j] = a[j][i];
  }
  for (i = 0; i < 2; i++)
  {
    for (j = 0; j < 3; j++)
    {
      printf("%d ", b[i][j]);
    }
    printf("\n");
  }
}


这种错误的点在于b[i][j]=a[j][i]这一行的代码,看似也是实现行列之间的交换了,但是它也产生了巨大的逻辑错误,那么其错误点就在于,我们的外层循环是对行进行遍历,而a[j][i]表达的是对一列进行遍历。


修改代码如下所示

#include<stdio.h>
void main()
{
  int a[2][3] = { {1,2,3},{4,5,6} }, i, j, b[3][2];
  for (j = 0; j < 2; j++)
  {
    for (i= 0; i < 3; i++)
      b[i][j] = a[j][i];
  }
  for (i = 0; i < 2; i++)
  {
    for (j = 0; j < 3; j++)
    {
      printf("%d ", b[i][j]);
    }
    printf("\n");
  }
}


1 4 2
2 5 3

修改后就可以正常的运行了。

对于下面输出打印b数组的元素也类比于此。

相关文章
|
6月前
|
存储 数据处理 C语言
C语言类型的变量
C语言类型的变量
54 1
|
6月前
|
存储 编译器 C语言
【C语言】判断字符类型的三种方法
【C语言】判断字符类型的三种方法
428 0
|
6月前
|
存储 C语言
C语言变量类型
C语言变量类型
|
1月前
|
存储 编译器 C语言
C语言:数组名作为类型、作为地址、对数组名取地址的区别
在C语言中,数组名可以作为类型、地址和取地址使用。数组名本身代表数组的首地址,作为地址时可以直接使用;作为类型时,用于声明指针或函数参数;取地址时,使用取地址符 (&),得到的是整个数组的地址,类型为指向该类型的指针。
|
1月前
|
C语言 C++
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
【C语言】指针篇-一篇搞定不同类型指针变量-必读指南(3/5)
|
1月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
19 0
|
2月前
|
存储 缓存 程序员
c语言的存储类型-存储类
本文详细介绍了C语言中的存储类型及其分类,包括基本类型(如整型、浮点型)和复合类型(如数组、结构体)。重点讲解了不同存储类别(`auto`、`static`、`register`、`extern`、`typedef`、`volatile`、`const`)的特点及应用场景,并展示了C11/C99引入的新关键字(如`_Alignas`、`_Atomic`等)。通过示例代码解释了每个存储类别的具体用法,帮助读者更好地理解和运用这些概念。
|
3月前
|
存储 自然语言处理 编译器
C语言中的char类型
C语言中的char类型
238 1
|
3月前
|
算法 编译器 API
C语言中的longdouble类型
C语言中的longdouble类型
|
5月前
|
存储 编译器 C语言
C语言学习记录——数据的存储(数据类型、类型的基本归类、整型在内存中的存储、大小端介绍、浮点型在内存中的存储)一
C语言学习记录——数据的存储(数据类型、类型的基本归类、整型在内存中的存储、大小端介绍、浮点型在内存中的存储)一
58 2