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

20. Оператор цикла for. Привести примеры.

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

В языке программирования С++ существуют такие циклы:

цикл for

цикл while

цикл do .. while

Тело цикла будет выполняться до тех пор, пока условие будет истинно(т. е. true).

// форма записи оператора цикла for:

for (/*выражение1*/; /*выражение2*/; /*выражение3*/ )

{

/*один оператор или блок операторов*/;

}

Если в теле цикла for должен выполнится один оператор, тогда фигурные скобки можно опустить:

for (/*выражение1*/; /*выражение2*/; /*выражение3*/)

/*один оператор*/;

Рассмотрим подробно три выражения записанные в круглых скобках цикла for! Выражение1 - объявление (и) или инициализация, ранее объявленной, переменной-счетчика, которая будет отвечать за истинность условия в цикле for. Пример:

int counter = 0; // отсюда видно, что была объявлена переменная counter типа int и инициализирована значением 0\

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

Разница между объявлением и инициализацией переменной:

counter; // объявление переменой count

counter = 9; // инициализация целочисленной переменой count значением 9.

Выражение2 - это условие продолжения цикла for, оно проверяется на истинность.

counter < 10; // условие истинно пока count строго меньше десяти!

Выражение3 изменяет значение переменной-счетчика. Без выражения3 цикл считается бесконечным, так как изменение содержимого переменной count выполняться не будет, и если изначально условие было истинным, то цикл будет бесконечным, иначе программа даже не войдет в цикл. Выражения 1, 2, 3 отделяются друг от друга обязательными разделителями, точкой с запятой. Тело цикла обрамляется фигурными скобочками, если тело цикла состоит из одного оператора ,то фигурные скобочки не нужны. Под изменением значения переменной подразумевается уменьшение или приращение значения , например:

?1 for ( int counter = 0; counter < 15; counter++) // выполняется приращение переменной counter с шагом 1 от 0 до 15

"++" это операция инкремента, увеличение значения переменной на единицу

"--" это операция декремента, уменьшение значения переменной на единицу

Очень часто неправильно интерпретируется запись пределов в цикле for, в нашем случае приращение переменной counter выполняется с шагом 1 от 0 до 15. Обратите внимание на конечный предел. В условии продолжения цикла стоит знак отношения строго меньше, а значит, когда значение в переменной counter будет равно 14, выполнится выход из цикла. Ниже показан пример работы программы

// for.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

for (int counter = 0; counter < 15; counter ++ ) // начало цикла

cout << " " << counter; // тело цикла

cout << endl;

system("pause");

return 0;

}

В строках 9, 10 записан цикл for, причём без фигурных скобочек. А раз отсутствуют фигурные скобочки, значит, телом цикла является следующий оператор, после заголовка цикла, в нашем случае - это оператор вывода:

cout << " " << counter; // тело цикла

Заголовком цикла for является строка 9:

for (int counter = 0; counter < 15; counter ++ ) // заголовок цикла

Фигурные скобочки можно не опускать, это кому как удобно. Но в данном случае без фигурных скобочек запись кода более компактна, чем со скобочками.

21. Встроенная операция sizeof. Привести примеры.

Операция sizeof()

В языке Си имеется встроенная операция sizeof (), которая позволяет определить размер объекта. Объект задается в скобках. Результат операции - размер объекта в байтах.

Практическая часть

Ниже представлен текст программы на языке Си, используемой в данной лабораторной работе.

/*Лабораторная работа 2*/

#include < stdio.h>

#include < values.h>

#define MAX1 (127)

main ( )

{

void test (void);

void size (void);

size ();

test ();

}

void size (void)

{

printf ("Данные типа int занимают %d байта.\n", sizeof (int));

printf ("Данные типа short занимают %d байта.\n", sizeof (short));

printf ("Данные типа char занимают %d байт.\n", sizeof (char));

printf ("Данные типа long занимают %d байта.\n", sizeof (long));

}

void test (void)

{

char a = MAX1, a1, a2;

short b, b1, b2;

int с, c1, c2;

long d, d1, d2;

b = MAXSHORT;

c = MAXINT;

d = MAXLONG;

a1 = a + 1;

a2 = a1 + 1;

b1 = b + 1;

b2 = b1 + 1;

c1 = c + 1;

c2 = c1 + 1;

d1 = d + 1;

d2 = d1 + 1;

printf (" %d %d %d\n", a, a1, a2);

printf (" %x %x %x\n", a, a1, a2);

printf (" %hd %hd %hd\n", b, b1, b2);

printf (" %hx %hx %hx\n", b, b1, b2);

printf (" %d %d %d\n", c, c1, c2);

printf (" %x %x %x\n", c, c1, c2);

printf (" %ld %ld %ld\n", d, d1, d2);

printf (" %lx %lx %lx\n", d, d1, d2);

}

С помощью операции sizeof можно определить размер памяти которая соответствует идентификатору или типу. Операция sizeof имеет следующий формат:

sizeof(выражение) .

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

Если в качестве выражения указанно имя массива, то результатом является размер всего массива (т.е. произведение числа элементов на длину типа), а не размер указателя, соответствующего идентификатору массива.

Когда sizeof применяются к имени типа структуры или объединения или к идентификатору имеющему тип структуры или объединения, то результатом является фактический размер структуры или объединения, который может включать участки памяти, используемые для выравнивания элементов структуры или объединения. Таким образом, этот результат может не соответствовать размеру, получаемому путем сложения размеров элементов структуры.

Пример:

struct { char h; int b; double f; } str; int a1; a1 = sizeof(str);

Переменная а1 получит значение, равное 12, в то же время если сложить длины всех используемых в структуре типов, то получим, что длина структуры str равна 7.

Несоответствие имеет место в виду того, что после размещения в памяти первой переменной h длинной 1 байт, добавляется 1 байт для выравнивания адреса переменной b на границу слова (слово имеет длину 2 байта для машин серии IBM PC AT /286/287), далее осуществляется выравнивание адреса переменной f на границу двойного слова (4 байта), таким образом в результате операций выравнивания для размещения структуры в оперативной памяти требуется на 5 байт больше.

В связи с этим целесообразно рекомендовать при объявлении структур и объединения располагать их элементы в порядке убывания длины типов, т.е. приведенную выше структуру следует записать в следующем виде:

struct { double f; int b; char h; } str;