ТОП 10:

Стандартные типы данных. Модификаторы и квалификаторы.



Модификатор типа signed указывает, что переменная может принимать как положительные, так и отрицательные значения. Возможно, что при этом самый левый бит области памяти, выделяемой для хранения значения, используется для представления знака. Если этот бит установлен в 0, то значение переменной считается положительным. Если бит установлен в 1, то значение переменной считается отрицательным.

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

Кроме того имеется ряд квалификаторов, которые можно ис-пользовать с типом INT: SHORT (короткое), LONG (длинное) иUNSIGNED (без знака). Квалификаторы SHORT и LONG указывают

на различные размеры целых.

10. Преобразование типов

Правила преобразования определяют, каким образом одни типы могут быть преобразованы в другие типы, без потери данных.

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

Операции языка С. Понятие операдна и результата операции. Унарные, бинарные и тернанрные операции. Операция присваивания. Понятие адресного выражения.

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

Операнд — это величина над которой совершается математическая операция.

Операции бывают унарные, бинарные и тернарные (по кол-ву операндов) : -x (унарная), x+y(бинарная).

Любая операция имеет результат, Результат – адресное выражение (l-value) или нет (r-value).

Адресное выражение - Результатом операции взятия адреса является указатель на операнд. Тип, адресуемый указателем, является типом операнда.Операция разадресации ( * ) осуществляет косвенный доступ к адресуемой величине через указатель. Операнд должен быть указателем. Результатом операции является величина, которая хранится по адресу, на который указывает операнд. Типом результата является тип величины, адресуемой указателем. Результат не определен, если указатель содержит недопустимый адрес. Операция присваивания:

Простая форма операции присваивания.

Левый операнд операции присваивания является леводопустимым выражением.

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

An=…=A3=A2=A1;

где A1, A2, A3, …, An являются выражениями. Для определения значений выражений подобной структуры в C++ существуют правила группирования операндов выражений сложной структуры (эти правила подробно будут описаны ниже). В соответствии с одним из этих правил операнды операции присвоения группируются справа налево:

An=(An-1=…=(A3=(A2=A1))…);

Очевидно, что в таком выражении все операнды, кроме самого правого, должны быть модифицируемыми l-выражениями. В результате выполнения этого выражения операндам An, An-1, … A3, A2 будет присвоено значение операнда A1.

Составная операция присваивания:

x+=2; x-=7; x*=2; x/=3; x%=1 и т.д.

12.Арифметические операции. Инкремент и декремент.

Операции инкремента ++ и декремента --. Операция "++" является инкрементом, т. е. a++ означает: добавить 1 к переменной a. Инкремент и декремент являются единственными операциями в С++, которые можно использовать как

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

Правила:

· Значения типов char и short преобразуются к типу int.

· Значения типа float преобразуются к типу double.

· Если один из типов имеет тип double, то и другие преобразуются к типу double.

· Если один из операндов имеет тип long, то и другие преобразуются к типу long.

· Если один из операторов имеет тип unsigned, то и другие преобразуются к типу ungsigned.

 

Операции сравнения. Тернарная операция.

?: операнд 1? операнд 2: операнд 3. Результат равен значению выражения операнд 2, если операнд 1 истина и значению выражения операнд 3, в противном случае. a=(b<0)?-b:b – а присваевается абсолютное значение b.

14.Логические операции

&& || !

обычно используются в условиях. В операциях && и || второй операнд не вычисляется, если результат

определяется значением первого операнда. Например, в выражении

if (p && l<p->count)

15.Битовые операции. Операции сдвига.

<< Сдвигает разряды левого операнда влево на число позиций, задаваемого правым операндом. Освобождающиеся позиции заполняются нулями, сдвигаемые за старший разряд левого операнда, теряются. С помощью операции сдвига эффективно выполняется операция умножения i<<n равносильно i*2n.

>>Сдвигает разряды левого операнда вправо на число позиций, задаваемое правым операндом. Разряды, сдвигаемые за младший разряд левого операнда, теряются. Для чисел типа unsigned позиции, освобождающиеся слева, заполняются нулями. Для чисел со знаком заполнение зависит от реализации. b=1011 c=2 a=0010. С помощью операции сдвига эффективно выполняется операция деления j>>n равносильно j/2n. & Поразрядное И (поразрядная коньюнкция). Эта операция сравнивает каждый разряд операндов. Для каждого результат равен 1 тогда, когда оба соответствующих разряда операндов равны 1. a=b&c – если оба сравниваемые бита 1, то бит результата 1, иначе 0. b=1010 c=0110 a=0010. | Поразрядное ИЛИ (поразрядная дизъюнкция). Для каждого разряда результат равен 1, если любой из соответствующих разрядов операндов равен 1. a=b|c если любой из битов равен 1, то бит результата 1, иначе 0. b=1010 c=0110 a=1110. ^ Поразрядное исключающее ИЛИ. Для каждого разряда результат равен 1, если один из двух (но не оба) соответствующих разрядов операндов равен 1. a=b^c если один из сравниваемых битов равен 0, а второй 1, то бит результата равен 1, иначе 0. b=1010 c=0110 a=1100.

16.

Пустой оператор, оператор-выражение, оператор объявления, блок операторов.

Оператор – законченная инструкция языка. На языке С каждый оператор заканчивается «;».

Пустой оператор.

;

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

Оператор-выражение.

i++; x=y; 2+3x=y; x+2; т.е. любое выражение.

Блок операторов.

{…………}Используется, Когда по синтаксису языка требуется 1 оператор, А по логике – несколько.

Оператор объявления.

Int x=8; double y=7.2; Может ставиться в любом месте программы.

18. Условный оператор if. Варианты вложения условных операторов.

Оператор if имеет следующую общую форму записи:

if (условие) оператор1;

[else оператор2;]

При выполнении оператора if сначала вычисляется условие. Если результат истина (или любое отличное от 0 значение), то выполняется оператор1. Если результат анализа условия ложь (равно 0), то выполняется оператор2.

19.Оператор выбора switch.

В программировании часто встречается задача выбора одного варианта решения задачи из многих возможных. Это можно сделать при помощи конструкции else-if. Однако более удобный способ – использование оператора switch.

 

switch (выражение)

{ case const1: оператор1; break;

case const2: оператор2; break;

default: опретор3; break;

}

 

Свойства:

· Выражение должно иметь целочисленный тип (допустимо использование перечислений или вызов функции, возвращающей целочисленное значение). Значение выражения сопоставляется с константами const1-constN, стоящими после case.

· Оператор после case выполняется, если значение выражения равно соответствующей константе. Если совпадений нет, то управление передается стоящему после default оператору (не обязательно).

· Константы сравниваются с выражением в той последовательности, в которой они перечисляются в программе.

· Символьные константы в switch автоматически преобразуются в целочисленные.

· Break передает управление за пределы оператора switch.

· Если после оператора отсутствует break, то константа в последующем case считается подходящей условию, и соответствующие операторы выполняются.

· Не может быть двух констант в одном switch, имеющих одинаковые значения.

· switch отличается от if тем, что он может выполнять только операции строгого равенства, в то время как if может вычислять логические выражения и отношения.

20. while, do … while.

while организует повторное выполнение одного оператора или нескольких до тех пор, пока логическое выражение ‘условие’ не примет значение ложь (0). Оператор while называется оператором цикла с предусловием, т.к. выражение ‘условие’ проверяется перед входом в цикл. При построении цикла while необходимо включить в него какие-то конструкции, изменяющие величину проверяемого выражения так, чтобы оно стало ложным.

Если необходимо обеспечить выполнение цикла хотя бы один раз, то удобно использовать оператор цикла с постусловием:

do оператор while (условие);

Здесь сначала выполняется оператор или группа операторов, а затем проверяется значение выражения ‘условие’. Повторение тела цикла происходит до тех пор, пока ‘условие’ не примет значение ложь.

Оператор цикла for. Варианты выражений. Тело цикла. Пустой оператор for. Оператор без тела цикла.

for (инициализация; условие изменение; параметров)

{оператор1; оператор2; оператор3;}

1. Инициализация служит для присваивания начальных значений переменным.

2. Проверяется значение ‘условия’, если ложь, то завершается выполнение цикла.

3. Выполняется тело цикла.

4. Выполняется поле ‘изменение параметров’. Служит для изменения значения переменных, управляющих циклом.

Любое поле может отсутствовать, но знак ; ставится независимо от присутствия любого поля.

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

for (i=1, j=0;i<10;i++, j++);

Пример: Вычислить сумму элементов натурального ряда чисел от 1 до 10 включительно.

 

#include <iostream.h>

void main()

{

int res=0, i;

for(i=0;i<10;i++)

res+=i;

cout<<”res=”<<res;

}

Операторы goto, break, continue, return. Варианты использования.

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

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

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

goto lable;

…………

lable: операторы;

Пример: Вывести на экран числа кратные десяти, но меньшие 100.

#include <iostream.h>

void main()

{

int a=1;

while(a++,a<100)

{if(a%10)

continue

cout<<a;}

}

Пример: Написать программу, которая будет прерывать выполнение цикла при обнаружении числа

#include<stdio.h>

main()

{ int x;

for(x=1;x<=10;x++)

{ if(x==5) break;

printf(“%d”,x);}

return 0;

}

23. Массивы.

Массив – это группа расположенных друг за другом в памяти элементов одного типа и имеющих одно общее имя. Определение массива должно включать его имя и содержать информацию о типе и количестве составных элементов. Доступ к элементам массива осуществляется по имени массива и индексу элемента. Индекс – это порядковый номер элемента в массиве. Индекс первого элемента всегда ноль, далее следуют целые положительные числа (1,2,3). char array [5]={‘A’,’B’,’C’,’D’,’E’};

Здесь объявлен массив из 5 элементов.

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

Определение двумерного массива с 10 строками и 30 столбцами:

 

int mas[10][30];

 

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

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

 

int mas[0][30]; ошибка

 

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

Инициализация двумерного массива с четырьмя элементами:

 

int mas[2][2]={23,54,16,43};

 

Проинициализированный массив будет выглядеть так:

 

[0][0]==23;

[0][1]==54;

[1][0]==16;

[1][1]==43;

 

Строки.

Разновидностью массива является так называемый строковый литерал (строка). В С++ отсутствует специальный строковый тип. Вместо этого строки представляются, как массив элементов типа char, в конце которого помещен нуль символ ‘\0’. Такой массив называется ASCIIZ-строкой.

При объявлении массива под строку необходимо предусмотреть место для нуль символа:

char string[5]={‘Б’’Н’’Т’’У’’\0’}; пять символов







Последнее изменение этой страницы: 2016-04-08; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 54.236.59.154 (0.012 с.)