求助
#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;
}
}
要将数组行列互换,为什么这个代码输出奇怪的数 行列互换是什么意思,矩阵左转右转 90 度? jackz007 发表于 2021-11-24 17:15
行列互换是什么意思,矩阵左转右转 90 度?
就是a变成a jackz007 发表于 2021-11-24 17:15
行列互换是什么意思,矩阵左转右转 90 度?
a 变成a jackz007 发表于 2021-11-24 17:15
行列互换是什么意思,矩阵左转右转 90 度?
对 本帖最后由 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: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 18:50
代码:输出:注:行列交换和 90 度旋转矩阵结果完全不同
arr ^= arr;
arr ^= arr;
arr ^= arr;
这个是什么意思啊 本帖最后由 傻眼貓咪 于 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 18:15
了解
页:
[1]