| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 660 人关注过本帖
标题:一个关于参数的传递问题,自己解决不了。。。请大家帮忙看看
只看楼主 加入收藏
Invariably
Rank: 2
等 级:论坛游民
帖 子:54
专家分:46
注 册:2010-9-18
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:4 
一个关于参数的传递问题,自己解决不了。。。请大家帮忙看看
程序中的红色代码,应该有参数传递的问题,但是自己也不知道在哪,输出的结果是些看不懂的东西,请大家看看
# include<iostream>
using namespace std;
const N=3;
int A[N][N];
void print_matrix(int*q=NULL,int n=1)//把矩阵A打印到屏幕上
{
    cout<<"A的"<<n<<"次方 ="<<endl;
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            cout.width (5);
            cout.fill();
            cout<<*(q+i*N+j)<<',';
        }
        cout<<endl;
    }
}

void initia_matrix()
{
    cout<<"请输入一个"<<N<<"*"<<N<<"的矩阵A,按行输入"<<endl;
    for(int i=0;i<N;i++)
    {
    for(int j=0;j<N;j++)
        cin>>A[i][j];
    }
}
int* matrix_multip(int*p=NULL,int *q=NULL)//实现两个矩阵相乘
{
    int C[N][N];
    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
        {
            int sum=0;
            for(int k=0;k<N;k++)
                sum+=(*(p+i*N+k))*(*(q+k*N+j));
            C[i][j]=sum;
            cout<<C[i][j]<<',';
        }
    return &C[0][0];
}
int main()
{
    int*q=NULL;
    initia_matrix();
    print_matrix(&A[0][0]);
    q=matrix_multip(&A[0][0],&A[0][0]);
    print_matrix(q,2);
    return 0;
}
搜索更多相关主题的帖子: void include 
2011-05-08 15:37
Invariably
Rank: 2
等 级:论坛游民
帖 子:54
专家分:46
注 册:2010-9-18
收藏
得分:0 
大侠啊,大侠啊,帮忙看看啊
2011-05-11 14:55
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:20 
C[N][N];的作用在函数中,出函数就没用了,你就是要结果吧,
int matrix_multip(int*p=NULL,int *q=NULL)
返回时
return C[0][0];
就得到结果了。
2011-05-11 21:58
Invariably
Rank: 2
等 级:论坛游民
帖 子:54
专家分:46
注 册:2010-9-18
收藏
得分:0 
这样只能输出这个矩阵的第一个元素,不能把整个矩阵全输出来
并且如果改成这样整个程序就全错了,
那重新吧整个程序发上来吧

# include<iostream>
using namespace std;
const N=3;
int A[N][N];
void print_matrix(int*q=NULL,int n=1)//把矩阵A打印到屏幕上
{
    cout<<"A的"<<n<<"次方 ="<<endl;
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<N;j++)
        {
            cout.width (5);
            cout.fill();
            cout<<*(q+i*N+j)<<',';
        }
        cout<<endl;
    }
}

void initia_matrix()
{
    cout<<"请输入一个"<<N<<"*"<<N<<"的矩阵A,按行输入"<<endl;
    for(int i=0;i<N;i++)
    {
    for(int j=0;j<N;j++)
        cin>>A[i][j];
    }
}
int* matrix_multip(int*p=NULL,int *q=NULL)//实现两个矩阵相乘
{
    int C[N][N];
    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++)
        {
            int sum=0;
            for(int k=0;k<N;k++)
                sum+=(*(p+i*N+k))*(*(q+k*N+j));
            C[i][j]=sum;
            cout<<C[i][j]<<',';
        }
    return &C[0][0];
}
int* matrix_comp(int*p=NULL,int n=1)
{//用递归的方法快速地求矩阵A的n次方
    if(n<=0)return false;
    if(n==1)return p;
    if(n==2)return matrix_multip(p,p);
    else if(0==n%2) return matrix_multip(matrix_comp(p,n/2),matrix_comp(p,n/2));
         else return  matrix_multip(matrix_comp(p,n-1),p);
}

int main()
{
    int*q=NULL;
    initia_matrix();
    print_matrix(&A[0][0]);
    q=matrix_multip(&A[0][0],&A[0][0]);
    print_matrix(q,2);
    matrix_comp(&A[0][0],5);
    return 0;
}


但是这个C[N][N]也不能放在外面来定义,那是一个递归函数,每一次都要产生一个不同的C[N][N]的
大家帮我看看吧!!!!!
2011-05-13 22:27
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
可以从外面传C,在递归里增加一个C,当有结果后,复制到外面传进来的C里,让它带回结果到上一层去。
你现在的代码是返回了函数内部的局部变量,在函数返回后,这个变量的空间被回收,结果就不正确了。
2011-05-20 00:08
快速回复:一个关于参数的传递问题,自己解决不了。。。请大家帮忙看看
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017140 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved