Ввод/вывод двумерного массива с использованием указателей и выделения памяти - 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;
- }
Объяснение кода листинга программы
- Ввод количества строк n
- Выделение памяти под указатель на double с помощью malloc
- В цикле для каждой строки выделение памяти под double с помощью malloc
- Вывод сообщения и ввод double с помощью scanf
- Вывод значения double с помощью printf
- Освобождение памяти выделенной под double с помощью free
- Освобождение памяти выделенной под указатель на double с помощью free
- Возврат значения 0, что означает успешный конец работы программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д