夜蚀天 发表于 2021-11-24 16:52:19

求助

#include<stdio.h>
int main()
{
        int a = { {1,2,3},{4,5,6},{7,8,9} }, i, j, b ;
        int change(int x,int y);
        for (j = 0; j < 3; j++)
        {
                for (i = 0; i < 3; i++)
                        printf("%d ",change(a,b));
        }
        return 0;
}
int change(int x[],int y[] )
{
        int i, j;
        for (j = 0; j < 3; j++)
        {
                for (i = 0; i < 3; i++)
                        y = x;
                return y;
        }
}
要将数组行列互换,为什么这个代码输出奇怪的数

jackz007 发表于 2021-11-24 17:15:48

         行列互换是什么意思,矩阵左转右转 90 度?

夜蚀天 发表于 2021-11-24 17:23:53

jackz007 发表于 2021-11-24 17:15
行列互换是什么意思,矩阵左转右转 90 度?

就是a变成a

夜蚀天 发表于 2021-11-24 17:24:37

jackz007 发表于 2021-11-24 17:15
行列互换是什么意思,矩阵左转右转 90 度?

a 变成a

夜蚀天 发表于 2021-11-24 17:25:29

jackz007 发表于 2021-11-24 17:15
行列互换是什么意思,矩阵左转右转 90 度?

jackz007 发表于 2021-11-24 17:38:05

本帖最后由 jackz007 于 2021-11-24 17:51 编辑

#include <stdio.h>

void show(int d[])
{
      int i , j                                                                               ;
      for(i = 0 ; i < 3 ; i ++) {
                printf("%d" , d)                                                          ;
                for(j = 1 ; j < 3 ; j ++) printf(" , %d" , d)                           ;
                printf("\n")                                                                  ;
      }
}

int main(void)
{
      int a = {{1,2,3},{4,5,6},{7,8,9}} , b , c , i , j                     ;
      for(i = 0 ; i < 3 ; i ++) for(j = 0 ; j < 3 ; j ++) b = c = a ;
      show(a)                                                                                 ;
      printf("\n")                                                                            ;
      show(b)                                                                                 ;
      printf("\n")                                                                            ;
      show(c)                                                                                 ;
}
      编译、运行实况:
D:\0002.Exercise\C>g++ -o x x.c

D:\0002.Exercise\C>x
1 , 2 , 3
4 , 5 , 6
7 , 8 , 9

3 , 6 , 9
2 , 5 , 8
1 , 4 , 7

7 , 4 , 1
8 , 5 , 2
9 , 6 , 3

D:\0002.Exercise\C>

傻眼貓咪 发表于 2021-11-24 18:19:04

楼主要的函数应该是互换位置而不是打印吧?

傻眼貓咪 发表于 2021-11-24 18:50:09

本帖最后由 傻眼貓咪 于 2021-11-24 18:53 编辑

代码:#include <stdio.h>

/*函数:行列交换*/
void exchange(int row, int col, int arr){
    for(size_t i = 0; i < row; i++){
      for(size_t j = i+1; j < col; j++){
            arr ^= arr;
            arr ^= arr;
            arr ^= arr;
      }
    }
}

int main()
{
    /*样例矩阵*/
    int arr = {
      {1, 2, 3},
      {4, 5, 6},
      {7, 8, 9}};
   
    /*输出初始矩阵*/
    printf("输入:\n");
    for(size_t i = 0; i < 3; i++){
      for(size_t j = 0; j < 3; j++) printf("%d ", arr);
      printf("\n");
    }   
   
    /*调用函数*/
    exchange(3, 3, arr);
   
    /*输出改变后的矩阵*/
    printf("\n输出:\n");
    for(size_t i = 0; i < 3; i++){
      for(size_t j = 0; j < 3; j++) printf("%d ", arr);
      printf("\n");
    }

    return 0;
}输出:输入:
1 2 3
4 5 6
7 8 9

输出:
1 4 7
2 5 8
3 6 9 注:行列交换和 90 度旋转矩阵结果完全不同

夜蚀天 发表于 2021-11-24 20:58:40

傻眼貓咪 发表于 2021-11-24 18:50
代码:输出:注:行列交换和 90 度旋转矩阵结果完全不同

arr ^= arr;
            arr ^= arr;
            arr ^= arr;
这个是什么意思啊

傻眼貓咪 发表于 2021-11-25 18:15:04

本帖最后由 傻眼貓咪 于 2021-11-25 18:17 编辑

夜蚀天 发表于 2021-11-24 20:58
arr ^= arr;
            arr ^= arr;
            arr ^= arr;

意思是 arr 变成 arr,arr 变成 arr

一般会用变量,如:
int temp;
temp = arr;
arr = arr;
arr = temp;

而我的代码精简化,直接用位元运算符,直接换便可。

a^a^b = b
a^0 = a

举例:
int a = 13, b = 5;
a ^= b;
b ^= a;
a ^= b;
// 最终会变成 a = 5, b = 13(两者交换)

夜蚀天 发表于 2021-11-25 20:54:37

傻眼貓咪 发表于 2021-11-25 18:15


了解
页: [1]
查看完整版本: 求助