Для чего size_t? - C (СИ)

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

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

И как объявить size_t через type def,или лучше size_t объявить через что нибудь другое
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
void Print(int* arr, size_t size)
{
        for(size_t i = 0; i < size; i++)
                printf( "%d ", *(arr+i) );
        printf("\n");
}
 
void Sort(int* arr, size_t size)
{
        int temp;
        size_t j;
        for (size_t i=0; i < size; i++)
        {
                temp = arr[ i ];
                for ( j = i-1; j >= 0 && arr[ j ] > temp; j--)
                        arr[ j+1 ] = arr[ j ];
                arr[ j+1 ] = temp;
        }
}
 
int main()
{
        size_t size_a, size_b = 0;
        bool flag = true;
        printf("A array size > ");
        scanf("%d", &size_a);
        if(size_a>20)
                size_a = 20; //так как размер максимум 20, ставлю лимит
        int* arr_a = (int*)malloc((size_a+1)*sizeof(int));
        int* arr_b = NULL, *temp = NULL;
        printf("Filling A array...\n");
        for(size_t i = 0; i < size_a; i++)
        {
                printf("%d > ",i);
                scanf("%d", (arr_a + i));
        }
        Print(arr_a,size_a);
        arr_b = (int*)malloc(size_a*sizeof(int));
        for(size_t i = 2; i < size_a; i+=2)
        {
                if( arr_a[ i-1 ] % 2 )
                {
                        arr_b[size_b] = arr_a[ i ];
                        size_b++;
                }
        }
        if(!size_b)
        {
                free(arr_a);
                free(arr_b);
                printf("Nothing to copy...");
                return 0;
        }
        temp = (int*)realloc(arr_b, size_b*sizeof(int));
        if(!temp)
        {
                free(arr_a);
                free(arr_b);
                perror("Error occured while rellocating B array");                
                return 0;
        }
        arr_b = temp;
        temp = NULL;
        Print(arr_b, size_b);
        Sort(arr_b, size_b);
        Print(arr_b, size_b);
        printf("Done...");
        free(arr_b);
        free(arr_a);
       getch();  
       return 0;
}

Решение задачи: «Для чего size_t?»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
// #include <conio.h>
#include <stdbool.h>
 
void Print(int* arr, size_t size)
{
        for(size_t i = 0; i < size; i++)
                printf( "%d ", *(arr+i) );
        printf("\n");
}
 
void Sort(int* arr, size_t size)
{
        int temp;
        size_t j;
        for (size_t i=0; i < size; i++)
        {
                temp = arr[ i ];
                for ( j = i-1; j >= 0 && arr[ j ] > temp; j--)
                        arr[ j+1 ] = arr[ j ];
                arr[ j+1 ] = temp;
        }
}
 
int main()
{
        size_t size_a, size_b = 0;
        bool flag = true;
        printf("A array size > ");
        scanf("%d", &size_a);
        if(size_a>20)
                size_a = 20; //так как размер максимум 20, ставлю лимит
        int* arr_a = (int*)malloc((size_a+1)*sizeof(int));
        int* arr_b = NULL, *temp = NULL;
        printf("Filling A array...\n");
        for(size_t i = 0; i < size_a; i++)
        {
                printf("%d > ",i);
                scanf("%d", (arr_a + i));
        }
        Print(arr_a,size_a);
        arr_b = (int*)malloc(size_a*sizeof(int));
        for(size_t i = 2; i < size_a; i+=2)
        {
                if( arr_a[ i-1 ] % 2 )
                {
                        arr_b[size_b] = arr_a[ i ];
                        size_b++;
                }
        }
        if(!size_b)
        {
                free(arr_a);
                free(arr_b);
                printf("Nothing to copy...");
                return 0;
        }
        temp = (int*)realloc(arr_b, size_b*sizeof(int));
        if(!temp)
        {
                free(arr_a);
                free(arr_b);
                perror("Error occured while rellocating B array");                
                return 0;
        }
        arr_b = temp;
        temp = NULL;
        Print(arr_b, size_b);
        Sort(arr_b, size_b);
        Print(arr_b, size_b);
        printf("Done...");
        free(arr_b);
        free(arr_a);
       // getch();  
       return 0;
}

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

  1. В этом коде определены три функции: Print, Sort и main.
  2. Функция Print принимает два аргумента: указатель на массив целых чисел и его размер. Она выводит все элементы массива на экран через пробел.
  3. Функция Sort принимает два аргумента: указатель на массив целых чисел и его размер. Она сортирует этот массив по возрастанию.
  4. В функции main определены следующие переменные:
    • size_a и size_b - размер массивов arr_a и arr_b соответственно.
    • flag - флаг, который сбрасывается при достижении размера массива 20.
    • arr_a - указатель на массив целых чисел, заполняемый пользователем.
    • arr_b - указатель на массив целых чисел, который заполняется при помощи алгоритма наибольший общий делитель.
    • temp - временный указатель, используемый при динамическом выделении памяти.
  5. В цикле пользователь вводит размеры массивов arr_a и arr_b.
  6. Затем происходит заполнение массива arr_a целыми числами, введенными пользователем.
  7. Выводится на экран содержимое массива arr_a.
  8. Создается массив arr_b размером в два раза меньше, чем arr_a, и заполняется элементами, которые являются чётными числами в arr_a.
  9. Если массив arr_b пуст, то оба массива освобождаются и выводится сообщение об ошибке.
  10. Массив arr_b сортируется функцией Sort.
  11. Выводится на экран отсортированный массив arr_b.
  12. Оба массива освобождаются.

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


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

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

7   голосов , оценка 4.143 из 5
Похожие ответы