Для чего 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; }
Объяснение кода листинга программы
- В этом коде определены три функции:
Print
,Sort
иmain
. - Функция
Print
принимает два аргумента: указатель на массив целых чисел и его размер. Она выводит все элементы массива на экран через пробел. - Функция
Sort
принимает два аргумента: указатель на массив целых чисел и его размер. Она сортирует этот массив по возрастанию. - В функции
main
определены следующие переменные:size_a
иsize_b
- размер массивовarr_a
иarr_b
соответственно.flag
- флаг, который сбрасывается при достижении размера массива 20.arr_a
- указатель на массив целых чисел, заполняемый пользователем.arr_b
- указатель на массив целых чисел, который заполняется при помощи алгоритманаибольший общий делитель
.temp
- временный указатель, используемый при динамическом выделении памяти.
- В цикле пользователь вводит размеры массивов
arr_a
иarr_b
. - Затем происходит заполнение массива
arr_a
целыми числами, введенными пользователем. - Выводится на экран содержимое массива
arr_a
. - Создается массив
arr_b
размером в два раза меньше, чемarr_a
, и заполняется элементами, которые являются чётными числами вarr_a
. - Если массив
arr_b
пуст, то оба массива освобождаются и выводится сообщение об ошибке. - Массив
arr_b
сортируется функциейSort
. - Выводится на экран отсортированный массив
arr_b
. - Оба массива освобождаются.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д