现在的位置: 首页 > 综合 > 正文

把我的 C 作业贴出来 实验三 数组——2

2013年11月30日 ⁄ 综合 ⁄ 共 1736字 ⁄ 字号 评论关闭

 

实验三  数组

一、        实验目的

1.熟悉数组的结构

2.掌握矩阵的压缩存储

3.能够对数组和矩阵的压缩存储进行运算

 

 

一、        实验内容

2.         AB是两个n×n阶的对称矩阵,输入时,以行为主序输入对称矩阵的下三角元素,存入以尾数组,编写一个算法计算对称矩阵AB的乘积。(文件夹:对称矩阵相乘)


/*数组结构类型的定义.h*/

 

/*

const int n=3;

const int size=n*(n+1)/2;

*/

#define n 3

#define size (n*(n+1)/2)

 

typedef int datatype;

 

typedef struct{

       datatype A[size],B[size],C[n][n];

}array;

/*

AB是两个n×n阶的对称矩阵,输入时,以行为主序输入对称矩阵的下三角元素,存入一维数组,

编写一个算法计算对称矩阵AB的乘积。

*/

#include <stdio.h>

#include <stdlib.h>

 

#include"数组结构类型的定义.h"

 

int main()

{

       array * pa;

 

       /*pa=new array;*/

       pa = (array *)malloc( sizeof(array) );

 

       printf("请输入矩阵A(%d各元素)=/n",size);

       input(pa->A);/*以行为主序输入矩阵A的下三角*/

       printf("请输入矩阵B(%d各元素)=/n",size);

       input(pa->B);/*以行为主序输入矩阵B的下三角*/

 

       mult(pa);

 

       puts("A*B=");

       output(pa->C);/*输出矩阵C*/

 

       system("PAUSE");

       return 0;

}

/*对称矩阵的输入.h*/

#include"数组结构类型的定义.h"

 

void input(datatype x[])

{

    int i;

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

              /*cin>>x[i];*/

              scanf("%d",x+i);

       return ;

}

/*矩阵的输出.h*/

#include"数组结构类型的定义.h"

 

void output(datatype x[][n])

{

    int i,j;

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

      {

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

              /*    cout<<setw(5)<<x[i][j];*/

                     printf("%5d",x[i][j]);

              /*cout<<endl;*/

              puts("/n");

       }

       return ;

}

#include"数组结构类型的定义.h"

 

void mult( array * pa )

{

    void take( int pb[] , int p[] , int j );

    int row[n];

    int col[n];

    int i,j;

    int k;

    int t;

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

    {

        take( pa->A , row , i );

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

        {

            take( pa->B , col , j );

            pa->C[i][j] = 0;

            for(k=0;k<n;k++) pa->C[i][j] += row[k]*col[k];

        }

    }

    return;

}

 

void take( int pb[] , int p[] , int j )

{

    int i;

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

    {

        if(i>=j)

        p[i] = pb[i*(i+1)/2+j];

        else

        p[i] = pb[j*(j+1)/2+i];

    }

    return;

}

抱歉!评论已关闭.