【发布时间】:2019-06-07 07:01:37
【问题描述】:
问题是在 C 语言中找到一个 NXN 矩阵的行列式。我写了以下代码。我得到一个 n=2 矩阵的输出。但是对于 n>2,程序会说“分段错误(核心转储)”。请帮帮我。我已经尝试尽可能正确地编写代码。任何语法错误的突出显示将不胜感激。提前致谢。 (我使用的是 Ubuntu 18.04 LTS 终端。)
Input - 2 (Order of Matrix)
1 (Enter the Elements)
2
3
4
Output -1 2 (Entered Matrix)
3 4
-2 (Value of Determinant)
Input - 3 (Order of Matrix)
1 (Enter the Elements)
2
3
4
5
6
7
8
9
Output -1 2 3 (Entered Matrix)
4 5 6
7 8 9
Segementation Fault(Core Dumped)
#include <stdio.h>
int determinent(int n,int p[n][n]);
int main()
{
int n,i,j;
printf("Enter the order of the matrix:\n");
scanf("%d",&n);
int a[n][n];
printf("Enter the elements of the NXN matrix.\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j]);
}
}
printf("The entered matrix is:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n");
printf("The determinent of the matrix is %d\n",determinent(n,a));
return 0;
}
int determinent(int n,int p[n][n])
{
int det,k,m,s=1,i,j,l=0;
if(n==2)
{
det = p[0][0]*p[1][1] - p[0][1]*p[1][0];
}
else
{
for(k=0;k<n;k++,s=-s,l++)
{
if(l==0)
{
det = 0;
}
int b[n-1][n-1];
m = (p[0][k])*(s);
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1;j++)
{
if(k==0)
{
b[i][j] = p[i+1][j+1];
}
else
{
int c;
for(c=0;c<k;c++)
{
b[i][j] = p[i+1][j+1];
}
for(c=k+1;c<n;c++)
{
b[i][j] = p[i+1][c];
}
}
}
}
n = n-1;
det = det + m*determinent(n,b);
}
}
return det;
}
【问题讨论】:
-
OT:为了便于阅读和理解:1) 请一致地缩进代码。在每个左大括号 '{' 后缩进。在每个右大括号 '}' 之前取消缩进。 2)单独的代码块:
forifelsewhiledo...whileswitchcasedefault通过一个空行。 3) 用 2 或 3 个空行分隔函数(保持一致)。 4) 变量名称应指明content或usage(或更好,两者兼有)。单个字符的名称是没有意义的。 5) 遵循公理:每行只有一个语句,并且(最多)每条语句有一个变量声明。 -
发布的输出与发布的代码输出不匹配。这会导致混乱,并且往往会导致问题被否决