
不知道是不是你要的,随便找了个数值分析算法里头的
#include "stdlib.h"
#include "math.h"
#include "stdio.h"
int rinv(n,a)
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=0k=n-1k++)
{ d=0.0
for (i=ki=n-1i++)
for (j=kj=n-1j++)
{ l=i*n+jp=fabs(a[l])
if (p>d) { d=pis[k]=ijs[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=0j=n-1j++)
{ u=k*n+jv=is[k]*n+j
p=a[u]a[u]=a[v]a[v]=p
}
if (js[k]!=k)
for (i=0i=n-1i++)
{ u=i*n+kv=i*n+js[k]
p=a[u]a[u]=a[v]a[v]=p
}
l=k*n+k
a[l]=1.0/a[l]
for (j=0j=n-1j++)
if (j!=k)
{ u=k*n+ja[u]=a[u]*a[l]}
for (i=0i=n-1i++)
if (i!=k)
for (j=0j=n-1j++)
if (j!=k)
{ u=i*n+j
a[u]=a[u]-a[i*n+k]*a[k*n+j]
}
for (i=0i=n-1i++)
if (i!=k)
{ u=i*n+ka[u]=-a[u]*a[l]}
}
for (k=n-1k>=0k--)
{ if (js[k]!=k)
for (j=0j=n-1j++)
{ u=k*n+jv=js[k]*n+j
p=a[u]a[u]=a[v]a[v]=p
}
if (is[k]!=k)
for (i=0i=n-1i++)
{ u=i*n+kv=i*n+is[k]
p=a[u]a[u]=a[v]a[v]=p
}
}
free(is)free(js)
return(1)
}
#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=0i<=3i++)
for(j=0j<=3j++)
b[i][j]=a[i][j]
i=rinv(a[0],4)
if(i!=0)
{cout<<"MAT A IS:"<<endl
for(i=0i<=3i++)
{for(j=0j<=3j++)
printf("%13.7e",b[i][j])
printf("\n")
}
printf("\n")
cout<<"MAT A- IS:"<<endl
for(i=0i<=3i++)
{for(j=0j<=3j++)
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=0k<=n-1k++)
{d=0.0
for(i=ki<=n-1i++)
for(j=kj<=n-1j++)
{
l=i*n+jp=fabs(a[1])
if (p>d){d=pis[k]=ijs[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=0j<=n-1j++)
{u=k*n+jv=is[k]*n+j
p=a[u]a[u]=a[v]a[v]=p
}
if(js[k]!=k)
for(i=0i<=n-1i++)
{u=i*n+kv=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=0j<=n-1j++)
if(j!=k)
{u=k*n+ja[u]=a[u]*a[1]}
for(i=0i<=n-1i++)
if(i!=k)
for(j=0j<=n-1j++)
if(j!=k)
{u=i*n+j
a[u]=a[u]-a[i*n+k]*a[k*n+j]
}
for(i=0i<=n-1i++)
if(i!=k)
{u=i*n+ka[u]=-a[u]*a[l]}
}
for(k=n-1k>=0k--)
{if(js[k]!=k)
for(j=0j<=n-1j++)
{u=k*n+jv=js[k]*n+j
p=a[u]a[u]=a[v]a[v]=p
}
if(is[k]!=k)
for(i=0i<=n-1i++)
{u=i*n+kv=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<stdio.h>
void fun(int (*pIntPtr)[4]) {
*(*pIntPtr + 0)=20//将a[0][0]改为20
*(*(pIntPtr+3) + 2)=30//将a[3][2]改为30
}
int main() {
int A[4][4] = {{10,2,3,1},{12,4,5,1},{14,7,8,1},{15,9,2,1}}
int i,j
fun(A)
for(i=0i<4i++)
{
for(j=0j<4j++) printf("%4d",A[i][j])
printf("\n")
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)