- •«Утверждаю»
- •Учебно-методический комплекс
- •Астана График выполнения и сдачи заданий по дисциплине
- •Карта учебно-методической обеспеченности дисциплины Учебники, учебные пособия
- •Конспект лекционных занятий
- •Тема 1. Введение в программирование на Си. Структура программы. Директивы препроцессора. Типы данных.
- •Основные операции в языке Си.
- •Преобразование типов
- •Тема 2. Управляющие структуры. Выбор вариантов. Структура выбора If, If – Else, логические операции, операция условия, множественный выбор.
- •Тема 3. Управляющие структуры. Структуры повторения While, do – While, For. Управляющие операторы break и continue.
- •Тема 4. Массивы. Разработка программ с использованием одномерных и двумерных массивов.
- •Тема 5. Функции в Си. Создание и использование функций.
- •Тема 6. Классы памяти и разработка программ.
- •Тема 7. Указатели в Си.
- •Тема 8. Использование указателей при обработке одномерных и двумерных массивов.
- •Тема 9. Символы и строки в Си.
- •Тема 10. Функции операции над строками.
- •Функции сравнения из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 6.
- •Функции поиска из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 7.
- •Другие функции из библиотеки обработки строк. В таблице 8 приведены прототипы и краткое описание остальных функций из библиотеки обработки строк.
- •Ниже приведены примеры программы, использующих функции работы со троками.
- •Тема 11. Структуры данных в Си.
- •Тема 12. Динамические структуры данных.
- •Тема 13. Работа с файлами в Си.
- •Тема 14. Графика в Си.
- •Тема 15. Объектно-ориентированное программирование.
- •Методические рекомендации по выполнению лабораторных заданий
- •Лабораторная работа № 3. Использование операторов цикла при решении задач.
- •Лабораторная работа №4. Разработка программ с использованием одномерных массивов.
- •Лабораторная работа №5. Разработка программ с использованием двумерных массивов.
- •Лабораторная работа № 6. Программирование задач с использованием нескольких функций на языке Си.
- •Лабораторная работа № 8. Программирование задач обработки структур данных.
- •Лабораторная работа № 9. Разработка программ с использованием файловых переменных.
- •Лабораторная работа № 10. Разработка программ с использованием графических функций языка Си.
- •Содержание отчета по выполнению лабораторной работы
- •1 Задание
- •Тема 1. Запись констант, стандартных функций, выражений, операторов присваивания. Запись программ линейных структур алгоритмов.
- •Тема 2. Алгоритмическое описание, запись программ линейных, разветвляющихся.
- •Тема 3. Алгоритмическое описание, запись программ циклических структур алгоритмов.
- •Тема 4. Алгоритмическое описание, составление программ обработки одномерного массива.
- •Тема 5. Алгоритмическое описание, составление программ обработки двумерного массива.
- •Тема 6-7. Составление программ решения задач с использованием функции.
- •Рекомендуемая литература:
- •Тема 8-9. Составление программ решения задач обработки массивов с использованием указателей.
- •Тема 10-11. Программирование задач обработки символьных и стрковых данных.
- •Рекомендуемая литература.
- •Тема 12. Методы сортировки.
- •Тема 13. Составление программ решения задач с использованием структур данных.
- •Тема 14. Составление программ решения задач с использованием файла произвольного доступа.
- •Рекомендуемая литература.
- •Тема 15. Алгоритмизация графических построений.
- •Варианты заданий:
- •Сведения
- •Перечень экзаменационных вопросов по пройденному курсу
- •Глоссарий
Тема 9. Символы и строки в Си.
Объявление строки символов. Имеется несколько способов определения строк. К основным способам относятся использование строковых констант, массивов типа char и массивов, состоящих из символьных строк. Строковая константа заключается в двойные кавычки. Символы, заключенные в кавычки, и завершающий символ ‘\0’ записываются в последовательные ячейки памяти. Компилятор подсчитывает количество символов для определения размера памяти при запоминании (размещении) строки. Строковые константы можно определять при помощи директивы #define. Если в строке нужно использовать символ двойной кавычки, то перед этим символом записывается символ обратной дробной черты. Например:
printf (“\” Сведения о сессии”\n”);
Строковая константа является указателем на место в памяти, где записана строка. При определении массива символьных строк необходимо сообщать компилятору требуемый размер памяти, для установления требуемого размера памяти массив можно инициализировать при помощи строковой константы.(используются статические и внешние массивы)
char c[ ]=”Определение максимального балла”; (внешний массив)
Как и в случае обычных массивов имя c является указателем на первый элемент массива:
c==&c[0]; *c==’0’, и *(c+1)==c[1]==’n’;
Используем указатель для создания строки. Например:
char *c1=”\n ввод баллов”;
Это почти то же самое, что и
static char c1[ ]=”\n ввод баллов”;
Оба описания говорят об одном: с1 является указателем строки. Можно явно задать размер памяти. Во внешнем описании можно записать:
char c[35]=”определение максимального балла”; вместо
char c[ ]=”определение максимального балла”;
Число элементов на один символ больше, чем длина строки (включая нуль-символ). Как и в других статических или внешних массивах, любые использованные элементы автоматически инициализируются нулем (который в символьном виде является нуль-символом, а не символом цифры нуль).
Массивы символьных строк. Рассмотрим массив символьных строк, каждая строка массива представляет собой символьный массив. Приведем описание статического массива в следующем виде:
static char *m[4]={“регистр”,”ячейка”,”указатель”,”элемент”};
Массив *m[4]является массивом, состоящим из 4 указателей на символьные строки. Итак, т.к. символьные строки являются массивами, то имеется в рассмотрении 4 указателя на эти массивы. Первым указателем является m[0], он ссылается на первую строку. Второй указатель m[1] ссылается на вторую строку. При этом каждый указатель, в частности, ссылается на первый символ своей строки:
*m[0]==’р’; *m[1]==’я’; *m[2]==’у’; *m[3]==’э’;
инициализация выполняется по правилам, определенным для массивов. Тексты в кавычках эквивалентны скобочной записи:
{{…},{…},…,{…}};
Описывая размеры строк можно задавать размер строк символов, причем длины строк в данном описании будут одинаковыми:
static char m[4][10];
неиспользованные (лишние) элементы строки статического (внешнего) массива инициализируются символом “\0” (нуль-символом).
Для того, чтобы не было лишних элементов (т.е. экономнее тратится память) можно использовать следующее описание:
static char *[4];
Здесь длина каждой строки определяется конкретной строкой, которая инициализирует соответствующую строку массива.
Библиотека обработки символов. Библиотека обработки символов включает в себя несколько функций, выполняющих ряд полезных проверок и операций с символьными данными. Каждая функция получает в качестве аргумента символ – представляемый типом int – или индикатор EOF (конец файла). Для работы с функциями библиотеки обработки символов надо подключить заголовочный файл <ctype.h>. В таблице 2 приведен перечень функций библиотеки обработки символов.
Таблица 2 – Функции библиотеки обработки символов
Прототип |
Описание функции |
int isdijit (int c) |
Возвращает значение true, если с является цифрой, и 0 (false) в других случаях. |
int isalpha (int c) |
Возвращает значение true, если с является буквой, и 0 в других случаях. |
int isalnum (int c) |
Возвращает значение true, если с является цифрой или буквой, и 0 в других случаях. |
int isxdijit (int c) |
Возвращает значение true, если с является одним из символов шестнадцатеричного формата, и 0 в других случаях. |
int islower (int c) |
Возвращает значение true, если с является буквой нижнего регистра, и 0 в других случаях. |
int isupper (int c) |
Возвращает значение true, если с является буквой верхнего регистра, и 0 в других случаях. |
int tolower (int c) |
Если с является буквой верхнего регистра, то tolower возвращает с как букву нижнего регистра. В других случаях tolower возвращает аргумент без изменений. |
int toupper (int c) |
Если с является буквой нижнего регистра, то toupper возвращает с как букву верхнего регистра. В других случаях toupper возвращает аргумент без изменений. |
int isspace (int c) |
Возвращает значение true, если с является пробельным символом – пробел (' '), новая страница (‘\f’), новая строка (‘\n’), возврат каретки (‘\r’), горизонтальная табуляция (‘\t’) или вертикальная табуляция (‘\v’) – и 0 в других случаях. |
int iscntrl (int c) |
Возвращает значение true, если с является управляющим символом, и 0 в других случаях. |
int ispunct (int c) |
Возвращает значение true, если с является отображаемым при печати символом, но не относится к пробельным символам, цифрам или буквам, и 0 в других случаях. |
int isprint (int c) |
Возвращает значение true, если с является отображаемым при печати символом, включая символ пробела (' '), и 0 в других случаях. |
int isgraph (int c) |
Возвращает значение true, если с является отображаемым при печати символом, исключая символ пробела (' '), и 0 в других случаях. |
Функции преобразования строк. Для работы с функциями преобразования строк необходимо подключить заголовочный файл <stdlib.h>. Эти функции преобразуют строки цифр в целые значения и значения с плавающей точкой. В таблице 3 приведен перечень функций преобразования строк.
Таблица 3 – Функции преобразования строк
Прототип |
Описание функции |
double atof (const char *nPtr) |
Преобразует строку nPtr в тип double. |
int atoi (const char *nPtr) |
Преобразует строку nPtr в тип int. |
long atol (const char *nPtr) |
Преобразует строку nPtr в тип long int. |
double strtod (const char *nPtr, char **endPtr) |
Преобразует строку nPtr в тип double. |
long strtol (const char *nPtr, char **endPtr, int base) |
Преобразует строку nPtr в тип long. |
unsigned long strtoul (const char *nPtr, char **endPtr, int base) |
Преобразует строку nPtr в тип unsigned long. |
Функции стандартной библиотеки ввода/вывода. Стандартная библиотека ввода/вывода <stdio.h> также содержит несколько функций, которые предназначены для работы с символьными и строковыми данными. В таблице 4 приведен перечень функций ввода/вывода символов и строк из стандартной библиотеки ввода/вывода.
Таблица 4 – Символьные и строковые функции стандартной библиотеки ввода/вывода
Прототип |
Описание функции |
int getchar (void) |
Вводит следующий символ со стандартного устройства ввода и возвращает его в формате целого. |
char *gets (char *s) |
Вводит символы со стандартного устройства ввода в массив s до тех пор, пока не встретит символ новой строки или индикатор конца файла. После этого к массиву добавляется ограничивающий символ NULL. |
int putchar (int c) |
Печать символа, хранящегося в с. |
int puts (const char *s) |
Печать строки s с последующим символом новая строка. |
Прототип |
Описание функции |
int sprintf (char *s, const char *format, …) |
Эквивалент функции printf за исключением того, что результат вывода запоминается в массиве s, а не отображается на экране. |
int sscanf (char *s, const char *format, …) |
Эквивалент функции scanf за исключением того, что ввод осуществляется из массива s, а не с клавиатуры. |
Основная литература: 1осн[325-355], 2осн[371-405]
Дополнительная литература: 10доп[46-51], 11доп[13-16]
Контрольные вопросы:
1. Назовите различные способы определения строки?
2. Какие функции содержит стандартная библиотека ввода/вывода <stdio.h>?
3. Какой заголовочный файл необходимо подключить для работы с библиотекой преобразования строк?
4. Какой заголовочный файл необходимо подключить для работы с библиотекой обработки символов?
5. Какие функции используются для изменения регистров символа?