Константы и переменные

Уральский федеральный университет

Кафедра интеллектуальных информационных технологий

Программирование на языке 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, если оно ложно.

Ввод и вывод

Наши рекомендации