- •1. Основные понятия информатики
- •1.1. Понятие и задачи информатики
- •1.2. Системы счисления
- •1.2.1. Двоичная система счисления
- •1.2.2. Восьмеричная система счисления
- •1.2.3. Шестнадцатеричная система
- •1.3. Обобщенная структура и состав персонального компьютера
- •1.4. Организация вычислительных процессов при решении инженерных задач
- •1.5.1. Алгоритм: основные свойства и способы представления
- •1.5.2. Базовые элементы и структуры программирования
- •1.5. Алгоритмы
- •1.5.3. Представление линейных, разветвленных и циклических структур
- •2. ОБщие сведения об операционных системах
- •2.1. Общие сведения об операционных системах
- •2.1.1. Предпосылки создания и краткая история операционных систем ms-dos и Windows
- •2.1.1.1. Операционная система ms-dos
- •2.1.1.2. История создания операционной системы Windows
- •2.1.2. Основные отличия версий операционных систем
- •2.1.2.1. Операционная система Mac os
- •2.1.1.2. Операционная система Linux
- •2.1.1.3. Операционная система Windows
- •2.1.3. Основные команды операционной системы ms-dos
- •2.2. Основные элементы интерфейса операционной системы Windows
- •2.2.1. Элементы интерфейса ос Windows
- •2.2.2. Работа с файловыми системами операционной системы
- •3.2. Элементы языка с
- •3.2.1. Алфавит языка с (используемые символы)
- •3.2.2. Идентификаторы
- •3.2.3. Константы
- •3.2.4. Ключевые слова
- •3.2.5. Знаки операций
- •3.2.6. Комментарии
- •3.3. Лекция 6. Типы данных и их объявление
- •3.3.1. Основные типы данных
- •3.3.2. Объявление типов данных
- •3.4. Лекция 7. Указатели и массивы
- •3.4.1. Объявление указателей
- •3.4.2. Инициализация указателей
- •3.4.3. Составные указатели
- •3.4.4. Операции над указателями
- •3.4.5. Ссылки
- •3.5. Лекция 8. Массивы
- •3.5.1. Одномерные массивы
- •3.5.2. Многомерные массивы
- •3.5.3. Динамические массивы
- •3.5.3.1. Одномерные динамические массивы
- •3.5.3.2. Динамический многомерный массив
- •3.5.4. Символьные массивы (строки)
- •3.6. Лекция 9. Выражения и присваивания
- •3.6.1. Операции инкремента и декремента (увеличения и уменьшения на 1)
- •3.6.2. Операция определения размера типа
- •3.6.4. Операции деления ( / ) и нахождения остатка от деления ( % )
- •3.6.7. Поразрядные операции
- •3.6.8. Логические операции
- •3.6.9. Операции присваивания
- •3.6.10. Условная операция
- •3.6.11. Приоритеты выполнения операций
- •3.6.12. Преобразование типов
- •3.7. Лекция 10. Операторы
- •3.7.1. Операторы ветвления
- •3.7.1.1. Условный оператор if
- •If (выражение) [оператор_1]; [ else оператор_2 ; ]
- •3.7.1.2. Оператор switch
- •3.7.2. Операторы цикла
- •3.7.2.1. Цикл с предусловием (while)
- •3.7.2.2. Цикл с постусловием (do while)
- •3.7.2.3. Цикл с параметрами ( for )
- •3.7.3. Операторы передачи управления
- •3.7.3.1. Оператор безусловного перехода goto
- •3.7.3.2. Оператор прерывания break
- •3.7.3.3. Оператор пропуска continue
- •3.7.3.4. Оператор возврата из функции return
- •4. Модульное программирование
- •4.1. Лекция 11. Функции
- •4.1.1. Объявление функций
- •4.1.2. Определение функций
- •4.1.3. Вызов функций
- •4.1.4. Передача параметров в функцию
- •4.1.5. Передача массивов в функцию
- •В примере:
- •4.1.6. Функции с переменным числом параметров
- •4.1.7. Рекурсивные функции
- •4.1.8. Функция main()
- •4.1.9. Перегрузка функций
- •4.1.10. Шаблоны функций
- •4.2. Лекция 12. Директивы препроцессора
- •4.2.1. Директива #include
- •4.2.1. Директива # define
- •4.2.3. Директивы условной компиляции
- •4.2.4. Директивы #undef
- •4.3. Лекция 13. Пользовательские типы данных
- •4.3.1. Переименование типов
- •4.3.2. Перечисления
- •4.3.3. Структуры
- •4.3.4. Битовые поля
- •4.3.5. Объединения
- •5. Программирование графических изображений в языке с
- •5.1. Лекция 14. Программирование графических изображений
- •5.1.1. Графический режим видеоадаптера
- •5.1.2. Функции управления графическим окном
- •5.1.3. Управление цветом и стилем заполнения фигур
- •5.1.4. Рисование простейших графических фигур
- •5.1.5. Отображение текстовой информации в графическом режиме
- •5.1.7. Преобразование координат и анимационные эффекты
- •6.1.1.3. Функция gets()
- •6.1.1.4. Функция puts()
- •6.1.1.5. Функции printf() и scanf()
- •Потоковые объекты ввода/вывода (форматируемые):
- •6.1.2.1 Форматирование данных с помощью флагов и методов
- •6.2. Функции файлового ввода и вывода
- •6.2.1. Файловый ввод и вывод средствами с
- •6.3. Строки: операции с текстовыми файлами
- •6.3.1. Операции над строками
- •6.3.2. Методы и функции ввода и вывода строк
- •6.4. Лекция 18. Операции со структурами и бинарными файлами
- •6.5. Лекция 19. Списки: операции с динамическими структурами данных; организация списков и их обработка
- •6.5.1. Линейные списки
- •6.5.2. Стеки
- •6.5.3. Очередь
- •6.5.4. Бинарные деревья
6.3. Строки: операции с текстовыми файлами
Строка представляет собой массив символов, заканчивающийся нуль-символом ‘\0’, который является терминатором строки, т.е. признаком конца строки.
Примечание:
— из определения строки следует, что при объявлении строкового массива из 100 байт, в нем можно хранить строку длиной 99 символов, а один байт отводится под нуль-символ.
6.3.1. Операции над строками
В таблице 6.2 представлены допустимые операции для строк.
Таблица 6.2 — Допустимые операции для строк
Операция |
Действие |
Операция |
Действие |
= |
Присваивание |
<= |
Меньше или равно |
+ |
Конкатенация |
> |
Больше |
+= |
Добавление |
>= |
Больше или равно |
== |
Равенство |
[ ] |
Индексация |
!= |
Неравенство |
<< |
Вывод |
< |
Меньше |
>> |
Ввод |
Кроме перечисленных в таблице операций библиотека <stdlib.h> содержит функции преобразования строк в числа:
double atof (const char *string) ;
int atoi (const char *string) ;
long atol (const char *string) ;
Примечания:
— функция atof преобразует строку string в тип double;
— функция atoi преобразует строку string в тип int;
— функция atol преобразует строку string в тип long;
— обратное преобразование возможно с помощью функции sprintf().
6.3.2. Методы и функции ввода и вывода строк
Кроме методов и функций ввода и вывода строк, рассмотренных выше, существуют еще методы неформатированного чтения из потока.
Формат методов неформатированного чтения из потока:
get (char *buffer, int N, char ‘lim’) ;
getline (char *buffer, int N, char ‘lim’) ;
Примечания.
Функция get считывает или N–1 символов из потока, или пока не встретится символ ‘lim’, и копирует их в символьную строку buffer. Вместо символа ‘lim’ в строку buffer записывается признак конца строки ‘\0’. В программу возвращает ссылку на текущий поток.
Функция getline аналогична функции get, но копирует в строку buffer символ ‘lim’.
Также существуют функции форматированного чтения из строки и записи в строку.
Формат записи функций форматированного чтения из строки и записи в строку:
int sprintf (char *buffer, const char *format [,arg, …]) ;
int sscanf (char *buffer, const char *format [,addr, …]) ;
Примечания:
— функция sprintf выводит в строку buffer значения переменных arg, … в формате, определенном строкой format;
— функция sscanf считывает данные из строки buffer в формате, определенном строкой format, и передает их переменным по адресам addr, …;
— параметры форматирования данных в функциях sprintf и sscanf аналогичны параметрам функций printf и scanf.
6.3.3. Функции работы со строками библиотеки <string.h>
В библиотеке <string.h> хранится широкий набор функций для работы со строками. Рассмотрим некоторые их них.
Формат записи функции добавления strcat:
char *strcat (char *dest, const char *str) ;
Примечание.
Функция добавляет в конец строки dest строку str и ‘\0’, результат записывает в dest.
Формат записи функции добавления с определением максимального количества добавляемых символов strncat:
char *strncat (char *dest, const char *str, size_t N) ;
Примечание.
Функция добавляет в конец строки dest не более N символов строки str и ‘\0’, результат записывает в dest.
Формат записи функции копирования strcpy:
char *strcpy (char *dest, const char *str) ;
Примечание.
Функция копирует в строку dest строку str, включая ‘\0’.
Формат записи функции копирования с определением максимального количества копируемых символов strncpy:
char *strncpy (char *dest, const char *str, size_t N) ;
Примечания:
— функция копирует в строку dest не более N символов строки str;
— если длина строки str больше или равна N, то символ ‘\0’ в конец строки dest не добавляется, в противном случае строка dest дополняется символами ‘\0’ до N-го символа.
Формат записи функции поиска символа в строке strchr:
char *strchr (const char *str, char *ch) ;
Примечания:
— функция возвращает указатель на первое найденное вхождение (положение) символа ‘ch’ в строке str, если нет искомого символа, то возвращает NULL;
— функция производит поиск в прямом направлении.
Формат записи функции поиска символа в строке в обратном направлении strrchr:
char *strrchr (const char *str, char *ch) ;
Примечания:
— функция аналогична функции strchr();
— функция производит поиск в обратном направлении.
Формат записи функции поиска (проверки на отсутствие) strspn:
size_t strspn (const char *str1, char *str2) ;
Примечаниe.
Функция возвращает индекс первого символа строки str1, отсутствующего в str2.
Формат записи функции поиска (проверка на совпадение) strсspn:
size_t strсspn (const char *str1, const char *str2) ;
Примечание.
Функция возвращает индекс первого символа строки str1, совпадающего с любым из символов строки str2.
Формат записи функции поиска (проверка на присутствие символа) strсpbrk:
char *strсpbrk (const char *str1, const char *str2) ;
Примечания:
— функция возвращает указатель на символ, являющийся первым вхождением любого из символов из str2 в строку str1;
— если одинаковых символов нет, то возвращается NULL.
Формат записи функции поиска (проверка на присутствие подстроки) strstr:
char *strstr (const char *str1, const char *str2) ;
Примечания:
— функция выполняет поиск первого вхождения подстроки str2 в строку str1;
— функция возвращает указатель на элемент из str1, с которого начинается str2, в случае удачного поиска и NULL в случае неудачного поиска.
Формат записи функции сравнения строк (с учетом регистра) strcmp:
int strcmp (const char *str1, const char *str2) ;
Примечание.
Функция сравнивает строки с учетом регистра символов и возвращает:
— значение < 0, если str1 < str2;
— значение = 0, если str1 == str2;
— значение > 0, если str1 > str2.
Формат записи функции сравнения строк (без учета регистра) stricmp:
int stricmp (const char *str1, const char *str2) ;
Примечание.
Функция сравнивает строки без учета регистра символов и возвращает значения аналогичные функции strcmp().
Формат записи функции сравнения строк с частью другой строки (с учетом регистра) strncmp:
int strncmp (const char *str1, const char *str2, size_t N) ;
Примечания:
— функция сравнивает строку str1 и первые N символов строки str2 с учетом регистра символов;
— функция возвращает значения аналогичные функции strcmp().
Формат записи функции сравнения строки с частью другой строки (без учета регистра) strnicmp:
int strnicmp (const char *str1, const char *str2, size_t N) ;
Примечания:
— функция сравнивает строку str1 и первые N символов строки str2 без учета регистра символов;
— функция возвращает значения аналогичные функции strcmp().
Форматы записи функции выделения лексемы strtok:
char *strtok (char *str1, const char *str2) ;
char *strtok (NULL, const char *str2) ;
Примечания:
— при использовании первого варианта формата записи функция сравнивает лексему из str1, отделенную началом str1 и любым символом из набора str2; при этом в строку str1 функция вставляет символ NULL непосредственно за последним символом лексемы
— второй вариант формата записи используется только при повторном вызове; при этом функция возвращает лексему из str1, отделенную любым символом из набора str2 и окончанием str1.
Формат записи функции вычисления длины строки strlen:
char *strlen (const char *string) ;
Примечание.
Функция возвращает длину строки string.
6.3.4. Функции классификации и преобразования символов библиотеки <ctype.h>
При работе со строками часто требуется знать и изменять состав строки. Определять, являются ли символы строки цифрами, буквами (каково регистра) или символами пунктуации, управления.
Формат записи функции классификации символов (букв или цифр) isalnum:
int isalnum (int ch) ;
Примечания:
— проверяет, является ли символ буквой или цифрой;
— выделяет младший байт параметра ch и возвращает значение true, если символ ch является буквой или цифрой, или false в противном случае.
Формат записи функции классификации символов (букв) isalpha:
int isalpha (int ch) ;
Примечания:
— проверяет, является ли символ буквой;
— выделяет младший байт параметра ch и возвращает значение true, если символ ch является буквой, или false в противном случае.
Формат записи функции классификации символов (букв нижнего регистра) islower:
int islower (int ch) ;
Примечания:
— проверяет, является ли символ буквой нижнего регистра;
— выделяет младший байт параметра ch и возвращает значение true, если символ ch является буквой нижнего регистра, или false — в противном случае.
Формат записи функции классификации символов (букв верхнего регистра) isupper:
int isupper (int ch) ;
Примечания:
— проверяет, является ли символ буквой верхнего регистра;
— выделяет младший байт параметра ch и возвращает значение true, если символ ch является буквой верхнего регистра, или false в противном случае.
Формат записи функции классификации символов (цифр) isdigit:
int isdigit (int ch) ;
Примечания:
— проверяет, является ли символ цифрой;
— выделяет младший байт параметра ch и возвращает значение true, если символ ch является цифрой, или false в противном случае.
Формат записи функции классификации символов (шестнадцатеричных цифр) isxdigit:
int isxdigit (int ch) ;
Примечания:
— проверяет, является ли символ шестнадцатеричной цифрой;
— выделяет младший байт параметра ch и возвращает значение true, если символ ch является символом шестнадцатеричной цифры, или false в противном случае.
Формат записи функции классификации символов (пунктуации) ispunct:
int ispunct (int ch) ;
Примечания:
— проверяет, является ли символ символом пунктуации;
— выделяет младший байт параметра ch и возвращает значение true, если символ ch является символом пунктуации, или false в противном случае.
Формат записи функции классификации символов (разграничителей) isspace:
int isspace (int ch) ;
Примечания:
— проверяет, является ли символ разграничительным;
— выделяет младший байт параметра ch и возвращает значение true, если символ ch является пробелом или табуляцией, или символом новой строки или страницы (9 … 13, 32) или false в противном случае.
Формат записи функции классификации символов (ASCII) isascii:
int isascii (int ch) ;
Примечания:
— проверяет, принадлежит ли символ таблице ASCII;
— выделяет младший байт параметра ch и возвращает значение true, если символ ch является символом таблицы ASCII (0 … 127), или false в противном случае.
Формат записи функции классификации символов (управляющих) iscntrl:
int iscntrl (int ch) ;
Примечания:
— проверяет, является ли символ управляющим;
— выделяет младший байт параметра ch и возвращает значение true, если символ ch является управляющим (127, 0 … 31), или false в противном случае.
Формат записи функции классификации символов (видимых) iscntrl:
int isgraph (int ch) ;
Примечания:
— проверяет, является ли символ видимым;
— выделяет младший байт параметра ch и возвращает значение true, если символ ch является видимым (33 … 126), или false в противном случае.
Формат записи функции классификации символов (печатаемых) isprint:
int isprint (int ch) ;
Примечания:
— проверяет, является ли символ печатаемым;
— выделяет младший байт параметра ch и возвращает значение true, если символ ch является печатаемым (видимые+пробел: 32 … 126), или false в противном случае.
Формат записи функции преобразования символов (в символ нижнего регистра) tolower:
int tolower (int ch) ;
Примечания:
— функция преобразует символ в символ нижнего регистра;
— функция получает параметр ch и возвращает его в нижнем регистре;
— в параметре ch используется только младший байт.
Формат записи функции преобразования символов (в символ верхнего регистра) toupper:
int toupper (int ch) ;
Примечания:
— функция преобразует символ в символ верхнего регистра;
— функция получает параметр ch и возвращает его в верхнем регистре;
— в параметре ch используется только младший байт.
Формат записи функции преобразования символов (в символ ASCII) toascii:
int toascii (int ch) ;
Примечания:
— функция преобразует символ в символ таблицы ASCII;
— функция получает параметр ch и возвращает его в диапазоне значений таблицы ASCII (0 … 127).
Пример:
/* Пример использования функции tolower() : */
#include <string.h>
#include <stdio.h>
#include <ctype.h>
int main(void)
{
int length, i ;
char *string= “THIS IS A STRING.” ;
length=strlen(string) ;
for(i=0; i<length; i++)
{
string[i]=tolower(string[i]) ;
}
printf(“%s\n”, string) ;
return 0;
}
Результат выполнения программы:
this is a string.
