首页 > 其他分享 >c语言实现矩阵相乘

c语言实现矩阵相乘

时间:2023-04-14 18:01:20浏览次数:38  
标签:语言 int Cb Ca 矩阵 ++ 相乘 Ra printf

一、问题描述。

用动态二维数组的知识进行矩阵相乘。

二、设计思路。

1、申请两个动态二维数组。

2、输入两个矩阵的行数和列数。

3、如果满足前一个矩阵的列数等于第二个矩阵的行数,就让前一个矩阵的x行的第y个元素乘以后一个矩阵的x列的第y的元素。

4、以矩阵的形式输出。

三、程序流程图。

 

 

四、代码实现。

#include <stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int Ra, Ca, Rb, Cb;
int *p = NULL, *q = NULL, *y = NULL;
scanf("%d%d", &Ra, &Ca);
p = (int *)malloc((Ra*Ca)*sizeof(int));
if (p == NULL)
{
printf("没有足够空间!\n");
exit(1);
}
else
{
for (int i = 0; i < Ra; i++)
{
for (int j = 0; j < Ca; j++)
{
scanf("%d", p + i*Ca + j);
}
}
}
scanf("%d%d", &Rb, &Cb);
q = (int *)malloc((Rb*Cb)*sizeof(int));
if (q == NULL)
{
printf("没有足够空间!\n");
exit(1);
}
else
{
for (int i = 0; i < Rb; i++)
{
for (int j = 0; j < Cb; j++)
{
scanf("%d", q + i*Cb + j);
}
}
}
if (Ca != Rb)
{
printf("Error: %d != %d", Ca, Rb);
}
else
{
y = (int *)calloc((Ra*Cb), sizeof(int));
if (y == NULL)
{
printf("没有足够空间!\n");
exit(1);
}
else
{
printf("%d %d", Ra, Cb);
printf("\n");
for (int i = 0; i < Ra; i++)
{
for (int j = 0; j < Cb; j++)
{
for (int k = 0; k < Ca; k++)
{
*(y + i*Cb + j) += *(p + i*Ca + k)* *(q + k*Cb + j);
}
if (j < Cb - 1)
{
printf("%d ", *(y + i*Cb + j));
}
else if (j == Cb - 1)
{
printf("%d", *(y + i*Cb + j));
}
}
printf("\n");
}
}
}
free(q);
free(p);
free(y);
return 0;
}

 

标签:语言,int,Cb,Ca,矩阵,++,相乘,Ra,printf
From: https://www.cnblogs.com/luoqingci/p/17319170.html

相关文章

  • 三门问题的简单c语言代码
    inti,n,stayWins=0,switchWins=0;srand(time(NULL));printf("请输入尝试次数:");scanf("%d",&n);for(i=0;i<n;i++){prizeDoor=rand()%3+1;guess=rand()%3+1;do{open=rand()%3+1;......
  • C语言-指针
    C语言-指针指针是C语言中广泛使用的一种数据类型。运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构;能很方便地使用数组和字符串;并能象汇编语言一样处理内存地址,从而编出精练而高效的程序。指针极大地丰富了C语言的功能。学习指针是学习C语言中最重要的一环,......
  • C语言报错
    1、Useofundeclaredidentifier'SPIT_FLAG_TIMEOUT'  解决:使用未定义的标识符:SPIT_FLAG_TIMEOUT没有定义,但用#define修饰的语句又不标红。......
  • Android兼容性矩阵
    起因新上的设备,发现hal不支持,因此记录下,下图已经是修复了正常的了36的对应的native函数是android_location_GnssLocationProvider_is_supported,这一看就是hal没有staticjbooleanandroid_location_GnssLocationProvider_is_supported(JNIEnv*/*env*/,jclas......
  • 2.4 Go语言从入门到精通:条件和循环
    在程序中必然少不了条件语句和循环语句,Go语言在条件、循环语句方面与其他语言存在一定的差异,本文将针对Go语言中条件语句、循环语句的使用,这将会奠定后续复杂程序的基础。1、条件语句条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为true来决定是否执行指定语句,......
  • 2.3 Go语言从入门到精通:数据类型
    文章目录1、基本数据类型1.1布尔型1.2数值型1.2.1整型1.2.2浮点型1.2.3复数1.3字符串型2、派生数据类型2.1指针2.2数组2.3结构体2.4通道(channel)2.5切片(slice)2.6函数2.7接口(interface)2.8Map3、其他3.1数据类型转换3.2类型别名4、小结Go语言是一种静态类型的......
  • 3.3 Go语言从入门到精通:包管理工具之Govendor
    Govendor是Go的另一个依赖包管理工具,它的出现可以避免不同用户在clone同一个工程后从外部获取不同依赖库版本的问题,很好的弥补了GOPATH包管理的缺陷。govendor会将工程需要的依赖包添加到工程的vendor目录下,并且该目录中vendor.json文件会保存添加的依赖包的路径等信息......
  • 3.1 Go语言从入门到精通:包
    Go语言像Java语言一样都拥有包的概念,通过使用包来组织源代码。包(package)是多个Go源码的集合,是一种高级的代码复用方案。Go语言中为我们提供了很多内置包,如fmt、os、io等。任何Go源代码文件都必属于某个包,同时源码文件的第一行有效代码必须是packagepacakgeName语句,通过......
  • 3.2 Go语言从入门到精通:包管理工具之GOPATH
    当我们真正用Go去做项目,或者阅读Go项目(如,Go实现的开源项目)时,不可避免的会遇到包依赖问题,一些包管理方式总是很难区分、选择。Go的包管理与Java的Maven依赖管理不太一样,起初Go的包管理方式经常会被人吐槽,但随之Go版本的升级也出现了不同的包管理方式,以满足不同的需求。今天,我们......
  • C语言函数大全--g开头的函数(下)
    C语言函数大全本篇介绍C语言函数大全--g开头的函数(下)17.getmodename17.1函数说明函数声明函数功能char*getmodename(intmode_name);获取指定的图形模式名17.2演示示例#include<graphics.h>#include<stdlib.h>#include<stdio.h>intmain(void){......