`
yzd
  • 浏览: 1816955 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

实验三 数组

一、 实验目的

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;

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics