栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言实现动态二维数组及相乘

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言实现动态二维数组及相乘

一、二维数组的概念  1、二维数组本质上是以数组作为数组元素的数组,即数组的数组。 2、二维数组就是一个有行和列的矩阵,每一行代表一个数组,即数组的数组。 3、每一行数组内元素所在的位置可以用行和列号来表示。 二、代码部分 一、头文件 二、动态二维数组的结构 三、初始化 四、随机赋值 五 、打印 六、相乘 七、测试代码 八、主函数 九、测试结果 十、总结

一、头文件

#include 
#include 
#include 

#define ROWS 4
#define COLUMNS 5

二、动态二维数组的结构

//动态二维数组 
typedef struct TwoDArray
{
	int rows;//行 
	int columns;//列 
	int **elements;
}TwoDArray, *TwoDArrayPtr;

 

三、初始化

//初始化 
TwoDArrayPtr initTwoDArray(int newRows,int newColumns)
{
	int i;
	
	TwoDArrayPtr resultPtr = (TwoDArrayPtr)malloc(sizeof(struct TwoDArray));
	resultPtr->rows = newRows;
	resultPtr->columns = newColumns;
	resultPtr->elements = (int**)malloc(newRows*sizeof(int*));
	
	for(i = 0; i < newRows; i ++)
	{
		resultPtr->elements[i] = (int*)malloc(newColumns*sizeof(int));
	}
	
	return resultPtr;
}

 

四、随机赋值

//随机赋值 
void randomizeTwoDArray(TwoDArrayPtr newPtr,int lower,int upper)
{
	int i,j;
	
	for(i = 0;i < newPtr->rows ;i++)
	{
		for(j = 0;j columns ;j++)
		{
			newPtr->elements[i][j] = rand()%(upper - lower)+lower;
		}
	}
}

 

五 、打印

//打印二维数组
void printTwoDArray(TwoDArrayPtr newPtr)
{
	int i,j;
	
	for(i = 0;i < newPtr->rows ;i++)
	{
		for(j = 0;j < newPtr->columns ;j++)
		{
			printf("%d ",newPtr->elements [i][j]);
		}
		printf("n");
	}
	printf("rn");
} 

 

六、相乘

//二维数组相乘
TwoDArrayPtr matrixMultiply(TwoDArrayPtr newPtr1,TwoDArrayPtr newPtr2)
{
	int i,j,k,sum;
	
	if(newPtr1->columns != newPtr2->rows)
	{
		printf("The two matrices can not multiply.n");
		return ;
	}
//初始一个新的二维数组用来储存相乘后的数据,且该二维数组的行数等于newPtr1,列数等于newPtr2 
	TwoDArrayPtr resultPtr = initTwoDArray(newPtr1->rows,newPtr2->columns ); 
	
	for(i = 0;i < newPtr1->rows;i++)
	{
		for(j = 0;j < newPtr2->columns ;j++)
		{
			sum = 0;
			for(k = 0;k < newPtr1->columns;k++)
			{
				sum += newPtr1->elements [i][k] * newPtr2->elements [k][j];
			}
			resultPtr->elements[i][j] = sum;
		}
	}
	return resultPtr;
} 

 

七、测试代码

//测试函数
void twoDArrayTest()
{
	TwoDArrayPtr tempPtr1,tempPtr2,tempPtr3;
	
	//初始化 
	tempPtr1 = initTwoDArray(3,2);
	tempPtr2 = initTwoDArray(2,4);
	
	//随机赋值 
	randomizeTwoDArray(tempPtr1,1,5);
	randomizeTwoDArray(tempPtr2,4,9);
	
	//打印数组 
	printf("The first darray is:n");
	printTwoDArray(tempPtr1);
	printf("The second darray is:n");
	printTwoDArray(tempPtr2);
	
	//进行运算 
	tempPtr3 = matrixMultiply(tempPtr1,tempPtr2);
	printf("The result darray is:n");
	printTwoDArray(tempPtr3);
} 

八、主函数

void main()
{
	twoDArrayTest();
}

九、测试结果

 

 

十、总结

我认为难点主要在初始化和相乘部分,相乘部分画好图很容易理解到底谁是i,j,k,初始化部分有点迷惑。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/916826.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号