gpt4 book ai didi

c - 如何通过使用函数在该程序中使用模块化

转载 作者:行者123 更新时间:2023-11-30 20:51:41 27 4
gpt4 key购买 nike

如何使用各种函数重写该程序。计算两个动态矩阵的和与差的程序。它使用指针而不是二维矩阵来动态调整矩阵大小

#include<stdio.h>
#include<stdlib.h>
int main()
{ int i, n, j, **a, **b, **c, **d;
printf("Input the size of matrix [if n x n, input n]: ");
scanf("%d", &n);
printf("\nInput matrix A\n");
a=(int**)calloc(n, sizeof(int*));
for(i=0; i<n; i++)
{ *(a+i)=(int*)calloc(n, sizeof(int));
if(!*a)
{ printf("\nInsufficient memory");
exit(0);
}
for(j=0; j<n; j++)
{
printf("Enter [%d][%d] element: ", i, j);
scanf("%d", (*(a+i)+j));
printf("%d", *(*(a+i)+j));
}
}
printf("\nInput matrix B\n");
b=(int**)calloc(n, sizeof(int*));
for(i=0; i<n; i++)
{ *(b+i)=(int*)calloc(n, sizeof(int));
if(!*b)
{ printf("\nInsufficient memory");
exit(0);
}
for(j=0; j<n; j++)
{
printf("Enter [%d][%d] element: ", i, j);
scanf("%d", (*(b+i)+j));
printf("%d", *(*(b+i)+j));
}
}
c=(int**)calloc(n, sizeof(int*));
d=(int**)calloc(n, sizeof(int*));
for(i=0; i<n; i++)
{ *(c+i)=(int*)calloc(n, sizeof(int));
*(d+i)=(int*)calloc(n, sizeof(int));
if(!(*c&&*d))
{ printf("Insufficient memory");
exit(0);
}
for(j=0; j<n; j++)
{ *(*(c+i)+j)=(*(*(a+i)+j))+(*(*(b+i)+j));
*(*(d+i)+j)=(*(*(a+i)+j))-(*(*(b+i)+j));
printf("\nA[%d][%d]= %d B[%d][%d]= %d \t Sum= %d \t Diff= %d", i, j, *(*(a+i)+j), i, j, *(*(b+i)+j), *(*(c+i)+j), *(*(d+i)+j));
}
}
free(c);
free(d);
free(a);
free(b);
return 0;
}

我已经编写了这段代码,但是它无法正常工作

#include<stdio.h>
#include<stdlib.h>
void input(int n, int **a);
void operation(int n, int **a, int **b);
int main()
{ int i, n, j, **a, **b, **c, **d;
printf("Input the size of matrix [if n x n, input n]: ");
scanf("%d", &n);
printf("\nInput matrix A\n");
input(n, a);
printf("\nInput matrix B\n");
input(n, b);
operation(n, a, b);
free(c);
free(d);
free(a);
free(b);
return 0;
}
void input(int n, int **a)
{ int i, j;
a=(int**)calloc(n, sizeof(int*));
for(i=0; i<n; i++)
{ *(a+i)=(int*)calloc(n, sizeof(int));
if(!*a)
{ printf("\nInsufficient memory");
exit(0);
}
for(j=0; j<n; j++)
{
printf("Enter [%d][%d] element: ", i, j);
scanf("%d", (*(a+i)+j));
printf("%d", *(*(a+i)+j));
}
}
}
void operation(int n, int**a, int**b)
{ int i, j, **c, **d;
a=(int**)calloc(n, sizeof(int*));
b=(int**)calloc(n, sizeof(int*));
c=(int**)calloc(n, sizeof(int*));
d=(int**)calloc(n, sizeof(int*));
for(i=0; i<n; i++)
{ *(a+i)=(int*)calloc(n, sizeof(int));
*(b+i)=(int*)calloc(n, sizeof(int));
*(c+i)=(int*)calloc(n, sizeof(int));
*(d+i)=(int*)calloc(n, sizeof(int));
if(!(*a&&*b&&*c&&*d))
{ printf("Insufficient memory");
exit(0);
}
for(j=0; j<n; j++)
{ *(*(c+i)+j)=(*(*(a+i)+j))+(*(*(b+i)+j));
*(*(d+i)+j)=(*(*(a+i)+j))-(*(*(b+i)+j));
printf("\nA[%d][%d]= %d B[%d][%d]= %d \t Sum= %d \t Diff= %d", i, j, *(*(a+i)+j), i, j, *(*(b+i)+j), *(*(c+i)+j), *(*(d+i)+j));
}
}
free(c);
free(d);
}

最佳答案

问题:

int **ainput 函数的本地函数。因此,当您从函数返回时,本地 a 的值会丢失,而 main 中的 a 的值将仍然是垃圾。您必须传递保存矩阵的变量的地址才能使分配生效。换句话说,参数应该是int ***a

解决方案:

但是您根本不需要该参数。您可以只返回数组:

int** input(int n)
{
int i, j;
int ** a = calloc(n, sizeof(int*));
for(i=0; i<n; i++)
{
a[i] = calloc(n, sizeof(int));
if(!a[i])

...

return a;
}

其他问题:

关于c - 如何通过使用函数在该程序中使用模块化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27223754/

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