Функция сложения двух матриц - C (СИ)
Формулировка задачи:
Здравствуйте, нужна ваша помощь с функцией для программы сложения двух матриц, сама программа ниже, работает, а вот с функцией я запутался. Заранее спасибо
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main(int i,int j,int m,int n,int k, int z)
{
printf("Input please K: ", &k);
scanf("%d", &k);
printf("Input please M: ", &m);
scanf("%d", &m);
printf("Input please N: ", &n);
scanf("%d", &n);
//1
int A[k][m];
for(i=0;i<k;i++)
{
for(j=0;j<m;j++)
{
printf("Input please A[%d][%d]: ", i, j);
scanf("%d", &A[i][j]);
}}
//2
int B[m][n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
printf("Input please B[%d][%d]: ", i, j);
scanf("%d", &B[i][j]);
}
// vivod a,b
for(i=0;i<k;i++)
{ printf("\n");
for(j=0;j<m;j++)
{
printf("%5d", A[i][j]);
}}
for(i=0;i<m;i++)
{ printf("\n");
for(j=0;j<n;j++)
{
printf("%5d", B[i][j]);
}}
//3
int S [k][n];
for(i=0;i<k;i++)
{
for(j=0;j<n;j++)
{
S[i][j]=A[i][j]+B[i][j];
}}
for(i=0;i<k;i++)
{
for(j=0;j<n;j++)
{ printf("\n");
printf("%5d", S[i][j]);
}}
system("PAUSE");
return 0;
}Решение задачи: «Функция сложения двух матриц»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define N 3
#define M 2
int **Add(int **a, int **b)
{
int i,j;
int **tmp = (int**)malloc(sizeof(int*) * N);
for(i = 0; i < N; i++)
{
tmp[i] = (int*)malloc(sizeof(int) * M);
for(j = 0; j < M; j++)
tmp[i][j] = a[i][j] + b[i][j];
}
return tmp;
}
int main()
{
int **a = (int**)malloc(sizeof(int*) * N);
int **b = (int**)malloc(sizeof(int*) * N);
int i,j;
for(i = 0; i < N; i++)
{
a[i] = (int*)malloc(sizeof(int) * M);
for(j = 0; j < M; j++)
{
printf("Input please A[%d][%d]: ", i, j);
scanf("%d",&a[i][j]);
}
}
for(i = 0; i < N; i++)
{
b[i] = (int*)malloc(sizeof(int) * M);
for(j = 0; j < M; j++)
{
printf("Input please B[%d][%d]: ", i, j);
scanf("%d",&b[i][j]);
}
}
printf("\n");
for(i = 0; i < N; i++)
{
for(j = 0; j < M; j++)
printf("%5d",a[i][j]);
printf("\n");
}
printf("\n");
for(i = 0; i < N; i++)
{
for(j = 0; j < M; j++)
printf("%5d",b[i][j]);
printf("\n");
}
int **ab = Add(a,b);
printf("\n");
for(i = 0; i < N; i++)
{
for(j = 0; j < M; j++)
printf("%5d",ab[i][j]);
printf("\n");
}
getch();
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы:
, , - Задаются значения N и M (размеры матриц)
- Определяется функция Add, которая принимает два указателя на матрицы и возвращает указатель на новую матрицу, равную сумме исходных. Внутри функции объявляется временная матрица tmp, которая будет хранить результат. Затем, в цикле, происходит заполнение этой матрицы значениями суммы соответствующих элементов исходных матриц a и b.
- В функции main создаются две матрицы a и b, и заполняются с помощью scanf.
- Выводится на экран содержимое матрицы a.
- Выводится на экран содержимое матрицы b.
- Создается матрица ab как результат сложения a и b с помощью функции Add.
- Выводится на экран содержимое матрицы ab.
- В конце программы вызывается функция getch для приостановки выполнения программы до нажатия клавиши.
- Возвращается 0, что означает успешный конец работы программы.