表置空,获取表元素个数,转置,旋转90度,相加,相乘
/******************************************************************************
Copyright (C), 2001-2011, Huawei Tech. Co., Ltd.
******************************************************************************
File Name :
Version :
Author :
Created : 2012/03/12
Last Modified :
Description :
Function List :
History :
1.Date : 2012/03/12
Author :
Modification: Created file
******************************************************************************/
#include <stdlib.h>
#include <iostream>
#define MAXSIZE 5
struct strmatrix
{
int rownum; /* 二维数组行数 */
int columnnum; /* 二维数组行数 */
int matrix[MAXSIZE][MAXSIZE];
};
void setnull(struct strmatrix *p) /*表置空*/
{
/* 代码在这里实现 */
for(int i = 0; i < MAXSIZE; i++)
{
for(int j = 0; j < MAXSIZE; j++)
{
p->matrix[i][j] = 0;
}
}
p->rownum = 0;
p->columnnum = 0;
}
int getelementnum(struct strmatrix *p) /*获取表中元素个数*/
{
int elementnum = 0;
/* 代码在这里实现 */
for(int i = 0; i < MAXSIZE; i++)
{
for(int j = 0; j < MAXSIZE; j++)
{
if(p->matrix[i][j] != 0)
elementnum++;
}
}
return elementnum;
}
int getxnum(struct strmatrix *p, int x) /*获得数组中等于某个值的元素的个数*/
{
int num = 0;
/* 代码在这里实现 */
for(int i = 0; i < MAXSIZE; i++)
{
for(int j = 0; j < MAXSIZE; j++)
{
if(p->matrix[i][j] == x)
num++;
}
}
return num;
}
void insertrow(struct strmatrix *p,int i,int *x) /* 插入1行 */
{
/* 代码在这里实现 */
if( i < 0 || i > MAXSIZE-1 )
return;
for(int k = MAXSIZE-1 ; k >= i; k--)
{
for(int j = 0; j < MAXSIZE - 1; j++)
{
if(k == i)
p->matrix[k][j] = x[j];
else
p->matrix[k][j] = p->matrix[k-1][j];
}
}
p->rownum++;
}
void insertcolumn(struct strmatrix *p,int i,int *x) /* 插入1列 */
{
/* 代码在这里实现 */
if( i < 0 || i > MAXSIZE-1 )
return;
for(int j = MAXSIZE -1 ; j >= i; j--)
{
for(int k = 0; k < MAXSIZE-1; k++)
{
if( j == i)
p->matrix[k][j] = x [k];
else
p->matrix[k][j] = p->matrix[k][j-1];
}
}
p->columnnum++;
}
void matrixtrans(struct strmatrix *p) /* 方矩阵置换 */
{
/* 代码在这里实现 */
/* 代码在这里实现 */
int temp = 0;
for(int i = 0; i < MAXSIZE; i++)
{
for(int j = 0; j < i; j++)
{
temp = p->matrix[i][j];
p->matrix[i][j] = p->matrix[j][i];
p->matrix[j][i] = temp;
}
}
}
void matrixwhirl(struct strmatrix *p) /* 方矩阵顺时针旋转90度 */
{
/* 代码在这里实现 */
matrixtrans(p); //先转置,再列交换
int temp =0;
for(int i = 0; i < p->columnnum / 2; i++)
{
for(int j = 0; j < p->rownum; j++)
{
temp = p->matrix[j][i];
p->matrix[j][i] = p->matrix[j][p->columnnum - i -1];
p->matrix[j][p->columnnum - i - 1] = temp;
}
}
}
void matrixplus(struct strmatrix *plu, struct strmatrix *p, struct strmatrix *q) /* 两个矩阵相加 */
{
/* 代码在这里实现 */
if(p->rownum != q->rownum || p->columnnum != q->columnnum)
return;
for(int i = 0; i < MAXSIZE; i++)
{
for(int j = 0; j < MAXSIZE; j++)
{
plu->matrix[i][j] = p->matrix[i][j] + q->matrix[i][j];
}
}
plu->columnnum = p->columnnum;
plu->rownum = p->rownum;
}
void matrixmultiply(struct strmatrix *mul, struct strmatrix *p, struct strmatrix *q) /* 两个矩阵相乘 */
{
/* 代码在这里实现 */
if(p->columnnum != q->rownum)
return;
int sum = 0;
int i = 0;
int j = 0;
for(i = 0; i < MAXSIZE; i++)
{
for(j = 0; j < MAXSIZE; j++)
{
sum = 0;
for(int k = 0; k < MAXSIZE; k++)
{
sum += p->matrix[i][k] * q->matrix[k][j];
}
mul->matrix[i][j] = sum;
}
}
mul->rownum = p->rownum;
mul->columnnum = q->columnnum;
}