- •1. Основы алгоритмизации и программирования
- •1.1. Этапы подготовки и решения задач на эвм
- •1.2. Алгоритмы и способы их описания Понятие алгоритма
- •Способы описания алгоритмов
- •Структурные схемы алгоритмов
- •1.3. Компиляция и интерпретация программ
- •1.4. Стили программирования
- •Процедурное программирование
- •Функциональное программирование
- •Логическое программирование
- •Объектно-ориентированное программирование
- •2.1. Пример готовой программы.
- •2.2. Структура основной программы
- •2.3. Алфавит языка
- •2.4. Константы и переменные Константы
- •Переменные
- •Примеры записи имен переменных
- •2.5. Арифметические выражения
- •Примеры вычисления арифметических выражений
- •Стандартные функции
- •Примеры программирования арифметических выражений
- •Контрольные задания
- •1. Составить описания для заданных переменных
- •2.6. Линейные вычислительные процессы
- •Оператор присваивания
- •Странные операторы присваивания
- •Операторы ввода-вывода
- •Операторы ввода исходных данных с клавиатуры
- •Потоковый ввод данных числового типа
- •Форматный ввод
- •Операторы вывода данных на экран Потоковый вывод
- •Форматный вывод
- •Контрольные задания
- •2.7. Разветвляющиеся вычислительные процессы
- •Логические выражения
- •Порядок выполнения операций в логических выражениях
- •Условные операторы
- •Короткий условный оператор
- •Полный условный оператор
- •If (логическое выражение) p1; else p2;
- •Вложенные структуры условных операторов
- •Оператор выбора
- •Контрольные задания
- •2.8. Циклические вычислительные процессы
- •Операторы цикла с условием
- •Оператор цикла do...While
- •Оператор цикла с параметром
- •2.9. Базовые алгоритмы
- •Задача 1. Алгоритм организации счетчика
- •Задача 2. Алгоритм накопления суммы
- •Задача 3. Алгоритм накопления произведения
- •Задача 4. Алгоритм поиска минимального члена последовательности
- •Задача 5. Табулирование функции (или кратные циклы)
- •Задача 6. Вычисление сумм последовательностей
- •2.10. Указатели и массивы Указатели
- •Понятие массива
- •Общий вид описания массива
- •Одномерные массивы
- •Описание одномерного массива
- •Индексированные переменные
- •Ввод-вывод одномерных массивов
- •Обработка одномерных массивов
- •Задача 1. Организация счетчика
- •Задача 2. Накопление суммы и произведения
- •Задача 3. Поиск минимального и максимального элементов массива
- •Двухмерные массивы
- •Описание двухмерного массива
- •Ввод-вывод двухмерного массива
- •Обработка матриц
- •2.11. Подпрограммы Структура сложной программы
- •Функции
- •Общий вид описания функции
- •Обращение к функции
- •Пример программы с функцией
- •Механизм замены параметров
- •Параметры-массивы в функциях
- •Рекурсия
- •Примеры программирования задач с использованием подпрограмм
- •Задача 1
- •2.12. Текстовые данные
- •Символьный тип данных
- •Ввод-вывод символьных данных
- •Обработка символьных данных
- •Ввод-вывод строковых данных
- •Обработка строковых данных
- •Стандартные функции обработки строк
- •Сравнение строк:
- •Сцепление строк
- •Определение длины строки
- •Копирование строк
- •Поиск символа в стоке
- •Пример программы для задачи с текстовыми данными
- •Контрольные задания
- •2.13. Динамическое выделение памяти
- •Структуры данных Понятие структуры
- •Обработка структур
- •Пример задачи с использованием структурированных данных
- •2.15. Файлы данных Понятие файла
- •Работа с файлами
- •Открытие файла
- •Обработка открытого файла
- •Закрытие файла
- •Функции ввода/вывода
- •Работа с текстовыми файлами
- •Обработка бинарных файлов
- •Контрольные задания
- •Заключение
- •Оглавление
2.12. Текстовые данные
В языке С++ текстовая информация представляется двумя типами данных: с помощью символов и строк - массивов символов.
Символьный тип данных
Значением данных символьного типа является любой символ из набора всех символов компьютера или его код. Каждому символу соответствует порядковый номер (код) в диапазоне 0..255. Для кодировки символов первой половины диапазона используется код ASCII (американский стандартный код для обмена информацией), или более современные стандарты в последних версиях языка Си.
При написании программ символьные данные могут быть представлены либо константами, либо переменными.
Символьная константа представляет собой одиночный символ, заключенный в апострофы, например:
‘Y’ ‘!’ ‘_’ ‘Д’
Символьная переменная объявляется с помощью ключевого слова char, например:
char cr;
Во внутренней памяти компьютера каждый символ занимаем 1 байт.
Ввод-вывод символьных данных
Для ввода символьных данных используются функции: scanf() – форматированный ввод, getchar() или getch() – специальные функции для ввода символа. Для форматного ввода и вывода символьных констант используется спецификатор (формат) %с. Необходимо помнить, что нажатие любой небуквенной клавиши при вводе ([пробел], [Enter] и др.) будет значимым и восприниматься как символ.
Пример 1. Организовать ввод символьных переменных:
a='i' b='j' c='k'
main()
{ char a,b,c;
printf("Введите исходные данные");
scanf("%c%c%c",&a,&b,&sc);
. . .
}
При вводе символы набираются без апострофов и пробелов:
ijk [Enter]
Символ клавиши [Enter] выходит за пределы списка ввода, поэтому он игнорируется.
При вводе символьной информации с помощью функции getchar() надо помнить, что функция переводит программу в состояние ожидания, но при нажатии клавиши символ выводится на экран. А, например, при выполнении следующего фрагмента программы
printf("Введите исходные данные");
a=getch();b=getch();c=getch();
переменные будут введены, но на экране их значения не отразятся.
Для вывода символьных данных используются функции printf() и putchar().
Пример 2. Организовать вывод указанных выше переменных на экран в одну строку. Запись оператора вывода будет следующей:
printf("%c%c%c\n",a,b,c);
Нa экране будет отображено:
ijk
Если использовать для вывода функцию putchar():
putchar(a); putchar(b); putchar(c);
на экране будет отображен тот же результат.
Обработка символьных данных
Поскольку символы в языке С++ упорядочены, к ним можно применять операции отношения (>, >=, <, <=, = =, !=). Это дает возможность записывать логические выражения с символьными данными в условных операторах. Например, оператор
if (ch =='!' ) ch ='.';
сравнивает значение переменной ch с символом ‘!’ и в случае их равенства следующая команда заменяет в символьной переменной ch восклицательный знак точкой.
Символьные данные могут использоваться и в операторах цикла for. Так, при выполнении операторов:
for( ch='a'; ch>='d'; ch++) printf("%с",ch);
в строку экрана выводится последовательность:
a b с d
Если значение символьной переменной вывести с помощью спецификатора для целых чисел %d, то на экране отобразится код символа. Например:
for(ch='a'; ch>='d'; ch++) printf("%d ",ch);
на экран будет выведено:
97 98 99 100
Над символьными данными можно выполнять арифметические операции сложения и вычитания. Так, например, операция ch++; из предыдущего примера увеличивает код символа, хранящегося в переменной ch на 1. Или, выполняя операцию ch='a'-'A'; будет получена разница кода большой (А) и маленькой буквы (а) латинского алфавита. Так, например, если в символьной переменной ch1 хранится маленькая буква алфавита, то, выполнив действия:
char ch,ch1,ch2;
ch='a'-'A';
ch1='k';
ch2=ch1-сh;
printf("%c-%d %c-%d\n",ch1,ch1,ch2,ch2);
в переменную ch2 запишется та же буква, только большая, а на экран будет выведено
k-107 K-75
Строки
Значением строки является любая последовательность символов. Причем для компьютера – это набор байтов.
Строковая константа - это строка, заключенная в кавычки, например:
“Язык программирования”
Строковая переменная или строка представляет собой массив символов, поэтому и объявляется она именно так:
сhar st[30];
В квадратных скобках указывается максимальное число символов в строке st.
Под значение строковой переменной в памяти компьютера отводится МАХ байт, пронумерованных от 0 до МАХ-1, где МАХ - объявленный размер строки.
Строка отличается от несимвольного массива тем, что она заканчивается кодом 0 - признаком окончания строки. По местоположению этого специального символа определяется фактическая длина строки.
Начальное значение строки можно задать при ее объявлении следующим образом:
char s[80] = "Язык программирования Си";
Символы в кавычках будут записаны в начало массива s, а затем - признак окончания строки '\0'.
При описании строки можно также написать так:
char s[] = "Язык программирования Си";
В этом случае компилятор подсчитает символы в кавычках, выделит памяти на 1 байт больше и занесет в эту область саму строку и завершающий ноль.