Ввод/вывод двумерного массива с использованием указателей и выделения памяти - C (СИ)

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

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

Доброго времени суток. Такая проблема. Нужно написать программу с использованием функций для ввода/вывода двумерного массива с использованием указателей и выделения памяти(массив должен состоять из чисел с плавающей точкой).
Листинг программы
  1. #include <stdio.h>
  2. #include <conio.h>
  3. void vvod(int n, double **a)
  4. {
  5. int i,j;
  6. for(i=0;i<n;i++)
  7. for(j=0;j<n;j++)
  8. {
  9. printf("a[%d][%d]= ", i,j);
  10. scanf("%f", &a[i][j]);
  11. }
  12. }
  13.  
  14. void vivod(int n, double **a)
  15. {
  16. int i,j;
  17. for(i=0;i<n;i++)
  18. {
  19. printf("\n");
  20. for(j=0;j<n;j++)
  21. printf("%.2f \t ",a[i][j]);
  22. }
  23. }
  24. void main()
  25. {
  26. int i,j,n;
  27. double **A;
  28. clrscr();
  29. printf("vvedite n \n");
  30. scanf("%d",&n);
  31. A=new double *[n];
  32. for(i=0; i<n;i++)
  33. {
  34. A[i]=new double[n];
  35. }
  36. vvod(n,A);
  37. vivod(n,A);
  38. for(i=0;i<n;i++)
  39. delete [] A[i];
  40. delete [] A;
  41. getch();
  42. }
Выводит только нули. Помогите пожалуйста найти ошибку.

Решение задачи: «Ввод/вывод двумерного массива с использованием указателей и выделения памяти»

textual
Листинг программы
  1. /*Кто в C использует new и delete мил человек!!!*/
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  void vvod(int n, double **a)
  5.  {
  6.   int i,j;
  7.   for(i=0;i<n;i++) {
  8.     for(j=0;j<n;j++)
  9.     {
  10.       printf("a[%d][%d]= ", i,j);
  11.       scanf("%lf", &a[i][j]);
  12.     }
  13.   }
  14.  }
  15.  
  16.  
  17.  void vivod(int n, double **a)
  18.  {
  19.     int i,j;
  20.     for(i=0;i<n;i++)
  21.     {
  22.     printf("\n");
  23.     for(j=0;j<n;j++) printf("%.2f \t ",a[i][j]);
  24.     }
  25.  }
  26.  
  27. int main()
  28. {
  29.   double **A;
  30.   int i,j,n;
  31.   printf("vvedite n \n");
  32.   scanf("%d",&n);
  33.  
  34.   A = (double**) malloc(n * sizeof(double*));   //new и delete в C не используются !!!
  35.   for(i = 0; i < n; i++)
  36.        A[i] = (double*) malloc(n * sizeof(double));
  37.  
  38.   vvod(n,A);
  39.   vivod(n,A);
  40.   for(i=0;i<n;i++) free(A[i]);
  41.   free(A);
  42.   return 0;
  43. }

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

  1. Ввод количества строк n
  2. Выделение памяти под указатель на double с помощью malloc
  3. В цикле для каждой строки выделение памяти под double с помощью malloc
  4. Вывод сообщения и ввод double с помощью scanf
  5. Вывод значения double с помощью printf
  6. Освобождение памяти выделенной под double с помощью free
  7. Освобождение памяти выделенной под указатель на double с помощью free
  8. Возврат значения 0, что означает успешный конец работы программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы