- •Передачу параметров в функцию по значению, а не по ссылке (при этом передача по ссылке эмулируется с помощью указателей);
- •Области действия имён; (область видимости переменной).
- •Достоинства:
- •Представление целых чисел в эвм
- •Основные типы данных, операции над ними.
- •Операции
- •Преобразование типов
- •Особенности операций для вещественных чисел
- •3.1. Операторы и блоки.
- •3.2. Оператор if – else
- •3.3. Конструкция else-if.
- •3.4. Оператор switch
- •3.5. Циклы while и for
- •3.6. Цикл do-while
- •3.7. Операторы break и continue
- •3.8. Оператор goto и метки
- •3.9. Оператор return
- •Инвариант
- •Указатели
- •Массивы
- •Связь между указателями и массивами
- •Представление в эвм
- •Создание указателя на массив
- •Инициализация массивов
- •Операции над указателями
- •Замечание! 2 указателя нельзя суммировать, но можно прибавлять константу. Сравнивать допустимо только с указателями того же типа или с null
- •Метод барьера в линейном поиске
- •Метод барьера при быстрой сортировке массива
- •Сортировка методом вставки. В отсортированной части массива последний элемент – барьер.
- •Процедуры
- •Локальные и глобальные переменные
- •Локальные переменные
- •Глобальные переменные
- •Средний и наихудший случай
- •Дополнительно (то же самое)
- •Анализ эффективности алгоритмов не должен зависеть от:
- •Временная сложность алгоритма
- •Некоторые свойства временной сложности алгоритма (функции f(n) )
- •Характеристики рекурсии
- •Виды рекурсии
- •Когда не нужно применять рекурсию
- •Применение эвристик.
- •Метод ветвей и границ (доп. Из Wikipedia)
- •Алгоритм Неймана.
- •Линейный конгруэнтный метод
- •Выбор параметров, выбор модуля и множителя.
- •Сдвиг на несколько символов: Если не совпадает , то сдвигаем образ вправо до последнего его стоп-символа. Если «стоп-символа» вообще нет в образе, то образ смещается за этот символ.
- •Вопросы на экзамен по информатике:
- •Перевести отрицательное целое число (он любое может назвать) в дополнительный код.
- •Есть ли смысл применять метод барьера в поиске подстроки в строке?
- •Задачи на экзамене:
- •Задача о Ханойских башнях
- •Бинарный поиск элемента в массиве
- •Сумма цифр в числе
- •Число различных элементов в символьном массиве
- •Сгенерировать все перестановки в целочисленном массиве (Билет 1).
- •Функция, возвращающая I и j такие, чтобы сумма эл-тов в I-ой строке равнялась сумме в j-ом столбце.
- •Есть одномерный массив целых чисел и нужно построить функцию, получающую на вход вещественное число X и возвращающую индекс элемента, который ближе всего к этому числу.
- •Функция strcpy (char *s1, char *s2) , билет 12.
- •Реализация strcat(); Билет 7.
- •Билет 5. Функция, выдаёт частное и остаток от деления X на y, нельзя пользоваться / и % .
- •Метод генерации случайной перестановки ( Тасование Фишера-Йетса).(не ок)
Операции
Арифметические операции:
+ , -, *, /, % (остаток от деления, неприменима к float или double).
Операции отношения:
{>, >=, <, <= }, после них по приоритету
{== , !=} – операции сравнения.
Имеют более низкий приоритет в сравнении с арифметическими операциями.
Логические операции
&& - амперсанд , логическое «И» (Так же существует & - побитовое «И»).
|| - логическое «ИЛИ», дизъюнкция. (Существует побитовое «ИЛИ», |)
Приоритет && выше, чем ||, но обе имеют приоритет ниже, чем операции сравнения и отношения.
! – отрицание , превращает ненулевой операнд в 0. // if (!valid) = if (valid ==0)
Исключающее «ИЛИ» - ^(XOR) – истинно, только если всего 1 из аргументов 1.
Поразрядные операции
Их можно применять к переменным, имеющим типы int, char, а также их вариантам (например, long int). Их нельзя применять к переменным типов float, double, long double. Эти операции задаются следующими символами:
~ (поразрядное отрицание),
<<(сдвиг влево),
>> (сдвиг вправо),
& (поразрядное "И"),
^ (поразрядное исключающее "ИЛИ"),
| (поразрядное "ИЛИ").
Примеры: если a=0000 1111 и b=1000 1000, то
~a = 1111 0000, a << 1 = 0001 1110, (умножение на два) . Сдвиг вправо числа со знаком может привести к заполнению этих битов значением знакового бита (арифметический сдвиг) , а в других системах – нулями (логический сдвиг). a >> 1 = 0000 0111, a & b = 0000 1000, a ^ b = 1000 0111, a | b = 1000 1111.
Условные выражения: выраж1? Выраж2:выраж3
Пример: z= (a>b) ? a : b; // максимальное из чисел a и b.
Операции инкремента и декремента
Они предназначены для увеличения и уменьшения на единицу значения операнда. Операции ++ и -- можно записывать как перед операндом, так и после него. В первом случае (++n или --n) значение операнда (n) изменяется перед его использованием в соответствующем выражении, а во втором (n++ или n--) - после его использования.
Преобразование типов
Если операнды одной операции имеют разные типы, то они преобразуются. (f+i = f)
Использовать float в кач-ве индекса массива нельзя. Помещение более длинного в более короткий тип ведёт потерю информации. Неявные арифметические операции: + или * - более узкий тип расширяется до более широкого. 1. Если один лонг дабл – другой лонг дабл. 2. В противном случае, если 1 лонг ,то другой лонг, 3. Если флоат – флоат, 4. Чар и шор преобр. В инт 5. Если есть лонг,то другой лонг.
Если один ld, то и другой lg.(флоат, дабл)
Особенности операций для вещественных чисел
Вещественные числа в Си могут быть одного из трех типов: с одинарной точностью — float , с двойной точностью – double , и с расширенной точностью – long double.
Для вещественных чисел определены все стандартные арифметические операции сложения (+), вычитания (-), умножения (*), деления (/) и изменения знака (-). В отличие от целых чисел, операция нахождения остатка от деления для вещественных чисел не определена. Аналогично, все битовые операции и сдвиги к вещественным числам неприменимы; они работают только с целыми числами. Примеры операций:
Вещественные числа можно сравнивать на равенство (==), неравенство (!=), больше (>), меньше (<), больше или равно (>=) и меньше или равно (<=).
Если арифметическая операция применяется к двум вещественным числам разных типов, то менее точное число преобразуется в более точное, т.е. float преобразуется в double и double преобразуется в long double . Очевидно, что такое преобразование всегда можно выполнить без потери точности.
Замечание! Если вторым операндом в операции с вещественным числом является целое число, то целое число преобразуется в вещественное представление.
Замечание! Хотя любую целую величину можно представить в виде вещественного числа, при таком преобразовании возможна потеря точности (для больших чисел).
Представление в ЭВМ вещественных чисел
Формат чисел с плавающей запятой базируется на экспоненциальной форме записи, в которой может быть представлено любое число. Так число А может быть представлено в виде:
A = m qn |
2.3 |
где m - мантисса числа; q - основание системы счисления; n - порядок числа.
Для единообразия представления чисел с плавающей запятой используется нормализованная форма, при которой мантисса отвечает условию:
1/n |m| < 1.
Это означает, что мантисса должна быть правильной дробью и иметь после запятой цифру, отличную от нуля.
Преобразуем десятичное число 555,55, записанное в естественной форме, в экспоненциальную форму с нормализованной мантиссой:
555,55 = 0,55555 103 .
Здесь нормализованная мантисса: m = 0,55555, порядок: n = 3.
Число в формате с плавающей запятой занимает в памяти компьютера 4 (число обычной точности) или 8 байтов (число двойной точности). При записи числа с плавающей запятой выделяются разряды для хранения знака мантиссы, знака порядка, порядка и мантиссы.
Диапазон изменения чисел определяется количеством разрядов, отведенных для хранения порядка числа, а точность (количество значащих цифр) определяется количеством разрядов, отведенных для хранения мантиссы.
Определим максимальное число и его точность для формата чисел обычной точности, если для хранения порядка и его знака отводится 8 разрядов, а для хранения мантиссы и ее знака - 24 разряда:
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
знак и порядок |
знак и мантисса |
|||||||||||||||||||||||
Максимальное значение порядка числа составит 11111112 = 12710, и, следовательно, максимальное значение числа составит:
2127 = 1,7014118346046923173168730371588 1038 .
Максимальное значение положительной мантиссы равно:
223 - 1 223 = 2(10 2,3) 10002,3 = 10(3 2,3) 107.
Таким образом максимальное значение чисел обычной точности с учетом возможной точности вычислений составит 1,701411 1038 (количество значащих цифр десятичного числа в данном случае ограничено 7 разрядами).
Самое маленькое двузначное число 10
Самое маленькое трехзначное число 100
...
Самое маленькое k-значное число 10^(k-1)
Возьмем произвольное k-значное число n. Для него выполняется неравенство:
10^(k-1)<= n < 10^k
Берём десятичный логарифм от этого неравенства:
k-1 <= lg(n) < k
Прибавим 1 ко всем частям:
k <= lg(n) +1 < k+1
Т.к. число n произвольное, а k - это его количество цифр, то это соотношение выполняется абсолютно для всех натуральных чисел. Средняя часть неравенства показывает, сколько по минимуму нужно взять цифр, чтобы число гарантированно в них поместилось.
Билет 3. Основные управляющие конструкции в С.
