C语言编写能加减乘矩阵的程序
2017-12-25 20:57
197 查看
C语言编写能加减乘矩阵的程序
学弟的小练习#include "stdafx.h" #include<stdlib.h> #include <stdio.h> //新建 int **newArr(int X, int Y) { int **p, i; p = (int **)malloc(X * sizeof(int *)); for (i = 0; i < X; i++) { p[i] = (int *)malloc(Y * sizeof(int)); } return p; } //释放内存 void deleteArr(int **p, int X) { int i; for (i = 0; i < X; i++) free(p[i]); free(p); } //计算矩阵相加 参数1:矩阵A 参数2:矩阵B 参数3:矩阵行数,列数 int **addArr(int **A, int **B,int X,int Y) { int **p, i,j; p = (int **)malloc(X * sizeof(int *)); for (i = 0; i < X; i++) p[i] = (int *)malloc(Y * sizeof(int)); for (i = 0; i < X; i++) { for (j = 0; j < Y; j++) p[i][j] = A[i][j] + B[i][j]; } return p; } //计算矩阵相减 参数1:矩阵A 参数2:矩阵B 参数3:矩阵行数,列数 int **subArr(int **A, int **B, int X, int Y) { int **p, i, j; p = (int **)malloc(X * sizeof(int *)); for (i = 0; i < X; i++) p[i] = (int *)malloc(Y * sizeof(int)); for (i = 0; i < X; i++) { for (j = 0; j < Y; j++) p[i][j] = A[i][j] - B[i][j]; } return p; } //计算矩阵相乘 参数1:矩阵A 参数2:矩阵B 参数3,4,5,6:矩阵行数,列数 int **multiplyArr(int **A, int **B, int aX, int aY, int bX, int bY) { //A[aX][aY] * B[bX][bY] =C[aX][bY] int **p, i,j,k; p = (int **)malloc(aX * sizeof(int *)); for (i = 0; i < aX; i++) p[i] = (int *)malloc(bY * sizeof(int)); for (i = 0; i < aX; i++) { for (j = 0; j < bY; j++) { p[i][j] = 0; } } for (i = 0; i<aX; i++) { for (j = 0; j<bY; j++) { for (k = 0; k<aY; k++) { p[i][j] += A[i][k] * B[k][j]; } } } return p; } //打印矩阵 参数1:矩阵 参数2,3:矩阵行数,列数 void printArr(int **arr, int X, int Y) { int i, j; printf("输出矩阵开始:\n"); for (i = 0; i < X; i++) { for (j = 0; j < Y; j++) { printf(" %5d", arr[i][j]); } printf("\n"); } printf("输出矩阵结束:\n"); } void main() { int **aArr, **bArr, i, j, aX, aY, bX, bY; printf("输入矩阵A的行数:\n"); scanf("%d", &aX); printf("输入矩阵A的列数:\n"); scanf("%d", &aY); printf("输入A矩阵:\n"); aArr = newArr(aX, aY); for (i = 0; i < aX; i++) { for (j = 0; j < aY; j++) { scanf("%d", &aArr[i][j]); } } printf("输入矩阵B的行数:\n"); scanf("%d", &bX); printf("输入矩阵B的列数:\n"); scanf("%d", &bY); printf("输入B矩阵:\n"); bArr = newArr(bX, bY); for (i = 0; i < bX; i++) { for (j = 0; j < bY; j++) scanf("%d", &bArr[i][j]); } //打印 A,B 矩阵 printArr(aArr, aX, aY); printArr(bArr, bX, bY); //计算 //判断是否能进行加减运算 if (aX==bX&&aY==bY) { printf("矩阵A,B可进行加减运算\n"); //矩阵相加 int **resultAdd = addArr(aArr, bArr, aX, aY); //打印矩阵相加结果 printArr(resultAdd, aX, aY); //释放内存 deleteArr(resultAdd, aX); //矩阵相减 int **resultSub = subArr(aArr, bArr, aX, aY); //打印矩阵相减结果 printArr(resultSub, aX, aY); //释放内存 deleteArr(resultSub, aX); } else { printf("矩阵A,B不可进行加减运算\n"); } //判断是否能进行乘法运算 if (aY==bX) { printf("矩阵A,B可进行乘法运算\n"); int **resultMultiply = multiplyArr(aArr, bArr, aX, aY,bX,bY); //打印矩阵相减结果 printArr(resultMultiply, aX, bY); //释放内存 deleteArr(resultMultiply, aX); } else { printf("矩阵A,B不可进行乘法运算\n"); } //释放内存 deleteArr(aArr, aX); deleteArr(bArr, bX); }
相关文章推荐
- socket应用(三) 用C语言编写发送邮件程序
- 编写程序,求矩阵M[4][4]两条对角线元素值的和
- 用C语言编写函数实现一个整数计算机,程序接受三个参数,第一个参数为操作项,后两个参数为操作数。
- C语言:编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现
- 用C语言编写Windows服务程序的五个步骤
- linux下运行自己编写的C语言程序提示bash:./*** 权限不够
- c语言:编写一个程序,它从标准输入(终端)读取C源代码,并验证所有的花括号都正确的成对出现。
- C语言 编写程序实现库函数strlen的功能
- 用C语言编写Windows服务程序的五个步骤
- C语言:编写程序数一下 1到 100 的所有整数中出现多少次数字 9
- (转)用C语言编写Windows服务程序的五个步骤
- 【C语言】自己编写程序实现strchr函数。即在给定字符串中找特定的字符并返回该处指针。
- 用C语言编写生成小学四则运算程序
- C语言编写Socket程序---入门篇
- C语言编写cgi程序hello world
- 用C语言编写 Windows 服务程序的五个步骤
- c语言:使用for循环编写一个判断闰年的程序
- 编写Java程序输出原矩阵和逆矩阵
- 在C语言上如何编写并运行MPI程序
- 使用c语言编写cgi程序