当我尝试计算矩阵的3阶行列式时,我收到了错误的输出。在2阶,它工作正常。更具体地说,我没有收到9个值(v [1,1],v [1,2]等),但我得到的不止于此。我认为是数组的问题,但是idk .. 代码:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void main(void) {
int i,j,n,i_max,j_max,ordin,i_m,j_m;
long int det;
int v[3][3];
int e[3];
int nr=0;
printf("\nIntroduceti ordinul matricei:\t");
scanf("%d",&n);
if (n==2) {
i_max=n;
j_max=n;
printf("\nIntroduceti valorile matricei:\n");
for (i=1;i<=i_max;i++) {
for (j=1;j<=j_max;j++) {
printf("v[%d,%d]= ",i,j);
scanf("%d",&(v[i][j]));
nr++;
e[nr] = v[i][j];
}
}
det = (e[1]*e[4])-(e[2]*e[3]);
printf("\nDeterminantul matricei este: %ld\n",det);
if (det != 0)
printf("Matricea de ordinul %d este inversabila !",n);
else printf("Matricea de ordinul %d nu este inversabila!",n);
} else if (n==3) {
i_m=n;
j_m=n;
printf("\nIntroduceti valorile matricei:\n");
for (i=1; i<= i_m; i++) {
for (j=1; j<= j_m; j++) {
printf("v[%d,%d]= ",i,j);
scanf("%d",&(v[i][j]));
nr++;
e[nr] = v[i][j];
}
}
det = (e[1]*e[5]*e[9])+(e[2]*e[6]*e[7])+(e[3]*e[4]*e[8])-(e[3]*e[5]*e[7])-(e[2]*e[4]*e[9])-(e[1]*e[6]*e[8]);
printf("Determinantul matricei este: %ld\n",det);
if (det != 0)
printf("Matricea de ordinul %d este inversabila!",n);
else
printf("Matricea de ordinul %d nu este inversabila!",n);
} else
printf("Ordinul matricei este incorect!");
return 0;
}
答案 0 :(得分:0)
首先,你宣布
int v[3][3];
int e[3];
e
使用v
时没有足够的项目,因为int e[9];
有3 x 3 = 9个元素。
所以似乎可以通过将第二个语句改为
来解决for
但这不是故事的结局。
在0
循环中,你循环也不是1
(这在C语言中很常见),但来自int v[4][4]; /* for using indices from 1 to 3 */
int e[10]; /* for using indices from 1 to 9 */
,所以你需要为所有数组增加1个索引!
声明
decimal total = 0;
foreach (string file in Directory.EnumerateFiles("D:/", "*.txt"))
{
string content = File.ReadAllText(file);
total += Convert.ToDecimal(content);
}
答案 1 :(得分:0)
首先你说int v[3][3];
和int e[3];
,然后你就可以找到像v[3][3]
和e[4]
这样的元素。您似乎忘记了数组/矩阵使用基于0的索引。换句话说,如果您声明int v[3][3];
,您应该引用的唯一元素是v[0][0]...v[2][2]
。将数据读入v
时,for
循环应从0到2
,而不是从1
到3
。此外,你明显超出了e
的范围,因为它有3个元素,但你可以到e[9]
。
顺便说一句,您也不需要将内容从v
转移到e
。阅读v
后,您只需将v[0][0]
称为v[0]
,将v[0][1]
称为v[1]
,将v[1][0]
称为v[3]
以v[2][2]
为v[8]
。
另外,在参考二阶行列式的部分中,你会产生几乎相同的错误。