【发布时间】:2022-12-31 05:51:02
【问题描述】:
程序提示/说明
编写一个 C 程序来计算 n x n 方阵的行列式,其中 n 也是一个输入。
我的解决方案尝试
我为该程序编写了以下代码,但我一直将输出作为随机整数获取,并且无法弄清楚我做错了什么。
我想我可能在使用“&”运算符时或在函数定义的某处犯了错误。 (我不太熟悉将数组作为参数输入的函数。)
#include <stdio.h>
int n;
int det(int aa[n][n], int n)
{
int i, j, k, c1=0, c2=0, determinant=0;
int sign=1;
if(n==1)
{
return aa[0];
}
else if(n==2)
{
determinant = aa[0][0]*aa[1][1]-aa[0][1]*aa[1][0];
return determinant;
}
else
{
int minor[n-1][n-1];
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
for(k=0; k<n; k++)
{
if(j!=0 && k!=i)
{
minor[c1][c2]=aa[j][k];
c2++;
if(c2>(n-2))
{
c1++;
c2=0;
}
}
}
determinant = determinant + sign*aa[0][i]*det(minor, n-1);
sign = sign*(-1);
}
}
return determinant;
}
}
main()
{
int n, i, j, delta;
printf("Enter order of matrix :");
scanf("%d",&n);
int a[n][n];
for(i = 0; i<n; i++)
{
for(j=0; j<n; j++)
{
a[i][j]=0;
}
}
for(i = 0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("Enter the value for a[%d][%d]\n", i, j);
scanf("%d", &a[n][n]);
}
}
delta = det(a, n);
printf("The determinant of your matrix is: %d", delta);
}
【问题讨论】:
-
int det(int aa[n][n], int n)实际上应该是int det(int n, int aa[n][n])。争论的顺序很重要。然后去掉全局变量n。 -
nxn 还是 2x2?这里有很大的不同。
-
如果你的功能绝不有效,您可以对输入进行硬编码并显示实际和预期的输出,而不是期望每个人都运行一个交互式程序和自己想出答案应该是什么,
-
@evg 是的,它效率低下,但它是一个很好的练习。
-
你应该做的第一件事是enable warnings and treat them as errors。接下来,使用调试器查找逻辑中的错误(有很多)。
标签: c determinants