Создание файла, компонентами которого являются целочисленные массивы - C (СИ)

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

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

Создать файл F1, компонентами которого являются целочисленные массивы a1,.., a10, закрыть его.

Решение задачи: «Создание файла, компонентами которого являются целочисленные массивы»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define SIZE 10
  5.  
  6. int main (void)
  7. {
  8.     char file[] = "output.bin";
  9.     int ** array;
  10.     int i, j;
  11.     FILE * fp;
  12.     if ((fp = fopen (file, "wb")) == NULL){
  13.         printf ("Cannot open file!\n");
  14.         getchar ();
  15.         exit (1);
  16.     }
  17.     array = (int **) calloc (SIZE, sizeof (int *));
  18.     for (i = 0; i < SIZE; i++)
  19.         array[i] = (int *) calloc (SIZE, sizeof (int));
  20.     for (i = 0; i < SIZE; i++)
  21.         for (j = 0; j < SIZE; j++)
  22.             array[i][j] = j;
  23.     for (i = 0; i < SIZE; i++)
  24.         fwrite (array[i], sizeof(int), SIZE, fp);
  25.     fclose (fp);
  26.     for (i = 0; i < SIZE; i++)
  27.         free (array[i]);
  28.     free (array);
  29.     fp = fopen (file, "rb");
  30.     array = (int **) calloc (SIZE, sizeof (int *));
  31.     for (i = 0; i < SIZE; i++)
  32.         array[i] = (int *) calloc (SIZE, sizeof (int));
  33.     for (i = 0; i < SIZE; i++)
  34.         fread (array[i], sizeof (int), SIZE, fp);
  35.     for (i = 0; i < SIZE; i++){
  36.         if (i != 0)
  37.             putchar ('\n');
  38.         for (j = 0; j < SIZE; j++)
  39.             printf ("%4d", array[i][j]);
  40.         putchar ('\n');
  41.     }
  42.    
  43.     return 0;    
  44. }

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

  1. Включаются необходимые заголовочные файлы
  2. Определяется размер массива (SIZE)
  3. Открывается файл для записи в двоичном формате (fp = fopen(file, wb))
  4. Выделяется память под двумерный массив (array = (int *) calloc (SIZE, sizeof (int )))
  5. Выделяется память под каждый элемент массива (for (i = 0; i < SIZE; i++) array[i] = (int *) calloc (SIZE, sizeof (int)))
  6. Заполняется массив значениями от 0 до SIZE-1 (for (i = 0; i < SIZE; i++) for (j = 0; j < SIZE; j++) array[i][j] = j)
  7. Записывается массив в файл (for (i = 0; i < SIZE; i++) fwrite(array[i], sizeof(int), SIZE, fp))
  8. Закрывается файл (fclose(fp))
  9. Освобождается память (for (i = 0; i < SIZE; i++) free(array[i]); free(array))
  10. Открывается файл для чтения (fp = fopen(file, rb))
  11. Снова выделяется память под двумерный массив (array = (int *) calloc (SIZE, sizeof (int )))
  12. Снова выделяется память под каждый элемент массива (for (i = 0; i < SIZE; i++) array[i] = (int *) calloc (SIZE, sizeof (int)))
  13. Считывается массив из файла (for (i = 0; i < SIZE; i++) fread(array[i], sizeof (int), SIZE, fp))
  14. Выводится содержимое массива (for (i = 0; i < SIZE; i++){ if (i != 0) putchar ('\n'); for (j = 0; j < SIZE; j++) printf (%4d, array[i][j]); putchar ('\n');})
  15. Освобождается память (for (i = 0; i < SIZE; i++) free(array[i]); free(array))
  16. Закрывается файл (fclose(fp))
  17. Завершается программа (return 0)

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


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

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

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

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

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

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