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

2. Рабочая программа и методические указания к темам курса

2.1 Типы данных

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

Тип данных определяет:

  • внутреннее представление данных в памяти компьютера;

  • множество значений, которые могут принимать величины этого типа;

  • операции и функции, которые можно применять к величинам этого типа.

Все типы можно разделить на:

  • основные (для представления целых, вещественных, логических и символьных величин);

  • составные (массивы, перечисления, функции, структуры, ссылки, указатели, объединения, классы).

Основные (стандартные) типы данных называют часто арифметическими, поскольку их можно использовать в арифметических операциях. Для описания основных типов определены следующие ключевые слова:

  • int (целый);

  • char (символьный);

  • wchar_t (расширенный символьный);

  • bool (логический);

  • float (вещественный);

  • double (вещественный с двойной точностью).

Первые четыре типа называют целочисленными (целыми), последние два – типами с плавающей точкой..

Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов:

  • short (короткий);

  • long (длинный);

  • signed (знаковый);

  • unsigned (беззнаковый).

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

В таблице 3 представлены основные характеристики типов данных.

Таблица 3

Тип

Размер байт

Диапазон значений (min –max)

bool

1

true и false

signed char

1

-128 - +127

unsigned char

1

0 - +255

unsigned short int

2

0 – +65 535

signed short int

2

-32 768 – +32 767

signed int

2 (4)

-32 768 – +32767 (+2 147 483 648)

signed long int

4

-2 147 483 648 – +2 147 483 648

unsigned long int

4

0 – +4 294 967 295

float

4

3.4e-38 – 3.4e+38

double

8

1.7e-308 – 1.7e+308

long double

10

3.4e-4932 – 3.4e+4932

2.2 Основные операторы языка С++

2.2.1 Операторы управления

Условный оператор if. Используется для разветвления процесса на два направления. Имеет следующий вид:

If (выражание) оператор_1;

[else оператор_2;]

где выражение- выражение произвольного вида интерпретируемого языком С++ как логиче­ское, т.е. любое отличное от нуля значение как True и False в противном случае. Сначала вычисляется выражение; если значение выражения отлично от нуля, то выполняется оператор_1 (или блок), иначе (равно нулю) – оператор_2 (блок). После этого управление передается на оператор, следующий за if. Вторая ветвь вместе с ключевым словом else может отсутствовать.

Например:

int i=0,j=0,k=0; //int i=j=k=0;

.......

if (m[j]<0)i++; //счётчик отрицательных элементов

else

k++; //счётчик положительных элементов

........

Операторы if..else могут быть вложенными. В этом случае операторы оператор_1 или оператор_2 могут быть представлены такой же конструкцией if..else.

Например:

int i=0,j=0,k=0,n=0;

................

if(m[j]==0)n++ //счётчик нулевых элементов

else

if(m[j]<0)i++; // cчётчик отрицательных элементов

................

Если требуется проверить несколько условий, то их объединяют знаками логических операций:

if (a<b && (a>b || a==0)) b++;

else {if (b<c) m=b; else m=c;}

Для устранения неоднозначности компилятор С интерпретирует вложенные if таким образом, что ветвь else соотносит к ближайшему предыдущему if.

Оператор множественного ветвления switch (переключатель). Предназначен для разветвления процесса вычислений на несколько направлений. Имеет следующую форму:

switch (выражение) {

case константное_выражение_1: [список_операторов_1] [break;]

case константное_выражение_2: [список_операторов_2] [break;]

. . .

case константное_выражение_n: [список_операторов_n] [break;]

[ default: операторы ] }

Оператор switch работает следующим образом: сначала вычисляется выражение (оно должно быть целочисленного типа char, int, unsigned int, long int, long unsigned), которое сравнивается со значениями константных выражений группы - константное_выражение_1 … константное_выражение n (которые должны быть одного и того же целочисленного типа). Если какое-либо из константных целочисленных выражений совпало со значе­нием выражения, то выполняется соответствующий список_операторов (оператор) и управление (при нали­чии оператора break) передаётся следующему за оператором switch оператору; если выход из переключателя явно не задан (отсутствуют операторы break или return в конце ветви), последовательно выполняются все остальные ветви.

Если соответст­вующего совпадения не обнаружено, то выполняются операторы ветви default (если он есть) и управление передаётся следующему после switch оператору.

Пример:

switch(getchar()) {

case ‘a’: puts(‘’введена буква а ‘’); break;

case ‘б’: puts(‘’ введена буква б ‘’); break;

case ‘c’: puts(‘’ введена буква с ‘’); break;

default: puts(‘’ ни одна из трёх букв а, б, с не введена’’); break;

}

При вводе с клавиатуры одного из символов «а», «б» или «с» на экран дисплея будет выведено соответствующее извещение. Например, при вводе символа «a» на экране дисплея будет отображено следующее сообщение

введена буква a

После чего управление будет передано следующему за switch оператору. Если будет введена буква отличная от «a», «b» или «с» на экран будет выдано сообщение:

ни одна из трёх букв а, б, с не введена.

Затем управление также передается следующему за switch оператору.

Приведенный выше пример без использования операторов break даст следующие результаты: при вводе символа «a» на экране дисплея будет отображено:

введена буква a

введена буква b

введена буква с

ни одна из трех букв a,b или с не введена;

при вводе символа «c» на экране будет отображено:

введена буква с

ни одна из трех букв a,b или с не введена.

Как видно из рассмотренного примера, отсутствие оператора break может привести к не­корректным результатам, если это не предусмотрено специально.

Цикл с предусловием (while). В общем виде записывается:

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

оператор;

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

Пример:

int i=1,p=1;

while(i<=10){ //Вычисление 10! (факториал 10)

p*=i;

i++;

}

Распространенный прием программирования – организация бесконечного цикла с заголовком

while (true)

либо

while (1)

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

while (int x = 0)

Цикл с постусловием (do while). В общем виде записывается:

do

оператор;

while(выражение);

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

Пример:

int n=1,p1,p2;

do{

p1=1./n; n++;

p2=p1+1./n;

}

while(1./n<0.001);

Цикл с параметром (for). В общем случае записывается:

for (оператор_1; выражение_1; выражение_2)

оператор_2;

Оператор for работает следующим образом. Вначале выполняется оператор_1 (обычно это оператор инициализации), который в частном случае может быть пустым. Затем вычисляется выражение_1. Если значение выражения_1 имеет значение ноль (ложь), то управление передается следующему за оператором for оператору, и оператору_2, когда значение выражения_1 имеет ненулевое значение. После этого выполняется выражение_2 (чаще всего производящий модификацию параметра) и управление передается на выраже­ние_1.Таким образом, оператор_2 -тело цикла - повторяется до тех пор, пока выражение_1 (условие окончания цикла) не при­мет значение 0.

Примеры:

//фрагмент программы определения минимального элемента //вектора

int min=а[0];

for(int i=0;i<100;i++)

if (min>a[i]) min=a[i];.

Оператор_1 используется для объявления и присвоения начальных значений величинам, используемым в цикле. Он выполняется только один раз в начале исполнения цикла.

Выражение_2 выполняется после каждой итерации цикла.

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

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