Задан массив, состоящий из целых положительных и отрицательных чисел. Создать новый массив из положительных элементов старого - C (СИ)

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

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

Задача: Задан массив, состоящий из целых положительных и отрицательных чисел. Создать новый массив из положительных элементов старого при работе программы выводит на одно число меньше, а если в части
for (i=1;i<k;i++){
    printf(" % d ",B[i]);}
сделать
for (i=0;i<k;i++){
    printf(" % d ",B[i]);}
Вывподит совершенно страшные числа( Подскажите, как быть!!!!
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

int main(void) {
    setvbuf(stdout,NULL,_IONBF,0);
    int n,i,k;
    int*A;
    int*B;
    printf("\n Введите N= ");
    scanf("%d",&n);
    A=(int*)malloc(n*sizeof(int));
    B=(int*)malloc(n*sizeof(int));
    for(i=0;i<n;i++){
    A[i]=rand();
    printf(" % d  ",A[i]);}
printf("\n");
printf("\n Положительные ");
printf("\n");
k=0;
    for(i=0;i<n;i++){
        if (A[i]>0){
            k=k+1;
    B[k]=A[i];}}
        for (i=1;i<k;i++){
    printf(" % d ",B[i]);}
free(B);
free(A);
    return EXIT_SUCCESS;
}

Решение задачи: «Задан массив, состоящий из целых положительных и отрицательных чисел. Создать новый массив из положительных элементов старого»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define bounded_random(min, max) ( rand() % ( (max) - (min) + 1 ) + (min) )
 
#define MIN_VALUE (-10)
#define MAX_VALUE (10)
 
int main(void) {
    int * arrAll, * arrPos, countAll, countPos, i;
    
    srand(time(NULL));
    
    printf("Number of elements: ");
    if ( scanf("%d", &countAll) != 1 || countAll < 1 ) {
        fprintf(stderr, "Wrong input!\n");
        exit(1);
    }
    
    if ( ! ( arrAll = malloc(sizeof(int) * countAll) ) || ! ( arrPos = malloc(sizeof(int) * countAll) ) ) {
        perror("malloc");
        exit(1);
    }
    
    for ( i = 0; i < countAll; ++i )
        arrAll[i] = bounded_random(MIN_VALUE, MAX_VALUE);
    
    for ( countPos = i = 0; i < countAll; ++i )
        if ( arrAll[i] > 0 )
            arrPos[countPos++] = arrAll[i];
    
    printf("All values:\n");
    for ( i = 0; i < countAll; ++i )
        printf("%d ", arrAll[i]);
    printf("\n");
    
    if ( countPos == 0 )
        printf("No positive values found.\n");
    else {
        printf("Positive values:\n");
        for ( i = 0; i < countPos; ++i )
            printf("%d ", arrPos[i]);
        printf("\n");
    }
    
    free(arrAll);
    free(arrPos);
    
    exit(0);
}

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

  1. Подключение необходимых библиотек: stdio.h, stdlib.h, time.h
  2. Определение функции, генерирующей случайное число в заданном диапазоне (bounded_random)
  3. Установка минимального и максимального значений для генерации случайных чисел (MIN_VALUE, MAX_VALUE)
  4. Ввод количества элементов массива с помощью функции scanf
  5. Выделение памяти под массив arrAll и arrPos
  6. Генерация случайных чисел и заполнение массива arrAll
  7. Перебор элементов массива arrAll и копирование положительных значений в массив arrPos
  8. Вывод всех значений массива arrAll
  9. Проверка наличия положительных значений в массиве arrPos
  10. Вывод положительных значений массива arrPos
  11. Освобождение памяти, выделенной под массивы arrAll и arrPos
  12. Выход из программы с кодом 0

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


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

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

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