您的位置:首页 > 其它

第九周项目2---矩阵运算

2016-10-23 15:44 148 查看
/*问题及代码

 *Copyright(c)2015,烟台大学计算机学院

 *All right reserved.

 *文件名称:矩阵运算.cpp

 *作者:邹晓琳

 *完成日期;2015年10月23日

 *版本号;v1.0

 *

 *问题描述: 设计算法,实现两个用压缩形式存储的对称矩阵A和B的加法和乘法。

              实现中请使用好前面设计的基本运算。

 *输入描述:两个矩阵

 *程序输出:两个矩阵相加与相乘的结果
*/

#include <stdio.h>

#define N 4

#define M 10

int value(int a[],int i,int j)

{

    if (i>=j)

        return a[(i*(i+1))/2+j];

    else

        return a[(j*(j+1))/2+i];

}

void madd(int a[],int b[],int c[]
)

{

    int i,j;

    for (i=0; i<N; i++)

        for (j=0; j<N; j++)

            c[i][j]=value(a,i,j)+value(b,i,j);

}

void mult(int a[],int b[],int c[]
)

{

    int i,j,k,s;

    for (i=0; i<N; i++)

        for (j=0; j<N; j++)

        {

            s=0;

            for (k=0; k<N; k++)

                s=s+value(a,i,k)*value(b,k,j);

            c[i][j]=s;

        }

}

void disp1(int a[])

{

    int i,j;

    for (i=0; i<N; i++)

    {

        for (j=0; j<N; j++)

            printf("%4d",value(a,i,j));

        printf("\n");

    }

}

void disp2(int c[]
)

{

    int i,j;

    for (i=0; i<N; i++)

    {

        for (j=0; j<N; j++)

            printf("%4d",c[i][j]);

        printf("\n");

    }

}

int main()

{

    int a[M]= {1,2,3,4,5,6,7,8,9,10};  //a表示压缩存储的对称矩阵

    int b[M]= {1,1,1,1,1,1,1,1,1,1};

    int c1

,c2

;

    madd(a,b,c1);

    mult(a,b,c2);

    printf("a矩阵:\n");

    disp1(a);

    printf("b矩阵:\n");

    disp1(b);

    printf("a+b:\n");

    disp2(c1);

    printf("a×b:\n");

    disp2(c2);

    printf("\n");

    return 0;

}

运行结果:





知识点总结:

这个程序的特点主要是相加或者相乘的时候不是利用数组而是直接用value函数来代表,因为这个矩阵只需要输入下三角的数即可,所以根据用函数表示相加的变量可以使程序更容易

学习心得:

在以后运算复杂关系的变量时可直接选择函数代表的变量相加,是程序不仅简单而且清晰易懂。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编辑语言