Результат вычисления выражения характеризуется значением и типом. — КиберПедия 

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

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

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

2023-01-02 19
Результат вычисления выражения характеризуется значением и типом. 0.00 из 5.00 0 оценок
Заказать работу

Выражения и операторы

Выражения

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

• Операнды задают данные для вычислений.

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

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

Выражения

• Операции выполняются в соответствии с приоритетами.

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

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

Простейшие операции С++

Простейшие операции С++

Простейшие операции С++

Приоритет операций

Выражения

Операции одинакового приоритета выполняются:

– унарные операции, условная операция и операции присваивания выполняются справа налево!

– остальные - слева направо.

a = b = c означает  a = (b = c)

a + b + c означает (a + b) + c

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

Выражения

В С++ различаются так называемые L-значения (L-value) и R-значения (R-value). Название произошло от операции присваивания:

– выражение, являющееся L -значением (от слова Left - левый), может располагаться как с левой, так и с правой стороны операции присваивания;

– выражение, являющееся R -значением (от слова Right - правый), может располагаться только с правой, но никак не с левой стороны операции присваивания.

Выражения

• Выражения возвращают в качестве результата либо L -значения, либо R -значения.

• Переменная - частный случай L -значения, а константа - частный случай R -значения.

• Более общим случаем R -значения является обычное арифметическое выражение.

• L -значением в общем случае может быть не только переменная, но и некоторое выражение, ссылающееся на область памяти.

Операции присваивания

 Операции присваивания могут использоваться в программе как законченные операторы.

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

Формат операции простого присваивания (=):   операнд_1 = операнд_2

Левым операндом должно быть L -значение, а правым - любое выражение.

Операции присваивания

с = a + (b = 5);

// эквивалентно b=5; c=a+b;

a = b = c;     

// эквивалентно b=c; a=b;

a=(b=s/k)+n;

 // эквивалентно b=s/k; a=b+n;

a=b=c=d=e+2;

// эквивалентно  d=e+2; c=d; b=c; a=b;

Операции присваивания

• В составных операциях присваивания при вычислении выражения, стоящего в правой части, используется и L -значение из левой части.

• *= /= %= += -= &= ^= |= <<= >>=

int k;

k=8;

k*=3; // результат 24

k+=7; // результат 31

Операции присваивания

a += 5;

// эквивалентно a=a+5;

a /= b;     

// эквивалентно a= a/b;

b[i] *=n;

 // эквивалентно b[i]=b[i]*n;

(a=b)+=c;

// эквивалентно  a=b; a=a+c;

// a = b - является L -значением

Операции инкремента и декремента

Имеют две формы записи – префиксную,

++<операнд>, - - < операнд >,

И постфиксную

  < операнд >++ < операнд > - -

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

Операции инкремента и декремента

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

a =5; i =3; c = a *++ i;

// результат операции с = 20, i=4

i = j =0;

k = i ++; // результат операции k=0, i=1

l =++ j; // результат операции L=1, j=1

-- j; // результат операции j=0

l ++; // результат операции L=2

Арифметические операции

Арифметические операции делятся на:

– унарные «+» и «-»;

– бинарные: сложение «+», вычитание «-», умножение «*», деление «/», получение остатка целочисленного деления «%».

• При делении двух целых чисел – результат целый.

• Операция остаток от деления выполняется над целыми (!)

Результат 2

5%2 результат 1

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

К логическим операциям относятся:

–!– логическое «не» – отрицание;

– &&– логическое «и» – конъюнкция;

– || – логическое «или» – дизъюнкция.

6>2&&3==3

!(6>2&&3==3)

x!=0 && 20/x<5

Операции отношения

<, <=, >, >=, ==,!=

 Операнды могут быть арифметического типа или указателями. Результатом операции является значение true или false.

Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции сравнения.

int a = 5; int b = 3;

a > b // результат true

a == b // результат false

 

Сдвиги

>> – сдвиг вправо битового представления целого числа на количество разрядов, задаваемое правым целочисленным операндом,

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

Например:

4<<2 // результат 16: 00000100 << 00010000

5>>1 // результат 2: 00000101 >> 00000010

Операция следования

• Символом операции следования является

      , (запятая).

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

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

Операция следования

int a=3, b=8, c;

           //запятая – разделитель, а не операция;

c = a++, a+b; // результат: а = 4, с = 12;

(b--,c)*=3; // результат: b = 7, с = 36.

int m =5, z;

z =(m = m *5, m *3); // результат: m=25, z=75

int d, k;

k =(d =4, d *8); // результат: d=4, k=32

с =(a=5, b=a*a);

                               // эквивалентно a=5; b=a*a; c=b;

В файле conio.h:

• Rand () – генерация случайного числа

• Srand (<Целое число>) – инициализация генератора случайных чисел.

Преобразования базовых типов

• В выражение могут входить операнды различных типов.

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

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

• Обычно короткие типы приводятся к более длинным, что обеспечивает сохранение значимости и точности:

(char, short) -> int -> unsigned int -> long -> unsigned long -> float -> double -> long double

Преобразования базовых типов

• Если один из операндов имеет тип long double, второй приводится к этому же типу в любом случае.

• Если в выражении нет операндов long double, но есть операнд double, все преобразуется к этому типу.

• В том случае, если нет операндов типа double и long double, но есть операнд float, тип остальных операндов меняется на float.

Преобразования базовых типов

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

• Прежде чем определить тип результата, производится преобразование, называемое приведением к целому: все операнды с типом меньше, чем int, заменяются на int.

Преобразования базовых типов

• При приведении к целому типы char, signed char, unsigned char и short int преобразуются в int.

• Тип unsigned short int трансформируется в int, если этот тип достаточен для представления всего диапазона значений unsigned short int, в противном случае unsigned short int заменяется на unsigned int.

• Тип wchar_t и перечисления приводятся к наименьшему целому типу, способному представить все их значения.

Преобразования базовых типов

• После приведения к целому сравниваются получившиеся типы операндов.

• Если один из них имеет тип unsigned long, то остальные будут того же типа.

• Если в выражении нет объектов unsigned long, но есть объекты типа long, тип остальных операндов меняется на long.

• Преобразование unsigned int в long происходит только в том случае, если тип long способен вместить весь диапазон значений unsigned int.

Преобразования базовых типов

• Если же тип long не способен представить весь диапазон unsigned int, оба операнда приводятся к unsigned long.

• В случае отсутствия операндов типов unsigned long и long, используется тип unsigned int.

•  Если же нет операндов и этого типа, то к int.

Преобразования базовых типов

• В логических операциях и условной операции выполняется неявное преобразование к типу bool.

• При этом любое значение, не равное нулю (даже отрицательное), трактуется как true, а нуль считается false.

• При обратных преобразованиях величин типа bool к целому типу значение true преобразуется в целую константу 1, а значение false - в 0.

Преобразования базовых типов

• Однако в выражениях с операцией присваивания встречается и обратный вариант, когда более "объемный" тип присваивается менее "объемному", например, float в int.

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

Явное преобразование типа

Операция преобразования типа (часто называемая приведением типа) может записываться в двух эквивалентных формах:

(тип) выражение

 тип (выражение)

(unsigned long)(x/3+2);

(long)25;

(unsigned char)123;

Int(3.14) результат: 3

Float(2/3) результат: 0.0

Int(’A’)    результат: 65

Int main()

{

int i,result;

float fp;

char c,s[81];

result = scanf_s("%d %f %c %s", &i, &fp, &c, 1, s, 80);

printf("The number of fields input is %d\n", result);

printf("The contents are: %d %f %c %s \n", i, fp, c, s);

_ getch ();

}

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

Пример: 

{  

f=a+b;

a+=10;

}

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

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

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

if (a<b) {

if (a<c) m = a;

else m = c; }

else { if (b<c) m = b;

   else m = c; }

if (b>a) max = b;

else max = a; // max = (b > a)? b: a;

if (int i = fun(t)) a –= i; else a += i;

if ((c=a+b)!=5) c+=b;

else c=a;

if (x*x + y*y < 1) kol = 2;

else if (x*x + y*y < 4) kol = 1;        else kol = 0;

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

Правило вложенности. При записи двух вложенных операторов if с одной альтернативной ветвью возникает неоднозначность:

не понятно, которому из двух операторов if принадлежит альтернативная ветвь.

Для разрешения коллизии используют правило вложения:

else всегда относится к ближайшему if.

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

if (<Условие 1>)

if <Условие 2> <Действие 1>

else <Действие 2>

if <Условие 1>

{

if <Условие 2> <Действие 1>

}

else <Действие 2>

Оператор switch

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

case константное_выражение_1:        [список_операторов_1]

case константное_выражение_2:        [список_операторов_2]

...

case константное_выражение_n:    [список_операторов_n]

[default: операторы ]

}

Оператор switch

• Вычисляется выражение, записанное после switch, результат выражения должен быть целого типа или его значение приводится к целому;

• Полученное значение последовательно сравнивается с константами, которые записаны следом за case.

• При первом же совпадении выполняются операторы помеченные данной меткой.

Оператор switch

• Если выполненные операторы не содержат оператора перехода (break или return), то далее выполняются операторы всех следующих вариантов, пока не появится оператор перехода или не закончится переключатель.

• Если значение выражения, записанного после switch не совпало ни с одной константой, то выполняются операторы, которые следуют за меткой default.

• Метка default может отсутствовать.

Оператор switch

#include <iostream.h>

void main() {

int i;

cout<<"\n Enter the number";

cin>>i;

switch(i) {

case 1:cout<<"\n the number is one";

case 2:cout<<"\n2*2="<<i*i;

case 3:cout<<"\n3*3="<<i*i; break;

case 4:cout<<"\n"<<i<<" is four!";

default:cout<<"\n The end of work";

}

}

Оператор switch

При вводе 1 будет выведено:

The number is one

2*2=1

3*3=1

При вводе 2 будет выведено:

2*2=4

3*3=4

При вводе 3 будет выведено:

3*3=9

При вводе 4 будет выведено:

4 is four!

При вводе всех остальных чисел будет выведено:

The end of work

Оператор switch

switch (n_day)

{

case 1:

case 2:

case 3:

case 4:

case 5: puts("Go work!"); break;

case 6: printf("%s","Clean the yard ");

case 7: puts("relax!");

}

Оператор switch

#include <iostream.h>

int main(){

int a, b, res; char op; bool f = true;

cout << "\nВведите 1й операнд: ";

cin >> a;

cout << "\nВведите знак операции: ";

cin >> op;

cout << "\nВведите 2й операнд: ";

cin >> b;

switch (op){

case '+': res = a + b; break;

case '-': res = a - b; break;

case '*': res = a * b; break;

case '/': res = a / b; break;

default: cout <<"\nНеизвестная операция";  

         f = false;

}

if (f) cout << "\n Результат: " << res;

}

Оператор цикла while

while (<Выражение>) <Оператор>;

где <Выражение> – определяет условие выполнения цикла (тип выражения должен быть арифметическим или приводимым к нему);

<Оператор> – любой оператор С++, в том числе блок операторов.

Длина строки 6 символов.

Оператор цикла while

#include <stdio.h>

#include <math.h>

void main(){

float s, r,x,eps;

puts("Input x, eps:");

scanf("%f %f", &x, &eps);

if (x<=1) puts("Error.");

else { s=1; r=1/x;

while (fabs(r)>eps)

       { s+=r; r=-r/x; }

printf("Result= %f.\n", s);

  }

}

Оператор цикла do while

do <Оператор > while (<Выражение>);

Int main ()

{

for (int n=10; n>0; n--) {

cout << n << ", ";

}

cout << "FIRE!\n";

return 0;

}

Оператор цикла for

for(int i=0,float s=0;i<n;i++)s+=i;

for(int i=0,float s=0;i<n;i++,s+=i);

// отсутствует тело цикла

int i =0; float s =0;

for (; i < n; s +=i++);

//отсутствует инициализирующее выражение и тело цикла

for (; i < n;) s +=i++;

// отсутствуют инициализирующее и модифицирующие

//выражения

for (;;);

// бесконечный цикл, который ничего не делает

Оператор цикла for

#include <stdio.h>

#include <conio.h>

int main(void) {

int j = 1;

char a = 'a';

printf("\n Table code characters:\n");

for (; a <= 'z'; ++a)

printf("\n %4d) %2c: code%4d",                           j++, a, a);

printf("\n\n Press any key: ");

_getch();

}

Оператор цикла for

#include <stdio.h>

void main(void){

int i, k;

float F[5] = {1, 12.6, -7.3E3, 124.5, -15};

float maxF;

k = 0;

maxF = F[0];

for (i=1; i<5; i++) {

if(F[i]> maxF) {

k = i; //Запомнить номер элемента

maxF = F[i]; //Запомнить новое значение

}

}

printf("Номер максимального элемента: %d,              значение: %f\n",k, maxF);

}

Void main()

{ int s=0, i, k;

puts("Input up to 10 numbers.");

for (i=1; i<11; i++)

{

scanf("%d",&k);

if (k<0) break;

s+=k;

}

printf("Result = %d.\n",s);

}

Оператор continue

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

• Он записывается в виде: continue;

• Инструкция continue завершает выполнение только текущей итерации.

• Инструкция continue может быть использована только внутри цикла.

Оператор continue

#include <stdio.h>

Void main()

 { int s=0,i=1,k;

puts("Input 10 numbers.");

while (i<11)

{ scanf("%d",&k);

if (k<0) { puts("Error.");

         continue;

           }

s+=k; i++;

}

printf("Result = %d.\n",s);

 }

Оператор return

• Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова.

• Вид оператора: return [ выражение ];

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

Оператор return

#include <iostream.h>

int sum(int a, int b);

// объявление функции

int main() {

int a = 2, b = 3, c, d;

c = sum(a, b); // вызов функции

cin >> d;

cout << sum(c, d); // вызов функции

}

int sum(int a, int b) // определение функции

{

return (a+b);

}

Основные понятия языка

Course labour intensity ( 3 Credit hours ):

V Lectures 1 hour / week

V Homework – weekly

v Office Hours: Mon-Tue- 9:00-10:45, 9:00-9:50 /

              Tue-Sat- /9:00-10:45, 10:55-11:45

v Exam will be CLOSE-BOOK: two questions, one problem.

Literature
Литература

v Павловская Т. А С/С++. Программирование на языке высокого уровня. Учебник для вузов СПб.: Питер, 2010

v Павловская Т. А., Щупак Ю.А С/С++. Структурное и объектно-ориентированное программирование: Практикум СПб: Питер, 2010 г

v Страуструп Б Дизайн и эволюция С++ М.: ДМК Пресс

v Страуструп Б Язык программирования C++ М.: «Издательство БИНОМ»

v Стандарт С++: International Standard ISO/IEC 14882:2003(E), Programming languages — C++

Перегрузка операторов;

C++ adds new features to the C language
Нововведения C++ в сравнении с C

Дополнительные типы данных;

7) пространства имён;

Перегрузка имён функций;

9) ссылки и операторы управления свободно распределяемой памятью;

Состав языка

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

v прописные и строчные латинские буквы и символ подчеркивания (_), который употребляется наряду с буквами;

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

v специальные символы, например +, *, { и &;

Лексемы

Существуют следующие виды лексем:

§ имена (идентификаторы);

§ ключевые слова;

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

§ разделители;

§ литералы (константы).

Имена (идентификаторы)

Ключевые слова

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

    extern int signed typedef

v Задание СРС:  

§ составить список ключевых слов С++.

Константы

Константы

Константы

Символьные константы

Символьные константы

Такие последовательности используют для записи:

v кодов символов, отсутствующих на клавиатуре – в этом случае указывают «\» и коды ANSI в 8-ричном (’\ооо’) или 16-ричном (’\xhh’) виде, например ’\012’– код символа в восьмеричном виде, ’\x07\x07’ - два символа, заданных кодами в шестнадцатеричном виде, ’\0’- символ с кодом 0;

v служебных символов, таких как «’», «\», «?», «″» – косая черта перед ними говорит, что необходим код символа, а не подразумеваемые им операции, например \’, \″

Символьные константы

v кодов управляющих символов, например:

§ ’\n’ – символ перехода на следующую строку,

§ ’\t’ – символ горизонтальной табуляции,

§ ’\а’ – символ звонка (тревога),

§ ’\b’ – символ возврата на одну позицию и др

v Задание СРС:

§ составить список управляющих символов.

Строковые константы

Строковые константы

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

Строковые константы

Например, строка

"Никто не доволен своей \

внешностью, но каждый доволен \

своим умом"

Эквивалентна строке

"Никто не доволен своей внешностью, но каждый доволен своим умом"

Комментарии

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

v Программа на языке С++ состоит из функций, описаний и директив препроцессора.

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

v Описания представляют собой определения и объявления элементов программы: переменных, функций, классов, типов и т. д.

v  Любой элемент программы должен быть определен только один раз. Это правило в стандарте называется правилом одного определения (one definition rule, или odr).

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

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

# include < locale. h > // команды препроцессора               //подключают файлы прототипов

# include < stdio. h > // функций ввода-вывода и              //подключения русских букв

# include < conio. h >

int a =18, b =24, c; // объявление двух                           //инициализированных и одной

                 // неинициализированной                    //переменных

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

printf ("НОД=% d \ n ", c); // вывод результата на экран

puts ("Нажмите любую клавишу для завершения...");

                   // сообщение

_ getch ();     // обработка нажатия любой                  //клавиши

return 0;     // возврат нулевого кода                    //завершения

}

int nod(int a,int b) // заголовок функции nod()

{

while (a!= b) // цикл-пока a не равно b

if (a>b) a=a-b; // если a>b, то вычитаем из a b

   else b = b - a; // иначе вычитаем из b a

Базовые типы данных

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

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

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

§ wchar_t (широкий символьный);

§ int (целый);

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

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

Базовые типы данных

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

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

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

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

§ unsigned (беззнаковый).

Базовые типы данных

Логический тип

v Величины логического типа могут принимать только значения true и false, являющиеся ключевыми словами.

Символьные типы

v В стандарте языка определено три различных символьных типа: char, signed char и unsigned char.

sizeof(char) = sizeof(signed char) = sizeof(unsigned char) = 1

v Наличие знака у типа char тоже зависит от реализации: он может совпадать либо с signed char, либо с unsigned char.

Символьные типы

Символьные типы

v Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например в кодировке Unicode.

v Размер типа wchar_t равен 2 байтам.

v Если в программе необходимо использовать символьные или строковые константы типа wchar_t, то их записывают с префиксом L.

L '\0'       L"Слово"

Целые типы

v Четыре знаковых (signed char, short int, int, long int)

v  Четыре беззнаковых (unsigned char, unsigned short int, unsigned int, unsigned long in t).

v По умолчанию все целочисленные типы считаются знаковыми, поэтому спецификатор signed можно не указывать.

v  Ключевое слово unsigned позволяет представлять неотрицательные целые числа.

Целые типы

v Типы short int, long int, signed int и unsigned int можно сокращать до short, long, signed и unsigned соответственно.

v Целым константам, встречающимся в программе, по умолчанию приписывается тип signed int.

v Можно явно указать требуемый тип с помощью суффиксов L, l (long) и U, u (unsigned).

v Например, константа 32L будет иметь тип long и занимать 4 байта.

v Можно использовать суффиксы L и U одновременно, например, 0x22UL или 05Lu.

Типы с плавающей точкой

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

Тип void

Множество значений этого типа пусто. Тип void имеет три назначения:

§ указание о невозвращении функцией значения;

§ указание о неполучении параметров функцией;

Переменные

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

Переменные

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

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

Переменные

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

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

v Имя переменной должно быть уникальным в своей области видимости.

Переменные

Переменные

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

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

Класс памяти

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

v extern – переменная определяется в другом месте программы. Используется для создания переменных, доступных во всех модулях программы, где они объявлены. Если переменная в том же операторе инициализируется, спецификатор extern игнорируется.

Класс памяти

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

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

Именованная константа

v Модификатор const показывает, что данное описание определяет не переменную, а именованную константу.

Именованная константа

Примеры:

const char C = 'C', X = '|';

int const y = 56;

const long a=6;

const float pp=6.6e-34;

Переменные

Переменные

short int a = 1;

short int b(a + 1);

char s, sf = 'f';

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

Char t (54);

float c = 0.22, x(3), sum;

Int f,c,d;

float r;

I, j;

// две переменные типа int (по умолчанию)

unsigned int max,min;

с har c1,c2;

unsigned char c5;

double k=89.34; float eps=0.1e-4; char ch=’G’;

Переменные

Int main()

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

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

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

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

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

::a = 3; //присваивание глобальной переменной

extern int x;

//переменная х объявлена; определение дальше

...

return 0;

}

int x = 4;   //определение и инициализация x

 

СТРУКТУРЫ ДАННЫХ

АДРЕСНАЯ АРИФМЕТИКА

План лекции

• Массивы

• Строки

• Структуры

• Объединения

• Указатели

• Взаимосвязь массивов и указателей

Массивы

СТРУКТУРЫ ДАННЫХ

Массивы

Конечная именованная последовательность однотипных величин называется массивом.

• В С++ различают массивы фиксированного размера и массивы переменного размера (динамические).

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

• Память под такой массив выделяет компилятор.

Массивы

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

• Память под динамический массив выделяется во время выполнения программы с помощью операций выделения памяти.

Массивы

• Описание массива фиксированного размера отличается от описания простой переменной наличием после имени квадратных скобок, в которых задается количество элементов массива (размерность):

<Тип элемента> <Имя>[<Размер1>]

     [<Размер2>]...[= {<Список значений >}];

Массивы

float a [10];

int a[4][5];

unsigned int koord[10];

float b[10][20][2];

char buffer[10];

const int array_size = 10;

int ia[ array_size ];

int b[100], х [27];

Массивы

• Тип элементов массива - любой допустимый тип С++.

• Элементами массива не могут быть функции и элементы типа void.

• Кроме того, не разрешается использовать массив ссылок.

• Элементы массива нумеруются с нуля.

Массивы

• Глобальный массив по умолчанию инициализируется нулями.

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

• Инициализирующие значения при желании задают в фигурных скобках:

extern int a[5]={0,-36,78,3789,50};

Массивы

const int array_size = 3;

int ia[ array_size ] = { 0, 1, 2 };

int b[5] = {3, 2, 1};

// b [0]=3, b [1]=2, b [2]=1, b [3]=0, b [4]=0

// массив размера 3

int ia[] = { 0, 1, 2 };

extern long double c[]={7.89L,6.98L,0.5L,56.8L};

// 4 элемента

Массивы

• Размерность массива может быть задана только целой положительной константой или константным выражением.

• Размерность массивов предпочтительнее задавать с помощью типизированных констант.

• Для доступа к элементу массива после его имени указывается номер <


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

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

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.498 с.