Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Проектирование программ и программирование на С++ Часть 1. Структурное.pdf
Скачиваний:
18
Добавлен:
15.11.2022
Размер:
3.8 Mб
Скачать

11.4. Программирование вложенных циклов

Тело цикла может содержать любые операторы, в том числе и другие циклы. Оператор цикла, который содержится в теле другого цикла, называется вложенным.

Задача № 6. Напечатать N простых чисел. Разделим эту задачу на две подзадачи:

1)определить является ли число простым;

2)напечатать п чисел, удовлетворяющих заданному условию. Простым называется число, которое делится только само на себя

ина единицу (сама единица простым числом не является). Тогда, чтобы определить, является число простым или нет, нужно прове­ рить, есть ли у него другие делители. Для этого будем делить число К на все числа от 2 и до К, используя цикл с постусловием. Если К раз­ делится на d без остатка, только когда d станет равно К, значит, чис­ ло простое:

d=l;//начальное значение делителя

do

{

d++;//увеличиваем делитель

}

/*цикл выполняется, пока остаток от деления К

на d не равен 0 (не делится)*/ while(K%d!=0);

if(K==d)//делитель равен К, т.е. число простое cout<<a<<"

Для решения второй подзадачи, нам нужно перебирать все чис­ ла, начиная с 2, и печатать только те, которые являются простыми. При этом нужно подсчитывать напечатанные числа. Выполнение цикла закончится, когда будет напечатано п чисел.

К=1;//присваиваем начальное значение числу //выполняем цикл, пока не будет напечатано п чисел

for(int i=0;i<n;)

{

K++;//берем следующее число if (К простое число)

i++;//увеличиваем счетчик простых чисел

}

Объединив эти два фрагмента вместе, получим решение постав­ ленной задачи:

#include<iostream.h> void main()

{

int K=l,n,d; cout<<"\nEnter N"; cin>>n;

//неправильно задано число n if(n<l) {

cout«"\nerror in data"; return;//завершение программы

}

for(int i=0;i<n;)//внешний цикл

{

K++;d=l;

do //внутренний цикл

{

d++;

}

while(K%d!=0);//конец внутреннего цикла if(K==d){

cout<<K<<" i++; }

}//конец внешнего цикла

}

Тесты:

n = 0

Error in data

П =

1

2

n =

5

10

12.МАССИВЫ

Вязыке C/C++, кроме базовых типов, разрешено вводить и ис­ пользовать производные типы, полученные на основе базовых. Стан­ дарт языка определяет три способа получения производных типов:

1)массив элементов заданного типа;

2)указатель на объект заданного типа;

3)функцию, возвращающую значение заданного типа.

Массив - это упорядоченная последовательность переменных одного типа. Каждому элементу массива отводится одна ячейка па­ мяти. Элементы одного массива занимают последовательно располо­ женные ячейки памяти. Все элементы имеют одно имя - имя массива и отличаются индексами - порядковыми номерами в массиве. Коли­ чество элементов в массиве называется его размером. Чтобы отвести в памяти нужное количество ячеек для размещения массива, надо заранее знать его размер. Резервирование памяти для массива выпол­ няется на этапе компиляции программы.

12.1. Определение массива в C/C++

Массивы определяются следующим образом:

 

i n t

а [1 0 0 ];//м асси в из 100

элем ентов

целого типа

Операция s i z e o f (а)

даст результат 400, т.е.

100 элементов по

4 байта.

 

 

 

 

 

Элементы массива всегда нумеруются с 0.

 

| 45 |

352

63

124

значения элементов массива

0

1

Т

99

индексы элементов массива

 

 

 

 

Рис. 8. Размещение массива в памяти

Чтобы обратиться к элементу массива, надо указать имя массива

иномер элемента в массиве (индекс) (рис. 8):

а[ 0] - индекс задается как константа;

а [ 55] - индекс задается как константа;

а[i] —индекс задается как переменная;

а[2*i ] - индекс задается как выражение.

Элементы массива можно задавать при его определении: int а[10]={1,2,3,4,5,6,7,8,9,10};

Операция sizeof (а) даст результат 40, т.е. 10 элементов по4 байта, int а[10]={1,2,3,4,5};

Если количество начальных значений меньше, чем объявленная длина массива, то начальные элементы массива получат только пер­ вые элементы.

int а[]={1,2,3,4,5};

Операция sizeof (а) даст результат 20, т.е. 5 элементов по 4 байта. Длина массива вычисляется компилятором по количеству значений, перечисленных при инициализации.

12.2. Примеры решения задач с использованием массивов

Задача 1. Формирование массива с помощью датчика случай­ ных чисел.

Для того чтобы сформировать массив, необходимо организовать цикл для перебора элементов массива. Для формирования каждого элемента вызывается функция rand (), которая возвращает псевдо­ случайное число из диапазона от 0 до 32767. Чтобы получить значе­ ния из диапазона от 0 до 100, используется операция получения ос­ татка от деления %. Если нужно получить не только положительные, но и отрицательные числа, вычитается число к, равное половине от требуемого диапазона.

а [ I ] = ra n d ()% 1 0 0 -5 0 ;//ч и с л а и з диапазона - 5 0 ..4 9 . Чтобы использовать функцию ra n d (), надо подключить биб­

лиотечный файл < s t d l i b . h>

#include <iostream.h>

#include <stdlib.1э>//файл с описанием функции //rand()

void main()

{

int a [100]; int n;

cout<<"\nEnter the size of arraycin>>n; for(int I=0;I<n;I++)

{

a[I]=rand()%100;//числа из диапазона 0..100 cout<<a[I]<<" ";//вывод элемента массива

}

}

Задача № 2. Найти максимальный элемент массива.

Для решения этой задачи нужно сформировать массив, присво­

ить начальное значение в переменную max, в качестве начального значения выступает первый элемент массива, а затем сравнить каж­ дый элемент массива с переменной шах. Если значение элемента бу­ дет больше max, то оно записывается в шах и последующие элемен­

ты сравниваются уже с этим значением.

 

#in c lu d e c io s tr e a m .h >

 

#in c lu d e

< s t d l ib . h >

 

v o id

m a in ()

 

 

{

 

 

 

 

i n t

a [100] ;

 

 

i n t

n;

 

 

 

c o u t « " \ n E n t e r th e s i z e o f a r r a y : " ;

c i n » n ;

 

 

 

f o r ( i n t

1 = 0 ;I< n ;I+ + ) //з а п о л н е н и е

м а сси в а

{

 

 

 

 

a [I]=rand()%100—5 0 ;

 

cout<<a[I]<<"

 

 

}

 

 

 

 

i n t

m ax = a[0 ];

//з а д а е м н ач ал ьн о е

зн ач ен и е max

f o r ( I = l ; I < n ; I + + )

 

//с р а в н и в а е м

элементы м асси в а c max

i f (а [ I ] >max)m ax=a[ I ] ;

 

cout<<"\nM ax="<<m ax;

 

}

 

 

 

 

Задача № 3. Найти сумму элементов массива с четными индексами. Для решения этой задачи можно предложить несколько способов.

1.Массив перебирается с шагом 2, и все элементы суммируются.

2.Массив перебирается с шагом 1, и суммируются только эле­ менты, имеющие четные индексы. Для проверки на четность исполь­ зуется операция получения остатка от деления на 2.

//П ервы й способ

# in c lu d e c io s tr e a m .h > #in c lu d e c s t d l i b . h>

v o id

m a in ()

{

 

i n t

a [1 0 0 ];

i n t

n;

c o u t « " \ n E n t e r t h e s i z e o f a r r a y : " ;

c i n » n ;

for (int 1=0; Kn; I++)

{

//заполнение массива случайными числами а [I]=rand()%100-50;

cout<<a [I]« " ";

}

int Sum=0;

f o r ( 1 = 0 ; I < n ; I+ = 2 )

//суммируются элементы с индексами 0, 2, 4, и т.д. Sum+=a[I];

cout«"\nSum="«Sum";

}

/ / В т о р о й с п о с о б

# i n c l u d e < i o s t r e a m . h >

#include <stdlib.h> void main()

{

int a [100]; int n;

c o u t « " \ n E n t e r t h e s i z e o f a r r a y : " ; c i n » n ;

for(int 1=0;I<n;I++)

{

//заполнение массива случайными числами а [I]=rand()%100—50;

cout«a [I] <<" ";

}

int Sum=0;

for (1=0; Kn; I++)

i f ( I%2==0)

//суммируются элементы с индексами 0, 2, 4, и т.д.

Sum+=a[I];

cout«"\nSum="«Sum" ;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]