Напечатать только положительные числа последовательности - C (СИ)
Формулировка задачи:
Задание: Дана последовательность. Напечатать только положительные числа из этой последовательности, причем, если подряд идет несколько положительных чисел, печатать их в обратном порядке, используя стек.
Run-Time Check Failure #2 - Stack around the variable 'stack' was corrupted.
Прога ведет себя все время по разному.. не могу понять в чем загвоздка
#include "stdafx.h" #include "conio.h" #include "locale.h" #define NMAX 80 /*главная ф-я*/ void main() { int str[NMAX]; int stack[NMAX]; int i; int j=-1; int n, nom=0; setlocale (LC_ALL, "Russian"); printf("Введите кол-во элементов:\n"); scanf_s ("%d", &n); printf("Последовательность:\n"); for (i=0; i < n; i++) scanf_s("%d", &str[i]); for (i=0; i < n; i++) { if (str[i] > 0 ) stack[++j] = str[i]; else { if (j >= 0) { for (j=nom; j >=0; j--) printf ("%d ", stack[j]); j=-1; nom=0; } } nom++; } _getch(); }
Решение задачи: «Напечатать только положительные числа последовательности»
textual
Листинг программы
#include <stdio.h> #include <conio.h> #include <locale.h> #define NMAX 80 int main() { int arr[NMAX]; int i, j, k; int n; setlocale(LC_ALL, "Russian"); printf("Введите кол-во элементов: "); scanf("%d", &n); printf("Последовательность: "); for (i = 0; i < n; i++) { scanf("%d", &arr[i]); } i = 0; while (i < n) { for (; (i < n) && (arr[i] <= 0); ++i) { ; } k = i; for (; (i < n) && (arr[i] > 0); ++i) { ; } for (j = i - 1; j >= k; --j) { printf("%d ", arr[j]); } } _getch(); return 0; }
Объяснение кода листинга программы
Вывод программы представляет собой последовательность положительных чисел из исходного массива.
- Объявлены три переменные: i, j, k, которые будут использоваться в качестве индексов массива.
- Переменная n инициализируется вводом пользователя, который указывает количество элементов в последовательности.
- В цикле scanf-printf пользователь вводит исходную последовательность.
- Следующий цикл while отбирает отрицательные элементы.
- В каждой итерации внутреннего цикла while, если текущий элемент отрицательный, увеличивается значение i, и выполнение внутреннего цикла прерывается.
- Когда внутренний цикл while завершается, k присваивается значение i.
- В каждой итерации внешнего цикла while, если текущий элемент больше нуля, увеличивается значение i.
- Когда внешний цикл while завершается, для каждого значения j от k до i-1 выводится элемент массива arr[j].
- Программа завершается, когда пользователь нажимает любую клавишу.
- Значение 0 возвращается в функцию main(), что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д