Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Язык программирования C++. Скалярные стандартные типы данных. Основные операторы языка. Учебный практикум к курсу «Практикум на ЭВМ»

.pdf
Скачиваний:
0
Добавлен:
15.08.2026
Размер:
806 Кб
Скачать

Министерство науки и высшего образования РФ

Тверской государственный университет

Кафедра информатики

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

Учебный практикум к курсу «Практикум на ЭВМ»

Тверь 2020

Составитель Старший преподаватель факультета прикладной математики и кибернетики ТвГУ Л.Ф. Мальцева

Язык программирования C++. Скалярные стандартные типы данных. Основные операторы языка [Электронный ресурс] : учебный практикум к курсу "Практикум на ЭВМ" / Министерство науки и высшего образования, Тверской государственный университет, Кафедра информатики ; составитель Л. Ф. Мальцева. - Тверь : Тверской государственный университет, 2020.

В представленном практикуме рассмотрены состав языка, стандартные типы данных, подробно описаны основные конструкции языка, функции ввода/вывода, приведены примеры программ, даны варианты упражнений, которые могут быть использованы как на занятиях по «Практикуму на ЭВМ», так и для самостоятельной работы студентов. Методические указания предназначены для студентов университета по направлениям 010300. - «Фундаментальная информатика и информационные технологии» и 01.03.02 – «Прикладная математика и информатика» при изучении курса «Практикум на ЭВМ», а также для всех, кто хотел бы научиться программировать на языке С/С++.

Введение

Язык С++ был разработан Бъерном Страуструпом в начале 80-х годов и является универсальным языком программирования, в дополнение к которому разработан набор разнообразных библиотек.

Язык С++ позволяет практически решать любую задачу программирования. Он позволяет разрабатывать программы в соответствии с различными парадигмами: процедурным,

структурным и

объектно-ориентированным программированием. Парадигма в

программировании

определяет систему базовых понятий,

на основе которой

осуществляется написание программ.

 

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

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

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

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

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

3

1. Составные части и основные понятия языка

Алгоритмический язык образуют три его составные части:

1.Алфавит языка, т.е. набор основных символов, с помощью которых пишутся все конструкции языка.

2.Синтаксис языка, т.е. система правил построения из основных символов допустимых конструкций (понятий) языка.

3.Семантика, т.е. система правил истолкования конструкций языка, позволяющая однозначно воспроизводить действия, заданные этими конструкциями.

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

<> , [ ].

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

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

Алфавит С++ включает:

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

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

-специальные знаки:

“ { } , | [ ] ( ) + - * / % . ‘ : ? < > = ! & ; - пробельные символы: пробел, символы табуляции, символ перехода на новую строку.

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

-идентификаторы;

-ключевые (зарезервированные ) слова;

-знаки операций;

-константы;

-разделители (скобки, точка, запятая, пробельные символы).

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

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

Ключевые слова - это зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смысле, в котором он определены.

4

Ниже приведен список ключевых слов С++:

auto

double

long

static

bool

else

namespace

struct

break

enum

new

switch

case

extern

operator

template

catch

false

private

this

char

float

protected

true

class

for

public

typedef

const

friend

register

union

continue

go to

return

unsigned

default

goto

shot

using

delete

if

signed

void

do

int

sizeof

while

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

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

const <тип> <имя> = <константа>;

где

тип – целый (int), вещественный (float, double), символьный (char); имя – идентификатор;

константа – значение константы (123, -35.75, 0.25E6) или имя ранее определенной константы.

Целые константы определяются как числа без дробной части.

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

Вещественная константа в экспоненциальном формате представляется в виде мантиссы и порядка. Мантисса записывается слева от знака экспоненты (Е или е), порядок справа. Значение константы определяется как произведение мантиссы и возведенного в указанную в порядке степень числа 10. Пробелы внутри числа не допускаются.

Например:

20, -35, 172, -3765

3.75-125.36 0.26 +1.596

12е+9 35.8е-10 -3.4Е+5 -0.135Е+15

Символьные константы состоят из одного символа и заключаются в одинарные кавычки,

например, ‘a’, ‘0’, ‘B’, ‘9’.

Язык С++ поддерживает еще один тип констант, а именно – строковые. Строка – это последовательность символов, заключенных в двойные кавычки. Например, “word”, “строка”, “порядковый номер”, “z” (не путать с символьной константой ‘z’).

5

2. Стандартные типы данных в языке С++

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

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

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

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

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

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

Все типы языка С++ можно разделить на стандартные (основные) и типы, определяемые пользователем. Стандартные типы данных часто называют арифметическими, поскольку их можно использовать в арифметических операциях. Для описания стандартных типов используются следующие ключевые слова:

-int (целый);

-char (символьный);

-wchar_t (расширенный символьный);

-bool (логический);

-float (вещественный);

-double (вещественный с двойной точностью).

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

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

-short (короткий);

-long (длинный);

-signed (знаковый);

-unsigned (беззнаковый);

Целый тип (int)

Размер типа int не определяется стандартом, а зависит от компьютера и компилятора. Для 16-разрядного процессора под величины этого типа отводится 2 байта, для 32-разрядного

– 4 байта.

Спецификатор short перед именем типа указывает компилятору, что под число требуется отвести 2 байта памяти независимо от разрядности процессора. Спецификатор long означает, что целая величина будет занимать 4 байта. Таким образом, на 16-разрядном компьютере эквиваленты int и shot int , а на 32-разрядном – int и long int.

При использовании спецификатора signed старший бит числа интерпретируется как знаковый (0 – положительное число, 1 - отрицательное).

6

Целые положительные числа представлены в памяти прямым двоичным кодом, целые отрицательные числа – дополнительным двоичным кодом. Спецификатор unsigned позволяет представлять только положительные числа, поскольку старший разряд рассматривается как часть кода числа. Таким образом, диапазон значений int зависит от спецификаторов. По умолчанию все целочисленные типы считаются знаковыми, то есть спецификатор signed можно опустить. Константам, встречающимся в программе, приписывается тот или иной тип в соответствии с их видом.

Типы с плавающей точкой (float, double, long double)

В языке С++ определены три типа данных для хранения вещественных значений float, double и long double.

Типы данных с плавающей точкой хранятся в памяти иначе, чем целочисленные. Внутреннее представление вещественного числа состоит из двух частей – мантиссы и порядка. В IBM РС – совместимых компьютерах величины типа float занимают 4 байта, из которых один двоичный разряд отводится под знак мантиссы, 8 разрядов отводится под порядок и 23 под мантиссу.

Для величин типа double, занимающих 8 байт под порядок и мантиссу отводится 11 и 52 разряда соответственно. Длина мантиссы определяет точность числа, а длина порядка его диапазон. Спецификатор long перед именем типа double указывает, что под величину отводится 10 байт. Вещественные константы по умолчанию имеют тип double.

Диапазоны значений простых типов данных для IBM PC

Тип

Диапазон значений

Размер(байт)

Bool

True и false

1

Signed char

-128 … 127

1

Unsigned char

0 …255

1

Signet short int

-32 768 …32 767

2

Unsigned short int

0 … 65 535

2

Signet long int

-2 147 483 648 …2 147 483 647

4

Unsigned long int

0 … 4 294 967 295

4

Float

3.4е-38 … 3.4е+38

4

Double

1.7е-308 …1.7е+308

8

Long double

3.4е-4932 …3.4е+4932

10

7

Как видно из таблицы при одинаковом количестве байт, отводимом под величины float и long int, диапазоны их допустимых значений сильно различаются из-за внутренней формы представления.

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

Символьный тип (char)

Под величину символьного типа отводится количество байт, достаточное для размещения любого символа из набора символов для данного компьютера, что и обусловило название типа. Как правило, это 1 байт. Переменные типа char обычно используются для обозначения набора символов стандарта ASCII, символы не входящие в этот набор, разными компиляторами обрабатываются по-разному.

7

Расширенный символьный тип (wchar_t)

Тип wchar_t предназначен для работы с набором символов, для кодирования которых недостаточно 1 байта, например, Unicode. Размер этого типа зависит от реализации; как правило, он соответствует типу short.

Логический тип (bool)

Величины логического типа могут принимать только значения true и false, которые являются зарезервированными словами. Внутренняя форма представления значения false - 0 (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1.

Тип void

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

3. Структура программы

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

<Тип_ возвращаемого_значения> < имя_ функции> ([<список_формальных_параметов>])

{

<тело функции>

}

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

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

Тело функции - это последовательность операторов. Каждый оператор заканчивается точкой с запятой (кроме составного оператора).

Пример структуры программы, содержащей функции main, fun1, fun2.

Директивы препроцессора Описание глобальных переменных int fun1 ( )

{

Операторы функции fun1 return 0;

}

8

void fun2 ( )

{

Операторы функции fun2

}

int main ( )

{

Операторы главной функции return 0;

}

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

Здесь fun1 и fun2 означают функции, написанные программистом, которые вызываются в главной функции main.

4. Переменные

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

[const] <тип> <идентификатор_переменной> [инициализатор];

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

При описании переменной можно присвоить начальное значение, это называется инициализацией. Инициализатор можно записать в двух формах – со знаком равенства или в круглых скобках. Если тип инициализирующего значения не совпадает с типом переменной, выполняется преобразование типов по определенным правилам [3].

Ниже приведены примеры объявлений переменных:

int i, j, n=0;

// целые переменные i, j, n;

 

// инициализация относится только к n

short int m=20;

 

unsigned int uk (34);

// беззнаковая целая переменная uk,

 

// инициализируется значением 34

float a, pr, sred=4.25;

// вещественные переменные

bool flag=true;

// логическая переменная

Описание переменных может быть расположено внутри функции, в определении формальных параметров функции и вне функции. Это – места описаний соответственно локальных переменных, формальных параметров функций и глобальных переменных.

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

9

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

Например:

#include <iostream.h> int main()

{

int t,d=5;

 

scanf(“%d”, &t);

 

if (t==1)

 

{

 

int c;

// эта переменная создается только при входе в этот блок

printf(“введите c: ”);

 

scanf(“%d”, &c);

 

printf(“%d \n”, d*c);

 

}

 

else

// здесь переменная c невидима

printf(“%d \n”, d); return 0;

}

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

5. Операции

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

Язык С++ содержит большое количество встроенных операций. Существует четыре основных класса операций: арифметические, логические, поразрядные и операции сравнения. Рассмотрим основные операции. Подробно об операциях см. [1], [3].

Арифметические операции (+, -, *, /) работают также как и в других языках программирования. Их можно применять почти ко всем встроенным типам данных. Если операция / применяется к целому или символьному типам, то остаток от деления отбрасывается. Например, результатом операции 5/2 будет 2. Результатом операции деление по модулю % является остаток от целочисленного деления, например, 5%2=1.

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

Операция определения размера sizeof предназначена для вычисления размера объекта или типа в байтах. Например, если компилятор для чисел типа int отводит 4 байта, а для чисел типа double – 8, то следующая программа напечатает соответственно 8, 8 и 4.

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]