Напечатать все элементы массива, кроме первого нулевого, составить блок-схему - 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;
}
Объяснение кода листинга программы
Код решает задачу печати всех элементов массива, кроме первого нулевого. Список действий:
- Массив целых чисел
aзаполняется случайными числами от -3 до 1 с помощью функцииrand(). - Переменная
tmpинициализируется значением -1. Она будет использоваться как флаг: еслиtmpравно -1, значит, еще не было встречено ни одного нулевого элемента. - С помощью цикла
forпроисходит перебор всех элементов массива. Если элемент равен нулю иtmpравно -1, тоtmpприсваивается значениеi, гдеi- это номер текущего элемента. - С помощью еще одного цикла
forпроисходит перебор всех элементов массива. Если элемент не равен нулю и его номер не равенtmp, то он выводится на экран. - Программа останавливается с помощью функции
PAUSE().