 
        
        - •Предисловие
- •Знакомство с языком C
- •Структура программы
- •Пример простой программы
- •Более сложный пример
- •Контрольные вопросы
- •Основные понятия, объявление переменных, типы данных
- •Объявление переменных
- •Примеры описаний переменных:
- •Основные типы данных
- •Производные типы.
- •Контрольные вопросы
- •Ввод/вывод с помощью функций printf() и scanf().
- •Модификаторы спецификаций преобразования используемые в функции printf()
- •Применение функции scanf()
- •Контрольные вопросы
- •Операции
- •Простейшие арифметические операции
- •Операция присваивания
- •Использование в выражениях операндов разных типов
- •Операции преобразования типов
- •Дополнительные арифметические операции
- •Дополнительные операции присваивания
- •Операции отношения
- •Логические операции
- •Приоритеты операций
- •Таблица 3. Таблица приоритетов рассмотренных выше операций
- •Контрольные вопросы
- •Операторы
- •Оператор-выражение
- •Ветвление
- •Условный оператор
- •Оператор switch
- •Оператор break
- •Циклы
- •Цикл while
- •Цикл do…while
- •Цикл for
- •Другие операторы
- •Оператор continue
- •Оператор goto
- •Оператор вызова функции
- •Контрольные вопросы
- •Обработка числовых последовательностей
- •Последовательная обработка
- •Обработка числовых последовательностей
- •Примеры
- •Контрольные вопросы
- •Последовательная обработка символьных данных
- •Символьные данные
- •Последовательная обработка символов
- •Функции getchar( ) и putchar( )
- •Контрольные вопросы
- •Обработка массивов
- •Массивы
- •Объявление массива
- •Использование и обработка массивов
- •Примеры
- •Контрольные вопросы
- •Указатели и динамические массивы
- •Указатели
- •Динамическое выделение памяти
- •Статические и динамические массивы
- •Контрольные вопросы
- •Подпрограммы
- •Описание подпрограмм
- •Параметры подпрограмм
- •Область действия переменных
- •Примеры
- •Контрольные вопросы
- •Рекурсивные функции
- •Понятие рекурсивной функции
- •Контрольные вопросы
- •Символьные строки и функции обработки строк
- •Посимвольная обработка строк
- •Пример программы
- •Контрольные вопросы
- •Структуры
- •Тип данных структура
- •Контрольные вопросы
- •Работа с файлами
- •Примеры
- •Контрольные вопросы
- •Массивы и функции как параметры
- •Указатели на функции
- •Массивы и указатели
- •Указатели и двумерные массивы
- •Пример
- •Технологии программирования
- •Структурное программирование
- •Модульное программирование
- •Объектно-ориентированное программирование
- •Компонентное программирование
- •Структурная декомпозиция задачи и разработка алгоритмов и программ методами сверху вниз и снизу вверх
- •Контрольные вопросы
- •Модульное программирование
- •Работа с графикой на языке C и модуль graphics.h
- •Типы видео мониторов и их режимы
- •Инициализация графики
- •Система координат
- •Основные графические функции
- •Функции рисования
- •Функции изменения параметров рисования
- •Шаблоны линий
- •Шаблоны закраски
- •Задание на расчетно-графическую работу
- •Порядок выполнения работы
- •Задание
- •Задание для вариантов 1-11
- •Задание для вариантов 12-20
- •Задание для вариантов 21-40
- •Пример исходных данных для вариантов 12-16
- •Задание для вариантов 41-60
- •Варианты индивидуальных заданий
- •Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Вариант 11
- •Вариант 12
- •Вариант 13
- •Вариант 14
- •Вариант 15
- •Вариант 16
- •Вариант 17
- •Вариант 18
- •Вариант 19
- •Вариант 20
- •Вариант 21
- •Вариант 22
- •Вариант 23
- •Вариант 24
- •Вариант 25
- •Вариант 26
- •Вариант 27
- •Вариант 28
- •Вариант 29
- •Вариант 30
- •Вариант 31
- •Вариант 32
- •Вариант33
- •Вариант 34
- •Вариант 35
- •Вариант 36
- •Вариант 37
- •Вариант 38
- •Вариант 39
- •Вариант 40
- •Вариант 41
- •Вариант 42
- •Вариант 43
- •Вариант 44
- •Вариант 45
- •Вариант 46
- •Вариант 47
- •Вариант 48
- •Вариант 49
- •Вариант 50
- •Вариант 51
- •Вариант 52
- •Вариант 53
- •Вариант 54
- •Вариант 55
- •Вариант 56
- •Вариант 57
- •Вариант 58
- •Вариант 59
- •Вариант 60
- •Задания на курсовую работу
- •Требования к курсовой работе
- •Этапы разработки программ
- •Содержание отчета по курсовой работе
- •Задания к курсовой работе
- •Литература
- •Функции консольного ввода/вывода
- •Функции обработки строк
- •Функции преобразования данных
Последовательная обработка символьных данных
Символьные данные
Значением символьного типа является одиночный символ. В языке C символьные данные рассматриваются как разновидность целых чисел. Числовым значением символа является его код.
Вязыке C над символами разрешаются не только операции присваивания и сравнения, но и арифметические операции.
Вмеждународном стандарте кодов ASCII каждый символ занимает один байт, этого достаточно для кодирования 256 различных кодов. Есть кодировки, в которых символ занимает два байта, например, международный код UNICODE.
Примеры символьных констант:
| ‘*’ | 
 | ‘a’ | ‘5’ | ‘n’ | 
| Специальные (управляющие) символьные константы: | ||||
| '\n' | 
 | 
 | новая строка (new line), | |
| '\t' | 
 | '\v' | табуляция горизонтальная, вертикальная, | |
| '\b' | 
 | 
 | возврат на шаг (backspace), | |
| '\\' | - | \ (обратный слэш) | 
 | |
| '\'' | - | ' (апостроф) | 
 | 
 | 
| '\"' - " (кавычка), | 
 | |||
| '\0' | 
 | нуль-символ (байт с нулевым кодом). | ||
При объявлении символьных переменных обычно используется тип char, но можно использовать и тип int. Например:
| char | s, sim = ‘Z’, c; | 
| int | b = ‘a’; | 
Кодировка цифровых символов (символ и его числовой код):
| '0' = | = | 48 | 
| '1' = '0' + 1 | 49 | |
| '2' = '0' + 2 | = | 50 | 
61
. . .
'9' = '0' + 9 = 57
Отсюда соотношения:
Код цифры = '0' + Значение цифры Значение цифры = Код цифры - '0'
Условие "значение символьной переменой s является цифрой" на языке C запишется так:
s >= '0' && s <= '9‘
Коды заглавных латинских букв возрастают по алфавиту:
| 'A' | = 65, 'B' | = | 66, 'С' = 67, … | 
| 'A' | < 'B' < ... | < | 'Z' . | 
Коды строчных латинских букв также составляют возрастающую последовательность: 'a' = 97, 'b' = 98, 'с' = 99, …
'a' < 'b' < ... < 'z'.
Условие "значение символьной переменой s является латинской буквой" можно записать так:
(s>='A' && s<='Z') || (s>='a' && s<='z')
Русские буквы (символы кириллицы) имеются не во всех кодировках и не всегда кодируются по алфавиту.
Последовательная обработка символов
Если для решения задачи достаточно просмотреть исходный текст один раз, то обычно текст вводится и обрабатывается посимвольно и не хранится целиком в памяти (в виде массива). В программе используется переменная типа char, которой поочередно присваиваются значения символов исходного текста. Ввод и обработка символов происходит до тех пор, пока не встретится признак конца текста или количество введенных символов не достигнет заданной длины текста.
Функции getchar( ) и putchar( )
Функции getchar() и putchar() служат соответственно для ввода и вывода одного символа. Для посимвольного ввода/вывода текстов лучше использовать эти функции, нежели scanf() и printf().
62
Функция getchar() не имеет аpгументов. Она читает очередной введенный символ и возвpащает его код выполняемой пpогpамме.
Пpимеp вызова функции getchar():
char ch;
ch = getchar();
Как и функция scanf(), функция getchar() читает данные из буфера ввода-вывода. В буфер данные помещаются построчно. То есть пока не будет введена вся строка, функция getchar() не начнет чтение символа.
Функция putchar() имеет один аpгумент - это символ, который требуется вывести на экран.
Пpимеpы вызова функции putchar():
| putchar (ch); | /* ch - переменная | типа char */ | |
| putchar | ('S'); | /* перевод строки | */ | 
| putchar | ('\n'); | ||
Определения функций getchar() и putchar() содержатся в файле stdio.h.
Задача 1. Вывести коды введенных с клавиатуры символов. Последовательность символов завершается нажатием клавиши Enter.
/* Коды символов */ #include <stdio.h> #include <conio.h> main()
{char sim; /* очередной символ */ printf("\n Введите строку символов\n"); while((sim=getchar()) != '\n')
printf("%c = %d, ", sim, sim);
| printf("\nНажмите | любую клавишу"); | |
| getch(); | /* чтение | кода нажатой клавиши без отображения | 
| символа | 
 | 
 | 
на экране*/
return 0;
}
Оператор while в программе можно записать иначе – с использованием функции putchar():
while((sim=getchar()) != '\n') { putchar(sim);
printf(" = %d, ", sim);
}
63
Пример результата выполнения программы:
Введите строку символов
Kazan 2009
K = 82, a = 97, z = 122, a = 97, n = 110, = 32, 2 = 50, 0 = 48, 0 = 48, 9 = 57,
Нажмите любую клавишу
Задача 2. Дан текст произвольной длины, оканчивающийся точкой. Проверить, есть ли в тексте сочетания "ВА".
Программа:
| #include | <stdio.h> | 
 | 
 | 
 | 
| main() | 
 | 
 | 
 | 
 | 
| { | s; | /* текущий символ текста */ | 
 | |
| char | 
 | |||
| char | prs; | /* предыдущий символ | */ | 
 | 
| short | net=1; | /* признак, имеется | ли "ВА" в тексте */ | |
| 
 | 
 | /* net=1, если "ВА" | нет | */ | 
| 
 | 
 | /* net=0, если "ВА" | есть | */ | 
printf ("\nВведите текст.\n");
| s=getchar(); | /* чтение первого символа */ | |
| if (s!='.') | 
 | |
| { do | prs=s; s=getchar(); | |
| { | ||
| } | if | (prs=='В' && s=='А') net=0; | 
| 
 | 
 | |
| while (s!='.'); | ||
| } | printf ("В тексте нет 'ВА'.\n"); | |
| if (net) | ||
else printf ("В тексте есть 'ВА'.\n"); return 0;
}
Тесты для проверки программы
| Номер теста | Исходный текст | Ожидаемый результат | 
| 
 | 
 | 
 | 
| 1 | МОСКВА, БЕРЛИН, ВАРНА . | В тексте есть 'ВА'. | 
| 2 | Школа . | В тексте нет 'ВА'. | 
| 3 | . | В тексте нет 'ВА'. | 
| 
 | 
 | 
 | 
Контрольные вопросы
1.Как объявить символьные переменные? Запишите примеры.
2.Как выполнить ввод и вывод символьной переменной t?
3.Запишите условный оператор для проверки, является ли символ s
строчной латинской буквой, и вывода соответствующего сообщения.
64
4. Как проверить, является ли символ s цифрой?
5. Определите результат выполнения следующего фрагмента программы:
char b;
for (b = 'A'; b <= 'Z'; b++) printf ("%c - %d\n", b, b);
65
