Операции увеличения (инкремента) и уменьшения (декремента)



МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

Старооскольский технологический институт

им. А.А. УГАРОВА  

(филиал) федерального государственного автономного образовательного учреждения высшего профессионального образования

«Национальный исследовательский технологический университет «МИСиС» 

 

 

Кафедра АИСУ

 

Михайлюк Е.А.

 

 

Программная инженерия

Часть 1

 

Учебно-методическое пособие

(курс лекций)

для студентов специальности

080801 – «Прикладная информатика»

(очная, очно-заочная, заочная формы обучения)

 

 

Одобрено редакционно-издательским советом института

 

 

Старый Оскол

2014


УДК 004

ББК 32.973.26-018

 

Рецензент: Сизов С.В. – к.ф.-м.н., руководитель подразделения разработки ПО ООО «МДЦ-Консалтинг»

Михайлюк Е.А. Программная инженерия (Часть 1). Учебно-методическое пособие. Старый Оскол: СТИ НИТУ «МИСиС», 2014. – 168 с.

 

Учебно-методическое пособие для студентов специальности 080801 – «Прикладная информатика», для всех форм обучения.

 

© Михайлюк Е.А.

© СТИ НИТУ «МИСиС»


Содержание

Введение.. 5

Глава I Правила оформления программ на Си/Си++. 6

1.1 Алгоритмы.. 6

1.2. Сравнение языков С++ и С.. 10

1.3. Структура программы на языке С++. 11

Глава 2. Основы программирования на С++. 16

2.1. Данные в языке С++. 16

2.2. Переменные языка С++. 18

2.3. Константы в языке С++. 21

2.4. Операции в языке С++. 22

2.5. Логические операции и операции отношения. 26

2.6. Стандартные математические функции в языке С++. 27

2.7. Ввод-вывод в языке Си. 28

2.8.Указатели и массивы.. 31

2.9.Операторы.. 35

Глава3 Использование библиотечных процедур СИ.. 38

3.1.О библиотеке СИ.. 38

3.2.Вызов библиотек СИ.. 39

3.2.Идентификация функций и макро. 39

3.3 Include-файлы.. 41

3.4 Объявление функций. 41

3.5 Проверка типов аргументов. 42

3.6 Обработка ошибок. 43

3.7 Имена файлов и path-имена. 43

Глава 4 Циклические алгоритмы, их реализация в С++. 44

4.1. Циклические алгоритмы.. 44

4.2. Оператор цикла for. 45

4.3. Оператор while. 46

4.4. Оператор do-while. 47

4.5. Операторы break, continue. 47

4.6. Решение задач с использованием циклов. 48

Глава 5. Использование функций при программировании                            на С/С++ функциях.. 57

5.1. Структура программ.. 57

5.2. Передача параметров в С/С++. 58

5.3.Решения практических задач. 59

5.4. Рекурсивные функции в С/С++. 63

5.5. Область видимости переменных в функциях С/С++. 66

5.6. Перегрузка и шаблоны функций. 69

5.7. Использование значений формальных параметров по умолчанию.. 72

Глава 6. Обработка массивов в языке Си++. 73

6.1. Описание массивов. 73

6.2. Ввод элементов массива. 74

6.3. Вывод элементов массива. 75

6.4. Основные алгоритмы обработки массивов. 75

Глава 7 Указатели, динамические массивы... 83

7.1. Указатели в С++. 83

7.2. Операции * и & при работе с указателями. 84

7.4. Арифметические операции над адресами. 86

7.6. Примеры программ.. 90

Глава 8. Матрицы. Многомерные массивы... 97

8.1.Блок-схемы основных алгоритмов обработки матриц. 98

8.2. Свойства матриц. 98

8.3.Динамические матрицы.. 101

Глава 9 Объектно-ориентированное программирование (ООП). 112

Классы в С++. 112

9.1 История развития. 113

9.2.Главные понятия и разновидности. 113

9.3. Определение ООП и его основные концепции. 115

9.4. Подходы к проектированию программ в целом.. 119

9.5 Критика ООП.. 122

9.6.Объектно-ориентированные языки. 124

Глава 10. Основные виды, этапы проектирования и жизненный цикл программных продуктов.. 154

Список литературы... 166


Введение

Си является языком функций, типов данных, операторов присваивания и управления последовательностью вычислений. Большинство функций возвращают некоторые значения. Значение, возвращаемое функцией, может использоваться в операторе присваивания, который изменяет значение другой переменной. Си - язык высокого уровня, способствующий хорошему стилю программирования. Си имеет небольшой набор типов данных: целые числа, числа с плавающей запятой, битовые поля и перечислимый тип. Адресная арифметика языка Си является чувствительной к типу данных того объекта, с которым связан используемый указатель. Разрешены также указатели к функциям. Можно расширить список типов данных путем создания структур с иерархической зависимостью входящих в него типов данных. Каждый тип данных может принадлежать либо к основному типу, либо к ранее описанному структурному типу. Объединения напоминают структуры, но определяют различные виды иерархических зависимостей, в которых данные разных типов располагаются в памяти. Функции Си являются рекурсивными по умолчанию.

Программа на языке Си разбивается на блоки, в каждом из которых могут быть определены свои собственные локальные переменные. Блоки могут быть вложенными друг в друга. Переменные и функции могут быть глобальными для программы, глобальными для исходного модуля или локальными для блока, в котором они описаны. Локальные переменные могут быть описаны таким образом, что они будут сохранять свои значения при всех обращениях внутри данного блока (статические переменные) или же будут восприниматься как новые объекты при каждом обращении (автоматические переменные). Си позволяет создавать программу в виде нескольких исходных модулей, которые будут транслироваться независимо. В языке Си нет операторов ввод/вывод, весь ввод/вывод выполняется с помощью функций. Вследствие этой особенности языка Си разработана стандартная библиотека функций.

 


Глава 1. Правила оформления программ на Си/Си++

Алгоритмы

Основные термины:

1. Алгоритм - это четкое описание последовательности действий, которые необходимо выполнить для решения поставленной задачи.

2. Программа - это алгоритм, записанный на языке программирования.

3. Языком программирования называется специальный язык, понятный для компьютера.

4. Программирование - это процесс создания, отладки и тестирования программ.

Создание любой программы начинается с разработки алгоритма. Именно четкое описание последовательности действий позволяет мысленно представить будущую программу. Построив алгоритм, программист мыслит четко, последовательно, однозначно - так, как и будет впоследствии мыслить компьютер.

Для алгоритма характерны следующие свойства:

1. Дискретность - алгоритм должен быть представлен как последовательное выполнение простых шагов.
Шагом называется каждое действие алгоритма.

2. Определенность - каждое действие алгоритма должно быть четким и однозначным.

3. Результативность - алгоритм должен приводить к решению задачи за определенное число шагов.

4. Массовость - алгоритм составляется в общем виде, т.е. он должен быть применим к ряду задач, различающихся исходными данными.

Способы записи алгоритма

1. Формальный - запись алгоритма словесно, на естественном языке.

2. Графический - изображение алгоритма в виде блок-схемы.

В блок-схеме действия алгоритма (блоки) изображаются следующими геометрическими фигурами:

 

Виды алгоритмов

В зависимости от поставленной задачи и последовательности выполняемых шагов различают следующие виды алгоритмов:

1. Линейный - шаги алгоритма следуют один за другим не повторяясь, действия происходят только в одной заранее намеченной последовательности.

Блоки алгоритма 1, 2, 3 выполняются именно в такой последовательности, после чего алгоритм достигает цели и заканчивается.

2. Алгоритм с ветвлением - в зависимости от выполнения или невыполнения условия, исполняется либо одна, либо другая ветвь алгоритма.

В данном алгоритме проверяется условие, и если оно выполняется, то есть на вопрос можно ответить "Да", исполняется блок алгоритма 1 (одно ли несколько действий), а если не выполняется - ответ на вопрос отрицательный, то исполняется блок 2.

Примечание: одного из блоков: 1 или 2 может не быть вовсе. Тогда в одном из случаев будут выполняться какие-либо действия, а в другом - ничего не будет выполняться.

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

Блок алгоритма 1 будет выполняться один или несколько раз до тех пор, пока не выполнится условие.

Алгоритм выполняется так: выполняется блок 1, проверяется условие, если оно не выполняется, то блок 1 выполняется снова и условие проверяется заново. При выполнении условия алгоритм заканчивается.

Примечание: в общей схеме алгоритма "Да" и "Нет" можно поменять местами, тогда алгоритм будет выполняться, пока условие выполняется. Как только условие не выполнится - алгоритм завершится.

 

Этапы создания программы

1. Постановка задачи - составление точного и понятного словесного описания того, как должна работать будущая программа, что должен делать пользователь в процессе ее работы.

2. Разработка интерфейса (интерфейс - способ общения) - создание экранной формы (окна программы).

3. Составление алгоритма.

4. Программирование - создание программного кода на языке программирования.

5. Отладка программы - устранение ошибок.

6. Тестирование программы - проверка правильности ее работы.

7. Создание документации, помощи

 

1.2. Сравнение языков С++ и С

С++ - язык общего назначения и задуман для того, чтобы настоящие программисты получили удовольствие от самого процесса программирования. За исключением второстепенных деталей он содержит язык С как подмножество. Язык С расширяется введением гибких и эффективных средств, предназначенных для построения новых типов. Программист структурирует свою задачу, определив новые типы, которые точно соответствуют понятиям предметной области задачи. Такой метод построения программы обычно называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. С такими объектами можно работать надежно и просто даже в тех случаях, когда их тип нельзя установить на стадии трансляции.

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

Ключевым понятием С++ является класс. Класс - это определяемый пользователем тип. Классы обеспечивают упрятывание данных, их инициализацию, неявное преобразование пользовательских типов, динамическое задание типов, контролируемое пользователем управление памятью и средства для перегрузки операций. В языке С++ концепции контроля типов и модульного построения программ реализованы более полно, чем в С. Кроме того, С++ содержит усовершенствования, прямо с классами не связанные: символические константы, функции-подстановки, стандартные значения параметров функций, перегрузка имен функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены все возможности С эффективной работы с основными объектами, отражающими аппаратную "реальность" (разряды, байты, слова, адреса и т.д.). Это позволяет достаточно эффективно реализовывать пользовательские типы.

Как язык, так и стандартные библиотеки С++ проектировались в расчете на переносимость. Имеющиеся реализации языка будут работать в большинстве систем, поддерживающих С. В программах на С++ можно использовать библиотеки С. Большинство служебных программ, рассчитанных на С, можно использовать и в С++.

Выбор С в качестве базового языка для С++ объясняется следующими его достоинствами:

(1) универсальность, краткость и относительно низкий уровень;

(2) адекватность большинству задач системного программирования;

(3) он идет в любой системе и на любой машине;

(4) полностью подходит для программной среды UNIX.

В С существуют свои проблемы, но в языке, разрабатываемом "с нуля" они появились бы тоже, а проблемы С, по крайней мере, хорошо известны. Более важно то, что ориентация на С позволила использовать язык "С с классами" как полезный (хотя и не очень удобный) инструмент в течение первых месяцев раздумий о введении в С классов в стиле Симулы.

С++ стал использоваться шире, но по мере роста его возможностей, выходящих за пределы С, вновь и вновь возникала проблема совместимости. Ясно, что отказавшись от части наследства С, можно избежать некоторых проблем (см., например, [15]). Это не было сделано по следующим причинам:

(1) существуют миллионы строк программ на С, которые можно улучшить с помощью С++, но при условии, что полной переписи их на язык С++ не потребуется;

(2) существуют миллионы строк библиотечных функций и служебных программ на С, которые можно было бы использовать в С++ при условиях совместимости обоих языков на стадии связывания и их большого синтаксического сходства;

(3) существуют сотни тысяч программистов, знающих С; им достаточно овладеть только новыми средствами С++ и не надо изучать основ языка;

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

Язык С сам развивался в последние несколько лет, что отчасти было связано с разработкой С++ [14]. Для изучения С++ не обязательно знать С. Программирование на С способствует усвоению приемов и даже трюков, которые при программировании на С++ становятся просто ненужными. Например, явное преобразование типа (приведение) , в С++ нужно гораздо реже, чем в С. Тем не менее, хорошие программы на языке С по сути являются программами на С++. Например, все программы из классического описания С являются программами на С++. В процессе изучения С++ будет полезен опыт работы с любым языком со статическими типами

 

 

1.3. Структура программы на языке С++

Перед тем как, процессор выполнить какое либо действие, он должен получить инструкцию для его выполнения в виде машинных кодов. Набор таких инструкций называется программой. Авторы первых программ писали их в машинном (двоичном) коде. Теперь программы пишутся на каком либо языке высокого уровня (Pascal, Delphi, C, C++, C++ Builder, Visual C++). Затем специальная программа, называемая транслятором, переводит их машинный код, который и исполняется процессором. Все трансляторы делятся на два класса:

· интерпретаторы - трансляторы, которые переводят каждый оператор программы в машинный код и по мере перевода операторы выполняются процессором;

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

Особенности компиляции (перевода в машинный код) программ на языке С++ рассмотрим после написания первой программы.

Любая программа на языке С++ представляет собой одну или несколько функций. В любой программе обязательно должна быть одна функций main(). C этой функции начинается выполнение программы. Правилом хорошего тона в программировании является разбиение задачи на подзадачи, и в главной функции чаще всего должны быть операторы вызова других функций. Общую структуру любой программы на языке Си можно записать следующим образом.

Объявление глобальных переменных

Тип_ результата main(Список_переменных)

{Операторы

}Тип_результата f1(Список_переменных)

{Операторы }

Тип_результата f2(Список_переменных)

{Операторы }…

Тип_результата fn(Список_переменных)

{Операторы}

Здесь Тип_результата - тип возвращаемого функцией значения.

В простейшем случае программа на языке Си состоит из одной функции main, в этом случае структура программы будет такой.

int main()

{

Операторы

}

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

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

Символы // означают, что оставшаяся часть строки является комментарием. Текст, начинающийся /* и заканчивающийся */, также является комментарием. Только некоторые компиляторы допускают вложенные комментарии.

Имена переменных, функций, меток, типов данных, классов и макросов называются идентификаторами и могут содержать символы:

-строчные и прописные буквы английского алфавита;

-цифры от 0 до 9 (имя не может начинаться с цифры);

-символ подчеркивания.

Обычно длина идентификатора ограничивается 31 символом, прописные и строчные буквы различаются. Идентификаторы не должны совпадать с ключевыми словами.

#include <iostream.h>// этот файл нужен для ввода/вывода

void main(void) // главная функция main(void) без параметров

{ // начало функции

char *name; // так описывается строка

cout<<“Введите свое имя”<<endl; // на экране появляется просьба ввести имя

cin>>name>>endl; // с клавиатуры вводится имя

cout<<“Привет, “<<name<<“ это первая программа”; // вывод на экран

} // конец функции

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

десятичные (например: 1, 10L, -6, -2.3, 3.45е6, 6.789е-2);

восьмеричные (например: 012, 0204, 076663L);

шестнадцатеричные (например: 0xa, 0xA, 0xdeL, 0x84, 0x7dB3);

символы (например: ‘g’, ‘?’, ‘\b’, ‘\\’, ‘0x1B’, ‘\’’);

строчные литералы (“long string”, “Y\\N”, “ \”Yes, I do, \” she said”).


Пример простейшей программы на языке С++

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

Задача № 1.1. Известны длины двух катетов прямоугольного треугольника. Найти длину гипотенузы, площадь прямоугольника и величины его углов.

#include <stdio.h>

#include <math.h>

int main()

{

float a,b,c, alf,bet,s;

printf("A=");

scanf("%f",&a);

printf("B=");

scanf("%f",&b);

s=a*b/2;

c=pow(a*a+b*b,0.5);

alf=atan(a/b);

bet=3.14159/2-alf;

printf("\n A=%5.2f \t B=%5.2f \t C=%5.2f \n",a,b,c);

printf("\nS=%5.2f \t alf=%3.0f \t bet=%3.0f\n", s,alf*180/3.14159,bet*180/3.14159);

}

Листинг 1.1.

Рассмотрим подробно текст программы.

Строки 1-2. Указывают компилятору (а точнее препроцессору), что надо использовать функции из библиотек, stdio.h и math.h. В данном случае они необходимы для выполнения операторов ввода scanf и вывода printf (stdio.h) и математических функций возведения в степень pow и вычисление арктангенса atan (math.h).

Строка 5. Описание вещественных переменных a,b,c,alf,bet,s.

Строка 6. Оператор вывода строки символов А=.

Строка 7. Оператор ввода вещественного числа a. В этом операторе (а точнее в функции scanf) должны быть два параметра:

· строка, в которой указывают типы вводимых переменных, перед кодом типа должен быть символ %; символ f используется для указания вещественного типа, d – для целого типа;

· список адресов вводимых переменных, для вычисления адреса переменной используется символ &.

Строка 8. Оператор вывода строки символов B=.

Строка 9. Оператор ввода вещественного числа b.

Строка 10. Оператор присваивания для вычисления площади треугольника. В операторе присваивания могут использоваться знаки операций: +, -, *, /.

Строка 11. Оператор присваивания для вычисления гипотенузы с использованием теоремы Пифагора. Функция pow(x,y) используется в Си для вычисления xy.

Строка 12-13. Операторы присваивания для вычисления углов α и β.

Строки 14-15. Функции вывода результатов на экран. В функции вывода printf должны быть два параметра:

· строка вывода, в которой вместо выводимых переменных указываются их типы, между символом % и кодом формата можно указывать формат вывода, который в случае вывода вещественных чисел имеет вид m.n (m - количество позиций в числе, n – количество позиций в дробной части числа); в строке вывода могут использоваться можно поставить знаки: \n перевод строки, \t – табуляция.

· список выводимых переменных.

Строка комментариев в Си начинается символами //.

Мы рассмотрели простейшую программу на языке С++, состоящую из операторов ввода данных, операторов присваивания (в которых происходит расчет по формулам) и операторов вывода. Рассмотренные в первой программе операторы ввода-вывода являются операторами классического C, в дальнейшем мы рассмотрим и операторы С++.

Основные этапы обработки программы на языке С++ и формирования машинного кода.

1. Сначала программа обрабатывается препроцессором, который выполняет директивы препроцессора, в нашем случае это директивы включения заголовочных файлов (файлов с расширением h) - текстовых файлов, в которых содержится описание используемых библиотек. В результате формируется полный текст программы, который поступает на вход компилятора.

2. Компилятор разбирает текст программ на составляющие элементы, проверяет синтаксические ошибки и в случае их отсутствия формирует объектный код (файл с расширением obj).

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

Контрольные вопросы

1. Какова структура программы на Си?

2.  Какие константы используются в Си?

3. Что такое алгоритм?

4. Перечислите основные свойства алгоритма.

5. Укажите основные алгоритмические конструкции.

6. Что называется программой?

7. В чем отличие компилятора от интерперетатора?

8. Для чего служат индентификаторы?

9. Укажите основные этапы обработки программы на языке С++ и формирования машинного кода.

10. Перечислите основные достоинства языка С/С++.

 

Глава 2. Основы программирования на С++

2.1. Данные в языке С++

Для решения задачи в любой программе выполняется обработка каких-либо данных. Данные могут быть самых различных типов: целые и вещественные числа, символы, строки, массивы. Данные в языке С++ описываются в начале функции.

Язык С++ ведет свое начало с языка С и включает в себя все типы данных С. В языке С определены пять основных типов данных: char – символьные, int – целые, float – с плавающей точкой, double – двойной точности, void – без значения (бестиповый). На базе этих типов формируются другие. Данные типа char всегда занимают один байт. Размер и диапазон представления остальных типов определяется конкретной системой программирования, операционной системой и процессором. Стандарт языка С (С89), принятый в декабре 1989 года, определяет минимальный диапазон значений. В 1999 году стандарт языка Си был расширен до стандарта C99: добавлены некоторые числовые библиотеки, ряд узкоспециальных средств.

Следует учитывать, что вещественные числа хранятся в экспоненциальной форме mE ± p, где m – мантисса (целое или дробное число с десятичной точкой), p – порядок (целое число). Для того, чтобы перевести число в экспоненциальной форме к обычному представлению с фиксированной точкой, необходимо мантиссу умножить на десять в степени порядок.

Например,
-6.42Е+2 = -6.42.102 = -642
-3.2E-6 = -3.2.10-6 =-0.0000032

В таблице 2.1 приведены основные типы данных языка С++ с указанием минимально допустимого диапазона значений, определенного стандартами С89 и С99.


 

Таблица 2.1. Типы данных языка С++

Типы данных Размер в байтах Минимально допустимый диапазон значений Комментарий

Целочисленные значения

char 1 -128 .. 127  
unsigned char 1 0 .. 255  
signed char 1 -128 .. 127  
int 2 или 4 -32768 .. 32767  
unsigned int 2 или 4 0 .. 65535  
signed int 2 или 4 -32768 .. 32767  
short int 2 -32768 .. 32767  
unsigned short int 2 0 .. 65535  
signed short int 2 -32768 .. 32767  
long int 4 -2147483648 .. 2147483647  
long long int 8 -(263-1) .. (263-1) добавлен стандартом C99
signed long int 4 -2147483648 .. 2147483647  
unsigned long int 4 0 .. 4294967295  
unsigned long long int 8 0 .. 264-1 добавлен стандартом C99

Вещественные значения

float 4   точность мантиссы не менее 6 знача-щих цифр (типичным является диа-пазон 3.4Е-38 ÷ 3.4E+38)
double 8 1Е-37 ..  1E+37 точность мантиссы не менее 10 значащих цифр (типичным является диапазон 1.7Е-308 ÷ 1.7E+308)
long double 10 1Е-37 .. 1E+37 точность мантиссы не менее 10 значащих цифр (типичным является диапазон 3.4Е-4932 ÷ 1.1E+4932)

Логические значения

bool 1 true, false  

Как видно из таблицы, базовые типы могут быть расширены с помощью специфика-торов (модификаторов) signed, unsigned, long, short.

 

2.2. Переменные языка С++

Переменная – поименованный участок памяти, в котором хранится значение. Имя (идентификатор) в языке С++ – совокупность букв, цифр и символа подчеркивания, начинающаяся с буквы или символа подчеркивания. В С++ строчные и прописные буквы считаются разными (т.е. abc и Авс – разные переменные). Имена в С++ бывают внешние и внутренние. Внешние имена обрабатываются во время внешнего процесса компоновки, это имена функций и глобальных переменных, которые совместно используются в различных исходных файлах. Все остальные имена – внутренние. Длина имени не ограничена, но ограничено количество значащих символов. В стандарте С89 значащими являются как минимум 6 символов внешнего имени и 31 – внутреннего. В стандарте С99 эти значения увеличены 31 – для внутреннего, 63 – для внешнего. Все переменные в языке Си должны быть описаны. Оператор описания переменных имеет вид:

тип список_переменных;

тип – один из типов, приведенных в табл. 2.1 или объявленных программистом, список_переменных – один или несколько идентификаторов, разделенных запятыми.

Например,

int a,bc,f;

float g,u,h12;

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


Массивы

Массив – совокупность данных одного и того же типа. Число элементов массива фиксируется при описании типа и в процессе выполнения программы не изменяется. Для доступа к элементу необходимо указать имя массива и его номер в квадратных скобках. Описание одномерного массива имеет вид:

тип имя_переменной [ n ];

где n – количество элементов в массиве; элементы в массиве нумеруются с нуля, таким образом, элементы в массиве нумеруются от 0 до n -1.

Например:

double a[25];

Описан массив a из 25 вещественных чисел (типа double), элементы нумеруются от 0 до 24 (a[0]…a[24]).

Многомерные массивы

В Си определены и многомерные массивы. Двумерный массив (матрицу) можно объявить так:

тип имя_переменной [ n ][ m ];

где n – количество строк в матрице(строки нумеруются от 0 до n -1), m – количество столбцов (столбцы нумеруются от 0 до m -1).

Например,

int h[10][15];

Описана матрица h, состоящая из 10 строк и 15 столбцов (строки нумеруются от 0 до 9, столбцы от 0 до 14).

Для обращения к элементу матрицы необходимо указать ее имя, и в квадратных скобках номер строки, а затем в квадратных скобках – номер столбца. Например, h[2][4] – элемент матрицы h, находящийся в третьей строке и пятом столбце.

В С++ можно описать многомерные массивы, которые можно объявить с помощью оператора следующей структуры:

тип имя_переменной [ n 1][ n 2]…[ nk ];

Строки

Строка – последовательность символов. Если в выражении встречается одиночный символ, он должен быть заключен в одинарные кавычки. При использовании в выражениях строка заключается в двойные кавычки. Признаком конца строки является нулевой символ ‘\0’. Строки в Си можно описать, как массив символов (массив элементов типа char). Объявляя такой массив, следует предусмотреть место для хранения признака конца строки (‘\0’).

Например, описание строки из 25 символов должно выглядеть так:

char s[26];

Здесь элемент с номером 25 предназначен для хранения символа конца строки. Записи и файлы будут рассмотрены ниже.

По месту объявления переменные в языке Си можно разделить на три класса:

1. Локальные – переменные, которые объявляются внутри функции и доступны только в ней.

Например:

int main()

{

float s;

s=4.5;

}

int f1()

{

int s;

s=6;

}

int f2()

{

long int s;

s=25;

}

В функции main определена вещественная переменная s (типа float), ей присвоено значение 4.5, в функции f1 есть другая переменная s (типа int), ей присвоено значение 6, а в функции f2 есть еще одна переменная s (типа long int), ей присвоено значение 25.

2. Глобальные – переменные, которые описаны до всех функций, они доступны из любой функции.

Например:

#include <stdio.h>

float s;

int main()

{

s=4.5;

}

int f1()

{

s=6;

}

int f2()

{

s=25;

}

Определена глобальная переменная s (типа float), в функции main ей присваивается значение 4.5, в функции f1 – присваивается значение 6, а в функции f2 – присваивается значение 25.

3. Формальные параметры функций описываются в списке параметров функции. О формальных параметрах функциях будет рассказано при изучении темы «Функции в С++»

2.3. Константы в языке С++

Константы не изменяют своего значения в процессе выполнения программы.

Если при объявлении переменной используется модификатор const, то она не может изменять свое значение.

const double pi=3.141592653589793

Таким образом, используя модификатор const можно определить неизменяемые переменные – константы.

В константе явно или не явно присутствует тип. По умолчанию константа будет принадлежать к типу наименьшего возможного размера. Однако, используя суффикс (символ после значения константы) можно явно указать тип. Если после вещественного числа в экспоненциальной форме присутствует символ F, то константа принадлежит к типу float, а если символ L – то к типу long double. Для целых чисел суффикс U обозначает unsigned, L – long.

Целые числа можно записывать в восьмеричной или шестнадцатеричной системе. Шестнадцатеричное число начинается с 0х (например, 0х80 – (80)16), восьмеричное с 0 (например, 025 – (25)8).

Константа может быть определена до главной функции main. В этом случае можно использовать директиву #define. Например, для определения константы можно перед фунцией main вставить строку

#define PI 3.141592653589793

Если в тексте программы будет встречаться имя PI, оно автоматически будет заменяться значением 3.141592653589793. С использованием этой константы программа для решения задачи 1.1 может быть переписана так.

#include <stdio.h>

#include <math.h>

#define PI 3.141592653589793

int main()

{

float a,b,c, alf,bet,s;

printf("A=");

scanf("%f",&a);

printf("B=");

scanf("%f",&b);

s=a*b/2;

c=pow(a*a+b*b,0.5);

alf=atan(a/b);

bet=PI/2-alf;

printf("\n A=%5.2f \t B=%5.2f \t C=%5.2f \n",a,b,c);

printf("\nS=%5.2f \t alf=%3.0f \t bet=%3.0f\n",

s,alf*180/PI,bet*180/PI);

}

 

2.4. Операции в языке С++

Операция присваивания

В Си в отличие от других языков программирования может присутствовать в любом выражении, а не только в отдельном операторе. В операторе присваивания слева всегда стоит имя переменной, а справа – значение, например:

a=b; где a – имя переменной или элемента массива, b – значение как таковое, выражение, переменная, константа или функция.

В результате выполнения оператора a=b переменной а присваивается значение b. Если в операции присваивания встречаются переменные разных типов, происходит преобразование типов. В операции присваивания значение в правой части преобразуется к типу переменной левой части. Следует учитывать, что при этом можно потерять информацию или получить другое значение.

Множественное присваивание

Множественное присваивание – присваивание нескольким переменным одного и того же значения.

Например:

a=b=c=3.14159/6;

Арифметические операции

В табл. 2.2 представлены арифметические операции языка Си.

Таблица 2.2 . Основные операции языка С++

Операция Действие Тип операнда Тип результата
+ Сложение Целый, вещественный Целый, вещественный
- Вычитание, унарный минус Целый, вещественный Целый, вещественный
* Умножение Целый, вещественный Целый, вещественный
/ Деление Вещественный Вещественный
/ Целочисленное деление Целый Целый
% Остаток от деления Целый Целый
-- Декремент, уменьшение на 1 Целый Целый
++ Инкремент, увеличение на 1 Целый Целый
& "и" Целый Целый
| "или" Целый Целый
^ Исключающее "или" Целый Целый
~ Логическое отрицание Целый Целый
<< Сдвиг влево Целый Целый
>> Сдвиг вправо Целый Целый

В С++, кроме широко известных арифметических операций, присутствуют операции увеличения, уменьшения, целочисленной арифметики и битовой арифметики.

Операции увеличения (инкремента) и уменьшения (декремента)

В языке Си есть операции увеличения (++) и уменьшения (--) на единицу.

Оператор

p=p+1;

можно записать в префиксной форме

++p;

так и в постфиксной

p++;

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

Например,
x=12;
y=++x;

В результате в y будет храниться число 13.

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

Например,

x=12;

y=x++;

В результате в y будет храниться число 12.

Составное присваивание

К операторам составного присваивания относятся +=, -=, *=, /=.

Оператор x+=p; предназначен для увеличения x на величину p. Оператор x-=p; предназначен для уменьшения x на величину p. Оператор x*=p; предназначен для умножения x на p. Оператор x/=p; предназначен для деления x на p.


Дата добавления: 2019-09-13; просмотров: 255; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!