Извиняюсь за realloc, но не захотел сильно заморачиваться. Надеюсь разберётесь.
| Код | #include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <time.h>
//----------------------------------------------// void Random(int* arr, size_t n) { srand(time(0));
size_t i; for (i=0; i<n; ++i) { arr[i] = rand()%9 + 1; } } //----------------------------------------------// void Print(int* arr, size_t n) { size_t i; for (i=0; i<n; ++i) { printf("%d ", arr[i]); } printf("\n"); } //----------------------------------------------// size_t Remove(int* arr, size_t* n, int key) { size_t i, j; for (i=0; i<(*n);) { if (arr[i] == key) { for (j=i; j<(*n)-1; ++j) { arr[j] = arr[j+1]; } (*n)--; } else { i++; } }
realloc(arr, sizeof(int) * (*n));
return *n; } //----------------------------------------------// size_t CountEvenNumbers(int* arr, size_t n) { size_t i; size_t count = 0;
for (i=0; i<n; ++i) { if (arr[i]%2 == 0) { count++; } }
return count; } //----------------------------------------------// size_t InsertZero(int* arr, size_t* n) { size_t count = CountEvenNumbers(arr, *n);
if (count) { realloc(arr, sizeof(int) * ((*n) + count));
int i, j;
for (i=0; i<(*n); ++i) { if (arr[i]%2 == 0) { for (j=(*n); i<j; --j) { arr[j] = arr[j-1]; } arr[i++] = 0; (*n)++; } } }
return *n; } //----------------------------------------------//
int main() { size_t n; printf("array size: "); scanf("%u", &n);
int* arr = (int*) malloc(sizeof(int) * n);
Random(arr, n); Print(arr, n);
int key; printf("deleted digit: "); scanf("%u", &key);
Remove(arr, &n, key); Print(arr, n);
InsertZero(arr, &n); Print(arr, n);
free(arr);
return 0; }
|
http://s2.ipicture.ru/ |