Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Цикл с постусловием do-while




Формат оператора следующий:

do

оператор

while (логическое выражение);

 

Сначала выполняется образующий тело цикла оператор (простой или составной), а затем вычисляется логическое выражение. Если выражение принимает значение ИСТИНА, тело цикла выполняется еще раз и проверка повторяется. Цикл завершается, когда выражение примет значение ЛОЖЬ.

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

#include <stdio.h>

void main()

{

int number, half, div;

scanf(“%d”, &number);

half = number/2;

div =2;

do

{

If(number % div == 0)

printf(“%d ”, div);

div++;

}

while(div <= half);

}

Однако эта программа будет работать неправильно в случае поиска делителей для числа 2.

Цикл с параметром for

Формат оператора следующий:

for (инициализация; логическое выражение; модификация)

оператор

Инициализация служит для присвоения начальных значений величинам, используемым в цикле. В этой части допускается записывать несколько операторов присваивания, разделенных запятой. Инициализация выполняется один раз в самом начале исполнения цикла.

Логическое выражение определяет условие продолжения цикла: если его значение есть ИСТИНА, выполняется образующий тело цикла оператор (простой или составной), иначе происходит завершение работы цикла. Цикл с параметром реализован как цикл с предусловием.

Модификация выполняется после каждой итерации цикла и служит обычно для изменения параметра цикла. В части модификации допускается записывать несколько операторов через запятую.

Снова вернемся к рассмотрению предыдущего примера (найти все делители целого положительного числа), в котором теперь используем цикл for:

#include <stdio.h>

void main()

{

int number, half, div;

scanf (“%d”, &number);

half = number/2;

for (div =2; div <= half; div++)

if (number % div == 0)

printf(“%d ”, div);

}

 

В операторах цикла могут использоваться операторы break и continue. Оператор break вызывает немедленный выход из цикла. Оператор continue осуществляет немедленный переход к следующей итерации цикла.

Пример, иллюстрирующий использование оператора break: суммировать числа, вводимые с клавиатуры до тех пор, пока не будет введено число 0, после чего вывести полученную сумму на экран.

#include <stdio.h>

void main()

{

int num, sum = 0;

while (1) //запускается бесконечный цикл

{

scanf(“%d”, &num);

if (num == 0) break;

sum += num;

}

printf(“Сумма = %d”, sum);

}

 

Пример фрагмента кода, иллюстрирующего использование оператора continue для того, чтобы исключить операцию деления на ноль:

#include <stdio.h>

void main()

{

...

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

{

if (i == k) continue;

sum += 1.0/(i - k);

}

...

}

 

Любой цикл while может быть приведен к эквивалентному ему циклу for и наоборот. Например, два следующих цикла эквивалентны:

for (part1; part2; part3) part1;

оператор while (part2)

{

оператор

part3;

}

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

При необходимости любая из трех частей, содержащихся в заголовке оператора for, может быть опущена, однако точки с запятой надо оставить на своих местах. Например, четыре следующих цикла for эквивалентны:

//1

for (part1; part2; part3)

оператор

//2

part1;

for (; part2; part3)

оператор

//3

for (part1;; part3)

{

if (!part2) break;

оператор

}

//4

for (part1; part2;)

{

оператор

part3;

}

Подобным образом можно опустить любые две из трех частей, содержащихся в заголовке оператора for, или даже все 3 части, получая следующее:

part1;

for (;;) //запускается бесконечный цикл

{

if (!part2) break;

оператор

part3;

}

Если тело цикла невелико, можно переместить его в заголовок по правилам операции «запятая». После заголовка необходимо поставить пустой оператор (;):

for (part1; part2; оператор, part3);

Циклы можно вкладывать друг в друга. При этом в качестве параметров вложенных циклов должны быть использованы различные переменные. Пример вывода на экран школьной таблицы умножения:

#include <stdio.h>

void main()

{

const int N = 9;

int i, j;

for (i = 1; i <= N; i++)

{

for (j = 1; j <= N; j++)

printf(“%3d”, i*j);

printf(“\n”);

}

}

 

Тема 6. Массивы

 

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

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

float x[10]; //описание массива х из 10 вещественных чисел

int a[5] = {1, 3, 5, 7, 9}; //описание массива a с инициализацией его элементов. При этом

// a[0]=1, a[1]=3, a[2]=5, a[3]=7, a[4]=9. Элемента a[5] в массиве нет

Если число инициализаторов совпадает с размерностью массива, то размерность можно не указывать:

int a[ ] = {1, 3, 5, 7, 9};

Если элементов в массиве больше, чем инициализаторов, элементы, для которых значения не указаны, обнуляются:

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

Размерность массива предпочтительнее задавать с помощью именованной константы, т.к. в этом случае для изменения размерности массива достаточно скорректировать значение константы всего лишь в одном месте программы. Например, найдем сумму значений всех элементов массива:

#include <stdio.h>

void main()

{

const int N = 10;

int i, sum, mas[N];

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

scanf(“%d”, &mas[i]);

for (sum=0, i = 0; i < N; i++)

sum += mas[i];

printf(“Сумма = %d”, sum);

}

 

Многомерные массивы задаются указанием каждого измерения в квадратных скобках. Например, оператор

int matr[3][5];

задает описание двумерного массива из 3 строк и 5 столбцов. В памяти такой массив располагается в последовательных ячейках построчно, то есть при переходе к следующему элементу быстрее всех изменяется последний индекс. Для доступа к элементу многомерного массива указываются все его индексы, например, matr[i][j] для описанного выше двумерного массива есть обращение к элементу, расположенному на пересечении i -й строки и j -го столбца.

Инициализировать многомерный массив можно двумя способами.

1. Задается общий список элементов в том порядке, в котором элементы располагаются в памяти:

int mas[2][4] = {1, 2, 3, 4, 5, 6, 7, 8};

2. Используется представление в виде массива из массивов, при этом каждый массив заключается в свои фигурные скобки:

int mas[2][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}};

В обоих случаях левую размерность можно не указывать.

Эти операторы определяют матрицу со следующими значениями элементов:

1 2 3 4

5 6 7 8

Допустимыми являются также варианты, когда указываются не все инициализаторы. Например, оператор int mas[ ][4] = {{1, 2}, {5}}; определяет следующую матрицу:

1 2 0 0

5 0 0 0

При работе с элементами многомерных массивов обычно используют вложенные циклы, как в следующем примере, где подсчитывается сумма значений всех элементов двумерного массива:

#include <stdio.h>

void main()

{

const int N = 10, M = 5;

int i, j, sum, mas[N][M];

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

for (j = 0; j < M; j++)

scanf(“%d”, &mas[i][j]);

for (sum=0, i = 0; i < N; i++)

for (j = 0; j < M; j++)

sum += mas[i][j];

printf(“Сумма = %d”, sum);

}

 





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


Дата добавления: 2016-04-03; Мы поможем в написании ваших работ!; просмотров: 399 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

В моем словаре нет слова «невозможно». © Наполеон Бонапарт
==> читать все изречения...

2174 - | 2121 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.01 с.