gpt4 book ai didi

c - 在 C 中交换方矩阵名称

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:52 25 4
gpt4 key购买 nike

我一直在寻找一种方法来交换 C 中两个矩阵之间的名称。我有 2 个正方形大小 x 大小的矩阵。我对其中一个做了一些操作,我把结果放在另一个矩阵的一个单元格中,然后我交换他们的名字并重复。

下面是我的代码

int main(void){
int const size = 1000;
int const steps = 10;
float A[size][size], B[size][size];
int i,j,k;
int t = 0;
double sum = 0;
double sum1 = 0;
int const ed = size - 1;
for(i = 0; i < size; ++i){
for(j = 0; j < size; ++j){// initialize the matrices
A[i][j] = i+j;
B[i][j] = 0;
}
}
for(i = 0; i < size; ++i){//find the sum of the values in the first matrix
for(j = 0; j < size; ++j){
sum = sum + A[i][j];
}
}
printf("The total sum of the matrix 1 is %lf \n",sum);

for(k = 0; k < steps; ++k){//for each cell of the matrix A calculate the average of the values' of the cell and its surroundings and put it in the coresponding place in the matrix B and then copy matrix B to matrix A and repeat. There are special cases for the cells who are at the edges and the last or first row/column.
for(i = 0; i < size; ++i){
for(j = 0; j < size; ++j){
if(i==0){
if(j==0)
B[i][j]=(A[0][0]+A[0][1]+A[0][ed]+A[1][0]+A[ed][0])/5.0;
else if(j==ed)
B[i][j]=(A[0][ed]+A[0][0]+A[0][ed-1]+A[1][ed]+A[ed][ed])/5.0;
else
B[i][j]=(A[0][j]+A[0][j+1]+A[0][j-1]+A[1][j]+A[ed][j])/5.0;
}else if(i==ed){
if(j==0)
B[i][j]=(A[ed][0]+A[ed][1]+A[ed][ed]+A[0][0]+A[ed-1][0])/5.0;
else if(j==ed)
B[i][j]=(A[ed][ed]+A[ed][0]+A[ed][ed-1]+A[0][ed]+A[ed-1][ed])/5.0;
else
B[i][j]=(A[ed][j]+A[ed][j+1]+A[ed][j-1]+A[0][j]+A[ed-1][j])/5.0;
}else{
if(j==0)
B[i][j]=(A[i][0]+A[i][1]+A[i][ed]+A[i+1][0]+A[i-1][0])/5.0;
else if(j==ed)
B[i][j]=(A[i][ed]+A[i][0]+A[i][ed-1]+A[i+1][ed]+A[i-1][ed])/5.0;
else
B[i][j]=(A[i][j]+A[i][j+1]+A[i][j-1]+A[i+1][j]+A[i-1][j])/5.0;
}
}
}
sum1 = 0;
for(i = 0; i < size; ++i){
for(j = 0; j < size; ++j){
sum1 = sum1 + B[i][j];
}
}
t=t+1;
for(i = 0; i < size; ++i){
for(j = 0; j < size; ++j){
A[i][j] = B[i][j];
}
}
printf("%lf \n",sum1-sum);
}
printf("The total sum of the matrix 2 is %lf \n",sum1);
printf("Number of steps completed: %i \n",t);
printf("Number of steps failed to complete: %i \n", steps-t);
return 0;

我用过每次从一个矩阵复制到另一个矩阵的方法,但效率不高。

我有一个提示,我应该使用指针,但我无法弄清楚。任何帮助将不胜感激。

最佳答案

您可以通过将第一个变量的值分配给临时变量,然后将第二个变量的值分配给第一个,然后将临时变量的值分配给第二个变量,来交换相同类型的任意两个变量的值:

int a = 2, b = 3, tmp;

tmp = a;
a = b;
b = tmp;

特别是当变量是指针类型时,它的工作原理完全一样,所以

/* The matrices */
double one[3][3], another[3][3];

/* pointers to the matrices */
double (*matrix1p)[3] = one;
double (*matrix2p)[3] = another;
double (*tmp)[3];

/* ... perform matrix operations using matrix1p and matrix2p ... */

/* swap labels (pointers): */
tmp = matrix1p;
matrix1p = matrix2p;
matrix2p = tmp;

/* ... perform more matrix operations using matrix1p and matrix2p ... */

更新澄清:

matrix1p 最初是 one 的别名,而 matrix2p 最初是 another 的别名。交换后,matrix1panother 的别名,而matrix2pone 的别名。当然,您可以根据需要多次执行此类交换。但是,您不能交换 oneanother 本身,除非通过逐个元素交换。


请注意,这会提高效率,因为指针相对于矩阵本身来说非常小。您不必移动矩阵的元素,只需更改每个指针指向的矩阵即可。

关于c - 在 C 中交换方矩阵名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28463943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com