n阶矩阵的乘法(C实现)
来源:互联网 发布:身份证号的js验证 编辑:程序博客网 时间:2024/05/16 09:59
#include "stdio.h"#include "stdlib.h"void main (){ int m,l,p,q;printf("输入第一个矩阵的维数m和l:");scanf("%d%d",&m,&l);printf("输入第二个矩阵的维数p和q:");scanf("%d%d",&p,&q);while (l!=p){printf("两个矩阵不匹配,不能进行相乘运算,请重新输入...\n\n");printf("输入第一个矩阵的维数m和l:\n");scanf("%d%d",&m,&l);printf("输入第二个矩阵的维数p和q:\n");scanf("%d%d",&p,&q);}double a[200][200]={0}, b[200][200]={0},sum=0;int i,j,k=0;for (i=0;i<m;i++){for (j=0;j<l;j++){a[i][j]=(double)rand()/RAND_MAX; }}printf("随机矩阵a是:\n");for (i=0;i<m;i++){for (j=0;j<l;j++){printf("%f ",a[i][j]);}printf("\n");}//cout<<"输入一个3*2的矩阵:"<<endl;for (i=0;i<p;i++){for (j=0;j<q;j++){b[i][j]=(double)rand()/RAND_MAX; }}printf("随机矩阵b是:\n");for (i=0;i<p;i++){for (j=0;j<q;j++){printf("%f ",b[i][j]);}printf("\n");}printf("ab相乘结果为:\n");for (i=0;i<m;i++){while (k<q){for (j=0;j<q;j++){sum = a[i][j]*b[j][k]+sum; } printf("%f ",sum);k++;sum=0;}k=0;printf("\n");}}
运行效果图
注意:(二维数组的传参真麻烦。以后想办法解决)
最近做矩阵运算处理,依据以往的懒想法,想直接搞一个 函数,可以传递 任何维数的矩阵进行运算。
所以,声明了这样一个函数: void matrix_mult(float **p);
然后再主函数中 声明了 一个 二维数组float a[3][3];
进而在使用时这样:matrix_mult(a);
之后悲剧,编译器提示:cannot convert parameter 1 from 'float [3][3]' to 'float ** '
有错误。
改正方法:
matrix_mult(float (*p)[N]);//N 为声明二维数组第二维的大小值,然后再进行传参:matrix_mult(a);OK了。
总结:这是一个老生常谈的问题:关于数组和指针
说明:
指针是一个变量名,而数组不是变量名,数组跟接近于一种结构体。
例子:
int *p; int a[2]; p = a;
int n = sizeof(p);//
int len = sizeof(a);
n 的值为4,而len的值为8;
int a[10][20]; //真正的二维数组,
int *b[10]; //定义分配了10个指针,没有初始化。换句话说,b是一个由10个整型(int)指针构成的指针数组。
int (*p)[3];//指向数组的指针
int (*p)();//指向函数的指针
int *p();//p是一个函数,返回值是一个int型指针
float ** 这里的p不是二维数组的指针,而是指向指针的指针,即二级指针。
正确的二维数组的指针应该是:Int a[2][2];Int (*p)[2];//定义时无论数组维数,只可忽略第一维
二维数组其实只是一个指针,而二级指针是指向指针的指针,所以二者并不等价
- n阶矩阵的乘法(C实现)
- 实现两个N*N矩阵的乘法
- 矩阵的乘法和求逆(C语言实现)
- 矩阵乘法的C语言实现
- C语言矩阵乘法(指针实现)
- 【矩阵乘法】:矩阵乘法的基本实现
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- C#实现两个N*N矩阵的乘法,矩阵必须由一维数组表示
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- <google面试题>实现两个N*N矩阵的乘法,矩阵由一维数组表示
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- 谷歌面试:实现两个N*N矩阵的乘法,矩阵由一维数组表示
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- 实现两个N*N矩阵的乘法 矩阵用一维数组表示
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- 实现两个N*N矩阵的乘法,矩阵由一维数组表示
- 编译和测试android的驱动程序学习笔记
- angularjs内联注入
- Java RMI之HelloWorld
- POJ3067(树状数组||线段树)
- 【新技术,学习、商业均可】HTML5 全新高大尚后台 bootstrap springmvc mybatis java企业级通框架源码入门
- n阶矩阵的乘法(C实现)
- 5、字典、集合、数组排序
- Ubuntu 14.04 英文版下安装搜狗拼音
- 关于网络二_HTTP协议访问网络:HttpUrlConnection、HttpClient
- [02]Hello World!
- 【UML】 之 构件图 & 部署图
- 面试书籍笔记
- 垃圾收集器回收对象的依据和时机
- 线性表