qq_37298232 2017-01-09 14:49 采纳率: 100%
浏览 1115
已采纳

请大神帮我看看哪错了,为什么2×2矩阵正确但4×4矩阵就错了

#include
void gzcf(int a[100][100],int b[100][100],int c[100][100],int s1,int s2,int n1,int n2,int s3,int s4,int n3,int n4,int m,int s5,int n5,int o,int q);
void jzcfaa(int s[100][100],int l[100][100],int m1,int m2,int m3,int m4,int h1,int h2,int h3,int h4,int q);

void jzcfbb(int h[100][100],int l[100][100],int f1,int f2,int r1,int r2,int h11,int h22,int n11,int n22,int qq);

int main()
{
int a[100][100],b[100][100],c[100][100];
int s1=1,s2=1,n1,n2,s3=1,s4=1,n3,n4,m=1,s5,n5,o,q;
int i,j,n;
printf("请输入第一个,第二个矩阵的行和列,它们的行和列相同\n");
scanf("%d",&n);
printf("请输入两个矩阵元素\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
scanf("%d",&a[i][j]);
printf("\n");
}
printf("\n");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
scanf("%d",&b[i][j]);
printf("\n");
}
printf("\n");
n1=n;n2=n;n3=n;n4=n;n5=n;s5=n;o=n;q=n;
gzcf(a,b,c,s1,s2,n1,n2,s3,s4,n3,n4,m,s5,n5,o,q);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d ",c[i][j]);
printf("\n");
}
}
void gzcf(int a[100][100],int b[100][100],int c[100][100],int s1,int s2,int n1,int n2,int s3,int s4,int n3,int n4,int m,int s5,int n5,int o,int q)
{
int mid1,mid2,mid3,mid4,mid5,mid6;
int i,j;
int k,s;
int s11[100][100],s22[100][100],s33[100][100],s44[100][100],s55[100][100],s66[100][100],s77[100][100],s88[100][100],s99[100][100],s1010[100][100];
int c1[100][100],c2[100][100],c3[100][100],c4[100][100],c5[100][100],c6[100][100],c7[100][100];
if(q==1)
{
c[1][1]=a[s1][s2]*b[s3][s4];
}
else
{

    o=(1+o)/2;
    q=(q+1)/2;   
    mid1=(s1+n1)/2;
    mid2=(s2+n2)/2;
    mid3=(s3+n3)/2;
    mid4=(s4+n4)/2;
    mid5=(m+s5)/2;                        
    mid6=(m+n5)/2;
    jzcfbb(s11,b,s3,mid4+1,mid3,n4,mid3+1,mid4+1,n3,n4,q);
    jzcfaa(s22,a,s1,s2,mid1,mid2,s1,mid2+1,mid1,n2,q);
    jzcfaa(s33,a,mid1+1,s2,n1,mid2,mid1+1,mid2+1,n1,n2,q);
    jzcfbb(s44,b,mid3+1,s4,n3,mid4,s3,s4,mid3,mid4,q);
    jzcfaa(s55,a,s1,s2,mid1,mid2,mid1+1,mid2+1,n1,n2,q);
    jzcfaa(s66,b,s3,s4,mid3,mid4,mid3+1,mid4+1,n3,n4,q);
    jzcfbb(s77,a,s1,mid2+1,mid1,n2,mid1+1,mid2+1,n1,n2,q);             //最后一步时S只有一个数 
    jzcfaa(s88,b,mid3+1,s4,n3,mid4,mid3+1,mid4+1,n3,n4,q);                 //为什么当N=2时会正确,因为 一递归就返回一个值,没有进行2次递归 
    jzcfbb(s99,a,s1,s2,mid1,mid2,mid1+1,s2,n1,mid2,q);
    jzcfaa(s1010,b,s3,s4,mid3,mid4,s3,mid4+1,mid3,n4,q);
    gzcf(a,s11,c1,s1,s2,mid1,mid2,1,1,q,q,m,mid5,mid6,o,q);
     //s11存在四个值         
    gzcf(s22,b,c2,1,1,q,q,mid3+1,mid4+1,n3,n4,m,mid5,mid6,o,q);
    gzcf(s33,b,c3,1,1,q,q,s3,s4,mid3,mid4,m,mid5,mid6,o,q);
    gzcf(a,s44,c4,mid1+1,mid2+1,n1,n2,1,1,q,q,m,mid5,mid6,o,q);
    gzcf(s55,s66,c5,1,1,q,q,1,1,q,q,m,mid5,mid6,o,q);                  //由结果可知当Q=2时会返回正确结果 
    gzcf(s77,s88,c6,1,1,q,q,1,1,q,q,m,mid5,mid6,o,q);
    gzcf(s99,s1010,c7,1,1,q,q,1,1,q,q,m,mid5,mid6,o,q);
    k=1;
    for(i=1;i<=mid5;i++)
    {
    s=1;    
    for(j=1;j<=mid6;j++)
    {
    c[i][j]=c5[k][s]+c4[k][s]-c2[k][s]+c6[k][s]; 
    s++;
    }
    k++;                                                                 
    }
    k=1;
    for(i=m;i<=mid5;i++)
    {
    s=1;
    for(j=mid6+1;j<=n5;j++)
    {
    c[i][j]=c1[k][s]+c2[k][s];
    s++;
    }
    k++;
    }
     k=1;
    for(i=mid5+1;i<=s5;i++)
    {
    s=1;                                
    for(j=m;j<=mid6;j++)
    {
    c[i][j]=c3[k][s]+c4[k][s];
    s++;
    }
    k++;
    }
     k=1;
    for(i=mid5+1;i<=s5;i++)
    {
    s=1;
    for(j=mid6+1;j<=n5;j++)
    {
    c[i][j]=c5[k][s]+c1[k][s]-c3[k][s]-c7[k][s];            //每次运算是S=1 
    s++;
    }
    k++;
    } 
}
 void jzcfaa(int s[100][100],int l[100][100],int m1,int m2,int m3,int m4,int h1,int h2,int h3,int h4,int q)          
    {

         int i,j;
         int w,p;
         w=m2;p=h2;
         for(i=1;i<=q;i++)
         {
        m2=w;h2=p;
         for(j=1;j<=q;j++)
        {
         s[i][j]=l[m1][m2]+l[h1][h2];
         m2++;
         h2++;
         }
         m1++;
         h1++;
         }

}



     void jzcfbb(int h[100][100],int l[100][100],int f1,int f2,int r1,int r2,int h11,int h22,int n11,int n22,int qq)           
    {                                             
         int i,j;
         int w,s;
         w=f2;s=h22;
         for(i=1;i<=qq;i++)
         {
            f2=w;h22=s;
         for(j=1;j<=qq;j++)
        {
         h[i][j]=l[f1][f2]-l[h11][h22];
         f2++;
         h22++;
         }
         f1++;
         h11++;
         }


    }

}

  • 写回答

5条回答 默认 最新

  • shen_wei 2017-01-11 08:39
    关注
        int s11[100][100],s22[100][100],s33[100][100],s44[100][100],s55[100][100],s66[100][100],s77[100][100],s88[100][100],s99[100][100],s1010[100][100];
        int c1[100][100],c2[100][100],c3[100][100],c4[100][100],c5[100][100],c6[100][100],c7[100][100];
    
    

    程序可以编译。。但是运行就挂,申请这么多空间,程序能不挂???何况还要递归??

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog