- •Контрольная работа
- •Введение
- •Раздел 1. Системы счисления.
- •1.1 Основные понятия и определения.
- •1.2 Перевод чисел из одной системы счисления в другую.
- •Перевод правильных дробей из десятичной системы счисления в недесятичную.
- •1.3 Двоичная арифметика.
- •2.2 Особенности сложения чисел в обратном и дополнительном кодах.
- •Раздел 2. Основы машинной арифметики с двоичными числами.
- •2.1 Коды чисел.
- •2.3 Модифицированные обратный и дополнительный коды.
- •Основные составные части ms-dos
- •Файловая система ms-dos
- •Файловая структура логического диска
- •Команды работы с файлами Команда copy
- •Копирование на устройства и с устройств
- •Команда move
- •Команда rename (ren)
- •Команда del (Erase)
- •Команда undelete
- •Команда type
- •Команда print
- •Команды работы с каталогами Команда dir
- •Команда chdir (cd)
- •Команда mkdir (md)
- •Команда rmdir (rd)
- •Команда deltree
- •Команда tree
- •Прочие команды Команда time
- •Команда date
- •Команда prompt
- •Команда path
- •Раздел 4. Язык программирования с. Работа с массивами и строками. Символы, строки, тексты
- •Стандартная библиотека ввода-вывода
- •Работа со строкой
- •Ввод-вывод целых чисел
- •Ввод целого числа
- •Вывод двоичного числа
- •Представление текста
- •Упорядоченные строки
- •Контекстная замена
- •Выделение вложенных фрагментов
- •Форматирование строки
- •Массивы
Раздел 4. Язык программирования с. Работа с массивами и строками. Символы, строки, тексты
Как мы уже знаем, базовый тип данных char понимается двояко: как байт -минимальная адресуемая единица представления данных в компьютере, и как символ текста. Это возможно по той причине, что в архитектуре компьютера (клавиатуре, экране, принтере, обслуживающих их программах -драйверах) в соответствии с общепринятым стандартом установлено соответствие между символами и присвоенными им значениями целой переменной (таблица ASCII кодов). Любое устройство, отображающее символьные данные, при получении любого кода выводит соответствующий ему символ. Аналогично клавиатура (совместно с драйвером) кодирует нажатие любой клавиши с учетом регистровых и управляющих клавиш в соответствующий ей код.
' ' - 0x20, 'B' - 0x42,
'*' - 0x2A, 'Y' - 0x59,
'0' - 0x30, 'Z' - 0x5A,
'1' - 0x31, 'a' - 0x61,
'9' - 0x39, 'b' - 0x62,
'A' - 0x41, 'z' - 0x7A.
Таким образом, символы преобразуются в цифровую форму, доступную для обработки в компьютере. Тип данных char не имеет никаких ограничений на выполнение операций, допустимых для целых переменных: от операций сравнения и присваивания до арифметических операций и операций с отдельными битами. Но за исключением редких случаев знание кодов символов не требуется. Для представления отдельных символов можно пользоваться символьными (литерными) константами, которые представляют собой символ, заключенный в одинарные кавычки (апострофы). Транслятор вместо такой константы всегда подставляет код соответствующего символа, например:
char c;
for (c= 'A'; c <= 'Z'; c++) ...
for (c=0x41; c <=0x5A; c++) ...
Имеется ряд кодов так называемых неотображаемых символов, которым соответствуют определенные действия при вводе-выводе символьных данных. Например, символу с кодом 0x0D (“возврат каретки”) соответствует перевод курсора в начало строки. Для их представления в программе используются символьные константы, начинающиеся с обратной косой черты:
Константа Код Название Действие
\a 0x07 bel Звуковой сигнал
\b 0x08 bs Курсор на одну позицию назад
\f 0x0C ff Переход к началу (перевод формата)
\n 0x0A lf Переход на одну строку вниз(перевод строки)
\r 0x0D cr Возврат на первую позицию строки
\t 0x09 ht Переход к позиции, кратной 8 (табуляция)
\v 0x0B vt Вертикальная табуляция по строкам
.
\\ \' \” \? Представление символов \, ', ", ?
\Onn Символ с восьмеричным кодом nn
\xnn Символ с шестнадцатеричным кодом nn
\0 Символ с кодом 0
Некоторые программы и стандартные функции обработки символов и строк (isdigit,isalpha) используют тот факт, что цифры, прописные и строчные (маленькие и большие) латинские буквы имеют упорядоченные по возрастанию значения кодов:
'0' - '9' 0x30 - 0x39
'A' - 'Z' 0x41 - 0x5A
'a' - 'z' 0x61 - 0x7A
Ниже приводится ряд фрагментов, использующих эти особенности кодирования.
Получить символ десятичной цифры из значения целой переменной, лежащей в диапазоне 0..9:
int n; char c; c = n + '0';
Получить символ шестнадцатеричной цифры из значения целой переменной, лежащей в диапазоне 0..15:
if (n <=9) c = n + '0'; else c = n - 10 + 'A';
Получить значение целой переменной из символа десятичной цифры:
if (c >='0' && c <='9') n = c - '0';
Получить значение целой переменной из шестнадцатеричной цифры:
if (c >='0' && c <='9')
n = c - '0';
else
if (c >='A' && c <='F')
c = c - 'A' + 10;
Преобразовать маленькую латинскую букву в большую:
if (c >='a' && c <='z') c = c - 'a' + 'A';
СТРОКОЙ называется последовательность символов, ограниченная символом с кодом 0, то есть '\0'. Из ее определения видно, что она является объектом переменной размерности. Поскольку в Си допускаются переменные только фиксированной размерности, то единственным допустимым способом представления строки является массив символов. Здесь сразу проясним суть взаимоотношений между строкой и массивом символов:
строка хранится в массиве символов, массив символов может быть инициализирован строкой, а может быть заполнен программно:
char A[20] = { 'С','т','р','о','к','а','\0' };
int i;
char B[80];
for (i=0; i<20; i++) B[i] = 'A';
B[20] = '\0';
строка представляет собой последовательность, ограниченную символом '\0', поэтому работать с ней можно, просматривая ее от начала до конца, пока не встретится символ '\0':
for (i=0; B[i] !='\0'; i++)...
соответствие размерности массива и длины строки транслятором не контролируется, за это несет ответственность программа (программист, ее написавший):
char C[20];
// следить за переполнением массива
// и ограничить строку его размерностью
for (i=0; i<19 && B[i]!='\0'; i++)
C[i] = B[i];
C[i]='\0';
СТРОКОВОЙ КОНСТАНТОЙ называется последовательность символов, заключенная в двойные кавычки. Допустимо использование неотображаемых символов. Строковая константа автоматически дополняется символом '\0', ею можно инициализироваться массив, в том числе такой, размерность которого определяется размерностью строки:
char A[80] = "123456\r\n";
char B[] = "aaaaa\033bbbb";
..."Это строка"...
Непосредственное использование строковых констант в выражениях связано с указателями и поэтому рассматривается в 4.1.
