Функция b( )

Функция a( )

. . . . . . . . .

#директивы препроцессора

{ тело функции а}

.

.

{тело функции b }

void main ( ) //функция, с которой начинается выполнение программы

{последовательность определений, описаний и исполняемых операторов}

Правила препроцессорной обработки определяет программист с помощью директив препроцессора.

Директива начинается с #.

#define – указывает правила замены в тексте.

Например, #define ZERO 0.0 означает, что каждое использование в программе имени ZERO будет заменяться на 0.0.

 

Директива #include < имя заголовочного файла> – предназначена для включения в программу текста из каталога «Заголовочных файлов»

.

Программа представляет собой набор описаний и определений, и состоит из набора функций.

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

 

Перед именем функции помещаются сведения о типе возвращаемого функцией значения (тип результата): double sqrt (double arg)

 

Если функция ничего не возвращает, то указывается тип void: void main ( );

 

Каждая функция, в том числе и main должна иметь набор параметров, он может быть пустым.

Если функция не объявлена как void, она должна возвращать значение.

Возвращаемое значение задается инструкцией return e; где е – выражение, значение которого возвращается в качестве результата работы функции.

 

Пример 1. Определение функции извлечения квадратного корня.

double sqrt (double arg) // вещественный аргумент, и возвращается

// вещественное число.

{

//код, вычисляющий квадратный корень.Тело функции

}

Использование (вызов) этой функции:

int main()

// Тело функции

{

double root2 = sqrt(2);

return 0; // возврат значения из функции

}

 

 

Пример 2.

float x; //описание переменной

int y=10; // описание и инициализация переменной

 

 

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

#include "stdafx.h" //препроцессорная директива

#include <iostream> //препроцессорная директива

using namespace std;

void main() //функция

{ //начало

cout << "Hello!\n";//печать

} //конец

 

В программах на C++ используется два способа комментариев:

· первый способ для многострочных комментариев (начинается с комбинации символов косой черты и звёздочки (/*), и заканчивается обратной комбинацией этих же символов (*/). Неможет быть вложенным.),

· второй – для коротких замечаний (начинается с двух символов косой черты (//) и заканчивается концом строки).

 

Пример 4. Использование комментариев

#include <iostream>

#include <windows.h>

using namespace std;

int main()

{ SetConsoleOutputCP(1251);

int num; /* это многострочный комментарий C++

ввод числа */

cout << "Введите проверяемое число: ";

cin >> num;

// проверка на чётность. Это однострочный комментарий C++

if((num%2)==0) cout << "Число чётное.\n";

else cout << "Число нечётное.\n";

return 0;

}

 

 

4.3. Базовые средства языка C++

Алгоритмический язык содержит слова, их называют лексемами (элементарными конструкциями), словосочетания – выражениями, предложения – операторами.Лексемы образуются из символов, выражения из лексем и символов, операторы из символов выражений и лексем (рис. 2).

 

Рис. 2. Состав алгоритмического языка

 

Таким образом, элементами алгоритмического языка являются:

 

1. Алфавит языка С++, который включает

– прописные и строчные латинские буквы и знак подчеркивания;

– арабские цифры от 0 до 9;

– специальные знаки “ { } , | [ ] ( ) + – / % * . \ ’ : ; & ? < > = ! # ^

– пробельные символы (пробел, символ табуляции, символы перехода на новую строку).

 

2. Из символов формируются лексемы языка:

 

· Идентификаторы – имена объектов С-программ.

PROG1, prog1 и Prog1 – три различных идентификатора).

_PROG1, prog_1, P1ro2g1 - правильные идентификаторы.

3PROG1, prog_*, №5_Prog1 – ошибка!

 

· Ключевые (зарезервированные) слова – это слова, которые имеют специальное значение для компилятора (main, else, int и т.д.). Их нельзя использовать в качестве идентификаторов.

 

· Знаки операций – это один или несколько символов, определяющих действие над операндами. Операции делятся на

· унарные (применяется к одному операнду, например: ++a),

· бинарные (применяется к двум операндам, например: a+b)

· тернарные (применяется к трем операндам, например: условие ? действие А : действие Б).

 

· Константы – это неизменяемые величины.

· Разделители –скобки, точка, запятая, пробельные символы.

4.3.1. Знаки операций в C++

Знаки операций обеспечивают формирование выражений.

Унарные операции приведены в табл. 1.

Таблица 1

Унарные операции

 

Операция Описание
& Получение адреса операнда
* Обращение по адресу (разыменование)
- унарный минус, меняет знак арифметического операнда
~ поразрядное инвертирование внутреннего двоичного кода целочисленного операнда (побитовое отрицание)
! ! логическое отрицание (НЕ). В качестве логических значений используется 0 – ложь и не 0 – истина, отрицанием 0 будет 1, отрицанием любого ненулевого числа будет 0.
++ ++ Увеличение на единицу: префиксная операция – увеличивает операнд до его использования, постфиксная операция увеличивает операнд после его использования
- - - - уменьшение на единицу: префиксная операция – уменьшает операнд до его использования, постфиксная операция уменьшает операнд после его использования
sizeof вычисление размера (в байтах) для объекта того типа, который имеет операнд имеет две формы: sizeof выражение; sizeof (тип)

 

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

 

Пример 11.

 

int t = 1, s = 2, z, f;

z = (t++) * 5;

Вначале происходит умножение t*5, а затем увеличение t. В результате получится: z = 5, t = 2.

 

f = (++s) / 3;

Вначале значение s увеличивается, а затем используется в операции деления. В результате получим: s = 3, f = 1.

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

 

z++; // эта инструкция

// эквивалентна

++z; // этой инструкции

Бинарные операции представлены в табл. 2.

Таблица 2

Бинарные операции

 

Операция Описание
Аддитивные
+ бинарный плюс (сложение арифметических операндов)
- бинарный минус (вычитание арифметических операндов)
Мультипликативные
* умножение операндов арифметического типа
/ деление операндов арифметического типа (если операнды целочисленные, то выполняется целочисленное деление)
% получение остатка от деления целочисленных операндов
Операции сдвига (определены только для целочисленных операндов).Формат выражения с операцией сдвига: операнд_левый операция_сдвига операнд_правый
<< сдвиг влево битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого операнда, освободившиеся разряды обнуляются
>> сдвиг вправо битового представления значения правого целочисленного операнда на количество разрядов, равное значению правого операнда, освободившиеся разряды обнуляются, если операнд беззнакового типа и заполняются знаковым разрядом, если – знакового
Поразрядные операции
& поразрядная конъюнкция (И) битовых представлений значений целочисленных операндов (бит =1, если соответствующие биты обоих операндов=1)
| поразрядная дизъюнкция (ИЛИ) битовых представлений значений целочисленных операндов (бит =1, если соответствующий бит одного из операндов=1)
^ поразрядное исключающее ИЛИ битовых представлений значений целочисленных операндов (бит =1, если соответствующий бит только одного из операндов=1)
Операции сравнения: результатом являются true (не 0) или false (0)
< меньше, чем
> больше, чем
<= меньше или равно
>= больше или равно
== равно
!= не равно
Логические бинарные операции
&& конъюнкция (И) целочисленных операндов или отношений, целочисленный результат ложь(0) или истина (не 0)
|| || дизъюнкция (ИЛИ) целочисленных операндов или отношений, целочисленный результат ложь(0) или истина (не 0)

 

Пример 12.

Оператор умножения (*) выполняет умножение операндов:

 

int i = 5;

float f = 0.2;

double g;

g = f * i;

 

Тип результата умножения f на i преобразуется к типу double, затем результат присваивается переменной g.

Оператор деления (/) выполняет деление первого операнда на второй. Если две целые величины не делятся нацело, то результатом будет целая часть от деления (дробная часть отбрасывается):

 

int i = 49, j = 10, n, m;

n = i / j; // результат 4

m = i / (-j); // результат -4

 

Оператор остаток от деления (%) дает остаток от деления первого операнда на второй (только для целых операндов). Знак результата совпадает со знаком делимого:

 

int n = 49, m = 10, i, j, k, l;

i = n % m; // результат 9

j = n % (-m); // результат 9

k = (-n) % m; // результат -9

l = (-n) % (-m); // результат -9

 

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

 

#include "stdafx.h"

#include <iostream> // подключить файл, где объявлены cin и cout

#include <conio.h> // файл, где определена функция getch()

#include <windows.h>// файл, где определена функция SetConsoleOutputCP(1251);

int main()

{

using namespace std; // использовать стандартное пространство имен

SetConsoleOutputCP(1251); //функция для вывода текста кириллицей

int day, days, week;

cout<<"Введите количество дней = ";

cin>>days;

day=days%7;

week=(days-day)/7;

cout<<week<<" недель и "<<day<<" ден(ь/ей)";

getch(); // ждать нажатия любой клавиши

return 0; // функция возвращает 0

}

 

Результат деления на 0 в операциях деления и получения остатка не определён и вызывает ошибку (исключение) во время выполнения. Поэтому следующие две инструкции дадут ошибочные, неопределённые результаты:

i = n % 0;

g = f / 0.0;

Операции присваивания имеют следующие виды:

=, +=, -=, *= и т.д.

Сокращенные формы арифметических действий, иногда нужно сделать какое либо одно арифметическое действие над одной переменной, прибавить, умножить.

Например:

S=S+32; в сокращенной форме это будет S+=32;

F=F-k; в сокращенной форме это будет F-=k;

N=N/2; в сокращенной форме это будет N/=2;

 

Формат операции простого присваивания:

операнд1=операнд2