05 (Лекции 2013-го года)
Описание файла
Файл "05" внутри архива находится в папке "Лекции 2013-го года". PDF-файл из архива "Лекции 2013-го года", который расположен в категории "". Всё это находится в предмете "алгоритмы и алгоритмические языки" из 1 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст из PDF
Курс «Алгоритмы и алгоритмические языки»1 семестр 2013/2014Лекция 51Типы данныхБазовые типы данных: char (символьный),int (целый), float (с плавающей точкой),double (двойной точности),_Complex (C99, комплексный)Тип void (без значения)Модификаторы базовых типов: signed, unsigned,long, short, long long (C99)к типу int применимы все модификаторык типу char – только signed и unsignedк типу double – только long (C99)2Типы данныхПредставление целых чисел: позиционнаядвоичная системаБайты в представлении числа идут подрядПорядок байт не гарантируется, то естьзависит от аппаратуры (big/little endian)Порядок бит в байте также не гарантируется(и его может быть невозможно узнать)Отрицательные числа часто представляютсяв дополнительном коде (n бит):- самый значащий бит (n-1) является знаковым- биты от 0 до n-2 – значения- положительные значения – как обычно- отрицательные значения: 2n - |x|3Типы данных≤ ≤ ≤ ≤sizeof – размер типа (любого объекта типа)int x -> sizeof(x) == sizeof(int)Файл limits.h задает минимальные имаксимальные значения целых типовsizeof(char) == 1sizeof(short)≥ 2sizeof(int) ≥ 2sizeof(long) ≥ 4sizeof(long long)≥ 8Файл inttypes.h задает знаковые ибеззнаковые целые типы фиксированныхразмеров (8, 16, 32, 64 бита)4Типы данныхТип _Bool (C99, значения 0/1, целый беззнаковый)Необходимо включить stdbool.h для объявленийbool, true, falseТип _Complex (C99, float/double/long double)Необходимо включить complex.h для объявленийcomplex, I и т.п.Тип _Imaginary (C99) является необязательным5ПеременныеПеременная = тип + имя + значениеКаждая переменная является объектом программыКлючевые слова (C89 – 32, C99 – C89 + 5) не могутбыть именами переменныхОбъявление переменной:тип список_переменныхМожно задать класс памяти и начальное значениепеременной6Область действия переменнойПеременная может быть объявлена:(1)(2)(3)внутри функции или блока (локальная);в объявлении функции (параметр функции);вне всех функций (глобальная).Область действия (видимости)локальной переменной – блок, в котором она объявленаглобальной переменной – программный файл, начинаясо строки объявленияВ одной области действия нельзя объявлять болееодной переменной с одним и тем же именем7Область действия переменной и классы памяти#include <stdio.h>int count;/* глобальная переменная */static int mult = 0;/* статическая переменная */int sum (int x, int y){count++;return (x + y) * (++mult);}void func (void){int count;/* автоматическая переменная */count = count - 2;}int main (void){register int s = 0;/* регистровая переменная */count = 0;s += sum (5, 7);s += sum (9, 4);func ();printf ("Сумма равна %d, вызвали функцию %d раз\n", s, count);return 0;}8Инициализация переменнойПри объявлении переменной:int x = 42;автоматические переменные инициализируются каждыйраз при входе в соответствующий блок;если нет инициализации, значение соответствующейпеременной не определено!глобальные и статические инициализируются толькоодин раз в начале работы программы;если нет инициализации, они обнуляются компиляторомвнешние переменные инициализируются только в томфайле, в котором они определяютсяпри инициализации переменной типа с квалификаторомconst она является константой и не может изменятьсвое значение9ЛитералыЛитералы задают константу (фиксированное значение)символьные константы 'c', L'%', '\0x4f', '\040'тип символьной константы – int!целые константы 100, -34l, 1000U, 999lluконстанты с плавающей точкой 11.123F, 4.56e-4f,1.0, -11.123, 3.1415926l, -6.626068e−34Lтип вещественной константы без суффикса – double!шестнадцатеричные константы 0x80(128)восьмеричные константы 012(10)строковые константы "a", "Hello, World!",L"Unicode string"специальные символьные константы \n, \t, \b10Операции над целочисленными данными АрифметическиеОдноместные:изменение знака, или «одноместный минус» (–),одноместный плюс (+).Двухместные:сложение (+), вычитание (–), умножение (*),деление нацело (/), остаток от деления нацело (%).(a/b) * b + (a%b) == a Отношения (результат 0/1 типа int)больше (>), больше или равно (>=),меньше (<), меньше или равно (<=) Сравнения (результат 0/1 типа int)равно (==), не равно (!=) Логическиеотрицание (!), конъюнкция (&&), дизъюнкция (||)ложное значение – 0, истинное – любое ненулевое“ленивое” вычисление && и ||11Операции присваиванияПобочные эффекты: изменение объекта, вызов функцииlvalue = rvaluelvalue –выражение, указывающее на объектпамятиrvalue –выражениеПримерa = b = c = d = 0;Укороченное присваивание: lvalue op= rvalueгде op - двухместная операцияПример a += 15;Инкремент и декремент (++ и --)префиксные и постфиксныеПоследовательное вычисление: операция запятая (,)Пример a = (b = 5, b + 2);12Точки следованияПобочные эффекты: изменение объекта, вызовфункцииТочка следования (sequence point): момент во времявыполнения программы, в котором все побочныеэффекты предыдущих вычислений закончены,а новых – не начатыпервый операнд &&, ||, ,окончание полного выражениямежду двумя точками следованияизменение значения переменной возможноне более одного раза(a=2) + (a=3)i++ + ++iстарое значение переменной читается толькодля определения новогоa = b++ + b13.