把我的 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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值