Константы и переменные
Уральский федеральный университет
Кафедра интеллектуальных информационных технологий
Программирование на языке C/С++
Лабораторный практикум
Екатеринбург, 2013
Оглавление
Требования к выполнению работ.. 4
Лабораторная работа №1. "Вычисление функций с использованием их разложения в степенной ряд". 4
1. Краткие теоретические сведения. 4
1.1. Структура программы.. 4
1.2. Константы и переменные. 6
1.3. Операции. 7
1.4. Выражения. 10
1.5. Ввод и вывод. 11
1.6 Составные операторы.. 12
1.7 Операторы выбора. 12
1.8 Операторы циклов. 13
2. Постановка задачи.. 14
3. Варианты.. 14
4. Методические указания. 16
Лабораторная работа № 2 "Работа с одномерными массивами". 18
Краткие теоретические сведения. 18
1.1. Определение массива. 18
1.2. Инициализация массива. 18
1.3. Указатели и массивы.. 18
1.4 Формирование динамических массивов с использованием операций new и delete. 18
2. Варианты заданий.. 20
3. Методические указания. 23
Лабораторная работа № 3 "Строки". 24
1. Краткие теоретические сведения. 24
1.1. Работа со строками. 24
1.2. Потоковый ввод-вывод. 25
1.3. Открытие и закрытие потока. 26
2. Постановка задачи.. 27
3. Варианты.. 28
Лабораторная работа №4 "Функции и массивы". 32
Краткие теоретические сведения. 32
1.1. Функции. 32
1.2. Массивы и строки как параметры функций. 33
2. Постановка задачи.. 34
3. Варианты.. 34
Лабораторная работа № 5 Работа с функциями в языке C/C++. 38
1. Краткие теоретические сведения. 38
1.1. Перегрузка функции. 38
1.2. Функции с переменным количеством параметров. 39
2. Постановка задачи.. 40
3. Варианты.. 40
Лабораторная работа №6 "Работа со структурами". 45
1. Краткие теоретические сведения. 45
1. 1. Структуры в языке C/C++. 45
1.2. Блоковый ввод-вывод. 46
2. Постановка задачи.. 47
3. Варианты.. 47
4. Методические указания. 52
Лабораторная работа № 7 "Информационные динамические структуры". 53
Краткие теоретические сведения. 53
Библиографический список.. 57
Требования к выполнению работ
Все работы должны быть выполенены самостоятельно и сданы в срок, указанный в таблице. Выявление несамостоятельности работы или несоблюдение сроков являются основаниями для незачета.
№ работы | № недели семестра | № работы | № недели семестра | |
Работа должна быть оформлена согласно следующим правилам:
· Код форматируется автоматически.
· Всякая конструкция (функция, условие, цикл) снабжается комментарием о ее назначении в той же строке или расположенным выше конструкции.
· Весь код делится на две и более функции. Никакая функция, кроме главной программы ( функция main ), не содержит операций ввода-вывода.
· Весь код делится на два или более модулей. Один из них содержит только главную программу.
Лабораторная работа №1. "Вычисление функций с использованием их разложения в степенной ряд"
Цель:Знакомство со средой программирования, создание, отладка и выполнение простой программы, содержащей ввод/вывод информации и простейшие вычисления. Практика в организации итерационных и арифметических циклов.
Краткие теоретические сведения
Язык C создан в 1972 г. Деннисом Ритчи при разработке ОС Unix. Он проектировался как инструмент системного программирования с ориентацией на разработку хорошо структурированных программ. Таким образом, он сочетает в себе, с одной стороны, средства языка программирования высокого уровня: описание типов данных, операторы for, while, if и т. д., а, с другой стороны, содержит средства языка типа Ассемблер: регистровые переменные, адресную арифметику, возможность работы с полями бит и т. д.
Структура программы
Программа на языке C/C++ имеет следующую структуру:
#директивы препроцессора
.........
#директивы препроцессора
функция а ( )
операторы
функция в ( )
операторы
void main ( ) //функция, с которой начинается выполнение программы
операторы
описания
присваивания
функция
пустой оператор
составной
выбора
циклов
перехода
Директивы препроцессора ‑ управляют преобразованием текста программы до ее компиляции. Задача препроцессора ‑ преобразование текста программы до ее компиляции. Правила препроцессорной обработки определяет программист с помощью директив препроцессора. Директива начинается с символа #. Например:
1. #define ‑ указывает правила замены в тексте.
#define ZERO 0.0 ‑ Означает, что каждое использование в программе имени ZERO будет заменяться на 0.0. Это один из способов создания констант. Современные компиляторы для описания констант используют ключевое слово const. Рекомендуется использовать его.
2. #include< имя заголовочного файла>
Данная директива ‑ предназначена для включения в текст программы текста из каталога «Заголовочных файлов», поставляемых вместе со стандартными библиотеками. Каждая библиотечная функция C/C++ имеет соответствующее описание в одном из заголовочных файлов. Список заголовочных файлов определен стандартом языка. Употребление директивы include не подключает соответствующую стандартную библиотеку, а только позволяют вставить в текст программы описания из указанного заголовочного файла. Подключение кодов библиотеки осуществляется на этапе компоновки, т. е. после компиляции. Хотя в заголовочных файлах содержатся все описания стандартных функций, в код программы включаются только те функции, которые используются в программе.
После выполнения препроцессорной обработки в тексте программы не остается ни одной препроцессорной директивы. Программа представляет собой набор описаний и определений, и состоит из набора функций. Среди этих функций всегда должна быть функция с именем main. Без нее программа не может быть выполнена. Перед именем функции помещаются сведения о типе возвращаемого функцией значения (тип результата). Если функция ничего не возвращает, то указывается тип void: void main ( ). Каждая функция, в том числе и main должна иметь набор параметров, он может быть пустым, тогда в скобках указывается (void).
За заголовком функции размещается тело функции. Тело функции ‑ это последовательность определений, описаний и исполняемых операторов, заключенных в фигурные скобки. Каждое определение, описание или оператор заканчивается точкой с запятой.
Определения - вводят объекты (объект ‑ это именованная область памяти, частный случай объекта - переменная), необходимые для представления в программе обрабатываемых данных. Примером являются:
int y = 10; //именованная константа
float x; //переменная
Описания ‑ уведомляют компилятор о свойствах и именах объектов и функций, описанных в других частях программы.
Операторы ‑ определяют действия программы на каждом шаге ее исполнения.
Константы и переменные
Константа ‑ это значение, которое не может быть изменено. Синтаксис языка определяет 5 типов констант:
· символы;
· константы перечисляемого типа;
· вещественные числа;
· целые числа;
· нулевой указатель (NULL).
Переменные можно изменять. При задании значения переменной в соответствующую ей область памяти помещается код этого значения. Доступ к значению возможен через имя переменной, а доступ к участку памяти - по его адресу. Каждая переменная перед использованием в программе должна быть определена, т. е. ей должна быть выделена память. Размер участка памяти, выделяемой для переменной и интерпретация содержимого зависят от типа, указанного в определении переменной. Простейшая форма определения переменных:
тип список_имен_переменных;
Основные типы данных
тип данных | название | размер, бит | диапазон значений |
unsigned char | беззнаковый целый длиной не менее 8 бит | 0.. 255 | |
char | целый длиной не менее 8 бит | -128.. 127 | |
enum | перечисляемый | -32768.. 32767 | |
unsigned int | беззнаковый целый | 0.. 65535 | |
short int (short) | короткий целый | -32768.. 32767 | |
unsigned short | беззнаковый короткий целый | 0.. 65535 | |
int | целый | -32768.. 32767 | |
unsigned long | беззнаковый длинный целый | 0.. 4294967295 | |
long | длинный целый | -214748348.. 2147483647 | |
float | вещественный одинарной точности | 3.4Е-38.. 3.4Е+38 | |
double | вещественный двойной точности | 1.7Е-308.. 1.7Е+308 | |
long double | вещественный максимальной точности | 3.4Е-4932.. 1.1Е+4932 |
В соответствии с синтаксисом языка переменные автоматической памяти после определения по умолчанию имеют неопределенные значения. Переменным можно присваивать начальные значения, явно указывая их в определениях:
тип имя_переменной = начальное_значение;
Этот прием называется инициализацией. Примеры:
float pi = 3.14, cc=1.3456;
unsigned int year = 1999;
Операции
Унарные:
& | получение адреса операнда |
* | обращение по адресу (разыменование) |
- | унарный минус, меняет знак арифметического операнда |
~ | поразрядное инвертирование внутреннего двоичного кода (побитовое отрицание) |
! | логическое отрицание (НЕ). В качестве логических значений используется 0 - ложь и не 0 - истина, отрицанием 0 будет 1, отрицанием любого ненулевого числа будет 0. |
++ | увеличение на единицу: префиксная операция - увеличивает операнд до его использования, постфиксная операция увеличивает операнд после его использования. |
- - | уменьшение на единицу: префиксная операция - уменьшает операнд до его использования, постфиксная операция уменьшает операнд после его использования. |
sizeof | вычисление размера (в байтах) для объекта того типа, который имеет операнд |
Бинарные операции.
Аддитивные:
+ | бинарный плюс (сложение арифметических операндов) |
- | бинарный минус (вычитание арифметических операндов) |
Мультипликативные:
* | умножение операндов арифметического типа |
/ | деление операндов арифметического типа (если операнды целочисленные, то выполняется целочисленное деление) |
% | получение остатка от деления целочисленных операндов |
Операции сдвига (определены только для целочисленных операндов).
Формат выражения с операцией сдвига:
операнд_левый операция_сдвига операнд_правый
<< | сдвиг влево битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого операнда |
>> | сдвиг вправо битового представления значения правого целочисленного операнда на количество разрядов, равное значению правого операнда |
Поразрядные операции:
& | поразрядная конъюнкция (И) битовых представлений значений целочисленных операндов |
| | поразрядная дизъюнкция (ИЛИ) битовых представлений значений целочисленных операндов |
^ | поразрядное исключающее ИЛИ битовых представлений значений целочисленных операндов |
Операции сравнения:
< | меньше, чем |
> | больше, чем |
<= | меньше или равно |
>= | больше или равно |
== | равно |
!= | не равно |
Логические бинарные операции:
&& | конъюнкция (И) целочисленных операндов или отношений, целочисленный результат ложь(0) или истина(1) |
|| | дизъюнкция (ИЛИ) целочисленных операндов или отношений, целочисленный результат ложь(0) или истина(1) |
Условная операция.
В отличие от унарных и бинарных операций в ней используется три операнда.
Выражение1 ? Выражение2 : Выражение3;
Первым вычисляется значение выражения1. Если оно истинно, то вычисляется значение выражения2, которое становится результатом. Если при вычислении выражения1 получится 0, то в качестве результата берется значение выражения3.
Например:
x<0 ? -x : x; //вычисляется абсолютное значение x.
Операция явного (преобразования) приведения типа.
Существует две формы: каноническая и функциональная:
(имя_типа) операнд
имя_типа (операнд)
Приоритеты операций.
Ранг | Операции |
( ) [ ] ->. | |
! ~ - ++ -- & * (тип) sizeof тип( ) | |
* / % (мультипликативные бинарные) | |
+ - (аддитивные бинарные) | |
<< >> (поразрядного сдвига) | |
< > <= >= (отношения) | |
== != (отношения) | |
& (поразрядная конъюнкция «И») | |
^ (поразрядное исключающее «ИЛИ») | |
| (поразрядная дизъюнкция «ИЛИ») | |
&& (конъюнкция «И») | |
|| (дизъюнкция «ИЛИ») | |
?: (условная операция) | |
= *= /= %= -= &= ^= |= <<= >>= (операция присваивания) | |
, (операция запятая) |
Выражения
Из констант, переменных, разделителей и знаков операций можно конструировать выражения. Каждое выражение состоит из одного или нескольких операндов, символов операций и ограничителей, в качестве которых чаще всего выступают квадратные скобки. Если выражение формирует целое или вещественное число, то это арифметическое выражение. В арифметических выражениях допустимы операции: + - * / %.
Отношение - это пара арифметических выражений, объединенных знаком операции отношения. Логический тип в C/C++ отсутствует, поэтому принято, что отношение имеет ненулевое значение, если оно истинно и 0, если оно ложно.
Ввод и вывод