#include <stdio.h>
#include <stdlib.h>
#define N 1000
int main()
{
int n, i, j;
int a[N][N];
int sum(int a[][N], int n);
while((scanf("%d", &n))== 1&&(n != 0))
{
for(i = 1;i <= n;i ++)
{
for(j = 1;j <= n;j ++)
{
scanf("%d", &a[i][j]);
}
printf("\n");
}
sum(a, n);
}
return 0;
}
int sum(int a[][N], int n)
{
int sum1 = 0, i ,j, sum2 = 0, sum = 0;
if(n == 1)
sum = a[n][n];
else
{
for(i = 1;i <= n;i ++)
for(j = 1;j <= n;j ++)
{
if((i + j)%2 == 0)
sum1 += a[i][j]*sum(a[][N], (n - 1));
else
sum2 += a[i][j]*sum(a[][N], (n - 1))*(-1);
}
}
sum = sum1 + sum2;
printf("%d\n", sum);
return 0;
}
main.c:39: error: syntax error before ']' token
:: === Build finished: 1 errors, 0 warnings ===
下面的一行和上面的差不多!为什么上面的有错误!而下面的没有错误呢!
这是这道题的原题!
计算行列式
同学们在线性代数课上已经学习过有关行列式的概念. 这次实验我们就利用行列式展开定理编程计算低阶行列式的值
首先来简单复习一下, 已知定义在整数域 Z 上的 n 阶行列式 D:
D 的值等于它的任意行的所有元素与其代数余子式乘积的和. 即,
其中:
输入
输入可能包含多组测试数据. 每组数据的第一行是一个整数 n (0 ≤ n ≤ 9), 代表行列式的阶数; 其后有 n 行, 每行 n 个整数, 代表行列式的元素, 数值之间用空格分隔. n 等于 0 表示输入结束.
输出
对于输入数据中每个阶大于 0 的行列式, 输出其值, 后跟一换行符.
输入样例
3
1 0 0
0 1 0
0 0 1
4
1 2 3 4
5 0 0 0
-1 2 3 6
5 -1 1 -2
0
输出样例
1
50
#include<stdio.h>
#define N 10
void move(int (*from)[N],int n,int i,int j,int (*to)[N])
{
int a,b;
for(a=1;a<n;a++)
for(b=1;b<n;b++)
{
if(a<i && b<j)
to[a][b]=from[a][b];
else if(a<i && b>=j)
to[a][b]=from[a][b+1];
else if(a>=i && b<j)
to[a][b]=from[a+1][b];
else if(a>=i && b>=j)
to[a][b]=from[a+1][b+1];
}
}
int result(int (*p)[N],int n)
{
int j,sum=0,temp[N][N];
if(n==1)
return p[n][n];
for(j=1;j<=n;j++)
{
move(p,n,1,j,temp);
if((1+j)%2==0)
sum+=p[1][j]*result(temp,n-1);
else
sum+=(-1)*p[1][j]*result(temp,n-1);
}
return sum;
}
int main()
{
int i,j,n,a[N][N];
while(EOF!=scanf("%d",&n) && n!=0)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
printf("%d\n",result(a,n));
}
return 0;
}
int sum(int a[][N], int n)
{
int sum1 = 0, i ,j, sum2 = 0, sum = 0;
if(n == 1)
sum = a[n][n];
else
{
for(i = 1;i <= n;i ++)
for(j = 1;j <= n;j ++)
{
if((i + j)%2 == 0)
sum1 += a[i][j]*sum(a[][N], (n - 1));
else
sum2 += a[i][j]*sum(a[][N], (n - 1))*(-1);
}
}
sum = sum1 + sum2;
printf("%d\n", sum);
return 0;
}
main.c:39: error: syntax error before ']' token
:: === Build finished: 1 errors, 0 warnings ===
下面的一行和上面的差不多!为什么上面的有错误!而下面的没有错误呢!
(1)函数名与变量名相同
(2)函数调用形式错误
(3)递归函数必须有终止条件
(4)sum函数返回值有问题
sum2 += a[i][j]*sum(a[][N], (n - 1))*(-1);
这里sum返回的是多少