C语言代码翻译

#include "stdlib.h"
#include "rinv.c"
int lman(n,m,k,f,q,r,h,y,x,p,g)
int n,m,k;
double f[],q[],r[],h[],y[],x[],p[],g[];
{ int i,j,kk,ii,l,jj,js;
double *e,*a,*b;
e=malloc(m*m*sizeof(double));
l=m;
if (l<n) l=n;
a=malloc(l*l*sizeof(double));
b=malloc(l*l*sizeof(double));
for (i=0; i<=n-1; i++)
for (j=0; j<=n-1; j++)
{ ii=i*l+j; a[ii]=0.0;
for (kk=0; kk<=n-1; kk++)
a[ii]=a[ii]+p[i*n+kk]*f[j*n+kk];
}
for (i=0; i<=n-1; i++)
for (j=0; j<=n-1; j++)
{ ii=i*n+j; p[ii]=q[ii];
for (kk=0; kk<=n-1; kk++)
p[ii]=p[ii]+f[i*n+kk]*a[kk*l+j];
}
for (ii=2; ii<=k; ii++)
{ for (i=0; i<=n-1; i++)
for (j=0; j<=m-1; j++)
{ jj=i*l+j; a[jj]=0.0;
for (kk=0; kk<=n-1; kk++)
a[jj]=a[jj]+p[i*n+kk]*h[j*n+kk];
}
for (i=0; i<=m-1; i++)
for (j=0; j<=m-1; j++)
{ jj=i*m+j; e[jj]=r[jj];
for (kk=0; kk<=n-1; kk++)
e[jj]=e[jj]+h[i*n+kk]*a[kk*l+j];
}
js=rinv(e,m);
if (js==0)
{ free(e); free(a); free(b); return(js);}
for (i=0; i<=n-1; i++)
for (j=0; j<=m-1; j++)
{ jj=i*m+j; g[jj]=0.0;
for (kk=0; kk<=m-1; kk++)
g[jj]=g[jj]+a[i*l+kk]*e[j*m+kk];
}
for (i=0; i<=n-1; i++)
{ jj=(ii-1)*n+i; x[jj]=0.0;
for (j=0; j<=n-1; j++)
x[jj]=x[jj]+f[i*n+j]*x[(ii-2)*n+j];
}
for (i=0; i<=m-1; i++)
{ jj=i*l; b[jj]=y[(ii-1)*m+i];
for (j=0; j<=n-1; j++)
b[jj]=b[jj]-h[i*n+j]*x[(ii-1)*n+j];
}
for (i=0; i<=n-1; i++)
{ jj=(ii-1)*n+i;
for (j=0; j<=m-1; j++)
x[jj]=x[jj]+g[i*m+j]*b[j*l];
}
if (ii<k)
{ for (i=0; i<=n-1; i++)
for (j=0; j<=n-1; j++)

for (kk=0; kk<=m-1; kk++)
a[jj]=a[jj]-g[i*m+kk]*h[kk*n+j];
if (i==j) a[jj]=1.0+a[jj];
}
for (i=0; i<=n-1; i++)
for (j=0; j<=n-1; j++)
{ jj=i*l+j; b[jj]=0.0;
for (kk=0; kk<=n-1; kk++)
b[jj]=b[jj]+a[i*l+kk]*p[kk*n+j];
}
for (i=0; i<=n-1; i++)
for (j=0; j<=n-1; j++)
{ jj=i*l+j; a[jj]=0.0;
for (kk=0; kk<=n-1; kk++)
a[jj]=a[jj]+b[i*l+kk]*f[j*n+kk];
}
for (i=0; i<=n-1; i++)
for (j=0; j<=n-1; j++)
{ jj=i*n+j; p[jj]=q[jj];
for (kk=0; kk<=n-1; kk++)
p[jj]=p[jj]+f[i*n+kk]*a[j*l+kk];
}
}
}
free(e); free(a); free(b);
return(js);
}

好像很厉害的一段代码,这是在做视图压缩啊还是矩阵加密啊?只是能不能用code的样式贴出来啊? 实在没法看啊。。


我尝试着调整一下格式,仍发现好像源码错漏了{符号,真头大。


#include "stdlib.h"
#include "rinv.c"
int lman (n, m, k, f, q, r, h, y, x, p, g)
int n, m, k;
double f[], q[], r[], h[], y[], x[], p[], g[];
{
int i, j, kk, ii, l, jj, js;
double *e, *a, *b;
l = max(m, n);
e = malloc(m * m * sizeof(double));
a = malloc(l * l * sizeof(double));
b = malloc(l * l * sizeof(double));
/// 行列式 二维double 数组l*l足够大,填充n*n对象
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
ii = i * l + j;
a[ii] = 0.0;
for (kk = 0; kk <= n - 1; kk++)
{
/// p 数据横向遍历一行, f 数据纵向遍历一列
/// p 与 f 对应的横列元素分别相乘后相加
a[ii] += p[i * n + kk] * f[j * n + kk];
}
}
}
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
ii = i * n + j;
p[ii] = q[ii]; ///将q数组中n*n对象拷入p数组中初始化
for (kk = 0; kk <= n - 1; kk++)
{
p[ii] += f[i * n + kk] * a[kk * l + j];
}
}
}
for (ii = 2; ii <= k; ii++)
{
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= m - 1; j++)
{
jj = i * l + j;
a[jj] = 0.0;
for (kk = 0; kk <= n - 1; kk++)
{
a[jj] = a[jj] + p[i * n + kk] * h[j * n + kk];
}
}
}
for (i = 0; i <= m - 1; i++)
{
for (j = 0; j <= m - 1; j++)
{
jj = i * m + j;
e[jj] = r[jj];
for (kk = 0; kk <= n - 1; kk++)
{
e[jj] = e[jj] + h[i * n + kk] * a[kk * l + j];
}
}
}
js = rinv(e, m);
if (js == 0)
{
free(e);
free(a);
free(b);
return (js);
}
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= m - 1; j++)
{
jj = i * m + j;
g[jj] = 0.0;
for (kk = 0; kk <= m - 1; kk++)
{
g[jj] = g[jj] + a[i * l + kk] * e[j * m + kk];
}
}
}
for (i = 0; i <= n - 1; i++)
{
jj = (ii - 1) * n + i;
x[jj] = 0.0;
for (j = 0; j <= n - 1; j++)
{
x[jj] = x[jj] + f[i * n + j] * x[(ii - 2) * n + j];
}
}
for (i = 0; i <= m - 1; i++)
{
jj = i * l;
b[jj] = y[(ii - 1) * m + i];
for (j = 0; j <= n - 1; j++)
{
b[jj] = b[jj] - h[i * n + j] * x[(ii - 1) * n + j];
}
}
for (i = 0; i <= n - 1; i++)
{
jj = (ii - 1) * n + i;
for (j = 0; j <= m - 1; j++)
{
x[jj] = x[jj] + g[i * m + j] * b[j * l];
}
}
if (ii < k)
{
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
for (kk = 0; kk <= m - 1; kk++)
{
a[jj] = a[jj] - g[i * m + kk] * h[kk * n + j];
}
}
}
if (i == j)
{
a[jj] = 1.0 + a[jj];
}
}
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
jj = i * l + j;
b[jj] = 0.0;
for (kk = 0; kk <= n - 1; kk++)
{
b[jj] = b[jj] + a[i * l + kk] * p[kk * n + j];
}
}
}
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
jj = i * l + j;
a[jj] = 0.0;
for (kk = 0; kk <= n - 1; kk++)
{
a[jj] = a[jj] + b[i * l + kk] * f[j * n + kk];
}
}
}
for (i = 0; i <= n - 1; i++)
{
for (j = 0; j <= n - 1; j++)
{
jj = i * n + j;
p[jj] = q[jj];
for (kk = 0; kk <= n - 1; kk++)
{
p[jj] = p[jj] + f[i * n + kk] * a[j * l + kk];
}
}
}
}
}
free(e);
free(a);
free(b);
return (js);
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-11-03
大学计算机课程采用五级制记载成绩,90 分以上的为“优秀”80 *89分记为“良好”,70 *79分的为“中等”,60^ 69分的为”及格”,60分以下的为不及格。