二维数组基本操作

表置空,获取表元素个数,转置,旋转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;
			
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值