Содержание

Слайд 2

План занятия

План занятия

Слайд 3

Ввод/вывод

В классическом стандарте ANSI C для ввода и вывода использовались функции библиотеки

Ввод/вывод В классическом стандарте ANSI C для ввода и вывода использовались функции
.
Для вывода используется функция printf следующего вида:
Управляющая строка обязательно должна присутствовать, а вот списка аргументов может и не быть. В списке аргументов может быть любое количество элементов.
Управляющая строка содержит объекты трех типов: обычные символы, которые просто выводятся на экран консоли, Escape-последовательности (управляющие символы), и спецификации преобразования.
Каждая спецификация преобразования начинается со знака % и заканчивается некоторым символом формата (см. таблицу). Между ними могут встречаться (или не встречаться) знаки, уточняющие формат.

Слайд 4

Ввод/вывод

Ввод/вывод

Слайд 5

Ввод/вывод

Значения аргументов, указанных далее в функции в списке аргументов, при выводе подставляются

Ввод/вывод Значения аргументов, указанных далее в функции в списке аргументов, при выводе
на место соответствующих спецификаций преобразования в порядке их следовании. Английское название спецификации преобразования «place holder», т.е. «держатель места», поскольку они как бы «бронируют» место для размещения очередного выводимого элемента в строке.

Слайд 6

Ввод/вывод

Чаще всего для вывода целого числа используется спецификация %d (десятичное целое). Между

Ввод/вывод Чаще всего для вывода целого числа используется спецификация %d (десятичное целое).
знаком % и символом d могут находиться:
знак – , который указывает, что для выводимого параметра должно быть выравнивание влево в своем поле (по умолчанию выравнивание вправо);
число, задающее минимальный размер поля. Если аргумент занимает меньше позиций, чем указывает это число, то свободные позиции заполняются пробелами (справа или слева в зависимости от выравнивания). Если же аргумент фактически должен занимать больше позиций, чем указано этим числом, то под него отводится столько, сколько нужно.

Слайд 7

Ввод/вывод

Для вывода вещественных чисел используется спецификации:
%f - вещественное десятичное число в формате

Ввод/вывод Для вывода вещественных чисел используется спецификации: %f - вещественное десятичное число
с точкой (например, 82.312);
%e - вещественное десятичное число в экспоненциальном (научном) формате
(например, 0.82312E2);
%g - вещественное десятичное число, выбирается наиболее короткий формат %f или %e.
Также можно использовать знак “-“ (выравнивание числа влево) и задавать минимальный размер поля между знаком % и символом формата. Кроме того, для вещественных чисел в спецификации могут быть:
точка, которая отделяет размер поля от количества цифр, которое нужно вывести после десятичной точки;
число после точки – максимальное количество знаков после десятичной точки. Если фактическое число знаков больше, то число округляется. Если меньше – дополняется нулями.
Если указывается минимальный размер поля, то он рассчитывается для всего числа (включая знак и десятичную точку).

общее число
символов

число
символов после запятой

10

6

Слайд 8

Ввод/вывод

Для вывода символов и строк используются следующие спецификаторы:
%c - вывод одного символа.
%s

Ввод/вывод Для вывода символов и строк используются следующие спецификаторы: %c - вывод
- вывод строки.

Слайд 9

Ввод/вывод

В классическом языке С для ввода данных используется функция scanf().
В Visual

Ввод/вывод В классическом языке С для ввода данных используется функция scanf(). В
Studio 2013 и старше (в зависимости от настроек) компилятор может
отказаться работать с этой функцией, и потребовать использовать вместо нее более
безопасную функцию scanf_s. Эта функция имеет дополнительный параметр – размер
буфера (необязательный), который позволяет проконтролировать ввод и избежать изменения области памяти, которая вводимому объекту не принадлежит. Например, при вводе строки эта функция контролирует, чтобы вводимые данные не вышли за пределы памяти, отведенной под эту строку. Для ввода чисел размер буфера можно не указывать. Тогда формат использования функции scanf_s будет такой же, как и у классической функции scanf():
Функция scanf (или scanf_s) должна считать текст из консоли, преобразовать его в данные нужного типа и разместить их в соответствующие ячейки памяти. Поэтому аргументы этой функции должны быть указателями на соответствующие переменные. Пока можете представлять себе, что указатель – это адрес переменной в памяти. Операция получения указателя на переменную (взятие адреса переменной) обозначается знаком &.

Слайд 10

Ввод/вывод

Ввод/вывод

Слайд 11

Ввод/вывод

В управляющую строку могут также включаться символы табуляции и перехода на новую

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

Слайд 12

Системы счисления

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

Системы счисления В компьютере данные представляются в двоичной системе, а программисты зачастую
шестнадцатеричную систему. Но все эти способы записи чисел относятся к одному виду – к позиционным системам счисления. В них значение цифры зависит от ее положения (разряда) в числе.
Количество различных цифр, которые можно использовать для записи числа, называется ее основанием. Если основание системы счисления n, то имеется всего n цифр от 0 до n-1.
Поэтому в десятичной системе используется 10 цифр: 0,1, 2, … 9. В двоичной системе две цифры: 0 и 1. В шестнадцатеричной – 16 цифр: 0-9, A-F (т.е. A соответствует десятичной 10, B – 11, … F – 15).
Позиции цифр в числе можно мысленно пронумеровать справа налево, начиная с 0. Т.е. крайняя правая позиция имеет номер 0, левее ее – номер 1, еще левее – номер 2, и т.д.
Значение числа получается как сумма произведений цифры на основание системы счисления в степени «номер позиции»:
Число=Сумма(цифра∗основаниепозиция)

Слайд 13

Системы счисления

Примеры.
36710=3*102+6*101+7*100
110112=1*24+1*23+0*22+1*21+1*20=16+8+2+1=2710
1678=1*82+6*81+7*80=64+48+7=11910
2A416=2*162+10*161+4*160=512+160+4=67610

Системы счисления Примеры. 36710=3*102+6*101+7*100 110112=1*24+1*23+0*22+1*21+1*20=16+8+2+1=2710 1678=1*82+6*81+7*80=64+48+7=11910 2A416=2*162+10*161+4*160=512+160+4=67610

Слайд 14

Системы счисления

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

Системы счисления Для перевода из десятичной системы в любую другую нужно выполнять
деление исходного числа на основание той системы счисления, в которую нужно перевести число. При этом важен остаток от деления и частное. Частное делится на основание системы счисления до тех пор, пока не будет получен 0. После этого все остатки нужно выписать в обратном порядке - это и будет число в новой системе счисления.

Перевод - числа 27 из десятичной системы счисления в двоичную. Результат, таким образом, следующий: 2710=110112

27 исходное число

2 основание системы, в которую переводим

Стоп – когда частное равно 0

Собрать остатки в обратном порядке

Слайд 15

Битовые операции

Отрицательное число имеет единицу в старшем бите. Но это еще не

Битовые операции Отрицательное число имеет единицу в старшем бите. Но это еще
все. Отрицательное число хранится в дополнительном коде (и эта единица в знаковом разряде появляется автоматически при переводе в дополнительный код). Чтобы представить число в дополнительном коде, нужно выполнить следующее:
перевести в двоичную систему счисления модуль числа и приписать слева незначащие нули, заполнив нужное число разрядов;
инвертировать биты числа (т.е. заменить 1 на 0, а 0 на 1);
прибавить 1 к полученному числу.

Слайд 16

Битовые операции

Пример. ​​Для размещения в одном байте представить в дополнительном коде число

Битовые операции Пример. ​​Для размещения в одном байте представить в дополнительном коде
-26.
1 Переводим в двоичную систему счисления десятичное число 26.
11010
Дополняем слева незначащими нулями до 8 разрядов (т.к. по условию размещать число будем в одном байте):
00011010
2 Инвертируем биты числа:
11100101
3 Прибавляем единицу. Тут нужно учитывать, что в двоичной системе 1+1=10. Поэтому, если в разряде две единицы, то получаем 0, а единица идет в старший разряд...
11100101
+ 1
11100110
Итог: -26, размещенное в одном байте в виде: 11100110

Слайд 17

Битовые операции

Обратное преобразование
Чтобы из дополнительного кода получить модуль числа, нужно проделать те

Битовые операции Обратное преобразование Чтобы из дополнительного кода получить модуль числа, нужно
же действия: инвертировать и прибавить единицу. Полученное двоичное представление перевести в удобную нам систему счисления.
Например, пусть число в памяти имеет вид: 11100110. После инвертирования получаем: 00011001. Прибавим единицу и получим: 00011010. Переводим в десятичную систему счисления: 21+23+24=2+8+16=26

Слайд 18

Битовые операции

~ (Инверсия)
Все биты аргумента меняются на противоположные (0 –

Битовые операции ~ (Инверсия) Все биты аргумента меняются на противоположные (0 –
на 1, а 1 – на 0).
8910 = 010110012
~8910= 101001102= 16610
& (Битовое И)
Для каждой пары соответствующих битов аргументов выполняется «умножение» по правилам: 1*1=1; 1*0=0; 0*0=0. Таким образом, в результате единица будет только в том разряде, в котором у обоих аргументов стоят единицы.
8910 = 010110012
10110 = 011001012
x&y = 010000012=6510

Слайд 19

Битовые операции

| (Битовое ИЛИ )
Для каждой пары битов аргументов выполняется «сложение»

Битовые операции | (Битовое ИЛИ ) Для каждой пары битов аргументов выполняется
по правилам: 1+1=1; 1+0=1; 0+0=0. Таким образом, в результате единица будет в том разряде, где хотя бы у одного аргумента в этом разряде имеется единица.
8910 = 010110012
10110 = 011001012
x|y = 011111012=12510
^ (Битовое исключающее ИЛИ )
Для каждой пары битов аргументов выполняется «сложение» по правилам: 1+1=0; 1+0=1; 0+0=0. Таким образом, в результате единица будет в том разряде, где только у одного аргумента в этом разряде имеется единица.
8910 = 010110012
10110 = 011001012
x^y = 001111002=6010

Слайд 20

Битовые операции

<< (Сдвиг влево)
Формат: b<

Битовые операции Формат: b 2510 = 000110012 2510
влево на c разрядов. В освободившиеся справа разряды b заносятся нули. Биты, «сдвинутые» за пределы разрядной сетки переменной, пропадают. Сдвиг влево эквивалентен умножению на степень двойки, причем выполняется процессором гораздо быстрее. При этом не учитывается переполнение или потеря значимости. Если операнд c отрицательный или больше длины операнда b в битах, то результат операции сдвига не определен.
2510 = 000110012
2510<<2 = 011001002=10010=25 * 22

Слайд 21

Битовые операции

>> (Сдвиг вправо)
Формат: b>>c При этом осуществляется сдвиг значения b

Битовые операции >> (Сдвиг вправо) Формат: b>>c При этом осуществляется сдвиг значения
вправо на c разрядов. Для заполнения позиций слева используется знаковый бит (ноль для положительных b и единица - для отрицательных b). Биты, «сдвинутые» за пределы разрядной сетки переменной, пропадают. Сдвиг вправо положительных чисел эквивалентен делению на степень двойки, причем выполняется процессором гораздо быстрее.
2510 = 000110012
2510>>3 = 000000112=310=25 / 23
-1410 = 111100102
-1410>>2 = 111111002=-410=-14 / 22

Слайд 22

Битовые операции

Алгоритм проведения битовых операций:
1. Перевести десятичное в двоичное.
2. Дополнить до разряда

Битовые операции Алгоритм проведения битовых операций: 1. Перевести десятичное в двоичное. 2.
нулями.
отрицательное число инвертировать и прибавить единицу.
3. Произвести операцию.
4. В случае если в знаковом разряде 1 - результат инвертировать и прибавить единицу.
5. Перевести в десятичное отрицательное число.

Слайд 23

Битовые операции

Примеры использования битовых операций
1 В программах управления устройствами или при реализации

Битовые операции Примеры использования битовых операций 1 В программах управления устройствами или
сетевых протоколов часто бывает необходимо проверить, установлен ли определенный бит числа (т. е. равен ли он единице).
Для реализации этой цели создают "маску" - специальное число, имеющее единицу только в проверяемом разряде, а остальные разряды – нулевые. Исследуемое число подвергают операции «Битовое И» с маской. Если полученный результат равен 0, то бит не был установлен в исходном числе, а если отличен от нуля – то был.
2 Операция ^ (битовое исключающее ИЛИ) обладает одним важным свойством: если ее дважды применить к одному и тому же объекту, то она возвращает его в исходное состояние. Это свойство можно использовать для шифрования информации по ключу. Например, некто желает передать зашифрованное сообщение. Ко всем символам этого сообщения он применяет операцию ^ с фиксированным числом (ключом). В результате получается набор символов, который нельзя прочитать. Он передается получателю.
Получатель также знает ключ. Получив зашифрованную строку, он снова применяет к ней операцию ^ с ключом, и получает исходное послание.

Слайд 24

Практика

1 Введите значения двух вещественных чисел и вычислите их произведение. Вывод

Практика 1 Введите значения двух вещественных чисел и вычислите их произведение. Вывод
нужно оформить в виде числа с фиксированной точкой, причем в дробной части выводится 3 десятичных знака, используйте для ввода и вывода функции scanf () и printf().
2 Пользователь вводит с клавиатуры денежную сумму в рублях и копейках (рубли и копейки вводятся в разные переменные). Программа должна откорректировать введенную сумму в правильную форму. Например, если пользователь ввел 11 и 150 , то программа должна вывести 12 р. 50 к. Использовать для вывода функцию printf().
3 Программа должна вычислять скорость, с которой бегун пробежал дистанцию. Пользователь вводит длину дистанции в метрах и, через пробел, время в формате минуты:секунды.
Скорость выводится в км/час и должна быть округлена до двух знаков после десятичной точки.
Подсказка: чтобы пропустить символы во входном потоке, добавьте их в строку форматирования функции scanf().
Например, ввод времени в данной задаче может выглядеть так:
scanf("%d:%d",&min,&sec);.

Слайд 25

Практика

4 Переведите в десятичную систему следующие числа:
101012
2578
1BA16
5 Перевидите число (90

Практика 4 Переведите в десятичную систему следующие числа: 101012 2578 1BA16 5
+ ваш номер по списку группы) в двоичную, восьмеричную и шестнадцатеричную систему
Имя файла: Lesson-4.pptx
Количество просмотров: 28
Количество скачиваний: 0