Лабораторная работа №2. Циклы, или итерационные структуры, позволяют повторять выполнение отдельных операторов или групп операторов

Циклы и массивы

Циклы

Циклы, или итерационные структуры, позволяют повторять выполнение отдельных операторов или групп операторов. Число повторений в некоторых случаях фиксировано, а в других определяется в процессе счета на основе одной или нескольких проверок условий.

Циклы завершаются в следующих случаях:

1)обратилось в нуль условное выражение в заголовке цикла.;

2)в теле цикла выполнился оператор break;

3)в теле цикла выполнился оператор return.

В первых двух случаях управление передается на оператор, располагающийся непосредственно за циклом. В третьем случае происходит возврат из функции (завершение работы данной функции).

Бывают циклы с проверкой условия перед началом выполнения тела цикла (top-testing), по окончании выполнения тела (bottom-testing) или внутри тела (middle-testing). Ниже рассмотрены все указанные типы циклов.

 

Цикл while

 

Синтаксис цикла while (пока):

while ( условное_выражение ) оператор

Ясно, что в цикле типа while проверка условия производится перед выполнением тела цикла (оператор). Если результат вычисления условного выражения не равен нулю, то выполняется оператор (или группа операторов). Перед входом в цикл while в первый раз обычно инициализируют одну или несколько переменных для того, чтобы условное выражение имело какое-либо значение. Оператор или группа операторов, составляющих тело цикла, должны, как правило, изменять значения одной или нескольких переменных, входящих в условное выражение, чтобы в конце концов выражение обратилось в нуль, и цикл завершился.

Потенциальной ошибкой при программировании цикла while, как, впрочем, и цикла любого другого типа, является запись такого условного выражения, которое никогда не прекратит выполнение цикла. Такой цикл называется бесконечным (например цикл: while (a) printf(“Circle”), где а - любое число, отличное от 0. Цикл будет бесконечно выводить на экран дисплея текст Circle) . Пример:

#include <stdio.h> // подключение библиотеки stdio.h

void main(void)// основная функция main

{ int a;// объявление переменных a

scanf ( "%d", &a); // ввод значений переменных a и с клавиатуры

while(a>=0) // цикл повторяется пока а>=0

{ printf( "a = %d\n", a); // вывод значения переменной a

a--; // уменьшение значения переменной а на один

}

}

Цикл do while

В цикле do while проверка условия осуществляется после выполнения тела цикла. Синтаксис цикла:

do оператор;

//тело цикла

while ( условное_выражение )

В языке Си вместо одиночного оператора (например в теле рассматриваемого цикла) может быть подставлена группа операторов (блок). Цикл while прекращает выполняться, когда условное выражение обращается в нуль (становится ложным). Пример:

#include <stdio.h>// подключение библиотеки stdio.h

void main(void)// основная функция main

{ int a;// объявление переменных a

scanf ( "%d", &a);// ввод значений переменных a и с клавиатуры

do{// начало цикла

printf( "a = %d\n", a);// вывод значения переменной a

a--;// уменьшение значения переменной а на 1

} while(a>=0); // цикл повторяется пока а>=0

}

Цикл for

Наиболее общей формой цикла в языке С является цикл for. Цикл for - это более общая и более мощная форма, чем аналогичный цикл в языках Паскаль и Бейсик.

Конструкция for выглядит следующим образом:

for (выражение1; выражение2; выражение З) оператор;

Каждое из трех выражений можно опускать. Хотя в принципе каждое из этих выражений может быть использовано программистом как угодно, обычно первое выражение служит для инициализации индекса, второе -для выполнения проверки на окончание цикла, а третье выражение - для изменения значения индекса.

Формально это правило можно описать так:

1. Если первое выражение присутствует, то оно вычисляется.

2. Вычисляется второе выражение (если оно присутствует). Если вырабатывается значение 0, то цикл прекращается, в противном случае цикл будет продолжен.

3. Исполняется тело цикла.

4. Вычисляется третье выражение (если оно присутствует).

5. Выполняется переход к п.2.

Выполнение в любом месте тела цикла оператора continue приводит к немедленному переходу к шагу 4. Пример:

#include <stdio.h>//подключение библиотеки stdio.h

void main(void)//основная функция main

{ int a;//объявление переменных a

for(a=0; a<10; a++) //цикл от 0 до 9-ти

printf( "a = %d\n", a); // вывод значения переменной a

}

Цикл for можно свести к циклу while следующим образом:

Цикл for:

for ( выражение1; выражение2; выражениеЗ ) оператор;

переводится в:

выражение1;

while ( выражение2 ) {

оператор;

выражениеЗ; }

Массивы

 

Массив - это структурированный тип данных, состоящий из нескольких элементов одного и того же типа. В качестве типа массива может быть выбран любой известный (объявленный) тип языка СИ. Отличие объявления массива от объявления обычной переменной заключается в наличии квадратных скобок после названия массива. В них указывается количества элементов в массиве. Пример объявления массива:

int a [100];

char b [30];

float c [42];

В приведенном примере массив "а" состоит из 100 целых чисел, массив "b" состоит из 30 символов, массив "с" состоит их 42 вещественных чисел. Нумерация элементов массива начинается с нулевого элемента.

Массивы бывают одномерные и многомерные. Количество измерений массива определяется при декларации по количеству квадратных скобок после имени массива. Пример:

int a[10] ;

int b[100][30];

int c[20][78][45];

В приведенном примере массив "а" является одномерным, массив "b" - двумерным, массив "с" - трехмерным. Одномерный массив иногда называют вектором. Наиболее часто используются одномерные и двумерные массивы.

Для одномерного массива все элементы хранятся в виде строки. Обращение к массиву осуществляется по его имени. Для обращения к конкретному элементу массива необходимо помимо имени массива задать порядковый номер элемента в массиве (индекс). Например, обращение к девятому элементу запишется так: а[5].

Двумерный массив представляется как одномерный массив, элементы которого тоже массивы. Элементы двумерного массива хранятся по строкам. Если проходить последовательно по элементам массива в порядке их расположения в памяти, то быстрее всего изменяется самый правый индекс. Например, обращение к девятому элементу пятой строки запишется так: а[5][9].

Пусть задано объявление: int a[2][3]; Тогда элементы массива а будут размещаться в памяти следующим образом: а[0][0], а[0][1] а[0][2], а[1][0], а[1][1], а[1][2]. Имя массива а – это указатель константы, которая содержит адрес его первого элемента ( для нашего примера – а[0][0] ). Предположим, что а=1000. Тогда адрес элемента а[0][1] будет равен 1002 (элемент типа int занимает в памяти 2 байта), адрес следующего элемента а[0] [2] – 1004 и т.п. Что же произойдет, если вы выберете элемент, для которого не выделена память. К сожалению, компилятор не следит за этим. В результате возникнет ошибка, и программа будет работать не верно.В ряде случаев происходит аварийное завершение программы.

Язык С позволяет инициализировать массив при объявлении. Для этого используется такая форма:

тип имя_массива [ количество_элементов] = { список значений };

Рассмотрим примеры:

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

char с[7] = { 'a','b','c','d','e','f','g'};

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

В последнем случае: b[0][0] = 1, b[0][1] = 2, b[0][2] = 3, b[1][0] = 4,

b[1][1] = 5, b[1][2] = 6.

 








Дата добавления: 2016-04-14; просмотров: 453;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.013 сек.