Понятие массива и составного оператора

Алфавит и идентификаторы

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

Алфавит языка – это символы, которые можно использовать для записи программы на данном языке. Содержание алфавита составляют латинские буквы и арабские цифры 0… 9,  дополненные знаками операций (+, -, *, & и др.), разделительными и специальными символами (/,  \, [, {, % и др.). В комментариях можно использовать русские буквы. Буквы (латинские и русские) могут быть строчными и заглавными.

Лексема, или элементарная конструкция, — минимальная единица языка, имеющая самостоятельный смысл.

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

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

Идентификаторы – это имена, которые присваиваются переменным, функциям, операторам и т.д. Идентификатор образуется из набора букв и цифр. Первым должна быть буква; знак подчеркивания (_) считается буквой. Длина идентификатора не должна превышать 31 символ. В идентификаторах различаются заглавные и строчные буквы.

Примеры:

Правильно Неправильно Причина
as kod 2 Содержит пробел
V_Ivanov 535_alt Начинается с цифры
ist_11 а2Я Содержит запрещенный символ
bottle int Стандартное слово языка С++

Ключевые слова – это идентификаторы, которые зарезервированы в языке С++, где они выполняют определенное назначение и в другом значении использоваться не могут.

Примеры: int, cout, void, и др.

Типы данных и переменные

Компьютерные программы предназначены для обработки данных. Элементарными данными в программе являются числа и символы. Числа, в свою очередь, разделяются на целые и дробные. Исходя из такого деления, в языке Си используется три основных типа данных, для которых применяются следующие обозначения (ключевые слова):

§ char   – символ;

§ int      – целое число;

§ float   – дробное (вещественное) число.

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

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

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

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

Целые числа в С++ представляются следующими типами:

int – целое,

long – длинное целое,

short – короткое целое,

unsigned – беззнаковое целое.

Размер памяти, отводимый под каждый тип данных, зависит от типа используемого компьютера. Если, например, машинное слово 2 байта (16 бит), то под int отводится 2 байта, под short – 2 байта, под long – 4 байта, под unsigned – 2 байта.

Вещественные (дробные) числа представлены тремя типами:

float – вещественное,

double – вещественное с двойной точностью,

long double – длинное дробное.

Под float обычно отводится в два раза больше памяти, чем под int. Для double отводится в два раза больше памяти, чем под float.

В С++ имеется ещё логический тип данных – bool. Величины логического типа могут принимать только значения true и false, являющиеся зарезервированными словами. Внутренняя форма представления значения false - 0 (нуль). Любое другое значение интерпретируется как true.

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

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

                выражение;

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

Переменная – это именованная область памяти, в которой хранятся данные определенного типа. У переменной есть имя и значение. Имя служит для обращения к области памяти, в которой хранится значение. Во время выполнения программы значение переменной можно изменять. Перед использованием любая переменная должна быть описана (объявлена). Для этого, вначале указывается тип данных переменной, а затем через пробел – идентификатор, обозначающий её имя. Объявление заканчивается точкой с запятой.

Примеры:

float a1; // объявлена переменная а1 для работы с дробными числами

int two;       // объявлена целочисленная переменная two

char s;   // объявлена символьная переменная s.

Для объявления нескольких однотипных переменных их разделяют запятыми после указания типа данных.

Примеры:

int a,b,c;      //объявлены три целочисленные переменные

float a1,b1;  // объявлены две вещественные переменные.

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

#include<iostream>

Int main()

{

int a;               // объявление целочисленной переменной а

int b;                   // объявление целочисленной переменной b

int c;                    // объявление целочисленной переменной с

a=24;               // занесение числа 24 в переменную а

b=46;               // занесение числа 46 в переменную b

c=a+b;             // вычисление суммы и занесение её в с

cout << c;         // вывод на экран значения переменной с

return 0;

     }

Константы

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

Типы констант, их форматы и примеры написания приведены в расположенной ниже таблице. Из неё следует в частности, что целая и дробная часть вещественных чисел разделяется точкой (а не запятой), целые числа в восьмеричной системе счисления начинаются с нуля, а целые числа в шестнадцатеричной системе счисления начинаются с комбинации 0X (0x), символы заключаются в апострофы, а символьные строки – в кавычки.

 

Константа Формат Примеры
Целая Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нуль. Восьмеричный: нуль, за которым следуют восьмеричные цифры (0,1,2,3,4,5,6,7). Шестнадцатеричный: Ох или ОХ, за которым следуют шестнадцатеричные цифры (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F). 8, 0, 199226   01, 020, 07155     0хА, 0x1 В8, 0X00FF
Вещественная Десятичный. Экспоненциальный. 5.7,.001, 35. 0.2Е6,.15е-З, 5Е10
Символьная Один или два символа, заключенных в апострофы. 'А', 'f', '*', 'db', '\n',  
Строковая Последовательность символов, заключенная в кавычки. "Texet", "Rezult = "

 

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

Управляющие константы и их значения приведены в следующей таблице.

Изображение Наименование
Звуковой сигнал
\b Возврат на шаг
\f Перевод страницы (формата)
\n Перевод строки
\r Возврат каретки
\t Горизонтальная табуляция
\v Вертикальная табуляция

 

Рассмотрим небольшой пример с использованием строковых констант и управляющих последовательностей.

#include<iostream>

 int main()

{

cout <<”Abra”;

cout <<”Kadabra”;

return 0;

     }

После выполнения данной программы, на экран будет выведено:

  AbraKadabra

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

Чтобы слова располагались на соседних строчках экрана надо использовать соответствующую управляющую константу (\n). Тогда программа примет следующий вид.

 

#include<iostream>

 int main()

{

cout <<”Abra”<<’\n’;

cout <<”Kadabra”;

return 0;

     }

После выполнения программы получим:

Abra

Kadabra

Если константа длинная и встречается в тексте программы неоднократно, то для удобства ее использования, а также для лучшего восприятия программы, константе присваивается осмысленное имя с помощью директивы препроцессора #define, после которой указывается имя константы и через пробел – её значение, например:

    #define E “Error”

#define M 4206005,246921

 

После записи директивы точка с запятой не ставится.

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

Директива #define помещается в начале программы вслед за директивой #include.

 Рассмотрим пример, в котором вычисляется длина окружности.

#include <iostream>

#define  PI  3.14159   // задание именованной константы

Int main()

{

float r = 5.25;    // объявление вещественной переменной r и

float len;       // одновременная её инициализация

len = 2 * PI * r;  // вычисление значения длины окружности

cout<<len;          // вывод результата на экран

     return 0;

     }

В данной программе значение числа π присвоено именованной константе PI, которая затем используется для вычисления длины окружности.

Операторы

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

z = x + y;

обязывает компьютер сложить числа x и y (выполнить правую часть равенства), а затем результат (возвращаемое значение операции сложения) присвоить переменной z.

 Оператор «=» называется оператором присваивания и, как было отмечено, выполняется справа налево. Остальные операторы выполняются обыкновенным образом – слева направо.

Арифметические операторы и их обозначения приведены в следующей таблице.

Сложение + c=a+b;
Вычитание - d=a-b;
Умножение * s=a*b;
Деление / p=a/b;
Деление по модулю (остаток от деления) % int a=19; int b=8; D=a % b; // D=3    

Пример.

#include<iostream>

 int main()

{

int x,y,z; // объявление целочисленных переменных x,y,z

x=20;

y=5;

z=x/y;                  // выполнение операции деления

cout<< z <<’\n’;  // вывод на экран результата деления

cout<<x*y;     // вывод на экран результата умножения

     return 0;

     }

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

Логические операторы. Результатом логических операций может быть либо «ложь» (0), либо «истина» (1). Логическими операторами являются:

· логическое отрицание (инверсия):!

   Пример: a=!b; если b=0, то a=1;

· логическое «или» (дизъюнкция): ||

· логическое «и» (конъюнкция): &&.

 

Операторы сравнения приведены в следующей таблице.

 

Оператор Название
< Меньше
<= Меньше или равно
> Больше
>= Больше или равно
== Равно
!= не равно

 

Результатом операций сравнения также как и логических операций может быть либо «ложь» (0), либо «истина» (1).

Пример.

#include<iostream >

Int main()

{

    int a,b,c,d;

    a=34;

    b=12;

    c=12;

    d = c = = b;       // сравнение на равенство переменных c и b

    cout<<d<<'\n'; //  вывод результата сравнения

    d = b > a;          // b больше  a?

    cout << d <<'\n';     //  вывод результата сравнения

return 0;

}

 

В данном примере объявляются четыре целочисленные переменные и трём из них присваиваются значения. Четвертая переменная используется для хранения результата сравнения переменных. В первом случае сравниваются c и b. Так как c и b равны,то d =1. Во втором случае сравниваются b и a (b > a). Результатом будет 0.

Вид экрана:  

                    1

                   0

При программировании часто используются унарные (применимые к одному операнду) операторы инкремента и декремента. Инкремент (++) увеличивает значение операнда на единицу. Декремент (- -) уменьшает значение операнда на единицу.

Пример.

#include<iostream >

Int main()

{

int a,x,y,z;

a=2;

x=3;

y=a-x++;        // сначала вычисляется a-x, а затем осуществляется x++

cout<<'Y'<<" "<<'X'<<'\n';

cout<<y<<" "<<x<<'\n';

y=a+x- -;         // сначала вычисляется a+x, а затем осуществляется x- -

cout<<y<<" "<<x<<'\n';

return 0;

}

В этом примере после объявления и инициализации переменных выполняется оператор y=a-x++;  в следующей последовательности: сначала вычисляется a-x, а затем значение х увеличивается на единицу. После этого на экран выводятся через пробел символы Y и X, а после перевода строки – значения переменных y и x, которые равны соответственно -1 и 4. Затем выполняется оператор y=a+x- -;  аналогичным порядком и снова выводятся на экран значения переменных y и x, которые будут равны соответственно 6 и 3.

Вид экрана:

                Y     X

                 -1 4

                  6 3

В выражении порядок выполнения операторов определяется их приоритетом. Первыми выполняются операции с наивысшим приоритетом. Цепочка приоритетов в С++ выглядит так:

!, *, /, %, +, -, &&  ,  ||  ,  =  .

Например, в выражении

   x+y*pol /z

сначала выполнится умножение, затем – деление и в последнюю очередь – сложение.

Для изменения порядка выполнения операций в выражении применяются круглые скобки. Например, (x+y)*pol /z. Теперь первой будет выполнена операция сложения.

Понятие массива и составного оператора

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

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

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

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

 

Понятие массива

 

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

Объявляют массивы так:

float mass[20];      // массив из двадцати дробных чисел

int m[100];        // сто - элементный целочисленный массив

char s[25];          // массив из двадцати пяти символов

При использовании массива в программе число в скобках указывает номер элемента массива и называется индексом. Индекс всегда начинается с нуля.

Рассмотрим пример, в котором объявляется символьный массив, присваиваются значения элементам массива и некоторые из них выводятся на экран.

#include<iostream>

Int main()

{

char mass[6];

int k, l, m;

cout<<”Insert 3 numbers(0-5)”;

cin>>k>> l>>m;

mass[0]=’e’;

mass[1]=’o’;

mass[2]=’n’;

mass[3]=’p’;

mass[4]=’r’;

mass[5]=’d’;

cout<<mass[k]<<mass[l]<<mass[m];

return 0;

}

В данном примере объявлен символьный массив из шести элементов mass[6] и три целочисленные переменные k, l, m. Сначала на экран выводится сообщение, которое информирует пользователя о том, что следует ввести три целых числа в диапазоне от нуля до пяти. Эти числа будут использованы в качестве номеров элементов массива. После того как числа введены происходит инициализация (присваивание начальных значений) элементов массива символьными константами. Затем на экран выводятся три из них, номера которых пользователь ввел с клавиатуры.

 

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

Программа на С ++ состоит из операторов (инструкций). Каждый оператор заканчивается точкой с запятой. Например:

   ...

            х=0;           // присваивание нулевого значения переменной

       х++;           // увеличение значения переменной на единицу

            сout <<х;    // вывод на экран

    ...

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

   ...

           {               // начало составного оператора 

            х=0;           // присваивание нулевого значения переменной

       х++;           // увеличение значения переменной на единицу

            сout <<х;    // вывод на экран

            }                  // конец составного оператора 

    ...

Компилятор воспринимает такую конструкцию как один оператор. После закрывающейся скобки точка с запятой не ставится.

Условные операторы

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: