Не работает сложение матриц - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Написала программу для сложения 2х матриц на С. Проблема такая: внутри циклов все работает нормально, но на выходе из цикла почему-то все строчки массива приравниваются последней его строчке.
#include <stdio.h>
#include <conio.h>
#include <math.h>
main () {
     int i=0,j=0, m=0, n=0;
     float a[m][n], b[m][n], f[m][n];
     printf("vvedite dliny strok i stolbtsov matrits m i n sootvetstvenno:\n");
     scanf("%i%i", &m, &n);
     printf("m=%i, n=%i\n", m, n);
     printf("vvedite elementy matritsi A postrochno\n");//ввод элементов матрицы А
    for(i=0;i<m;i++){
     printf("vvedite %i stroku\n",i+1);
     for(j=0;j<n;j++){
              printf("a[%i][%i]=", i, j);
              scanf("%f",&a[i][j]);}}
    printf("matritsa A:\n");
    for(i=0;i<m;i++){
     for(j=0;j<n;j++){
     printf("a[%i][%i]=%f       ",i, j, a[i][j]);
     if (j%n==n-1) printf("\n");}}//переход на след.строку матрицы
      printf("vvedite elementy matritsi B postrochno\n");//ввод элементов матрицы B
    for(i=0;i<m;i++){   
         printf("vvedite %i stroku\n",i+1);
           for(j=0;j<n;j++){
              printf("b[%i][%i]=", i, j);
              scanf("%f",&b[i][j]);}
    }
    printf("matritsa B:\n");
    for(i=0;i<m;i++){
     for(j=0;j<n;j++){
     printf("b[%i][%i]=%i       ",i, j, b[i][j]);
     if (j%n==n-1) printf("\n");}}
       for(i=0;i<m;i++){//сумма матриц
       for (j=0;j<n;j++)
       f[i][j]=a[i][j]+b[i][j];}
      printf("summa matrits A+B\n");  
     for(i=0;i<m;i++){
     for(j=0;j<n;j++){
     printf("%f       ", f[i][j]);
     if (j%n==n-1) printf("\n");}
     }
     getch();
     }
Подскажите, где здесь ошибка? Почему так получается?

Решение задачи: «Не работает сложение матриц»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
void allocate(double*** matrix, size_t n, size_t m)
{
    size_t i;
    
    *matrix = malloc(n * sizeof(double*));
    for(i = 0; i < n; ++i)
    (*matrix)[i] = malloc(m * sizeof(double));
}
 
void input(const char* p, double** matrix, size_t n, size_t m)
{
    size_t i, j;
 
    for(i = 0; i < n; ++i)
    for(j = 0; j < m; ++j)
        printf("%s[%u][%u] > ", p, i, j), scanf("%lf", &matrix[i][j]);
}
 
void sum(double** m1, double** m2, double** res, size_t n, size_t m)
{
    size_t i, j;
    
    for(i = 0; i < n; ++i)
    for(j = 0; j < m; ++j)
        res[i][j] = m1[i][j] + m2[i][j];
}
 
void display(double** matrix, size_t n, size_t m)
{
    size_t i, j;
 
    for(i = 0; i < n; ++i, putchar('\n'))
    for(j = 0; j < m; ++j)
        printf("%-6.2f", matrix[i][j]);
}
 
void deallocate(double*** matrix, size_t n)
{
    size_t i;
 
    for(i = 0; i < n; ++i)
    free((*matrix)[i]);
 
    free(*matrix);
}
 
int main()
{
    size_t n, m;
    double **m1, **m2, **result;
 
    puts("Input dimensions of matrices:");
    scanf("%u %u", &n, &m);
    
    allocate(&m1, n, m);
    allocate(&m2, n, m);
    allocate(&result, n, m);
 
    puts("Input matrix m1:");
    input("m1", m1, n, m);
 
    puts("Input matrix m2:");
    input("m2", m2, n, m);
    
    sum(m1, m2, result, n, m);
 
    puts("Sum of matrices m1 and m2:");
    
    display(result, n, m);
 
    deallocate(&m1, n);
    deallocate(&m2, n);
    deallocate(&result, n);
    
    exit(0);
}

Объяснение кода листинга программы

  1. Объявление функций и переменных:
    • void allocate(double*** matrix, size_t n, size_t m)
    • void input(const char* p, double** matrix, size_t n, size_t m)
    • void sum(double** m1, double** m2, double** res, size_t n, size_t m)
    • void display(double** matrix, size_t n, size_t m)
    • void deallocate(double*** matrix, size_t n)
    • int main()
    • size_t n, m;
    • double **m1, **m2, **result;
  2. Ввод размеров матриц и выделение памяти под матрицы:
    • puts(Input dimensions of matrices:);
    • scanf(%u %u, &n, &m);
    • allocate(&m1, n, m);
    • allocate(&m2, n, m);
    • allocate(&result, n, m);
  3. Ввод данных для первой матрицы:
    • puts(Input matrix m1:);
    • input(m1, m1, n, m);
  4. Ввод данных для второй матрицы:
    • puts(Input matrix m2:);
    • input(m2, m2, n, m);
  5. Сложение матриц:
    • sum(m1, m2, result, n, m);
  6. Вывод суммы матриц:
    • puts(Sum of matrices m1 and m2:);
    • display(result, n, m);
  7. Освобождение памяти:
    • deallocate(&m1, n);
    • deallocate(&m2, n);
    • deallocate(&result, n);
  8. Завершение программы:
    • exit(0);

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

14   голосов , оценка 3.929 из 5