Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольная работа информатика зИФСТ.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
709 Кб
Скачать
☆

Раздел 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.