Напечатать все элементы массива, кроме первого нулевого, составить блок-схему - C (СИ)

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

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

Cоставить блок-схему по данной программе.

Напечатать все элементы массива, кроме первого нулевого / C для начинающих Известно, что в массиве имеются нулевые элементы. Напечатать: а) все элементы, кроме первого из них; б) все элементы, кроме последнего из них.

Решение задачи: «Напечатать все элементы массива, кроме первого нулевого, составить блок-схему»

textual
Листинг программы
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include <stdio.h>      //подключаем библиотеку для printf
#include <stdlib.h>       //подключаем библиотеку для srand
#define n 10  //все n будут заменены на 10
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
 
int main(){
        srand(time(NULL));    //если не использовать функцию srand,
//с каждым запуском программы будет генерироваться одна и та же последовательность чисел
int a[n];  //выделяем память для массива целых чисел состоящего из 10 элементов
int i; //объявляем переменную i
printf("In:\n"); //печатаем на экране In:
//(\n)-с помощью этого переходим на следующую строку
for(i = 0; i < n; i++)   //повторяем то, что в скобках. 10 раз. от 0 до 9 с шагом 1
{a[i] = rand()% 5 - 3; //заполняем i-тый элемент массива случайным числом от -3 до 1.
//rand()% 5 - случайное число от 0 до 4, если вычесть 3 получаем от -3 до 1
printf("%d ", a[i]); //  выводим на экран, этот элемент
}
//так работает цикл выше
// i=0
//a[0]=какое-то число (в с++ массивы начинаются не с 1, а с 0)
//второй проход цикла
//i=1
//a[1]=какое-то рандомное число
...
//i=9
//a[9]=какое-то рандомное число
 
int tmp = -1; //объявляем целочисленную переменную и приравниваем -1
//в первом случае, она будет индикатором, что мы встретили нулевой элемент
//во втором хранить индекс последнего нулевого элемента
printf("\nвсе элементы, кроме первого 0:"); //на следующей строке печатаем  все элементы, кроме первого 0:
for(i = 0; i < n; i++) //повторяем то, что в скобках. 10 раз. от 0 до 9 с шагом 1
{if( tmp == -1 && a[i] == 0)//условие, если tmp равен -2 и элемент массива равен 0(одновременно),
// то выполняем то, что ниже в скобках
{tmp ++;}  //прибавляем к tmp 1, т.е. tmp станет равен 0
else printf("%d ", a[i]);  //если условие не выполняется, то выводим на экран этот элемент массива
}
//в предыдущем цикле проходим по массиву и если элемент равен нулю,
//то не выводим его. Но только первый, для этого нам tmp
//если таких элементов нет, то выведется весь массив
printf("\nвсе элементы, кроме последнего 0:"); //тут вы уже сами знаете
        for(i = 0; i < n; i++){ //снова цикл
            if(a[i] == 0)  //если i-тый элемент равен нулю,
                tmp = i; // то в tmp записываем его индекс
        }
        //в предыдущем цикле мы узнаем индекс последнего элемента равного 0
for(i = 0; i < n; i++) //снова цикл, что бы вывести ваш массив
{if( i != tmp) //если i не равен номеру последнего нулевого элемента
printf("%d ", a[i]);} //выводим на экран
 
system("PAUSE"); // тормозим программу, что бы увидеть результат
return 0;
}

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

Код решает задачу печати всех элементов массива, кроме первого нулевого. Список действий:

  1. Массив целых чисел a заполняется случайными числами от -3 до 1 с помощью функции rand().
  2. Переменная tmp инициализируется значением -1. Она будет использоваться как флаг: если tmp равно -1, значит, еще не было встречено ни одного нулевого элемента.
  3. С помощью цикла for происходит перебор всех элементов массива. Если элемент равен нулю и tmp равно -1, то tmp присваивается значение i, где i - это номер текущего элемента.
  4. С помощью еще одного цикла for происходит перебор всех элементов массива. Если элемент не равен нулю и его номер не равен tmp, то он выводится на экран.
  5. Программа останавливается с помощью функции PAUSE().

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

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