Скачать презентацию Программирование на языке C Лекция 3 Скачать презентацию Программирование на языке C Лекция 3

3. Программирование на языке CSharp.pptx

  • Количество слайдов: 33

Программирование на языке C# Лекция № 3. • Переменные • Выражения • Операторы Программирование на языке C# Лекция № 3. • Переменные • Выражения • Операторы

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

Синтаксис объявления [<атрибуты>] [<модификаторы>] <тип> <объявители>; • При объявлении простых переменных указывается их тип Синтаксис объявления [<атрибуты>] [<модификаторы>] <тип> <объявители>; • При объявлении простых переменных указывается их тип и список объявителей, где объявитель - это имя или имя с инициализацией. • Список объявителей позволяет в одном объявлении задать несколько переменных одного типа. • Если объявитель задается именем переменной, то имеет место объявление с отложенной инициализацией. • Хороший стиль программирования предполагает задание инициализации переменной в момент ее объявления. • Инициализацию можно осуществлять двояко - обычным присваиванием или в объектной манере. Во втором случае для переменной используется конструкция new и вызывается конструктор по умолчанию

Пример public void Simple. Vars() { //Объявления локальных переменных int x, s; //без инициализации Пример public void Simple. Vars() { //Объявления локальных переменных int x, s; //без инициализации int y =0, u = 77; //обычный способ инициализации //допустимая инициализация float w 1=0 f, w 2 = 5. 5 f, w 3 =w 1+ w 2 + 125. 25 f; //допустимая инициализация в объектном стиле int z = new int();

Пример (продолжение) //Недопустимая инициализация. //Конструктор с параметрами не определен //int v = new int(77); Пример (продолжение) //Недопустимая инициализация. //Конструктор с параметрами не определен //int v = new int(77); x = u+y; //теперь x инициализирована if (x > 5) s = 4; for (x=1; x<5; x++) s = 5; //Инициализация в if и for не рассматривается, //поэтому s считается неинициализированной переменной //Ошибка компиляции: использование //неинициализированной переменной //Console. Write. Line("s= {0}", s); } //Simple. Vars

Время жизни и область видимости В C# вообще нет глобальных переменных! • Поля Первая Время жизни и область видимости В C# вообще нет глобальных переменных! • Поля Первая важнейшая роль переменных, - они задают свойства структур, интерфейсов, классов. Поля объявляются при описании класса Когда конструктор класса создает очередной объект - экземпляр класса, то он в динамической памяти создает набор полей, определяемых классом, и записывает в них значения, характеризующие свойства данного конкретного экземпляра.

Время жизни и область видимости • Поля Время существования и область видимости полей определяются Время жизни и область видимости • Поля Время существования и область видимости полей определяются объектом, которому они принадлежат. Объекты в динамической памяти, с которыми не связана ни одна ссылочная переменная, становятся недоступными. Реально они оканчивают свое существование, когда сборщик мусора выполнит чистку "кучи". Для значимых типов, к которым принадлежат экземпляры структур, жизнь оканчивается при завершении блока, в котором они объявлены. Есть одно важное исключение. Некоторые поля могут жить дольше. Если при объявлении класса поле объявлено с модификатором static, то такое поле является частью класса и единственным на все его экземпляры. Поэтому staticполя живут так же долго, как и сам класс.

Глобальные переменные уровня модуля • Что такое глобальные переменные уровня модуля? Глобальных переменных уровня Глобальные переменные уровня модуля • Что такое глобальные переменные уровня модуля? Глобальных переменных уровня модуля в С# нет!

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

Глобальные переменные уровня процедуры • Что такое глобальные переменные уровня процедуры? Глобальных переменных уровня Глобальные переменные уровня процедуры • Что такое глобальные переменные уровня процедуры? Глобальных переменных уровня процедуры в С# нет!

Константы • Всюду, где можно объявить переменную, можно объявить и именованную константу • В Константы • Всюду, где можно объявить переменную, можно объявить и именованную константу • В объявление добавляется модификатор const • Инициализация констант обязательна и не может быть отложена const int Small. Size = 38, Large. Size =58; const int Mid. Size = (Small. Size + Large. Size)/2; const double pi = 3. 141593;

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

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

Приоритет Категория 0 Первичные 1 Унарные 2 Операции Порядок (expr) x. y f(x) a[x] Приоритет Категория 0 Первичные 1 Унарные 2 Операции Порядок (expr) x. y f(x) a[x] x++ x-- new sizeof(t) typeof(t) checked(expr) unchecked(expr) + - ! ~ ++x --x (T)x Слева направо * / % Слева направо 3 Мультипликативные (Умножение) Аддитивные (Сложение) + - Слева направо 4 Сдвиг << >> Слева направо 5 < > <= >= is as Слева направо 6 Отношения, проверка типов Эквивалентность == != Слева направо 7 Логическое И & Слева направо 8 Слева направо 9 Логическое исключающее ^ ИЛИ (XOR) | Логическое ИЛИ (OR) 10 Условное И && Слева направо 11 Условное ИЛИ || Слева направо 12 Условное выражение ? : Справа налево 13 Присваивание = *= /= %= += -= <<= >>= &= ^= |= Справа налево Слева направо

Перегрузка операций • Под перегрузкой операции понимается существование нескольких реализаций одной и той же Перегрузка операций • Под перегрузкой операции понимается существование нескольких реализаций одной и той же операции public void Express() { //перегрузка операций byte b 1 =1, b 2 =2, b 3; short sh 1; int in 1; //b 3 = b 1 + b 2; //ошибка: результат типа int b 3 = (byte)(b 1+b 2); //sh 1 = b 1 + b 2; //ошибка: результат типа int sh 1 = (short)(b 1+b 2); in 1 = b 1+ b 2 + sh 1; Console. Write. Line ("b 3= " + b 3 + " sh 1= "+ sh 1 +" in 1= " + in 1); }//Express

Операции Операции "увеличить" и "уменьшить" (increment, decrement) //операции increment и decrement //Следующее выражение допустимо, но писать //подобное никогда не следует int in 1=6; in 1 = ++in 1+ in 1++; //in 2 = ++in 1 + in 1++ + in 1; Console. Write. Line(" in 1= " + in 1);

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

Без комментариев • Арифметические операции ( +, -, *, /, % ) • Операции Без комментариев • Арифметические операции ( +, -, *, /, % ) • Операции отношения ( ==, !=, <, >, <=, >= ) • Операции сдвига ">>" , "<<“

Логические операции Логическое отрицание Побитовое отрицание Эквивалентность Логическое И Логическое исключающее ИЛИ (XOR) Логическое Логические операции Логическое отрицание Побитовое отрицание Эквивалентность Логическое И Логическое исключающее ИЛИ (XOR) Логическое ИЛИ (OR) Условное ИЛИ ! ~ == & ^ | && || !=

Условные выражения int a = 7, b= 9, max; max= (a>b) ? a: b; Условные выражения int a = 7, b= 9, max; max= (a>b) ? a: b; Console. Write. Line("a = " + a + "; b= " + b + "; max(a, b) = " + max);

Операция приведения к типу (type) <унарное выражение> int p; double x=3, 14159; p = Операция приведения к типу (type) <унарное выражение> int p; double x=3, 14159; p = (int)x; //b = (bool)x;

Операторы языка С# • Оператор присваивания X = expr; X 1 = X 2 Операторы языка С# • Оператор присваивания X = expr; X 1 = X 2 =. . . = Xk = expr; if(x = expr). . .

Блок или составной оператор { оператор_1; . . . ; оператор_N ; } Блок или составной оператор { оператор_1; . . . ; оператор_N ; }

Пример public { int int for { void Block() limit = 100; x = Пример public { int int for { void Block() limit = 100; x = 120, y = 50; sum 1 =0, sum 2=0; (int i = 0; i< 11; i++) int step = Math. Abs(limit -x)/10; if (x > limit) {x -= step; y += step; } else {x += step; y -= step; } sum 1 += x; sum 2 +=y; } //limit = step; //переменная step перестала существовать //limit = i; // переменная i перестала существовать Console. Write. Line("x= {0}, y= {1}, sum 1 ={2}, sum 2 = {3}", x, y, sum 1, sum 2); }

Пустой оператор for (int j=1; j<5; j++) {; ; ; }; Пустой оператор for (int j=1; j<5; j++) {; ; ; };

Операторы выбора • Оператор if if(выражение_1) оператор_1 else if(выражение_2) оператор_2. . . else if(выражение_K) Операторы выбора • Оператор if if(выражение_1) оператор_1 else if(выражение_2) оператор_2. . . else if(выражение_K) оператор_K else оператор_N

Операторы выбора • Оператор switch(выражение) { case константное_выражение_1: [операторы_1 оператор_перехода_1]. . . case константное_выражение_K: Операторы выбора • Оператор switch(выражение) { case константное_выражение_1: [операторы_1 оператор_перехода_1]. . . case константное_выражение_K: [операторы_K оператор_перехода_K] [default: операторы_N оператор_перехода_N] }

public void Set. Status() { switch (period) { case 1: status = public void Set. Status() { switch (period) { case 1: status = "child"; break; case 2: status = "schoolboy"; break; case 3: status = "student"; break; case 4: status = "junior researcher"; break; case 5: status = "senior researcher"; break; case 6: status = "professor"; break; default : status = "не определен"; break; } Console. Write. Line("Имя = {0}, Возраст = {1}, Статус = {2}", name, age, status); }//Set. Status

Операторы перехода • Оператор goto [метка|case константное_выражение|default]; Операторы перехода • Оператор goto [метка|case константное_выражение|default]; "О вреде оператора goto" и о том, как можно обойтись без него, писал еще Эдгар Дейкстра при обосновании принципов структурного программирования.

Операторы перехода • Операторы break и continue – При выполнении оператора break в теле Операторы перехода • Операторы break и continue – При выполнении оператора break в теле цикла завершается выполнение самого внутреннего цикла. – Оператор continue осуществляет переход к следующей итерации цикла • Оператор return позволяет завершить выполнение процедуры или функции return [выражение]; Для функций его присутствие и аргумент обязательны, поскольку выражение в операторе return задает значение, возвращаемое функцией.

Операторы цикла • Оператор for(инициализаторы; условие; список_выражений) оператор Инициализаторы задают начальное значение одной или Операторы цикла • Оператор for(инициализаторы; условие; список_выражений) оператор Инициализаторы задают начальное значение одной или нескольких переменных, часто называемых счетчиками или просто переменными цикла Условие задает условие окончания цикла, соответствующее выражение при вычислении должно получать значение true или false Список выражений, записанный через запятую, показывает, как меняются счетчики цикла на каждом шаге выполнения public bool Palindrom(string str) { for (int i =0, j =str. Length-1; i

Операторы циклов • Циклы while цикл с предусловием: while(выражение) оператор цикл с постусловием: do Операторы циклов • Циклы while цикл с предусловием: while(выражение) оператор цикл с постусловием: do оператор while(выражение);

 • Цикл foreach(тип идентификатор in контейнер) оператор public void Sum. Min. Max() { • Цикл foreach(тип идентификатор in контейнер) оператор public void Sum. Min. Max() { int [, , ] arr 3 d = new int[10, 10]; Random rnd = new Random(); for (int i =0; i<10; i++) for (int j =0; j<10; j++) for (int k =0; k<10; k++) arr 3 d[i, j, k]= rnd. Next(100); long sum =0; int min=arr 3 d[0, 0, 0], max=arr 3 d[0, 0, 0]; foreach(int item in arr 3 d) { sum +=item; if (item > max) max = item; else if (item < min) min = item; } Console. Write. Line("sum = {0}, min = {1}, max = {2}", sum, min, max); }//Sum. Min. Max