Слайд 1
Язык программирования Си
Строковые литералы, ввод-вывод
Ветвления
Югов Иван Олегович
МОУ Гимназия №10, г.
Тверь
Слайд 2Строковые литералы
Указываются в кавычках:
"Test #2"; "Press any key...".
Пустая строка: "".
В
тексте литерала единичные кавычки недопустимы, а двойные игнорируются:
"2º19'59" в. д." — недопустимо;
"Роман
""Тихий Дон""" → Роман Тихий Дон.
Кавычки нужно экранировать служебным символом «\»:
"Роман \"Тихий Дон\"" → Роман "Тихий Дон".
Слайд 3Строковые литералы
Экранирование — оформление служебных символов так, что они получают буквальное
значение.
Символ «\» экранируется самим собой:
"C:\\bootlog.txt" → C:\bootlog.txt.
Символ «\» также экранирует
конец строки:
"Программирование \
на языке Си"
обозначает строку
Программирование на языке Си.
Слайд 4Строковые литералы
Escape-последовательность (управляющая последовательность, УП) — последовательность символов, имеющая особое значение.
Используется для вставки
служебных символов.
Начинаются с «\»: \", \\, \'.
Даёт возможность указывать символы
по их восьмеричным (oct) и шестнадцатеричным (hex) кодам:
\000, где 000 — трёхзначный oct-код символа;
\x0, где 0 — hex-код символа (возможно несколько цифр).
"\065" → 5; "\x35" → 5; "\x74\145\x73\x74" → test.
В коде символов можно указывать меньше цифр, но нежелательно.
Слайд 5Строковые литералы
Примеры:
После символа \7 можно написать цифру 4: "\0074".
При записи "\74" получится
символ с кодом 64: >.
Hex-запись не органичивается каким-то количеством цифр:
"\x445" — предупреждение о переполнении строковой
константы. Результат не определён.
Слайд 6Строковые литералы
Как записать символ 5 сразу после символа \x44?
"\x44""5"
Слайд 7Строковые литералы
Стандартом также определены:
Слайд 8Строковые литералы
Примеры результата на экране:
"Information\b\bcs" → Informatics;
"A\tB\tC" → A B
C.
Использование символа \n в литерале
"Л. Н. Толстой\n\"Война и мир\""
даёт
на экране переход на следующую строку:
Л. Н. Толстой
"Война и мир".
Перед прочими символами «\» игнорируется:
\h → h, \N → N.
Слайд 9Строковые литералы
Каждый символ занимает в памяти 1 байт.
Любая строковая константа заканчивается
символом с кодом 0 («нуль-терминатором»).
Все функции работы со строками это знают, поэтому не обрабатывают
символы после первого же «нуль-терминатора» в строке.
Явно указывать «нуль-терминатор» не нужно.
Слайд 10Строковые литералы
Символьная константа — в апострофах:
'A'; '$'; '\''; '\077'; '\n'.
Занимает 1 байт:
не может
быть пустым;
«нуль-терминатором» не заканчивается.
Может храниться в переменной типа char:
char P =
'A';
Слайд 11Строковые литералы
Возможна поддержка «широких» (wide) символов и строк — по 2 или 4 байта на символ.
«Широкие» литералы —
с префиксом L:
L'Ы'
L"Lorem ipsum dolor sit amet..."
«Широкий» символ может храниться в переменной int
(short, long):
short P = 'Ф';
Слайд 12Ввод-вывод
Используется заголовочный файл stdio.h.
Для его использования пишем в начале кода:
#include
Основные операции:
ввод: scanf, fscanf, wscanf и т. п.;
вывод: printf, fprintf, wprintf и т. п.
Слайд 13Вывод (printf)
Функция printf выводит на стандартный поток вывода строковое выражение.
Возвращает количество выведенных символов.
printf("Hello world!\n");
Полный формат вызова printf:
printf(Форматная строка, параметры);
Форматная
строка — особая строковая константа, задающая формат вывода остальных параметров.
Слайд 14Вывод (printf)
Пример вывода с форматной строкой:
printf("Время: %d часов %d минут", H,
M);
В форматной строке символ «%» является служебным. Экранируется сам собой:
printf("Загрузка
завершена на 100%%");
Со знака «%» начинаются УП, задающие формат вывода для каждого из остальных параметров:
%ФлагиШиринаТочностьДлинаТип
Слайд 15Вывод (printf)
В форматных УП обязателен только Тип:
Слайд 16Вывод (printf)
Флаги определяют параметры вывода:
Пример: printf("Value %+i at %#X", Val,
Cell);
Флаги можно комбинировать: printf("%#+X", U);
Слайд 17Вывод (printf)
Ширина — число: какой минимум знаков отвести под значение:
printf("%6i", Value);
Либо
символ «*» — количество знаков указано в дополнительном параметре перед основным:
printf("%*i", Length,
Value);
Если число короче, то остаток заполняется пробелами (или нулями, если есть флаг 0):
printf("[%12i]", 125); → [ 125]
Если число длиннее, то оно выводится целиком:
printf("[%3i]", 142857); → [142857]
Слайд 18Вывод (printf)
Точность — точка и следующее за ним число:
для целых (%i,
%d, %u, %o, %x, %X) — минимум знаков под значение, остаток
заполняется нулями; точность 0 означает вывод пустой строки для нулевого значения;
для %f, %e, %E — число десятичных знаков;
для %g, %G — максимальное число значащих цифр;
для %s — только указанное количество первых символов.
Точность по умолчанию — .1. Символы «.*» означают задание точности отдельным параметром.
Примеры:
printf("[%3.2d] [%.2f]", 3, 5.376); → [ 03] [5.38]
printf("[%.0d] [%.*f]", 0, 1, 2.39); → [] [2.4]
Слайд 19Вывод (printf)
Длина — уточняет длину типов:
h — для целых (%i, %d, %u,
%o, %x, %X), тип «короткий» (short);
l — для целых (%i, %d,
%u, %o, %x, %X), тип «длинный» (long);
ll — для целых (%i, %d, %u, %o, %x, %X), тип «очень длинный» (long long);
L — для вещественных (%f, %e, %E, %g, %G), тип «длинный» (long double).
Слайд 20Вывод (printf)
Пример:
char A = -1; unsigned char B = 1;
short
C = -2; unsigned short D = 2;
long E =
-3; unsigned long F = 3;
long long G = -4; unsigned long long H = 4;
double I = 5.0; long double J = 6.0;
char K = 'a';
printf("%d %u %hd %hu %li %lu %lli %llu %f %Lf \
%c %s", A, B, C, D, E, F, G, H, I, J, K, "!!!");
Вывод на экран:
-1 1 -2 2 -3 3 -4 4 5.000000 6.000000 a !!!
Слайд 21Вывод (printf)
Пример:
printf("%+07.*lF\n", 2, 3.14159265359);
printf("%.4s\n", "Computer");
printf("%c%c%c\n", 65, 66, 67);
printf("%f %f\n", 0.0
/ 0.0, 5.0 / 0.0);
Вывод на экран:
+003.14
Comp
ABC
-nan inf
Слайд 22Ввод (scanf)
Полный формат вызова scanf:
scanf(Форматная строка, параметры);
Возвращает количество успешно считанных
величин.
Форматная строка — как у printf.
В УП указывается тип. Можно указать
ширину (максимальное количество знаков для считывания) и длину значения.
Остальные параметры — соответствующее количество адресов (переменных), в которые будут считаны данные.
Слайд 23Ввод (scanf)
Унарная операция & — взятие адреса.
Получает адрес, начиная с которого, в
памяти хранится переменная: &A, &Result.
scanf("%Lf %Lf %Lf", &x, &y, &z);
Форматная
строка может содержать другие символы кроме УП. Тогда необходимо водить и их:
scanf("R%i", &N);
(ожидается ввод, например, R12, R-46…)
Исключение — пробелы, переводы строк, табуляции.
Слайд 24Ветвления
Синтаксис ветвления:
if(условие)
команда1;
else
команда2;
Вычисляет значение условия.
Если условие истинно (ненулевое), тогда выполняется команда 1,
иначе — команда 2.
Слайд 25Ветвления
Раздел else может отсутствовать.
Можно указать несколько команд — в {}:
if(условие)
{
командаA1; командаA2; командаA3;...
}
else
{
командаB1; командаB2; командаB3;...}
Точка с запятой после команды обязательна, после операторных скобок — нет.
Слайд 26Ветвления
Пример:
if(A == B || B == C || A ==
C)
if(A == B && B == C)
printf("Треугольник равносторонний\n");
else
printf("Треугольник равнобедренный\n");
else
printf("Треугольник
общего вида\n");