Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Основы. Синтаксис, значения и управляющие структуры




Синтаксические элементы

 

К синтаксическим элементам языка программирования обычно относят следующие:

· набор символов – буквы и цифры (например, символы ASCII, американского стандарта обмена информацией), а также ряд специальных символов;

· идентификаторы – имена объектов языка (типов, констант, переменных и других). Идентификатор состоит из последовательности букв, цифр и знака подчеркивания _. Идентификатор не может начинаться с цифры. Отметим, что abc и Abc – два разных идентификатора, т.е. заглавные и строчные буквы различаются;

· символы (знаки) операций, ограничители и скобки – символы арифметических и логических операций, например: +, -, /, *,!, &, |; символы операций отношения: !=, =, >= и другие; символ; –ограничитель операторов; парные ограничители: (…), [… ] и операторные скобки – {…};

· ключевые слова – идентификаторы, используемые в качестве фиксированной части синтаксиса какой-либо конструкции языка. Например: int, char, if, while, new;

· выражения – конструкции языка для вычисления и изменения значений. Выражения включают символы операций и операнды (константы, переменные, функции и другие объекты языка);

· операторы – конструкции языка, необходимые для обработки данных и управления порядком действий. Оператор задает законченное описание некоторого действия. Различают операторы присваивания, ввода-вывода, операторы, реализующие управляющие структуры;

· комментарии – пояснения, включаемые в текст программы, но не обрабатываемые компилятором. Комментарии в С++:

//          – однострочный

/*... */ – многострочный, включающий несколько строк.

 

Значения и типы

 

Цель программы состоит в вычислении значений.

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

Одной из главных характеристик данных является тип.

 

Тип данных определяет:

· внутренне представление данных в памяти компьютера;

· множество значений, которые могут принимать данные этого типа;

· операции и функции, которые можно применять к значениям этого типа.

 

В таблице 1.1 перечислены простые типы данных С ++ и приведены наиболее типичные диапазоны их значений.

 

Таблица 1.1. Встроенные типы языка С++

Название Обозначение Диапазон значений
Байт char от -128 до +127
Байт без знака unsigned char от 0 до 255
Короткое целое число short от -32768 до +32767
Короткое целое число без знака unsigned short от 0 до 65535
Целое число int от – 2147483648 до + 2147483647
Целое число без знака unsigned int (или просто unsigned) от 0 до 4294967295
Длинное целое число long от – 2147483648 до + 2147483647
Длинное целое число unsigned long от 0 до 4294967295
Вещественное число одинарной точности float от ±3.4e-38 до ±3.4e+38 (7 значащих цифр)
Вещественное число двойной точности double от ±1.7e-308 до ±1.7e+308 (15 значащих цифр)
Вещественное число увеличенной точности long double от ±1.2e-4932 до ±1.2e+4932
Логическое значение bool значения true (истина) или false (ложь)
Пусто void Не имеет значений. Используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции, в операциях с указателями и в операции приведения типов

Символьная информация представляется с помощью кодов (целые числа типа char или unsigned char) стандарта ASCII Для английского алфавита и знаков препинания этот стандарт определяет коды от 0 до 127. Для представления русских букв используется стандарт КОИ-8 или CP-1251. В этих стандартах русские буквы кодируются числами от 128 до 255.

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

Преобразование типов в С++ выполняется с помощью специальных операторов приведения типов. Для приведения целых и вещественных типов при вычислении выражений используется оператор static _ cast.

Например:

float     f = 5.25;

int   i = static_cast<int>(f); //i=5

int        first = 5,  second = 10;

double result=static_cast<double>(first)/second;//result=0.5

// Внимание!

double result=first/second; //result=0!

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

Константы – это данные, значения которых не изменяется при выполнении программы.

Константы в языке С++ характеризуется типом, наименованием и значением:

const int X = 240; // константа X, тип– целый, значение 240

const int Z = 0xF0; // константа Z, тип– целый, значение в шестнадцатеричной

// системе счисления F0

При объявлении констант с помощью const обязательно укажите их значения!

При разработке программ в ряде случаев удобно объявить наименования констант с помощью перечисляемого типа:

enum { Red, Yellow, Green }; // константам Red, Yellow, Green автоматически будут

// присвоены целые значения 0, 1, 2 соответственно

enum { EMPTY =-1, FULL =100}; // константа EMPTY имеет значение -1, FULL100

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

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

int a, b = 10; // переменная a, тип– целый, значение не определено;

// переменная b, тип– целый, значение 10

float f = -2.5;   // переменная f, тип– вещественный, значение -2.5

char c = ’ A ’;  // переменная c, тип– байт,значение 65 (код символа ’ A ’ в ASCII)

bool b = true; // переменная b, тип– логический,значение «истина» (1).

Описание переменной явно или по умолчанию задает ее область действия.

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

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

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

Класс памяти определяет время жизни и область видимости программного объекта, в частности и переменной. Область видимости чаще всего совпадает с областью действия. Если класс памяти не указан явным образом, он определяется компилятором исходя из контекста объявления. Для задания класса памяти используются следующие спецификаторы:

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

extern внешняя переменная. Переменная определяется в другом месте программы. Используется для создания переменных, доступных во всех модулях программы, в которых они объявлены;

static статическая переменная. Время жизни – постоянное. Инициализируется один раз;

register регистровая переменная. Аналогична auto, но память выделяется по возможности в регистрах процессора.

Пространства имен – это поименнованные области, которые служат для логического группирования объявлений и ограничения доступа к ним. Формат описания пространства имен следующий:

namespace имя_области{объявления} или

Namespace имя_области;

 

Например:

namespace demo {

int i = 1;

int k = 0;

}

namespace std; // объекты стандартной библиотеки ввода-вывода std

Доступ к постранству имен в программе осуществляется с помощью оператора :: или оператора using.

 

 

Операции и выражения

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

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

 

 

Таблица 1.2 Основные операции языка C ++

 

Операция Краткое описание

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

++ увеличение на 1
-- уменьшение на 1
sizeof размер
~ поразрядное отрицание
! логическое отрицание
- арифметическое отрицание (унарный минус)
+ унарный плюс
& взятие адреса
* разыменование
new выделение памяти
delete освобождение памяти
(type) преобразование типа  

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

* / % умножение деление остаток от деления
+ - сложение вычитание
<< >> сдвиг влево сдвиг вправо
< <= > >= меньше меньше или равно больше больше или равно
== != равно не равно
& поразрядная конъюнкция (И)
^ поразрядное исключающее ИЛИ
| поразрядная дизъюнкция (ИЛИ)
&& логическое И
|| логическое ИЛИ
= *= / = %= += -= << = >> = & = | = ^= , присваивание умножение с присваиванием деление с присваиванием остаток от деления с присваиванием сложение с присваиванием вычитание с присваиванием сдвиг влево с присваиванием сдвиг вправо с присваиванием поразрядное И с присваиванием поразрядное ИЛИ с присваиванием поразрядное исключающее ИЛИ с присваиванием последовательное вычисление

Тернарная операция

?: условная операция

 

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

Операции увеличения и уменьшения на 1 (++ и --) называются также инкрементом и декрементом. Они имеют две формы записи – префиксную, когда операция записывается перед операндом, например, ++ i, и постфиксную – i ++. В префиксной форме сначала изменяется операнд, а затем его значение становится результирующим значением выражения, а в постфиксной форме значением выражения является исходное значение операнда, после чего он изменяется.

Операция определения размера sizeof предназначена для вычисления размера объекта или типа в байтах.

 

Операции отрицания. Арифметическое отрицание (унарный минус -) изменяет знак операнда целого или вещественного типа на противоположный. Логическое отрицание (!) дает в результате значение 0, если операнд есть истина (не нуль), и значение 1. если операнд равен нулю. Операнд должен быть целого или вещественного типа, а может иметь также тип указатель. Поразрядно отрицание (~) инвертирует каждый разряд в двоичном представлении целочисленного операнда.

Операции сдвига (<< и >>) применяются к целочисленным операндам. Они сдвигают двоичное представление первого операнда влево или вправо на количество двоичных разрядов, заданное вторым операндом. При сдвиге влево (<<) освободившиеся разряды обнуляются. При сдвиге вправо (>>) освободившиеся биты заполняются нулями, если первый операнд беззнакового типа, и знаковым разрядом в противном случае.

Операции отношения (<, <=, >, >=, ==!=) сравнивают первый операнд со вторым. Операнды могут быть арифметического типа или указателями.

Логические операции (&& и ||) выполняют логическое И и ИЛИ.

Поразрядные операции (&, |, ^) применяются только к целочисленным операндам и работают с их двоичными представлениями. При выполнении операций сопоставляются биты операндов.

Операции присваивания (=, +=, -=, *=, /= и т.д.) могут использоваться в программе как законченные операторы. Сложные операции присваивания обычно используются для сокращения записи, например, операция a += b; эквивалентна операции a = a + b;

Условная операция (?:) имеет три операнда. Ее формат:

логическое выражение? операнд_1: операнд_2

Если результат вычисления условного выражения равен true (не 0), то результатом условной операции будет значение операнда_1, иначе – операнда_2. Условная операция ?: является сокращенной формой условного оператора if.

Например:

i = (i < n)? i + 1: 0;

grade >= 60? cout<<" Зачет \n": cout<<" Незачет \n";

Ввод и вывод

 

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

 

Основные функции ввода-вывода в стиле С:

int scanf(const char* format, …);  // ввод

int printf(const char* format, …);  // вывод

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

 

 

Например:

#include <stdio.h>

Int i;

printf ("Введите целое число\ n "); // вывод символов "Введите целое число"

// и переход на новую строку (\n)

scanf ("% d ", & i);                             // ввод значения переменной i

printf ("Вы ввели число % d \ n ", i); // вывод значения переменной i

// и переход на новую строку

 

 

Описание классов C ++ для управления вводом-выводом содержит заголовочный файл iostream. В нем определены стандартные объекты-потоки cin для ввода с клавиатуры и cout – для вывода на экран, а также операции << – помещения в поток вывода и >> – чтения из потока ввода. Для подключения cin, cout в программе следует использовать либо оператор доступа к области видимости std::, либо оператор using.

 

В C ++ предыдущие действия ввода-вывода будут выглядеть следующим образом:

#include <iostream>

Int i;

std::cout << " Введите целое число \n";

std:: cin >> i;

std:: cout << "Вы ввели число " << i << std:: endl; // endl – переход на новую строку

 

или

#include <iostream>

using std::cout;

using std::cin;

using std::endl;

Int i;

cout << "Введите целое число\ n ";

cin >> i;

cout << "Вы ввели число " << i << endl;

 

или

# include < iostream >

using namespace std; // подключение всего пространства имен std,

// сообщество программистов C ++ осудит Вас за такое слишкомрасточительное и // неоптимальное использование ресурсов

Int i;

cout << "Введите целое число\ n ";

cin >> i;

cout << "Вы ввели число " << i << endl;

 

Рассмотренные способы ввода-вывода равноценны, однако использовать одновременно в одной программе операторы для C и C ++ не рекомендуется.

 

 

Управляющие структуры

 

Каким образом в программе можно указать порядок выполнения действий по обработке данных?

Для этого в программе используются три основных категории управляющих структур:

· последовательность (следование);

· ветвление (порядок выполнения определяется значением условия);

· цикл (повторение).

Эти структуры дают нам «конструктор», комбинируя элементами которого, можно реализовать процесс вычислений произвольной сложности, сохраняя отчетливое видение общей структуры процесса.

 

Для графического представления управляющих структур будем использовать следующие узлы:

Все управляющие структуры имеют один вход и один выход.

Базовыми структурамиявляются «Последовательность», «Если_То_Иначе» и «Цикл_Пока».

Все современные языки программирования имеют операторы, которые однозначно реализуют управляющие структуры. Рассмотрим управляющие структуры и операторы языка C ++, которые их реализуют (таблица 1.3).

Таблица 1.3 Управляющие структуры

Управляющая структура Оператор языка C ++ Пример
Последовательность     A; B; Сначала выполняется A, затемB. A, B – операторы sum = int1 + int2; cout << " Сумма равна "    << sum << endl;  
Если_То_Иначе   if (P) A; else B; Если значение логического выражения P истинно (не ноль), то выполняется A, иначе – B. If(x>0) y++; else  y--; int num, div; if (!(num%div)) cout<< " делится "<<endl; else cout << "не делится"<< endl;
Если_То   if (P) A; Если значение логического выражения P истинно(не ноль), то выполняется A. if (x>0) y ++;  
Выбор   switch (K) { case 1: A; break; case 2: B; break; case 3: C; break; default: D; break; }; K – переключатель- выражение, значение которого определяет выполнение операторов: если K = 1, то A; если K = 2, то B; если K = 3, то C иначе – D; char op; bool f=true; int a, b, res; cin >>a>>b>>op; switch (op) { case '+': res=a+b; break; case '-':  res=a-b;  break; default: cout<< "\n Неизвестная операция " << endl; f=false; break; } If (f) cout<<res<< endl; Если выход из переключателя явно не указан – отсутствует break – тогда последовательно выполняются все остальные ветви!
Цикл_Пока (цикл с предусловием)   while (P) A; Пока значение логического выражения Pистинно(не ноль), оператор A выполняется. while (N>0) N- -;  
Цикл_со_счетчиком (цикл с предусловием) for (инициализация;   выражение;   модификация) A; Инициализация применяется для объявления и задания начальных значений величинам, используемым в цикле. Выражение определяет условие продолжения цикла. Модификация выполняется после каждой итерации цикла. for (int  i = 1,  s = 0;  i <=100; ++i) s += i; //Последоательность //вычислений: // i =1, s =0+1=1 //i=2, s=1+2 //i=3, s=1+2+3 //… //i=100, s=1+2+…+100 //i=101 – выход из цикла
Цикл_До (цикл с постусловием)   do A; while P;   Оператор Aвыполняется до тех пор, пока логическое выражение Pистиннo(не ноль). do N--; while N>0;  

 

Рекомендации по выбору оператора цикла в программе:

· оператор do while обычно используют, когда цикл требуется обязательно выполнить хотя бы один раз;

· оператор for предпочтительнее в случае, если число повторений операторов цикла известно, и однозначно – для организации циклов со счетчиками;

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

 

Реализация циклических алгоритмов требует в некоторых случаях прекращения «шага» цикла или всего цикла до выполнения условия его завершения. Для этих целей в языке С++ предусмотрены специальные операторы (НЕ управляющие структуры!):

· continue – оператор завершения шага цикла. По этому оператору прекращается выполнение текущего шага цикла, и управление передается на следующий шаг

· break   – оператор «выхода» из цикла. Прекращается выполнение цикла и управление передается оператору, следующему за последним оператором цикла.

· return – оператор «выхода» из функции (программы). По этому оператору выполнение программы завершается.

 

Управляющие структуры ветвления и цикла в каждой своей «ветви» содержат не более одного оператора обработки информации (в таблице 1.3 A, B). Во многих программах этого недостаточно даже для реализации простого алгоритма. Для того чтобы распространить область действия значения условия или цикла на несколько операторов, необходимо объединить их в составной оператор.

Составной оператор – это последовательность операторов, заключенная в операторные скобки { …}.

Например:

if (x >0) {

y = 1; k ++; // здесь составной оператор – это операторы y =1 и k ++

}                  // которые заключены в фигурные скобки и выполняются при x > 0

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

В приведенном примере функциональный узел в структуре «Если_То» был заменен структурой «Последовательность»:

Это способ построения программы дает нам возможность, используя всего несколько базовых структур, построить программу любой сложности. При этом разработка программы осуществляется «сверху вниз»: от общей структуры программы, как одного функционального узла, к ее конкретному уточненному представлению в виде совокупности вложенных управляющих структур.

 

 

Структура простой программы

 

Программа на языке C ++ в самом простом случае состоит из одного файла с расширением cpp.

Исходный файл (*. cpp) в свою очередь состоит из:

· директив препроцессора, например # include для подключения заголовочных файлов;

· объявлений переменных (глобальных), доступа к пространствам имен, пользовательских типов данных, а так же прототипов функций;

· функций, одна из которых main – главная программа.

 

 

Примеры программ





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


Дата добавления: 2018-10-14; Мы поможем в написании ваших работ!; просмотров: 385 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинать всегда стоит с того, что сеет сомнения. © Борис Стругацкий
==> читать все изречения...

2872 - | 2650 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.016 с.