C - 反映二维阵列中的值

时间:2013-04-24 01:49:45

标签: c multidimensional-array

我在C中正在进行一项简短的任务时遇到了一些麻烦。我有一个二维数组看起来像这样:

0 5 5 5
0 0 5 5
0 0 0 5
0 0 0 0

我希望在对角线上反映5',所以它看起来像这样:

0 0 0 0
5 0 0 0
5 5 0 0
5 5 5 0

这就是我所拥有的:

//reflect the 5's
for(i = 0; i < arraySize; i++) {
    for (j = 0; j < arraySize; j++) {
        int temp = array[i][j];
        array[i][j] = array[j][i];
        array[j][i] = temp;
    }
}

它没有反映5,当我在这发生后打印出数组时,它看起来和我初始化的数组相同。我觉得这就是我应该这样做的,但我是否会这样做呢?感谢帮助。

4 个答案:

答案 0 :(得分:2)

交换数值时,你必须在循环中途停止,否则你会将它们交换回你开始的地方!

答案 1 :(得分:2)

正如我在评论中提到的那样,因为你在整个矩阵上进行迭代,你确实在反思,但当你走到对角线以下时,你就会将5反映回原来的位置。内环应该从i+1开始,这将使你保持在对角线之上:

for (j = i+1; j < arraySize; j++) {
         ^^^

答案 2 :(得分:1)

正如评论者指出的那样,当你在对角线下方迭代时,你会反思,撤消你刚才做的交换。

你的阵列总是正方形吗?如果是这样,这应该对你有用:

for(i = 0; i < arraySize; i++) {
    for (j = i+1; j < arraySize; j++) {

这是有效的,因为i也告诉我们对角线应该开始多远。我们添加+1,因为我们不需要交换对角线的中间值。

答案 3 :(得分:0)

通常:交换(a [i] [j],a [j] [i])j = i + 1..arrSize

//reflect the 5's
for(i = 0; i < arraySize; i++) {
    for (j = i+1; j < arraySize; j++) {
        int temp = array[i][j];
        array[i][j] = array[j][i];
        array[j][i] = temp;
    }
}