Задан массив, состоящий из целых положительных и отрицательных чисел. Создать новый массив из положительных элементов старого - 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);
}
Объяснение кода листинга программы
- Подключение необходимых библиотек: stdio.h, stdlib.h, time.h
- Определение функции, генерирующей случайное число в заданном диапазоне (bounded_random)
- Установка минимального и максимального значений для генерации случайных чисел (MIN_VALUE, MAX_VALUE)
- Ввод количества элементов массива с помощью функции scanf
- Выделение памяти под массив arrAll и arrPos
- Генерация случайных чисел и заполнение массива arrAll
- Перебор элементов массива arrAll и копирование положительных значений в массив arrPos
- Вывод всех значений массива arrAll
- Проверка наличия положительных значений в массиве arrPos
- Вывод положительных значений массива arrPos
- Освобождение памяти, выделенной под массивы arrAll и arrPos
- Выход из программы с кодом 0