Файл: Bool. Величины такого типа могут принимать только значения true и false.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.01.2024

Просмотров: 14

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

19. Типы данных. Концепция типов данных. Логический тип (bool).

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

В Си отсутствует логический тип данных. Вместо него используется целый тип int: 0 – это ложь; все, отличное от нуля – это истина. Чаще всего истина – это 1, например вечный цикл while выглядит так:

while(1) {

//тело цикла

};
20. Типы данных. Концепция типов данных. Типы с плавающей точкой.

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

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

Пример описания в программе: float x; double y;

Тип

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

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

bool

true и false

1

signed char

-128 …127

1

unsigned char

0 … 255

1

signed short int

-32 768 … 32 767

2

unsigned short int

0 … 65 535

2

signed 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


21. Типы данных. Концепция типов данных. Соотношение размеров основных типов данных. Тип void.

Соотношение размеров основных типов данных

Для написания переносимых на различные платформы программ НЕЛЬЗЯ делать предположений о размере типа int. Для его получения пользуются операцией sizeof(int), результат которой типа байт.

Например, для ОС MS-DOS sizeof(int) вернет 2 байта, для Windows 9X – 4 байта.

В стандарте ANSI диапазоны значений основный типов не задаются, определяется только соотношение между размерами:


sizeof(float)<= sizeof(double)<=sizeof(long double)

sizeof(char)<= sizeof(short)<=sizeof(int)<=sizeof(long)

Максимальные и минимальные допустимые значения для целых типов зависят от реализации и приведены в заголовочном файле

(), для вещественных – в файле ()

Тип void

Множество значений этого типа пусто.

Тип используется:

- для определения функций, которые не возвращают значений;

- как базовый тип указателей;

- в операции преобразования типов.

Подробнее эту тему рассмотрим дальше. Или нет.
22. Структура программы. Пример. Переменная.

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

Простейшее определение функции имеет формат:

<Тип> <имя> ([<параметры>]) {

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

}

Тип – тип возвращаемого значения;

имя – название функции;

параметры – аргументы функции;

тело – операторы функции.

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

- тело функции является блоком и заключается в {};

- функции не могут быть вложенными;

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

оператора).

Структура программы:

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

<описания>

int f1();

int f2();

int main(){

<операторы main>

}

int f1(){

<операторы функции f1>

}

int f2(){

<операторы функции f2>

}

Программа может состоять из нескольких модулей (исходных файлов).

Пример программы на С:

#include

int main(){

printf("\nhello world\n");

return 0;

// код никогда не будет выполнен

}

Директива препроцессора #include обеспечивает включение в текст программы файла − стандартной библиотеки ввода-вывода.

Пример программы на С++:

#include

using namespace std;

int main() {

cout<
return 0;

}

Переменная.

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

Пример:

int а; float х;

Общий вид оператора описания переменных:

[класс памяти] [const] тип имя [инициализатор];

Необязательный класс памяти может принимать одно из значений:

auto, extern, static и register.

Модификатор const показывает, что значение переменной

изменять нельзя. Такую переменную называют именованной

константой, или просто константой.

const int N=10, M=30;

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

int x=10, y(10);

В одном операторе можно описать несколько переменных одного типа, разделяя их запятыми.

Примеры:

short int а = 1; // целая переменная а

const char С = 'С' ; // символьная константа С

char s, sf = 'f' ; // инициализация относится только к sf

char t(54); float с=0.22, x(3), sum;

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

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

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

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

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

Выражения состоят из:

- операндов,

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

- скобок.

Каждый операнд является, в свою очередь, выражением или одним из его частных случаев, например, константой или переменной. Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении выражения. Частным случаем выражения является пустой оператор ; (он используется, когда по синтаксису оператор требуется, а по смыслу − нет).

Примеры:

i++; // выполняется операция инкремента

а *= b + с; // выполняется умножение с присваиванием

fun(i, к); // выполняется вызов функции

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

Время жизни может быть постоянным (в течение выполнения программы) и временным (в течение выполнения блока).

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

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

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

extern − означает, что переменная определяется в другом месте программы (в другом файле или дальше по тексту).

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

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

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

Пример:

int а; //1 глобальная переменная а

int main(){

int b; // 2 локальная переменная b

extern int х; // 3 переменная x определена в другом месте

static int с; // 4 локальная статическая переменная с

а = 1; // 5 присваивание глобальной переменной

int а; // 6 локальная переменная а

а = 2; // 7 присваивание локальной переменной

::а = 3; // 8 присваивание глобальной переменной (C++)

}

В этом примере глобальная переменная а определена вне всех блоков. Память под нее выделяется в сегменте данных в начале работы программы, областью действия является вся программа. Область видимости − вся программа, кроме строк 6-8, так как в первой из них определяется локальная переменная с тем же именем, область действия которой начинается с точки ее описания и заканчивается при выходе из блока. Переменные b и с − локальные, область их видимости − блок, но время жизни различно: память под b выделяется в стеке при входе в блок и освобождается при выходе из него, а переменная с располагается в сегменте данных и существует все время, пока работает программа.
24. Операторы. Операции инкремента и декремента. Операция sizeof.

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

Внутри знака операции пробелы не допускаются.

Делятся:

- унарные; //i++;

- бинарные; // i+j;

- тернарную. // (a>b)?a:b;

Один и тот же знак может интерпретироваться по-разному в зависимости от контекста.

x=-y; // унарный минус

x-=y; // бинарный минус -> x=x-y;

x-=-y; //?

Все знаки, за исключением [], () и ?: представляют собой отдельные лексемы.

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

++nl увеличить до использования;

nl++ увеличить после использования;

--nl уменьшить до использования;

nl-- уменьшить после использования.

Инкрементные и декрементные операторы можно применять только к переменным. (i+j)++ /*неверно*/

Если требуется только увеличить или уменьшить значение переменной, то безразлично какой оператор использовать, как например:

if (c == '\n') nl++;

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

sizeof выражение

sizeof ( тип )

Пример:

#include

using namespace std;

int main() {

float x = 1;

cout<<"sizeof(float):"<
cout<<"\nsizeof(x):"<
cout<<"\nsizeof (x + 1.0) :"<
return 0;

}

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