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

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

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

Доброго времени суток. Такая проблема. Нужно написать программу с использованием функций для ввода/вывода двумерного массива с использованием указателей и выделения памяти(массив должен состоять из чисел с плавающей точкой).
#include <stdio.h>
#include <conio.h>
 
 void vvod(int n, double **a)
 {
 int i,j;
 for(i=0;i<n;i++)
 for(j=0;j<n;j++)
 {
 printf("a[%d][%d]= ", i,j);
 scanf("%f", &a[i][j]);
 }
 }

 void vivod(int n, double **a)
 {
 int i,j;
 for(i=0;i<n;i++)
 {
 printf("\n");
 for(j=0;j<n;j++)
 printf("%.2f \t ",a[i][j]);
 }
 }
 
void main()
{
int i,j,n;
double **A;
clrscr();
printf("vvedite n \n");
scanf("%d",&n);
 
 A=new double *[n];
 for(i=0; i<n;i++)
 {
 A[i]=new double[n];
 }
 
  vvod(n,A);
  vivod(n,A);
for(i=0;i<n;i++)
delete [] A[i];
delete [] A;
 
getch();
}
Выводит только нули. Помогите пожалуйста найти ошибку.

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

textual
Листинг программы
/*Кто в C использует new и delete мил человек!!!*/
#include <stdio.h>
#include <stdlib.h>
 void vvod(int n, double **a)
 {
  int i,j;
  for(i=0;i<n;i++) {
    for(j=0;j<n;j++)
    {
      printf("a[%d][%d]= ", i,j);
      scanf("%lf", &a[i][j]);
    }
  }
 }
 
 
 void vivod(int n, double **a)
 {
    int i,j;
    for(i=0;i<n;i++)
    {
    printf("\n");
    for(j=0;j<n;j++) printf("%.2f \t ",a[i][j]);
    }
 }
 
int main()
{
  double **A;
  int i,j,n;
  printf("vvedite n \n");
  scanf("%d",&n);
  
  A = (double**) malloc(n * sizeof(double*));   //new и delete в C не используются !!!
  for(i = 0; i < n; i++)
       A[i] = (double*) malloc(n * sizeof(double));
  
  vvod(n,A);
  vivod(n,A);
  for(i=0;i<n;i++) free(A[i]);
  free(A);
  return 0;
}

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

  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
Похожие ответы