C语言编写能加减乘矩阵的程序
来源:互联网 发布:孤岛危机2优化补丁 编辑:程序博客网 时间:2024/05/29 21:36
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);}
阅读全文