C语言:请问这个函数定义时出了什么问题?(明明定义了,却报错'x' : undeclared identifier)

int yzs3(int a[3][3],int x,int y)
{
int array[2][2],b[4],i,j,c,z=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{if(i!=x-1||j!=y-1)
b[z]=a[i][j];
z++;
}
for(i=0;i<2;i++)
for(j=0;j<2;j++)
array[i][j]=b[j+1+2*i];
c=(array[0][0]*array[1][1]-array[0][1]*array[1][0])*pow(-1,(double)(x+y));
return c;
}
这是一个求代数余子式的函数。很多变量和数组都提示这个错误。另外还有“error C2106: '=' : left operand must be l-value”
请帮我看一看。
难道是我引用函数时出了错误?下面是我截取的引用这个函数的部分程序。print函数是我自定义的一个打印函数,经测试没有问题。

case 8:printf("请问您想计算3阶方阵4阶方阵?(输入数字3或4)\n");
scanf("%d",y);
switch(y)
{case 3:printf("请输入所求行列式\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{printf("b[%d][%d]:\n",i,j);
scanf("%d",&b[i][j]);
}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=yzs3(b,i,j);
print(b,3,3);
break;

还是那几个问题,有几个我之前没提到:
error C2143: syntax error : missing ';' before 'type'
error C2065: 'x' : undeclared identifier
error C2106: '=' : left operand must be l-value
error C2109: subscript requires array or pointer type
error C2106: '=' : left operand must be l-value
error C2065: 'c' : undeclared identifier
error C2018: unknown character '0xa3'
error C2059: syntax error : 'type'
warning C4098: 'print' : 'void' function returning a value

我在cygwin的gcc下编译没有语法错误。
不知道你的编译环境或别的设置是否有问题?一般类型错误只会引起警告,除非编译器设置了强制报错。
以下是随便补充了main函数的代码:
int yzs3(int a[3][3],int x,int y)
{
int array[2][2],b[4],i,j,c,z=0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
if(i!=x-1||j!=y-1)
b[z]=a[i][j];
z++;
}
for(i=0;i<2;i++)
for(j=0;j<2;j++)
array[i][j]=b[j+1+2*i];
c=(array[0][0]*array[1][1]-array[0][1]*array[1][0])*pow(-1,(double)(x+y));
return c;
}
int main()
{
int a[3][3], x, y;
int i=yzs3(a, x, y);
}

根据新补充的错误信息:
case 8:printf("请问您想计算3阶方阵4阶方阵?(输入数字3或4)\n");
scanf("%d",y);
switch(y)
{case 3:printf("请输入所求行列式\n");//____________ 分号是中文
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{printf("b[%d][%d]:\n",i,j); //____________ 冒号是中文
scanf("%d",&b[i][j]);
}
for(i=0;i<3;i++)
for(j=0;j<3;j++)
a[i][j]=yzs3(b,i,j);
print(b,3,3);
break;

还有你的错误信息没有行号,不知道针对哪里的,不过前面的两个中文字符问题可以看出来,其他的不知道了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-18
编译出错应该是编译器或者系统问题!重启下电脑吧!另外你这里面几处错误或不当的地方:
1:
rray[i][j]=b[j+1+2*i];

当i=1,j=1时array[1][1]=b[4]!!!
2:
c=(array[0][0]*array[1][1]-array[0][1]*array[1][0])*pow(-1,(double)(x+y));
等式右边是double型,左边是int型;pow(x,y),x=-1时,y应为整数,应为为小数时结果是个虚数,计算机不能计算虚数!
第2个回答  2012-12-18
c=(array[0][0]*array[1][1]-array[0][1]*array[1][0])*pow(-1,(double)(x+y));

// 左右类型不一致,左侧是整形(c),右侧是double 类型 pow的返回类型
// double pow( double x, double y );
// 修改如下:
c=(int)(array[0][0]*array[1][1]-array[0][1]*array[1][0])*pow(((double))-1,(double)(x+y));追问

这里貌似确实有问题。但是我找您说的改过以后程序还是报错,不知为何。

追答

什么错误?

本回答被提问者和网友采纳
第3个回答  2012-12-18
函数编译没有问题
第4个回答  2012-12-18
哪一行?
必须为左值,是不是给不该赋值的东西赋值了
相似回答