C语言 矩阵变换编程

C语言 矩阵变换编程,第1张

for(i)循环的i是相同数据组成的矩形框的层号。

for(j)循环的j是矩形框顶行和底行的列号(i列到N - 1 - i列)。该循环显然是填写行的。

for(k)循环的k是矩形框左列和右列的行号(i行到N - 1 - i行)。该循环显然是填写列的。

看看代码:

for(i = 0 i < N ++i)

    for(j = 0 j < N ++j

        a[i][j] = N * i + j

每一个i都对应N个j(0 -- N - 1),i是行索引,j是列索引,显然是按行 *** 作

for(i = 0 i < N ++i)

    for(j = 0 j < 迅宽N ++j

        a[j][i] = N * i + j

每一个i都对应N个j(0 -- N - 1),j是行索引,i是列索引,显然是按列 *** 作的

从以上分析可知,二维数组的两个索引的变化方姿昌此式的不同,决定了 *** 作方式的不同。第一维(左边的索引)一次变化对应第二维多次变化时,就是按行 *** 作,相反,第一维(左边的索引)多迹迅次次变化对应第二维一次变化时,就是按列 *** 作。

二维数组的第一维(就是后面一个[])作为行,第二维(就是前面一个[])作为列,这是一种惯用理解方式。你的理解恰好把行和列反了一下。

这种理解方式也不是没有原因的,一维数组我们叫一敏陪行,可以用元素指针桥宽蠢自增自减的方式遍历整个行,但我们不能用巧睁元素指针自增自减来遍历二维数组的整个列。

给你分析下。。。。为什么前面已经换了,但后面输出却没换过来?原因很简单。。你做了两次交换。。。

例如,当i=1,j=3时,你信逗把t[1][3]与t[3][1]做了一次交换,等程序运行到i=3,j=1时,你是不是对t[3][1]与t[1][3]又做了一次交换??

考虑下吧。。。呵呵。。。进行了两次交换,所有工作都白做了。。。

解决滑源卖办法是:再定义一个二维数组来存放交换后裂衫的值。。。。

#include<iostream>

using namespace std

main()

{

int t[3][3]={{1,2,3},{4,5,6},{7,8,9}},i,j

int str[3][3]

for(i=0i<3i++)

for(j=0j<3j++)

{ //cout<<"i shi :"<<i<<"j shi :"<<j<<" "<<t[i][j]

str[j][i]=t[i][j]

//cout<<"现在是"<<t[i][j]<<endl

}

for(i=0i<3i++)

{ for(j=0j<3j++)

{cout<<str[i][j]}

cout<<endl

}

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8193693.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存