您的位置:首页 > 编程语言 > C语言/C++

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 练习