| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1868 人关注过本帖
标题:用C语言编写矩阵乘法函数,但是最后输出有问题
只看楼主 加入收藏
leizhanzhi
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-5-31
结帖率:33.33%
收藏
已结贴  问题点数:10 回复次数:3 
用C语言编写矩阵乘法函数,但是最后输出有问题
编写一个3*3的c矩阵和3*1的a向量的乘法,做为函数在主函数中调用,将a向量的地址传入函数中,做乘法运算,将结果放入3*1的b向量中,并依次打印,最后返回值为b的地址,在主函数中将b的地址赋值给一个指针,通过这个指针输出b向量中的三个数据,但是最后通过指针输出的数据和在函数中依次打印的数据不同,这是为什么?编写另外一个程序,就是在函数中,将b中的元素赋值给a,返回a的地址,这种方法打印出来结果就是相同的,
程序代码:
#include <stdio.h>
int process(int a[])
{
   float b[3],c[3][3]={1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9};
   int i,j;
   for (i=0;i<3;i++)
   {
       float sum=0;
       for(j=0;j<3;j++)
       {
           sum=sum+c[i][j]*a[j];
       }
       b[i]=sum;
       printf("%f\n",b[i]);
   }
   return b;
}
int main()
{
    int a[3],i;
    float *p;
    for(i=0;i<3;i++)
    {
        scanf("%d",&a[i]);
    }
    p=process(a);
     for(i=0;i<3;i++)
     {
         printf("%f ",*p++);
     }
    return 0;
}

此时打印出来是这样的结果
图片附件: 游客没有浏览图片的权限,请 登录注册

修改的代码主要是这一部分:
程序代码:
{
float c[3][3]={1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9};
int j=0,i=0;
float b[3];
for (i=0;i<3;i++)
{
   float temp=0;
   for(j=0;j<3;j++)
   {
     temp=temp+c[i][j]*a[j];
   }
   b[i]=temp;
   printf("%f\n",b[i]);
}
for(i=0;i<3;i++)
{
    a[i]=b[i];
}
return a;
}

输出结果是这样的:
图片附件: 游客没有浏览图片的权限,请 登录注册
请问这是什么问题?希望前辈给予解答!谢谢
搜索更多相关主题的帖子: for 输出 float int 函数 
2020-05-31 09:11
yiyue123
Rank: 2
等 级:论坛游民
威 望:1
帖 子:78
专家分:78
注 册:2018-6-18
收藏
得分:5 
额,你的 数组 b,在函数调用完成之后就被自动释放了,因为它在栈上。
所以,你应该使用 malloc,来为 b 分配内存。
或者,为函数加一个指针参数,把 destination 地址传递过去。
就像这样
程序代码:
#include <stdio.h>
#include <stdlib.h>
float* process(int a[])
{
   float c[3][3]={1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9};
   int i,j;
   float *b = NULL;
   b = (float*)malloc(sizeof(*b) * 3);
   if (!b) return NULL;

   for (i=0;i<3;i++)
   {
       float sum=0;
       for(j=0;j<3;j++)
       {
           sum=sum+c[i][j]*a[j];
       }
       b[i]=sum;
       printf("%f\n",b[i]);
   }
   return b;
}
int main()
{
    int a[3],i;
    float *p;
    for(i=0;i<3;i++)
    {
        scanf("%d",&a[i]);
    }
    p=process(a);
    if (!p) { printf("error alloc\n"); exit(1);}
    for(i=0;i<3;i++)
    {
        printf("%f ",*p++);
    }
    free(p);
    return 0;
}
2020-05-31 09:23
leizhanzhi
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2020-5-31
收藏
得分:0 
回复 2楼 yiyue123
好的,我去学习一下,谢谢您~
2020-05-31 09:38
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:5 
或者在主函数定义b数组,把它也作为参数传递给函数process
程序代码:
...
void process(int a[],float b[])
{
    ...
}
int main()
{
    float b[3];
    ...
    process(a,b);
    ...
}

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-05-31 10:15
快速回复:用C语言编写矩阵乘法函数,但是最后输出有问题
数据加载中...
 
   



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

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