- •Содержание
- •Предисловие
- •1. Общие методические указания
- •2. Рабочая программа и методические указания к темам курса
- •2.1 Типы данных
- •2.2.1 Операторы управления
- •If (выражание) оператор_1;
- •2.2.2 Операторы ввода-вывода
- •Контрольные вопросы
- •2.3 Массивы и указатели
- •2.3.1 Указатели
- •2.3.2 Массивы
- •Контрольные вопросы
- •2.4 Типы данных, определяемые пользователем
- •2.4.1 Структуры
- •2.4.2 Перечисления
- •2.4.3 Структуры с битовыми полями
- •2.4.4 Объединение (смесь)
- •Контрольные вопросы
- •2.5 Функции
- •2.5.1 Общие сведения о функциях
- •Способы передачи параметров функции
- •2.5.2 Рекурсивные функции
- •2.5.3 Перегрузка функций
- •2.5.4 Шаблоны функций
- •Контрольные вопросы
- •3. Перечень лабораторных работ
- •Список литературы
- •Давыдов, в.Г. Программирование и основы алгоритмизации [Текст]: учеб. Пособие/ в.Г. Давыдов – м: Высшая школа, 2003. – 447с.: ил.: 22 см. – Библиогр.: с. 442. – 3000 экз. - isbn 5-060-04432-7.
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 предпочтительнее в большинстве остальных случаев, в т.ч. для организации циклов со счетчиками.