ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 01.03.2019
Просмотров: 1194
Скачиваний: 2
р - на входе ожидается появление указателя в виде шестнадцатеричного числа;
n - применяется в операциях форматирования. Аргумент, соответствующий этому символу спецификации, должен быть указателем на целое. В него возвращается номер позиции (после ввода), в которой записана спецификация %n;
u - на входе ожидается беззнаковое целое число и аргумент является указателем на переменную типа unsigned int;
U - на входе ожидается беззнаковое целое число и аргумент является указателем на переменную типа unsigned long;
[ ] - сканирует входную строку для получения символов.
Перед некоторыми символами преобразования могут записываться следующие модификаторы:
F - изменяет указатель, заданный по умолчанию, на указатель типа far;
N - изменяет указатель, заданный по умолчанию, на указатель типа near;
h - преобразует аргумент к типу short int (может записываться перед символами d, i, о, u, х);
l - преобразует аргумент к типу long int (может записываться перед символами d, i, o, u, x);
L - преобразует аргумент к типу long double (может записываться перед символами е, f, g).
Ввести целое число (int a;), символ (char b;) и вещественное число (float t;) можно так:
scanf("%d", &a);
scanf("%c", &b);
scanf("%d%c%f",&a, &b, &t);
29 Форматированный вывод данных
Функция printf( ) (прототип содержится в файле stdio.h) обеспечивает форматированный вывод. Ее можно записать в следующем формальном виде:
рrintf ("управляющая строка", аргумент _1, аргумент _2,...);
Управляющая строка содержит компоненты трех типов: обычные символы, которые просто копируются в стандартный выходной поток (выводятся на экран дисплея); спецификации преобразования, каждая из которых вызывает вывод на экран очередного аргумента из последующего списка; управляющие символьные константы.
Каждая спецификация преобразования начинается со знака % и заканчивается некоторым символом, задающим преобразование. Между знаком % и символом преобразования могут встречаться другие знаки в соответствии со следующим форматом:
% [признаки] [ширина_поля] [точность] [F|N|h|l|L] c_n
Все параметры в квадратных скобках не являются обязательными.
На месте параметра c_n (символ преобразования) могут быть записаны:
с - значением аргумента является символ;
d или i - значением аргумента является десятичное целое число;
е - значением аргумента является вещественное десятичное число в экспоненциальной форме вида 1.23e+2;
Е - значением аргумента является вещественное десятичное число в экспоненциальной форме вида 1.23E+2;
f - значением аргумента является вещественное десятичное число с плавающей точкой;
g (или G) - используется, как е или f, и исключает вывод незначащих нулей;
о - значением аргумента является восьмеричное целое число;
s - значением аргумента является строка символов (символы строки выводятся до тех пор, пока не встретится символ конца строки или же не будет, выведено число символов, заданное точностью);
u - значением аргумента является беззнаковое целое число;
х - значением аргумента является шестнадцатеричное целое число с цифрами 0,..., 9, а, b, с, d, е, f;
X - значением аргумента является шестнадцатеричное целое число с цифрами 0,..., 9, А, В, С, О, Е, F;
р - значением аргумента является указатель;
n - применяется в операциях форматирования. Аргумент, соответствующий этому символу спецификации, должен быть указателем на целое. В него возвращается номер позиции строки (отображаемой на экране), в которой записана спецификация %n.
Необязательные параметры в спецификации преобразования:
признак минус (-) указывает, что преобразованный параметр должен быть выровнен влево в своем поле;
признак плюс (+) требует вывода результата со знаком;
строка цифр, задающая минимальный размер поля (ширина поля). Здесь может так же использоваться символ *, который тоже позволяет задать минимальную ширину поля и точность представления выводимого числа;
точка (.), отделяющая размер поля от последующей строки цифр;
строка цифр, задающая максимальное число выводимых символов, или же количество цифр, выводимых справа от десятичной точки в значениях типов float или double (точность);
символ F, определяющий указатель типа far;
символ N, определяющий указатель типа near;
символ h, определяющий аргумент типа short int (используется вместе с символами преобразования d, i, о, u, х, Х);
символ l, указывающий, что соответствующий аргумент имеет тип long (в случае символов преобразования d, i, о, u, х, X) или double (в случае символов преобразования е, Е, f, g, G);
символ L, указывающий, что соответствующий аргумент имеет тип long double (используется вместе с символами преобразований е, Е, f, g, G);
символ #, который может встречаться перед символами преобразования g, f, е и перед символом х. В первом случае всегда будет выводиться десятичная точка, а во втором - префикс 0x перед соответствующим шестнадцатеричным числом.
Если после знака % записан не символ преобразования, то он выводится на экран. Таким образом, строка %% приводит к выводу на экран знака %.
Функция printf( ) использует управляющую строку, чтобы определить, сколько всего аргументов и каковы их типы. Аргументами могут быть переменные, константы, выражения, вызовы функций; главное, чтобы их значения соответствовали заданной спецификации.
При наличии ошибок, например, в числе аргументов или типе преобразования, результаты будут неверными.
Среди управляющих символьных констант наиболее часто используются следующие:
\а - для кратковременной подачи звукового сигнала;
\b - для перевода курсора влево на одну позицию;
\f - для подачи формата;
\n - для перехода на новую строку;
\r - для возврата каретки;
\t - горизонтальная табуляция;
\v - вертикальная табуляция;
\\ - вывод символа \;
\' - вывод символа ' ;
\" - вывод символа ";
\? - вывод символа ?.
Например, в результате вызова функции:
printf("\tComputer\n%d\n", i);
сначала выполняется горизонтальная табуляция (\t), т.е. курсор сместится от края экрана, затем на экран будет выведено слово Computer, после этого курсор переместится в начало следующей строки (\n), затем будет выведено целое число i по формату %d (десятичное целое), и, окончательно, курсор перейдет в начало новой строки (\n).
Напечатать строку символов можно и так:
printf("Это строка символов");
30 стандартные включаемые файлы
Язык C++ включает в себя те же библиотеки, что и Си, организованы они также, со следующими отличиями: Каждый заголовок файла имеет то же имя, что и версия языка Си, но с префиксом «c» и без расширения. Например, в C++ эквивалент заголовочного файла — это . Каждый элемент библиотек определён в стандартном пространстве имен. Тем не менее, для совместимости с языком Cи, традиционный формат записи имен заголовочных файлов — «имя файла.h» (например, stdlib.h) также предоставляется с теми же определениями в рамках глобального пространства имен. В приведенных примерах в этом справочнике, присутствуют примеры полностью совместимы с языком программирования Си, хотя его применение не рекомендуется использовать в C++.
(assert.h) Заголовочный файл, содержащий макросы используемые для диагностики, помогающей при отладке программы.
(ctype.h) Заголовочный файл содержит прототипы функций для обработки символов.
(errno.h) Заголовочный файл в котором объявлены макросы, для идентификации ошибок по их коду.
(float.h) Заголовочный файл, описывающий различные характеристики типов с плавающей точкой.
(iso646.h) Заголовочный файл, содержащий альтернативные написания некоторых макро-констант(их 12).
(limits.h) Заголовочный файл, содержащий предельные величины для целых чисел для данной системы.
(locale.h) Заголовочный файл локализации, содержит функции и классы для потоковой обработки данных в форме естественной для разных языков (денежный формат, представление символов, сортировка строк).
(math.h) Заголовочный файл, содержащий прототипы математических функций (sin, cos, tg, pow, sqrt и т. д.)
(setjmp.h) Заголовочный файл, объявляющий макросы для нелокальных переходов.
(signal.h) Заголовочный файл выполняющий обработку сигналов.
(stdint.h) Описывает целочисленные типы данных с установленными диапазонами представления чисел.
(stdio.h) Заголовочный файл для выполнения операций ввода/вывода.
(stdlib.h) Стандартный заголовочный файл, содержит функции для преобразования чисел в текст, выделения памяти , генерации случайных чисел и др. функций-утилит
(string.h) Заголовочный файл для работы с Си-строками(нуль-терминированными)
(time.h) Заголовочный файл для работы с датой и временем
31 Функции работы со строками c
Давайте вначале посмотрим, что нам может дать наша библиотека stdio.h, которая содержит парочку функций работы со строками:
int getchar()
возвращает значение символа, введенного вами с клавиатуры. А вот и вывод этого числа:
printf("%d", getchar());
char *gets (char *s)
функция просит вводить пользователя строку, которую она помещает в массив s, пока пользователь не нажмет 'Enter':
char str[7] = "";
gets(str) ;
int putchar (int c)
печатает символ, который имеет код 'c':
putchar(97);//напечатает символ а
int puts (char *s)
печатает строку s и переводит курсор на новую строку:
char str[7] = "sergey";
puts(str);
int sprintf (char *s, char *format, ...)
Выполняет тоже, что и функция printf, за тем исключением, что записывает данные в массив s:
char str[37] = "";
sprintf (str,"chislo:%d, month: %s",10,"desember");
//В массиве будет: chislo:10, month: desember
int sscanf (char *s, char *format, ...)
происходит ввод значений не с клавиатуры, а из массива s:
char str[37] = "sergey", s[100]="";
sscanf (str,"%s", s);
string.h
Теперь давайте рассмотрим очень мощную библиотеку для работы со строками c: string.h. Естественно, что для работы функций библиотеки string.h ее надо подключить к нашей программе.
Вот перечень функций:
char *strcpy (char *srt1, char str2)
Копирует строку str2 в строку str1, возвращаемым значением этой функции является новая, полученная строка str1
char str[37] = "sergey", s[100]="monk";
strcpy(str,s);
char *strncpy (char *srt1, char str2, int n)
эта функция делает все тоже самое, что и предвидущая, за исключением того, что тут возможен контроль количества копируемых символов:
char str[37] = "sergey", s[100]="monk";
strncpy(str,s,3);//ответ: mongey
char *strcat (char *srt1, char str2)
Функция добавляет в строку str1 строку str2. Т.е. на место нуль-терминатора в строке str1, вставляется строка str2:
char str[37] = "sergey", s[100]="monk";
strcat(str,s); //Ответ: sergeymonk
char *strncat (char *srt1, char str2, int n)
Добавляет к первой строке ровно n символов из второй строки
char str[37] = "sergey", s[100]="monk";
strncat(str,s,2);//ответ: sergeymo
32 Динамическое распределение памяти. Функции malloc( ) и free( )
В языке Си принято следующее распределение памяти:
СТЕК Верхние адреса
СВОБОДНАЯ ПАМЯТЬ
РАЗДЕЛ ГЛОБАЛЬНЫХ
ПЕРЕМЕННЫХ И КОНСТАНТ
КОД ПРОГРАММЫ Нижние адреса
Для глобальных переменных отводится фиксированное место в памяти на все время работы программы. Локальные переменные хранятся в стеке. Между ними находится область памяти для динамического распределения.
Функции malloc( ) и free( ) используются для динамического распределения свободной памяти. Функция malloc( ) выделяет память, функция free( ) освобождает ее. Прототипы этих функций хранятся в заголовочном файле stdlib.h и имеют вид:
void *malloc(size_t size);
void *free(void *p);
Функция malloc( ) возвращает указатель типа void; для правильного использования значение функции надо преобразовать к указателю на соответствующий тип. При успешном выполнении функция возвращает указатель на первый байт свободной памяти размера size. Если достаточного количества памяти нет, возвращается значение 0. Чтобы определить количество байтов, необходимых для переменной, используют операцию sizeof( ).
Пример использования этих функций:
#include <stdio.h>
#include <stdlib.h>
void main(void)
{
int *p, i;
p = (int *) malloc(100 * sizeof(int)); /* Выделение памяти для 100
целых чисел */
if (!p)
{
printf("Недостаточно памяти\n");
exit(1);
}
for (i = 0; i < 100; ++i) *(p+i) = i; /* Использование памяти */
for (i = 0; i < 100; ++i) printf("%d", *(p++) );
free(p); /* Освобождение памяти */
}
Перед использованием указателя, возвращаемого malloc( ), необходимо убедиться, что памяти достаточно (указатель не нулевой).
33 Основной задачей программирования является обработка информации,
поэтому любой язык программирования имеет средства для ввода и вывода информации. В языке Си нет операторов ввода-вывода.
Ввод и вывод информации осуществляется через функции стандартной библиотеки. Прототипы рассматриваемых функций находятся в файле stdio.h. Эта библиотека содержит функции
printf() - для вывода информации
scanf() - для ввода информации.
Вывод информации
Функция printf() предназначена для форматированного вывода. Она переводит данные в символьное представление и выводит полученные изображения символов на экран. При этом у программиста имеется возможность форматировать данные, то есть влиять на их представление
на экране.
Общая форма записи функции printf():
printf("СтрокаФорматов", объект1, объект2, ..., объектn);
СтрокаФорматов состоит из следующих элементов:
управляющих символов;
текста, представленного для непосредственного вывода;
форматов, предназначенных для вывода значений переменных различных типов.
Объекты могут отсутствовать.
Управляющие символы не выводятся на экран, а управляют расположением выводимых символов. Отличительной чертой управляющего символа является наличие обратного слэша '\' перед ним.
Основные управляющие символы:
'\n' — перевод строки;
'\t' — горизонтальная табуляция;
'\v' — вертикальная табуляция;
'\b' — возврат на символ;
'\r' — возврат на начало строки;
'\a' — звуковой сигнал.
Форматы нужны для того, чтобы указывать вид, в котором информация будет выведена на экран. Отличительной чертой формата является наличие символа процент '%' перед ним:
%d — целое число типа int со знаком в десятичной системе счисления;
%u — целое число типа unsigned int;
%x — целое число типа int со знаком в шестнадцатеричной системе счисления;
%o — целое число типа int со знаком в восьмеричной системе счисления;
%hd — целое число типа short со знаком в десятичной системе счисления;
%hu — целое число типа unsigned short;
%hx — целое число типа short со знаком в шестнадцатеричной системе счисления;
%ld — целое число типа long int со знаком в десятичной системе счисления;
%lu — целое число типа unsigned long int;
%lx — целое число типа long int со знаком в шестнадцатеричной системе счисления;
%f — вещественный формат (числа с плавающей точкой типа float);
%lf — вещественный формат двойной точности (числа с плавающей точкой типа double);
%e — вещественный формат в экспоненциальной форме (числа с плавающей точкой типа float в экспоненциальной форме);
%c — символьный формат;
%s — строковый формат.
34 Потоковый ввод/вывод
В языке С++ был разработан другой способ ввода/вывода с использованием так называемых потоков ввода и вывода.