Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Proga_otvety.docx
Скачиваний:
2
Добавлен:
03.08.2019
Размер:
72.02 Кб
Скачать

15. Вложенные циклы.

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

Полное число исполнений тела внутреннего цикла не превышает произведения числа итераций внутреннего и всех внешних циклов. Например взяв три вложенных друг в друга цикла, каждый по 10 итераций, получим 10 исполнений тела для внешнего цикла, 100 для цикла второго уровня и 1000 в самом внутреннем цикле.

Одна из проблем, связанных с вложенными циклами — организация досрочного выхода из них. Для этого есть оператор досрочного завершения цикла(break).

16. Одномерные массивы.

Массив (array) - набор объектов одинакового тип, имеющих одно имя, доступ к которым осуществляется по индексам. Количество индексов определяет размерность.

Размерность Размерность массива — количество индексов, которые необходимо задать одновременно для доступа к элементу массива.

задается константой вот так:

int a[5];

Элементы массива запоминаются в памяти последовательно.

a[0]

a[1]

. . .

a[4]

Если использовать индекс вне заданного диапазона, например a[-2], то это приведет к ссылке на область памяти, не принадлежащую массиву, что может вызвать серьезные ошибки. Если, конечно, такая цель не ставилась.

Реализация ввода элементов массива:

int a[5], i;

for( i=0; i<5; i++ )

{

printf( "\n эл-т %d: ", i );

scanf( "%d", &a[i] );

}

Свойства одномерного массива:

один и тот же тип

все элементы в памяти располагаются друг за другом

индекс первого элемента - 0

имя массива определяет адрес начала массива (адрес первого элемента - const)

Инициализация массива при описании:

int x[4] = { 5, 2, 1, 8 };

// размерность можно не указывать:

int x[] = { 5, 2, 1, 8, 9, 75 };

17. Двумерные массивы.

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

Вот схематично с доски:

[ ] x[0][0]

[ ] x[0][1]

[ ] x[1][0]

[ ] x[1][1]

18. Типовые действия с массивами.

Инициализация с помощью присваивания:

//это типа так? может и так...

int a[5];

a[0] = 11;

a[1] = 25;

. . .

а можно и при инициализации:

int a[5] = { 1, 4, 9, 16, 25 };

Инициализация с помощью функции ввода:

//думаю, имеется ввиду scanf(), getch() или что-то в этом роде:

int a[5], i;

for( i=0; i<5; i++ )

{

printf( "\n эл-т %d: ", i );

scanf( "%d", &a[i] );

}

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

существует дофига способов сортировки, нам давали вот этот:

#include <stdio.h>

main()

{

int i,j,t; // временные переменные

int forsort[10]; // это сам массив

int size=10; // это размер массива

// -------------------------------------

// ввод элементов:

// -------------------------------------

for( i=0; i<size; i++ )

{

printf( "\n forsort[%d]: ", i );

scanf( "%d", &forsort[i] );

}

// -------------------------------------

// сортировка:

// -------------------------------------

for( i=0; i<size-1; i++ )

{

for( j=i+1; j<size; j++ )

{

if( forsort[i] > forsort[j] )

{

t = forsort[i];

forsort[i] = forsort[j];

forsort[j] = t;

}

}

}

// -------------------------------------

// выводим сие чудо:

// -------------------------------------

for( i=0; i<size; i++ )

printf( "\n%d", forsort[i] );

getch(); // чтоб успеть все это прочитать ^^^

return 0; /* а это потому что мейн целый ( main() <=> int main() ) и

он по-хорошему должен что-то возвращать целое. например,

ноль. а можно написать void main() и ничего не возвращать.

*/

}

Характеристики массива:

здесь все проще, чем в сортировке.

#include <stdio.h>

main()

{

int i, j; // временные переменные

int array[10]; // это сам массив

int size = 10; // а это размер массива

int summ = 0;

int max = 0;

int bz = 0;

// -------------------------------------

// ввод элементов:

// -------------------------------------

for( i=0; i<size; i++ )

{

printf( "\n array[%d]: ", i );

scanf( "%d", &array[i] );

}

// -------------------------------------

// считаем сумму:

// -------------------------------------

for( i=0; i<size; i++ )

summ += array[i];

printf( "\nSumm: %d", summ );

// -------------------------------------

// считаем среднее (исходя из суммы):

// -------------------------------------

printf( "\nMean: %f", (float)summ/(float)size );

// -------------------------------------

// находим максимальный элемент

// -------------------------------------

max = array[0];

for( i=0; i<size; i++ )

max = array[i] > max ? array[i] : max;

/*

К.О.: эту фигню наверху можно представить немного

по-другому, а именно:

if( array[i] > max )

max = array[i];

else

max = max;

но, естественно, max = max это не айс, поэтому:

if( array[i] > max )

max = array[i];

вообщем, мой вариант короче, но он мб не всем понятен.

*/

printf( "\nMax: %d", max );

// -------------------------------------

// есть ли в массиве отрицательные числа

// -------------------------------------

bz = 0; // изначально - нет. проверим:

for( i=0; i<size && !bz; i++ )

if( array[i] < 0 )

bz = 1;

printf( "\nElements below zero: %s", bz ? "Found" : "No one" );

/* важный момент:

в проверку добавляем && !bz, чтобы цикл прекратился сразу,

как только найдено хоть одно отрицательное число. так-то.

*/

getch(); // чтоб успеть все это прочитать ^^^ */

return 0;

}

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