实验三 数组
一、 实验目的
1.熟悉数组的结构
2.掌握矩阵的压缩存储
3.能够对数组和矩阵的压缩存储进行运算
一、 实验内容
2. A和B是两个n×n阶的对称矩阵,输入时,以行为主序输入对称矩阵的下三角元素,存入以尾数组,编写一个算法计算对称矩阵A和B的乘积。(文件夹:对称矩阵相乘)
/* 数组结构类型的定义 .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;
/*
A和B是两个n×n阶的对称矩阵,输入时,以行为主序输入对称矩阵的下三角元素,存入一维数组,
编写一个算法计算对称矩阵A和B的乘积。
*/
#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;
}