Главная страница

Тема 1. 1. Операторы и функции Функция, прототип функции


Скачать 0.6 Mb.
Название1. Операторы и функции Функция, прототип функции
Дата13.01.2022
Размер0.6 Mb.
Формат файлаdocx
Имя файлаТема 1.docx
ТипДокументы
#330578


Тема 1. Операторы и функции
Функция, прототип функции. –

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



 Прототип функции (полноценный) состоит из типа возврата функции, её имени и параметров (тип + имя параметра). В кратком прототипе отсутствуют имена параметров функции. Основная часть (между фигурными скобками) опускается. А поскольку прототип функции является стейтментом, то он также заканчивается точкой с запятой.



Оператор Return

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



Void

Тип void — это самый простой тип данных, который означает «отсутствие любого типа данных». Следовательно, переменные не могут быть типа void:





Стандартные функции #include

Abc(x) -Модуль целого числа х

Fabs(y) -Модуль вещественного числа y

Sqrt(x) -Квадратный корень

Sin(x)

Cos(x)

Exp(x) -экспонента e^x
ln(x) -Натуральный логарифм

Pow(x,y) -Возведение числа х в степень у

Floor(x)- округление вниз

Ceil(x) – округление вверх

Параметр и аргумент функции

Параметр функции — это переменная, которая используется в функции, и значение которой предоставляет caller (вызывающий объект). Параметры указываются при объявлении функции в круглых скобках. Если их много, то они перечисляются через запятую, например:



Аргумент функции — это значение, которое передается из caller-а в функцию и которое указывается в скобках при вызове функции в caller-е:



формальные и фактические параметры функции

Формальные параметры – это переменные, принимающие значение аргументов (параметров) функции. Если функция имеет несколько аргументов (параметров), их тип и имена разделяются запятой ‘ , ‘.

При вызове функции из другого программного кода имеет место фактический параметр. В данном примере фактический параметр это переменная a и константа 23.

При вызове функции фактические параметры копируются в специальные ячейки памяти в стеке (стек – часть памяти). Эти ячейки памяти отведены для формальных параметров. Таким образом, формальные параметры (через использование стека) получают значение фактических параметров.

Алфавит C++

Множество символов языка C включает:

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

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

  • арабские цифры;

  • разделители: , . ; : ? ! ' " | / \

_ ^ ( ) { } [ ] < > # % & - = + *

Остальные символы могут быть использованы только в символьных строках, символьных константах и комментариях. Язык C++ различает большие и маленькие буквы, таким образом, name и Name – разные идентификаторы.

Деление с остатком

Оператор деления с остатком (%) работает только с целочисленными операндами и возвращает остаток от целочисленного деления. Например:

   Пример №1: 7 / 4 = 1 с остатком 3, таким образом, 7 % 4 = 3.

   Пример №2: 25 / 7 = 3 с остатком 4, таким образом, 25 % 7 = 4. Остаток составляет не дробь, а целое число.

   Пример №3: 36 % 5 = 7 с остатком 1. В числе 36 только 35 делится на 5 без остатка, поэтому 36 − 35 = 11 — это остаток и результат.

Данный оператор чаще всего используют для проверки деления без остатка одних чисел на другие. Если х % у == 0, то х делится на у без остатка.

Операции с действительными числами

Сложение

Умножение

Возведение в степень

Инкремент и Декремент

Операции инкремента (увеличение на 1) и декремента (уменьшение на 1) переменных настолько используемые, что у них есть свои собственные операторы в языке C++. Кроме того, каждый из этих операторов имеет две версии применения: префикс и постфикс



Cin и Cout

Библиотека iostream определяет три стандартных потока:

  • cin  стандартный входной поток (stdin в С)

  • cout  стандартный выходной поток (stdout в С)

  • cerr  стандартный поток вывода сообщений об ошибках (stderr в С)

Для их использования в Microsoft Visual Studio необходимо прописать строку:

 

using namespace std;

Для выполнения операций ввода-вывода переопределены две операции поразрядного сдвига:

  • >>  получить из входного потока

  • <<  поместить в выходной поток


Комментарии

Однострочные комментарии


Однострочные комментарии — это комментарии, которые пишутся после символов //. Они пишутся в отдельных строках и всё, что находится после этих символов комментирования, — игнорируется компилятором, например:

1

std::cout << «Hello, world!» << std::endl; // всё, что находится справа от двойного слеша, - игнорирует

Многострочные комментарии



Многострочные комментарии — это комментарии, которые пишутся между символами /* */. Всё, что находится между звёздочками, — игнорируется компилятором:

1

2

3

/* Это многострочный комментарий.

Эта строка игнорируется

и эта тоже. */

Так как всё, что находится между звёздочками, — игнорируется, то иногда вы можете наблюдать следующее:

1

2

3

4

/* Это многострочный комментарий.

* Звёздочки слева

* упрощают чтение текста

*/

Переход на новую строку

cout << endl;

Целочисленные типы данных

Целочисленный тип данных — это тип, переменные которого могут содержать только целые числа (без дробной части, например: -2, -1, 0, 1, 2). В языке C++ есть 5 основных целочисленных типов, доступных для использования:



Примечание: Тип char — это особый случай: он является как целочисленным, так и символьным типом данных



Логические переменные

Логические переменные


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

  • Логические данные хранятся в переменных типа bool.

  • Хранить они могут только два значения:

    • «Верно» — это true;

    • «Ложь» — это false;



Операторы сравнения


  • A < B — сравнивает две переменные и возвращает true, если A меньше B.

  • A > B — возвращает true, если A строго больше B.

  • A == B — проверяет на равенство переменные A и B.

  • A != B — проверяет переменные A и B на неравенство.

  • A >= B — нестрогое неравенство. Возвращает true, если A больше или равно B.

  • A <= B — противно неравенству A > B.

Логические операторы


  • A && B — эквивалент «И». Соответственно возвращает true, если A и B являются истиной.

  • A || B — эквивалент логического «ИЛИ». Вернет true ели хотя бы одно из выражений является истинным.

  • A xor B — этот оператор можно сравнить с «ТОЛЬКО ОДИН», соответственно вернет true если A == true и B == false, или наоборот.

  • !A — данный оператор инвертирует значение A. То есть, если A == true, то он вернет false и наоборот.


Константы

Нужно различать константный указатель и указатель на константу.

1) Указатель на константу: нельзя менять содержимое объекта, на который указывает указатель, но можно менять содержимое самого указателя (указатель — это переменная, содержащая адрес другой переменной).

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

Литералы

Литеральные константы (или просто «литералы») — это значения, которые вставляются непосредственно в код. Поскольку они являются константами, то их значения изменить нельзя. Например:


Идентификаторы



Идентификатор — это имя переменной, функции, класса или другого объекта в языке C++. Мы можем определять идентификаторы любыми словами/именами. Тем не менее, есть несколько общих правил, которые необходимо соблюдать:

   Идентификатор не может быть ключевым словом. Ключевые слова зарезервированы.

   Идентификатор может состоять только из букв (нижнего и верхнего регистра) латинского алфавита, цифр и символов подчёркивания. Это означает, что все другие символы и пробелы — запрещены.

   Идентификатор должен начинаться с буквы (нижнего или верхнего регистра). Он не может начинаться с цифры.

   Язык C++ различает нижний регистр от верхнего. nvalue отличается от nValue и отличается от NVALUE.

Стандарты языка C++


C++98


В конце 1980-х годов Бьёрн Страуструп и Маргарет Эллис написали свою знаменитую книгу «Справочное руководство по языку программирования C++ с комментариями» (сокр. «ARM» от «Annotated C++ Reference Manual»). Выпуск данной книги преследовал две цели. Во-первых, к тому моменту уже существовало большое количество независимых реализаций C++ — вследствие этого книга ARM сыграла свою роль в описании возможностей языка C++. Во-вторых, ARM стала основой для первого стандарта языка C++: C++98 (ISO/IEC 14882). Стандарт C++98 содержал несколько особо важных инструментов, которыми мы пользуемся и по сей день: шаблоны, библиотека STL с её контейнерами и алгоритмами, строки и потоки ввода-вывода.

Запись файла

Хедер fstreamпредоставляет функционал для считывания данных из файла и для записи в файл. В целом он очень похож на хедер iostream, который работает с консолью, поскольку консоль это тоже файл. Поэтому все основные операции такие же, за мелкими отличиями, как в предыдущей теме по iostream.

Наиболее частые операции следующее:

Операторы перенаправления ввода\вывода – << и >>

 Методы записи и чтения строк getline() и get() c put()

 Потоковая запись и чтение методами write() и read()

 Методы открытия\создания и закрытия файлов open() и close()

 Методы проверки открыт ли файл is_open() и достигнут ли конец файла eof()

 Настройка форматированного вывода для >> с помощью width() и precision()

Создание файла и запись в него информации С++


 ofstream out(Имя файла);
out<<    (Записываемая строка);
out.close();  

Чтение текста из файла и вывода текста на экран в C++


 ifstream in(Имя файла);
in>>    (Считываем строку);
in.close(); (Закрываем файл)


Вещественный тип


Внутреннее представление вещественного числа в памяти компьютера отлича­ется от представления целого числа. Число с плавающей точкой представлено в экспоненциальной форме.

Целочисленный тип


Данные типа int в памяти компьютера могут занимать либо 2, 4 или 8 байт. Это зависит от разрядности процессора.
По умолчанию все целые типы считаются знаковыми, то есть спецификатор signed (знаковый ) можно не указывать.
Спецификатор unsigned (беззнаковый) позволяет представлять только положительные числа.

Диапазоны значений целочисленных типов



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

Базовая операция присваивания = позволяет присвоить значение правого операнда левому операнду:

1

2

int x;

x = 2

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

  • +=: присваивание после сложения. Присваивает левому операнду сумму левого и правого операндов: A += B эквивалентно A = A + B

  • -=: присваивание после вычитания. Присваивает левому операнду разность левого и правого операндов: A -= B эквивалентно A = A - B

  • *=: присваивание после умножения. Присваивает левому операнду произведение левого и правого операндов: A *= B эквивалентно A = A * B

  • /=: присваивание после деления. Присваивает левому операнду частное левого и правого операндов: A /= B эквивалентно A = A / B

  • %=: присваивание после деления по модулю. Присваивает левому операнду остаток от целочисленного деления левого операнда на правый: A %= B эквивалентно A = A % B

  • <<=: присваивание после сдвига разрядов влево. Присваивает левому операнду результат сдвига его битового представления влево на определенное количество разрядов, равное значению правого операнда: A <<= B эквивалентно A = A << B

  • >>=: присваивание после сдвига разрядов вправо. Присваивает левому операнду результат сдвига его битового представления вправо на определенное количество разрядов, равное значению правого операнда: A >>= B эквивалентно A = A >> B

  • &=: присваивание после поразрядной конъюнкции. Присваивает левому операнду результат поразрядной конъюнкции его битового представления с битовым представлением правого операнда: A &= B эквивалентно A = A & B

  • |=: присваивание после поразрядной дизъюнкции. Присваивает левому операнду результат поразрядной дизъюнкции его битового представления с битовым представлением правого операнда: A |= B эквивалентно A = A | B

  • ^=: присваивание после операции исключающего ИЛИ. Присваивает левому операнду результат операции исключающего ИЛИ его битового представления с битовым представлением правого операнда: A ^= B эквивалентно A = A ^ B


Тема 2

Разветвление и выбор

Условные ветвления if/else


Самыми простыми условными ветвлениями в языке С++ являются стейтменты if/else. Они выглядят следующим образом:

if (выражение)
    стейтмент1

Либо так:

if (выражение)
    стейтмент1
else
    стейтмент2

Зачем использовать оператор switch?


Хоть мы и можем использовать сразу несколько операторов if/else вместе — читается и смотрится это не очень.

Использование ветвления if/else для проверки значения одной переменной — практика распространенная, но язык C++ предоставляет альтернативный и более эффективный условный оператор ветвления switch.

Сначала пишем ключевое слово switch за которым следует выражение, с которым мы хотим работать. Обычно это выражение представляет собой только одну переменную, но это может быть и нечто более сложное, например, nX + 2 или nX − nY. Единственное ограничение к этому выражению — оно должно быть интегрального типа данных (т.е. типа char, short, int, long, long long или enum). Переменные типа с плавающей точкой или неинтегральные типы использоваться не могут.

Цикл с параметром (for)


Если мы знаем точное количество действий (итераций) цикла, то можем использовать цикл for. Синтаксис его выглядит примерно так:

for (действие до начала цикла;

условие продолжения цикла;

действия в конце каждой итерации цикла) {

инструкция цикла;

инструкция цикла 2;

инструкция цикла N;

}

Оператор с предусловием (while)


Когда мы не знаем, сколько итераций должен произвести цикл, нам понадобится цикл while  Синтаксис цикла while в C++ выглядит следующим образом.

while (Условие) {

Тело цикла;

}

Цикл с постусловием (do…while)


Цикл do while очень похож на цикл while. Единственное их различие в том, что при выполнении цикла do while один проход цикла будет выполнен независимо от условия.

В циклах break оператор завершает выполнение ближайшего включающего dofor оператора, или while. Управление передается оператору, который расположен после завершенного оператора, при его наличии.\
Оператор continue позволяет сразу перейти в конец тела цикла, пропуская весь код, который находится под ним. Это полезно в тех случаях, когда мы хотим завершить текущую итерацию раньше времени.

Этот оператор применяется тогда, когда необходимо прервать (пропустить) текущую итерацию цикла и приступить к следующей итерации. При его выполнении в цикле for происходит остановка текущей итерации, переход к изменению управляющей переменной, а затем проверка условия продолжения выполнения цикла.

Немедленное окончание цикла

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

Также можно ещё использовать оператор
Exit();


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

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

  • выполнение текущей итерации останавливается;

  • происходит переход к следующей итерации цикла.


Тема 4. Массивы и указатели

Одномерные массивы в С++


Одномерный массив — массив, с одним параметром, характеризующим количество элементов одномерного массива. Фактически одномерный массив — это массив, у которого может быть только одна строка, и n-е количество столбцов. Столбцы в одномерном массиве — это элементы массива. На рисунке 1 показана структура целочисленного одномерного массива a. Размер этого массива — 16 ячеек.



Заметьте, что максимальный индекс одномерного массива a равен 15, но размер массива 16 ячеек, потому что нумерация ячеек массива всегда начинается с 0. Индекс ячейки – это целое неотрицательное число, по которому можно обращаться к каждой ячейке массива и выполнять какие-либо действия над ней (ячейкой).

Двумерные массивы в С++


До этого момента мы рассматривали одномерные массивы, которыми не всегда можно ограничиться. Допустим, необходимо обработать некоторые данные из таблицы. В таблице есть две характеристики: количество строк и количество столбцов. Также и в двумерном массиве, кроме количества элементов массива, есть такие характеристики как, количество строк и количество столбцов двумерного массива. То есть, визуально, двумерный массив — это обычная таблица, со строками и столбцами. Фактически двумерный массив — это одномерный массив одномерных массивов. Структура двумерного массива, с именем a, размером m на n показана ниже (см. Рисунок 4).

где, m — количество строк двумерного массива;
n — количество столбцов двумерного массива;
m * n — количество элементов массива.


Сортировка массива - это процесс распределения всех элементов массива в определенном порядке\

Указатель – переменная, значением которой является адрес ячейки памяти. То есть указатель ссылается на блок данных  из области памяти, причём на самое его начало. Указатель может ссылаться на переменную или функцию. Для этого нужно знать адрес переменной или функции. Так вот, чтобы узнать адрес конкретной переменной в С++ существует унарная операция взятия адреса &. Такая операция извлекает адрес объявленных переменных, для того, чтобы его присвоить указателю.

Индексы массивов


В языке C++ индексы массивов всегда должны быть интегрального типа данных (т.е. типа char, short, int, long, long long, bool и т.д.). Эти индексы могут быть либо константными значениями, либо неконстантными значениями.

Поскольку массивам фиксированного размера память выделяется во время компиляции, то здесь мы имеем два ограничения:

   Массивы фиксированного размера не могут иметь длину, основанную на любом пользовательском вводе или другом значении, которое вычисляется во время выполнения программы (runtime).

   Фиксированные массивы имеют фиксированную длину, которую нельзя изменить.

Во многих случаях эти ограничения являются проблематичными. К счастью, C++ поддерживает еще один тип массивов, известный как динамический массив. Размер такого массива может быть установлен ​​во время выполнения программы и его можно изменить. Однако создание динамических массивов несколько сложнее фиксированных, поэтому мы поговорим об этом несколько позже.


написать администратору сайта