- •Основы программирования на языке С
- •Введение
- •1. Базовые понятия программирования
- •1.1. Алгоритмизация задачи
- •1.2. Схема алгоритма программы
- •1.3. Пример алгоритмизации
- •1.4. Этапы трансляции программы
- •2. Особенности языка С
- •2.1. Характеристики языка
- •2.2. Элементы языка
- •2.3. Стандартные типы данных
- •2.4. Компоненты простой программы
- •Вопросы для самопроверки
- •3. Выражения и операции
- •3.1. Операция и выражение присваивания
- •3.2. Бинарные арифметические операции
- •3.3. Операции увеличения (++) и уменьшения (--)
- •3.4. Преобразования типов при вычислении арифметических выражений
- •3.5. Тернарная или условная операция
- •3.6. Логические операции и операции отношения
- •3.7. Поразрядные (побитовые) операции
- •3.8. Операции сдвига
- •3.9. Операция sizeof
- •3.10. Операция следования
- •3.11. Сводная таблица операций языка С
- •Вопросы для самопроверки
- •4. Операторы
- •4.1. Оператор выражение
- •4.2. Пустой оператор
- •4.3. Объявления и составной оператор
- •4.4. Условный оператор
- •4.5. Оператор выбора switch
- •4.6. Циклы
- •4.7. Оператор break
- •4.8. Оператор безусловного перехода goto
- •4.9. Оператор continue
- •4.10. Оператор return
- •Вопросы для самопроверки
- •5. Массивы
- •5.1. Одномерные статические массивы
- •5.2. Объявление массива. Обращение к элементу массива
- •5.3. Инициализация массива
- •5.4. Многомерные массивы
- •5.5. Выход индекса за границы массива
- •5.6. Приемы работы с массивами в вычислительных задачах
- •5.7. Строка как массив символов
- •Вопросы для самопроверки
- •6. Указатели и ссылки
- •6.1. Понятие указателя
- •6.2. Операция получения адреса &
- •6.3. Операция разыменования (*)
- •6.4. Арифметика указателей
- •6.5. Применение указателей в выражениях
- •6.6. Указатели и массивы
- •6.7. Ссылочный тип данных
- •Вопросы для самопроверки
- •7. Время жизни и область видимости переменной
- •7.1. Общие понятия
- •7.2. Классы памяти
- •7.3. Вложенные блоки в программе
- •8. Функции
- •8.1. Общие понятия
- •8.2. Определение функции
- •8.3. Прототип функции
- •8.4. Переменные в функции
- •8.5. Передача параметров в функцию
- •Вопросы для самопроверки
- •9. Пользовательские типы данных
- •9.1. Структурный тип данных
- •9.2. Битовые поля
- •9.3. Объединения или смеси
- •9.4. Перечисления
- •Вопросы для самопроверки
- •10. Динамическая работа с памятью
- •10.1. Универсальный указатель void
- •10.2. Принципы работы с динамическими массивами
- •Вопросы для самопроверки
- •11. Ввод-вывод данных
- •11.2. Функции ввода-вывода библиотеки iostream
∙символ "а" будет помещен в переменную x;
∙<пробел> будет помещен в в переменную y;
∙символ "б" будет помещен в переменную z.
11.1.6. Сравнительная характеристика консольных функций вводавывода
Функции, используемые для ввода и вывода данных, зависят от типа данных и способа их представления. Остановимся на свойствах функций printf() и scanf(), главное из которых возможность работать с самыми разнообразными данными. Например, с помощью одной и той же функции scanf() можно вводить как числовые, так и символьные данные. Кроме того, функции printf() и scanf() позволяют работать со списком из нескольких аргументов, то есть вводить (или выводить) сразу несколько переменных, а также форматировать выводимые данные. Итак, функции printf() и scanf() универсальны и это делает их привлекательными, но с другой стороны следует отметить, что эти функции достаточно громоздкие (занимают много места) и медленно работают. Поэтому для работы с текстовой информацией в состав библиотек входят специальные функции, как для работы с отдельными символами, так и с целыми строками.
Если вы хотите работать с отдельными символами, то наиболее удобно использовать функции getch, getchar() и putchar(). Для работы с целыми строками используйте функции gets() и puts().
Все эти функции ввода-вывода текстовых данных имеют только один аргумент (параметр), а это означает, что они могут отображать только один объект.
11.2. Функции ввода-вывода библиотеки iostream
Хотя библиотека iostream относится к языку С++ и не является темой нашего курса, все же мы бегло рассмотрим два потока этой библиотеки - cin и cout. Дело в том, что большинство современных сред программирования поддерживают две полноценные системы ввода-вывода, одна из них относится к языку С, а другая – к объектно-ориентированному С++. Многие программисты, не выходящие в своей работе за рамки классического языке С, тем не ме6нее активно пользуются системой ввода-вывода С++, поэтому целесообразно рассмотреть наиболее популятные средства этой библиотеки.
Также как в языке С, система ввода-вывода С++ оперирует потоками. Поток в С++ – это логическое устройство, получающее или передающее информацию. Поток связан с физическим устройством ввода-
вывода. Все потоки функционируют одинаково, хотя физические устройства, с которыми они связаны, могут быть самыми различными.
Потоки, определённые в языке С++:
∙cin - cтандартный ввод;
∙cout - cтандартный вывод;
∙cerr - cтандартная ошибка;
∙clog - буферизованная версия cerr.
По умолчанию эти потоки связаны с консолью:
∙ cin - с клавиатурой;
∙cout, cerr, clog - с терминалом.
Операции ввода-вывода языка С++:
∙вывод <<;
∙ввод >>.
Пример: Напечатать на терминале строку текста: Пример вывода - 34. cout << "Пример вывода - " << 34;
Пример: Ввести целое число с клавиатуры в переменную x (для того, чтобы ввод произошел, на терминале нужно напечатать число и нажать клавишу ENTER.)
…
int x; cin >> x;
Пример: Ввести строку текста в статический массив.
…
char str[80]; cin >> str;
Пример: Ввести строку текста в динамический массив и вывести его на терминал.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com
#include <iostream.h> #include <stdlib.h> void main()
{
char *ptr; ptr=(char*)malloc(80); cin >> ptr;
cout<<endl<<"Введена строка : "<<ptr<<endl; free(ptr);
}
11.2.1. Форматирование ввода-вывода
Для форматирования текста и вывода спецсимволов следует использовать манипуляторы, входящие в библиотеку iomanip.h, наиболее популярные из них и приведенные в таблице 11.4.
Манипуляторы выводятся в выходной поток подобно всем остальным объектам вывода.
Таблица 11.4
endl |
новая строка (символ '\n') |
|
|
ends |
конец строки (символ '\0' ); |
|
|
setw (int n) |
ширина поля вывода; |
|
|
setprecision(int |
количество цифр после запятой; |
n) |
|
|
|
setfill (int n) |
символ-заполнитель; |
|
|
flush |
Вывести и освободить все буферы; |
|
|
setbase(int n) |
установить систему счисления (СС) |
для всей программы; |
|
|
|
dec |
десятичная СС |
(только для открытого потока); |
|
|
|
|
Окончание таблицы 11.4 |
|
|
oct |
восьмеричная СС |
(только для открытого потока); |
|
|
|
hex |
Шестнадцатеричная СС |
(только для открытого потока) |
|
|
|
Пример: Вывести на терминал одно и то же число в разных системах счисления: #include <iostream.h>
#include <iomanip.h> int x = 53;
cout << "Десятичный вид:" << x << endl; cout<< "Восьмеричный вид:"<< oct<<x<<endl; cout<< "Шестнадцатеричный вид: "<< hex; cout << x << endl;
Десятичная система счисления устанавливается по умолчанию, поэтому первый вывод не требует её настройки.
Пример: Ввести шестнадцатеричное число c клавиатуры. #include <iostream.h>
#include <iomanip.h> int x;
cin >> hex >> x;
Аналогично используются манипуляторы с параметрами, такие как setfill или setw. Пример: Вывод числа с различной точностью.
#include <iostream.h> #include <iomanip.h> double x=123.4567;
cout<<setfill('*')<<setw(11)<<setprecision(2)<<x;
cout<<setfill('+')<<setw(11)<<setprecision(3)<<x;
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com
Первое обращение к потоку cout определяет числовой формат с двумя знаками числа в дробной части, также явно определен символ-заполнитель "пустого" пространства вывода ('*').
Форматы вывода при первом и втором обращении к потоку cout выглядят следующим образом:
*****123.45
++++123.456
Те же манипуляторы, за исключением endl и ends, могут использоваться и при вводе. В этом случае они описывают представление вводимых чисел. Кроме того, имеется манипулятор, работающий только при вводе, это ws. Данный манипулятор переключает вводимый поток в такой режим, при котором все пробелы (включая табуляцию, переводы строки, переводы каретки и переводы страницы) будут вводиться в поток. В обычном режиме, по умолчанию, эти символы воспринимаются как разделители между объектами ввода.
PDF created with FinePrint pdfFactory Pro trial version http://www.fineprint.com