C语言利用数组计算矩阵乘法

本文比较了各个版本的矩阵乘法计算

IJK版本

c 复制代码
#include <stdio.h>
int main()
{
	int A[2][2] = { 0,1,2,3 };
	int B[2][2] = { 4,5,6,7 };
	int C[2][2] = { 0,0,0,0 };
	int num = 2;
	for (int i = 0; i < num; ++i) {
		for (int j = 0; j < num; ++j) {
			for (int k = 0; k < num; k++) {
				C[i][j] += A[i][k] * B[k][j];
			}
		}
	}

	for (int i = 0; i < num; ++i) {
		for (int j = 0; j < num; ++j) {
			printf_s("C[%d][%d] = %d\t\t", i, j, C[i][j]);
		}
		printf_s("\r\n");
	}
	printf_s("\r\n");

	for (int i = 0; i < num; ++i) {
		for (int j = 0; j < num; ++j) {
			printf_s("&C[%d][%d] = %p\t", i, j, &C[i][j]);
		}
		printf_s("\r\n");
	}
	printf_s("\r\n");
}

JIK版本

c 复制代码
#include <stdio.h>
int main()
{
	int A[2][2] = { 0,1,2,3 };
	int B[2][2] = { 4,5,6,7 };
	int C[2][2] = { 0,0,0,0 };
	int num = 2;
	for (int j = 0; j < num; ++j) {
		for (int i = 0; i < num; ++i) {
			for (int k = 0; k < num; k++) {
				C[i][j] += A[i][k] * B[k][j];
				printf_s("C[%d][%d] += A[%d][%d] * B[%d][%d] = %d\t\t", i, j, i, k, k, j, C[i][j]);
			}
			printf_s("\r\n");
		}
	}
	printf_s("\r\n");

	for (int i = 0; i < num; ++i) {
		for (int j = 0; j < num; ++j) {
			printf_s("C[%d][%d] = %d\t\t", i, j, C[i][j]);
		}
		printf_s("\r\n");
	}
	printf_s("\r\n");

	for (int i = 0; i < num; ++i) {
		for (int j = 0; j < num; ++j) {
			printf_s("&C[%d][%d] = %p\t", i, j, &C[i][j]);
		}
		printf_s("\r\n");
	}
	printf_s("\r\n");
	return 0;
}

JKI版本

c 复制代码
#include <stdio.h>
int main()
{
	int A[2][2] = { 0,1,2,3 };
	int B[2][2] = { 4,5,6,7 };
	int C[2][2] = { 0,0,0,0 };
	int num = 2;
	for (int j = 0; j < num; ++j) {
		for (int k = 0; k < num; k++) {
			for (int i = 0; i < num; ++i) {
				C[i][j] += A[i][k] * B[k][j];
				printf_s("C[%d][%d] += A[%d][%d] * B[%d][%d] = %d\t\t", i, j, i, k, k, j, C[i][j]);
			}
			printf_s("\r\n");
		}
	}
	printf_s("\r\n");

	for (int i = 0; i < num; ++i) {
		for (int j = 0; j < num; ++j) {
			printf_s("C[%d][%d] = %d\t\t", i, j, C[i][j]);
		}
		printf_s("\r\n");
	}
	printf_s("\r\n");

	for (int i = 0; i < num; ++i) {
		for (int j = 0; j < num; ++j) {
			printf_s("&C[%d][%d] = %p\t", i, j, &C[i][j]);
		}
		printf_s("\r\n");
	}
	printf_s("\r\n");
	return 0;
}

KJI版本

c 复制代码
#include <stdio.h>
int main()
{
	int A[2][2] = { 0,1,2,3 };
	int B[2][2] = { 4,5,6,7 };
	int C[2][2] = { 0,0,0,0 };
	int num = 2;
	for (int k = 0; k < num; k++) {
		for (int j = 0; j < num; ++j) {
			for (int i = 0; i < num; ++i) {
				C[i][j] += A[i][k] * B[k][j];
				printf_s("C[%d][%d] += A[%d][%d] * B[%d][%d] = %d\t\t", i, j, i, k, k, j, C[i][j]);
			}
			printf_s("\r\n");
		}
	}
	printf_s("\r\n");

	for (int i = 0; i < num; ++i) {
		for (int j = 0; j < num; ++j) {
			printf_s("C[%d][%d] = %d\t\t", i, j, C[i][j]);
		}
		printf_s("\r\n");
	}
	printf_s("\r\n");

	for (int i = 0; i < num; ++i) {
		for (int j = 0; j < num; ++j) {
			printf_s("&C[%d][%d] = %p\t", i, j, &C[i][j]);
		}
		printf_s("\r\n");
	}
	printf_s("\r\n");
	return 0;
}

KIJ版本

c 复制代码
#include <stdio.h>
int main()
{
	int A[2][2] = { 0,1,2,3 };
	int B[2][2] = { 4,5,6,7 };
	int C[2][2] = { 0,0,0,0 };
	int num = 2;
	for (int k = 0; k < num; k++) {
		for (int i = 0; i < num; ++i) {
			for (int j = 0; j < num; ++j) {
				C[i][j] += A[i][k] * B[k][j];
				printf_s("C[%d][%d] += A[%d][%d] * B[%d][%d] = %d\t\t", i, j, i, k, k, j, C[i][j]);
			}
			printf_s("\r\n");
		}
	}
	printf_s("\r\n");

	for (int i = 0; i < num; ++i) {
		for (int j = 0; j < num; ++j) {
			printf_s("C[%d][%d] = %d\t\t", i, j, C[i][j]);
		}
		printf_s("\r\n");
	}
	printf_s("\r\n");

	for (int i = 0; i < num; ++i) {
		for (int j = 0; j < num; ++j) {
			printf_s("&C[%d][%d] = %p\t", i, j, &C[i][j]);
		}
		printf_s("\r\n");
	}
	printf_s("\r\n");
	return 0;
}

IKJ版本

c 复制代码
#include <stdio.h>
int main()
{
	int A[2][2] = { 0,1,2,3 };
	int B[2][2] = { 4,5,6,7 };
	int C[2][2] = { 0,0,0,0 };
	int num = 2;
	for (int i = 0; i < num; ++i) {
		for (int k = 0; k < num; k++) {
			for (int j = 0; j < num; ++j) {
				C[i][j] += A[i][k] * B[k][j];
				printf_s("C[%d][%d] += A[%d][%d] * B[%d][%d] = %d\t\t", i, j, i, k, k, j, C[i][j]);
			}
			printf_s("\r\n");
		}
	}
	printf_s("\r\n");

	for (int i = 0; i < num; ++i) {
		for (int j = 0; j < num; ++j) {
			printf_s("C[%d][%d] = %d\t\t", i, j, C[i][j]);
		}
		printf_s("\r\n");
	}
	printf_s("\r\n");

	for (int i = 0; i < num; ++i) {
		for (int j = 0; j < num; ++j) {
			printf_s("&C[%d][%d] = %p\t", i, j, &C[i][j]);
		}
		printf_s("\r\n");
	}
	printf_s("\r\n");
	return 0;
}

外部参考

深入理解计算机系统(第三版)

相关推荐
传奇开心果编程4 小时前
【Rust入门知识点学与练】第36课:所有权——移动、借用、Copy、切片
开发语言·学习·rust
传奇开心果编程5 小时前
【Rust入门知识点学与练】第35课:工具链与反馈环——先学会读编译器在说什么
开发语言·学习·rust
重生之小比特5 小时前
【Java SE】字符串 - String类
java·开发语言·intellij-idea
lsswear13 小时前
Python 并发 线程
开发语言·python
郑州光合科技余经理13 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
软件课代表CiCi14 小时前
运行库是什么?电脑缺运行库怎么办?c++运行库缺失修复全攻略
开发语言·c++·windows·电脑·dll修复·dll丢失·运行库
Ivanqhz14 小时前
MLIR OpBuilder
开发语言·python·mlir
红宝村村长15 小时前
windows笔记本双系统ubuntu设置
开发语言
菜鸟~noob23316 小时前
【电子战】第15篇:混合定位——TDOA/FDOA/AOA 联合【含matlab代码】
开发语言·matlab
IT小白杨17 小时前
社媒多账号运营的环境隔离:一张图谱模型,解释清“为什么换IP还是被连坐“
经验分享·笔记·矩阵·指纹浏览器