- •«Утверждаю»
- •Учебно-методический комплекс
- •Астана 2010 График выполнения и сдачи заданий по дисциплине
- •Карта учебно-методической обеспеченности дисциплины Учебники, учебные пособия
- •Конспект лекционных занятий
- •Тема 1. Введение в программирование на Си. Структура программы. Директивы препроцессора. Типы данных.
- •Основные операции в языке Си.
- •Преобразование типов
- •Тема 2. Управляющие структуры. Выбор вариантов. Структура выбора If, If – Else, логические операции, операция условия, множественный выбор.
- •Тема 3. Управляющие структуры. Структуры повторения While, do – While, For. Управляющие операторы break и continue.
- •Тема 4. Массивы. Разработка программ с использованием одномерных и двумерных массивов.
- •Тема 5. Функции в Си. Создание и использование функций.
- •Тема 6. Классы памяти и разработка программ.
- •Тема 7. Указатели в Си.
- •Тема 8. Использование указателей при обработке одномерных и двумерных массивов.
- •Тема 9. Символы и строки в Си.
- •Функции сравнения из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 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”);
Строковая константа является указателем на место в памяти, где записана строка. При определении массива символьных строк необходимо сообщать компилятору требуемый размер памяти, для установления требуемого размера памяти массив можно инициализировать при помощи строковой константы.(используются статические и внешние массивы)
charc[ ]=”Определение максимального балла”; (внешний массив)
Как и в случае обычных массивов имя cявляется указателем на первый элемент массива:
c==&c[0]; *c==’0’, и *(c+1)==c[1]==’n’;
Используем указатель для создания строки. Например:
char*c1=”\nввод баллов”;
Это почти то же самое, что и
static char c1[ ]=”\n ввод баллов”;
Оба описания говорят об одном: с1 является указателем строки. Можно явно задать размер памяти. Во внешнем описании можно записать:
charc[35]=”определение максимального балла”; вместо
charc[ ]=”определение максимального балла”;
Число элементов на один символ больше, чем длина строки (включая нуль-символ). Как и в других статических или внешних массивах, любые использованные элементы автоматически инициализируются нулем (который в символьном виде является нуль-символом, а не символом цифры нуль).
Массивы символьных строк. Рассмотрим массив символьных строк, каждая строка массива представляет собой символьный массив. Приведем описание статического массива в следующем виде:
staticchar*m[4]={“регистр”,”ячейка”,”указатель”,”элемент”};
Массив *m[4]является массивом, состоящим из 4 указателей на символьные строки. Итак, т.к. символьные строки являются массивами, то имеется в рассмотрении 4 указателя на эти массивы. Первым указателем являетсяm[0], он ссылается на первую строку. Второй указательm[1] ссылается на вторую строку. При этом каждый указатель, в частности, ссылается на первый символ своей строки:
*m[0]==’р’; *m[1]==’я’; *m[2]==’у’; *m[3]==’э’;
инициализация выполняется по правилам, определенным для массивов. Тексты в кавычках эквивалентны скобочной записи:
{{…},{…},…,{…}};
Описывая размеры строк можно задавать размер строк символов, причем длины строк в данном описании будут одинаковыми:
static char m[4][10];
неиспользованные (лишние) элементы строки статического (внешнего) массива инициализируются символом “\0” (нуль-символом).
Для того, чтобы не было лишних элементов (т.е. экономнее тратится память) можно использовать следующее описание:
staticchar*[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. Какие функции используются для изменения регистров символа?
Тема 10. Функции операции над строками.
Функции операций над строками из библиотеки обработки строк. Библиотека обработки строк содержит множество полезных функций для выполнения операций со строковыми данными, для сравнения строк, для поиска символов и других строк в строке, для деления строки на лексемы (логические части) и определения строки. Для работы с библиотекой обработки строк необходимо подключить заголовочный файл <string.h>. Перечень этих функций приведен в таблице 5.
Таблица 5 – Функции из библиотеки обработки строк
Прототип |
Описание функции |
char *strcpy(char *s1, const char *s2); |
Копирует строку s2 в строку s1. Возвращает значение s1. Функция предполагает, что строка s1 имеет размер, достаточный для того, чтобы вместить содержимое строки s2. |
char *strncpy(char *s1, const char *s2, size_t n); |
Копирует не более n символов из строки s2 в строку s1. Возвращает значение s1. |
char *strcat(char *s1, const char *s2); |
Объединяет строку s2 со строкой s1. Первый символ строки s2 переписывает символ NULL строки s1. Возвращает значение s1. |
Прототип |
Описание функции |
char *strncat(char *s1, const char *s2, size_t n); |
Объединяет не более n символов строки s2 со строкой s1. Первый символ строки s2 переписывает символ NULL строки s1. Возвращает значение s1. |