c语言编程有问题,高手帮忙看下代码呀~~
#include<stdlib.h>#include<math.h>#include<stdio.h>#include<iostream.h>voidmain(){int...
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <iostream.h>
void main()
{
int i,j;
static double a[4][4]={0.2368,0.2471,0.2568,1.2671,1.1161,0.1254,0.1397,0.1490,0.1582,1.1675,0.1768,0.1871,0.1968,0.2071,1.2168,0.2271};
static double b[4][4];
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
b[i][j]=a[i][j];
i=rinv(a,4);
if(i!=0)
{cout<<"MAT A IS:"<<endl;
for(i=0;i<=3;i++)
{for(j=0;j<=3;j++)
printf("%13.7e",b[i][j]);
printf("\n");
}
printf("\n");
cout<<"MAT A- IS:"<<endl;
for(i=0;i<=3;i++)
{for(j=0;j<=3;j++)
printf("%13.7e",a[i][j]);
printf("\n");
}
}
}
int rinv(a,n)
int n;
double a[];
{ int *is,*js,i,j,k,l,u,v;
double d,p;
is=malloc(n*sizeof(int));
js=malloc(n*sizeof(int));
for(k=0;k<=n-1;k++)
{d=0.0;
for(i=k;i<=n-1;i++)
for(j=k;j<=n-1;j++)
{
l=i*n+j;p=fabs(a[1]);
if (p>d){d=p;is[k]=i;js[k]=j;}
}
if (d+1.0==1.0)
{free(is);free(js);
printf("err**not inv\n");
return(0);
}
if(is[k]!=k)
for(j=0;j<=n-1;j++)
{u=k*n+j;v=is[k]*n+j;
p=a[u];a[u]=a[v];a[v]=p;
}
if(js[k]!=k)
for(i=0;i<=n-1;i++)
{u=i*n+k;v=i*n+js[k];
p=a[u];a[u]=a[v];a[v]=p;
}
l=k*n+k;
a[1]=1.0/a[1];
for(j=0;j<=n-1;j++)
if(j!=k)
{u=k*n+j;a[u]=a[u]*a[1];}
for(i=0;i<=n-1;i++)
if(i!=k)
for(j=0;j<=n-1;j++)
if(j!=k)
{u=i*n+j;
a[u]=a[u]-a[i*n+k]*a[k*n+j];
}
for(i=0;i<=n-1;i++)
if(i!=k)
{u=i*n+k;a[u]=-a[u]*a[l];}
}
for(k=n-1;k>=0;k--)
{if(js[k]!=k)
for(j=0;j<=n-1;j++)
{u=k*n+j;v=js[k]*n+j;
p=a[u];a[u]=a[v];a[v]=p;
}
if(is[k]!=k)
for(i=0;i<=n-1;i++)
{u=i*n+k;v=i*n+is[k];
p=a[u];a[u]=a[v];a[v]=p;
}
}
free(is);free(js);
return(1);
}
error C2065: 'rinv' : undeclared identifier
error C2065: 'a' : undeclared identifier
error C2065: 'n' : undeclared identifier
error C2448: '<Unknown>' : function-style initializer appears to be a function definition
fatal error C1004: unexpected end of file found
矩阵求逆的过程,输出为原矩阵与逆矩阵两个.很多的错误,其中rinv函数是照书上打进去的,不知道什么地方有问题,高手赐教!! 展开
#include <math.h>
#include <stdio.h>
#include <iostream.h>
void main()
{
int i,j;
static double a[4][4]={0.2368,0.2471,0.2568,1.2671,1.1161,0.1254,0.1397,0.1490,0.1582,1.1675,0.1768,0.1871,0.1968,0.2071,1.2168,0.2271};
static double b[4][4];
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
b[i][j]=a[i][j];
i=rinv(a,4);
if(i!=0)
{cout<<"MAT A IS:"<<endl;
for(i=0;i<=3;i++)
{for(j=0;j<=3;j++)
printf("%13.7e",b[i][j]);
printf("\n");
}
printf("\n");
cout<<"MAT A- IS:"<<endl;
for(i=0;i<=3;i++)
{for(j=0;j<=3;j++)
printf("%13.7e",a[i][j]);
printf("\n");
}
}
}
int rinv(a,n)
int n;
double a[];
{ int *is,*js,i,j,k,l,u,v;
double d,p;
is=malloc(n*sizeof(int));
js=malloc(n*sizeof(int));
for(k=0;k<=n-1;k++)
{d=0.0;
for(i=k;i<=n-1;i++)
for(j=k;j<=n-1;j++)
{
l=i*n+j;p=fabs(a[1]);
if (p>d){d=p;is[k]=i;js[k]=j;}
}
if (d+1.0==1.0)
{free(is);free(js);
printf("err**not inv\n");
return(0);
}
if(is[k]!=k)
for(j=0;j<=n-1;j++)
{u=k*n+j;v=is[k]*n+j;
p=a[u];a[u]=a[v];a[v]=p;
}
if(js[k]!=k)
for(i=0;i<=n-1;i++)
{u=i*n+k;v=i*n+js[k];
p=a[u];a[u]=a[v];a[v]=p;
}
l=k*n+k;
a[1]=1.0/a[1];
for(j=0;j<=n-1;j++)
if(j!=k)
{u=k*n+j;a[u]=a[u]*a[1];}
for(i=0;i<=n-1;i++)
if(i!=k)
for(j=0;j<=n-1;j++)
if(j!=k)
{u=i*n+j;
a[u]=a[u]-a[i*n+k]*a[k*n+j];
}
for(i=0;i<=n-1;i++)
if(i!=k)
{u=i*n+k;a[u]=-a[u]*a[l];}
}
for(k=n-1;k>=0;k--)
{if(js[k]!=k)
for(j=0;j<=n-1;j++)
{u=k*n+j;v=js[k]*n+j;
p=a[u];a[u]=a[v];a[v]=p;
}
if(is[k]!=k)
for(i=0;i<=n-1;i++)
{u=i*n+k;v=i*n+is[k];
p=a[u];a[u]=a[v];a[v]=p;
}
}
free(is);free(js);
return(1);
}
error C2065: 'rinv' : undeclared identifier
error C2065: 'a' : undeclared identifier
error C2065: 'n' : undeclared identifier
error C2448: '<Unknown>' : function-style initializer appears to be a function definition
fatal error C1004: unexpected end of file found
矩阵求逆的过程,输出为原矩阵与逆矩阵两个.很多的错误,其中rinv函数是照书上打进去的,不知道什么地方有问题,高手赐教!! 展开
2个回答
展开全部
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <iostream.h>
int rinv(double a[],int n) ;
void main()
{
int i,j;
static double a[4][4]={0.2368,0.2471,0.2568,1.2671,1.1161,0.1254,0.1397,0.1490,0.1582,1.1675,0.1768,0.1871,0.1968,0.2071,1.2168,0.2271};
static double b[4][4];
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
b[i][j]=a[i][j];
i=rinv(a[0],4);
if(i!=0)
{cout<<"MAT A IS:"<<endl;
for(i=0;i<=3;i++)
{for(j=0;j<=3;j++)
printf("%13.7e",b[i][j]);
printf("\n");
}
printf("\n");
cout<<"MAT A- IS:"<<endl;
for(i=0;i<=3;i++)
{for(j=0;j<=3;j++)
printf("%13.7e",a[i][j]);
printf("\n");
}
}
}
int rinv(double a[],int n)
{ int *is,*js,i,j,k,l,u,v;
double d,p;
is=(int *)malloc(n*sizeof(int));
js=(int *)malloc(n*sizeof(int));
for(k=0;k<=n-1;k++)
{d=0.0;
for(i=k;i<=n-1;i++)
for(j=k;j<=n-1;j++)
{
l=i*n+j;p=fabs(a[1]);
if (p>d){d=p;is[k]=i;js[k]=j;}
}
if (d+1.0==1.0)
{free(is);free(js);
printf("err**not inv\n");
return(0);
}
if(is[k]!=k)
for(j=0;j<=n-1;j++)
{u=k*n+j;v=is[k]*n+j;
p=a[u];a[u]=a[v];a[v]=p;
}
if(js[k]!=k)
for(i=0;i<=n-1;i++)
{u=i*n+k;v=i*n+js[k];
p=a[u];a[u]=a[v];a[v]=p;
}
l=k*n+k;
a[1]=1.0/a[1];
for(j=0;j<=n-1;j++)
if(j!=k)
{u=k*n+j;a[u]=a[u]*a[1];}
for(i=0;i<=n-1;i++)
if(i!=k)
for(j=0;j<=n-1;j++)
if(j!=k)
{u=i*n+j;
a[u]=a[u]-a[i*n+k]*a[k*n+j];
}
for(i=0;i<=n-1;i++)
if(i!=k)
{u=i*n+k;a[u]=-a[u]*a[l];}
}
for(k=n-1;k>=0;k--)
{if(js[k]!=k)
for(j=0;j<=n-1;j++)
{u=k*n+j;v=js[k]*n+j;
p=a[u];a[u]=a[v];a[v]=p;
}
if(is[k]!=k)
for(i=0;i<=n-1;i++)
{u=i*n+k;v=i*n+is[k];
p=a[u];a[u]=a[v];a[v]=p;
}
}
free(is);free(js);
return(1);
}
问题1:rinv函数要声明.如果不声明,就把函数放到main前面去.
问题2:=rinv(a,4);不能这么写,因为a是一个二维数组,而你的函数定义为一维的,因此我改为i=rinv(a[0],4); 效果是一样的.
#include <math.h>
#include <stdio.h>
#include <iostream.h>
int rinv(double a[],int n) ;
void main()
{
int i,j;
static double a[4][4]={0.2368,0.2471,0.2568,1.2671,1.1161,0.1254,0.1397,0.1490,0.1582,1.1675,0.1768,0.1871,0.1968,0.2071,1.2168,0.2271};
static double b[4][4];
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
b[i][j]=a[i][j];
i=rinv(a[0],4);
if(i!=0)
{cout<<"MAT A IS:"<<endl;
for(i=0;i<=3;i++)
{for(j=0;j<=3;j++)
printf("%13.7e",b[i][j]);
printf("\n");
}
printf("\n");
cout<<"MAT A- IS:"<<endl;
for(i=0;i<=3;i++)
{for(j=0;j<=3;j++)
printf("%13.7e",a[i][j]);
printf("\n");
}
}
}
int rinv(double a[],int n)
{ int *is,*js,i,j,k,l,u,v;
double d,p;
is=(int *)malloc(n*sizeof(int));
js=(int *)malloc(n*sizeof(int));
for(k=0;k<=n-1;k++)
{d=0.0;
for(i=k;i<=n-1;i++)
for(j=k;j<=n-1;j++)
{
l=i*n+j;p=fabs(a[1]);
if (p>d){d=p;is[k]=i;js[k]=j;}
}
if (d+1.0==1.0)
{free(is);free(js);
printf("err**not inv\n");
return(0);
}
if(is[k]!=k)
for(j=0;j<=n-1;j++)
{u=k*n+j;v=is[k]*n+j;
p=a[u];a[u]=a[v];a[v]=p;
}
if(js[k]!=k)
for(i=0;i<=n-1;i++)
{u=i*n+k;v=i*n+js[k];
p=a[u];a[u]=a[v];a[v]=p;
}
l=k*n+k;
a[1]=1.0/a[1];
for(j=0;j<=n-1;j++)
if(j!=k)
{u=k*n+j;a[u]=a[u]*a[1];}
for(i=0;i<=n-1;i++)
if(i!=k)
for(j=0;j<=n-1;j++)
if(j!=k)
{u=i*n+j;
a[u]=a[u]-a[i*n+k]*a[k*n+j];
}
for(i=0;i<=n-1;i++)
if(i!=k)
{u=i*n+k;a[u]=-a[u]*a[l];}
}
for(k=n-1;k>=0;k--)
{if(js[k]!=k)
for(j=0;j<=n-1;j++)
{u=k*n+j;v=js[k]*n+j;
p=a[u];a[u]=a[v];a[v]=p;
}
if(is[k]!=k)
for(i=0;i<=n-1;i++)
{u=i*n+k;v=i*n+is[k];
p=a[u];a[u]=a[v];a[v]=p;
}
}
free(is);free(js);
return(1);
}
问题1:rinv函数要声明.如果不声明,就把函数放到main前面去.
问题2:=rinv(a,4);不能这么写,因为a是一个二维数组,而你的函数定义为一维的,因此我改为i=rinv(a[0],4); 效果是一样的.
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
rinv函数在使用前必需声明,也就是在 main()里i=rinv(a,4); 这一句之前必需声明 rinv函数
p=a[u];a[u]=a[v];a[v]=p;
这明显有问题.
a是一个二维数组,则a表示的是二维数组所在一连串顺序内存空间的首址.而这个地址是一个值,则a是个常量,而不是一个变量.
因为a是一个二维数组,那么 a[num]也是一个一维数组,所以同样a[num]是一个常量而非变量..也是不能赋值的...
而至于 n 就有点不是很清楚了,n 声明了,定义了.为什么报错说没有定义的标示符'n',估计是在 rinv函数的定义上吧..因为你使用的是老式的定义方式,而这时你声明参数时没有和参数列表对应,这样估计是不对的.只能这样解释了!
p=a[u];a[u]=a[v];a[v]=p;
这明显有问题.
a是一个二维数组,则a表示的是二维数组所在一连串顺序内存空间的首址.而这个地址是一个值,则a是个常量,而不是一个变量.
因为a是一个二维数组,那么 a[num]也是一个一维数组,所以同样a[num]是一个常量而非变量..也是不能赋值的...
而至于 n 就有点不是很清楚了,n 声明了,定义了.为什么报错说没有定义的标示符'n',估计是在 rinv函数的定义上吧..因为你使用的是老式的定义方式,而这时你声明参数时没有和参数列表对应,这样估计是不对的.只能这样解释了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询