на тему рефераты
 
Главная | Карта сайта
на тему рефераты
РАЗДЕЛЫ

на тему рефераты
ПАРТНЕРЫ

на тему рефераты
АЛФАВИТ
... А Б В Г Д Е Ж З И К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я

на тему рефераты
ПОИСК
Введите фамилию автора:


Реферат: Лекции по C++


·     Использование стандартной библиотеки функций для работы со строками

·     Присвоение значений строкам

·     Определение длины строки

·     Конкатенация строк

·     Сравнение строк

·     Преобразование строк

·     Перестановка символов в строке в обратном порядке

·     Поиск символа

·     Поиск подстроки

Форматированный потоковый вывод

C++ имеет целое семейство гибких библиотек функций ввода/вывода. Разработчикам языка было ясно, что функции ввода/вывода из STDIO.H, унаследованные из С, имеют ограничения при работе с классами (вы узнаете больше о классах в главе 8)., В результате в C++ было введено понятие потоков. Вспомним, что потоки, которые уже существовали в С, означают последовательность данных, передаваемых из одной части компьютера в дру­гую. В программах, рассматриваемых ранее, вы видели операцию помещения в поток «, например — в стандартный поток вывода, cout. Встречалась вам и операция извлечения из потока », применяемая к стандартному потоку ввода, cin. В этом разделе мы познакомимся с потоковыми функциями width и precision, используемыми при форматировании вывода. Библиотеки потоков C++ содержат большое количество таких функций, позволяющих настроить ваш вывод.

Функция width задает ширину поля вывода. Общая форма использования функции width с потоком cout:

cout.width (widthOf Output);

Функция precision определяет количество значащих цифр после точки для чисел с пла­вающей точкой. Общая форма использования функции precision с потоком cout:

cout.precision(numberOfDigits) ;

Обратимся к примеру, программе OUT1.CPP, исходный текст которой при­веден в листинге 1. Программа, в которую ничего не вводится, просто выво­дит форматированные целые числа, числа с плавающей точкой и символы с использованием функций width и precision.

Листинг 1. Исходный текст программы OUT1.CPP

01 // Программа иллюстрирует потоковый форматированный вывод в C++
02 // с использованием функций width и precision
03 #include <iostream.h>
04
05 int main()
06 {
07 int      anInt      = 67;
08 unsigned char aByte = 128;
09 char     aChar      = '@';
10 float    aSingle    = 355.1112;
11 double   aDouble    = 1.131112e+002;
12
13 // Вывод простых выражений
14 cout.width(3); cout << int(aByte) << " + ";
15 cout.width(2); cout << anInt << " = ";
16 cout.width(3); cout << (aByte + anInt) << endl;
17
18 cout.precision(3); cout << aSingle << " / ";
19 cout << aDouble << " =";
20 cout.width(7); cout.precision(4); cout << (aSingle / aDouble) << endl;
21
22 cout << "Символьная переменная aChar: "
23 << aChar << endl;
24 return 0;
25 }

Пример программной сессии:

Введите три числа через пробел: 123

Сумма чисел = 6

Среднее этих чисел = 2

Введите три символа: ABC

Вы ввели символы 'A', 'B', 'C'

Введите число, символ, и число: 12A34.4

Вы ввели 12 A 34.4

Введите символ, число и символ: A3.14Z

Вы ввели A 3.14 Z

В программе из листинга 2 объявляется четыре переменных типа double и три переменных типа char. Оператор вывода в строке 10 предлагает вам ввести три числа. Оператор ввода в строке 11 помещает введенные вами числа в переменные х, у и z. He забывайте, что при вводе чисел их нужно разделять пробелами. Либо вводите каждое число с новой строки. Первое введенное вами число будет помещено в переменную х, второе — в у, а третье окажется в переменной z. Данные в переменные заносятся в том порядке, в котором пере­менные перечислены в операторе ввода в строке 11. Оператор в строке 12 вычисляет сумму значений переменных х, у и z. Оператор вывода в строках 13 и 14 выводит сумму и среднее значение введенных вами величин.

Оператор вывода в строке 15 предлагает вам ввести три символа. Оператор (ввода в строке 16 последовательно размещает введенные символы в перемен­ных с1, с2, с3. Использовать пробел для разделения вводимых символов не обязательно. Например, вы можете ввести данные и таким образом: 1А2, Bob и 1 D d. Оператор вывода в строках 17—19 выводит введенные вами символы, разделенные пробелами и заключенные в одинарные кавычки.

Оператор вывода в строке 20 предлагает вам ввести число, символ и число. Оператор ввода в строке 21 помещает ваши данные в переменные х, с1 и у. Пробел-разделитель здесь нужен только в том случае, если символ может быть интерпретирован как часть числа. Например, если вам нужно ввести число 12, символ «точка» и число 55, вам нужно набрать на клавиатуре 12 . 55. Вводимый символ «точка» лучше «заключить» в пробелы, чтобы быть уверенным, что поток вода не воспримет эту точку как точку, разде­ляющую в вещественном числе целую и дробную части. Оператор вывода в строке 22 выводит введенные вами данные разделенные пробелами.

Оператор вывода в строке 23 предлагает вам ввести символ, число и символ. Оператор ввода в строке 24 последовательно размещает введенные значения в переменных с1, х, с2. Пробел-разделитель здесь нужно исполь­зовать только в том случае, если символ может быть интерпретирован как часть числа. Например, если вам нужно ввести символ «-», число 12 и цифру 0, вам нужно набрать на клавиатуре 12 0. Оператор вывода в строке 25 выводит введенные вами данные, разделяя их пробелами.

Функция printf

Просматривая программы, написанные разными людьми, вы часто можете встретить функцию printf. Этот стандартный оператор вывода пришел из языка С. Так как C++ является расширением С, эта функция поддерживается и в этом языке. Многие программисты до сих пор предпочитают использовать старую функцию printf, а не потоки ввода/вывода C++. Вот почему вам эта функция наверняка уже знакома. Но, помимо этого, эта функция имеет не­сколько очень мощных возможностей, и в ряде случаев она оказывается удоб­нее функций потоков. Прототип функций можно найти в заголовочном файле STDIO.H.

Функция printf

Общая форма объявления функции printf:

int printf(const char *format[, argument,... ]);

Параметр format является символьным массивом, содержащим вы­водимый текст. Кроме этого обязательного параметра, могут быть необя­зательные аргументы. Массив format может содержать специальные форматирующие символы, которые выполняют преобразование необяза­тельных аргументов при выводе.

Функция printf является очень мощной функцией с богатыми возмож­ностями форматирования вывода. В качестве первого шага в освоении ее возможностей рассмотрим Esc-последовательности, позволяющие представ­лять специальные символы. Esc-последовательность начинается с символа «\» — «обратная косая черта». Esc-коды представлены в таблице 1.

Таблица 1. Еsс - последовательности

Последовательность

Десятичное значение

Шестнадцатеричное значение 

Название

7 0х07 Звонок
\b 8 0х08 Возврат назад
\f 12 0х0С Перевод страницы
\n 10 0х0А Новая строка
13 0x0D Возврат каретки
\t 9 0х09 Табуляция
\v 11 0х0В Вертикальная табуляция
\\ 92 0х5С Обратная черта
\' 44 0х2С Апостроф
\" 34 0х22 Кавычка
\? 63 0х3 F Знак вопроса
\0 Восьмеричное число, от 1 до 3 цифр
\XHHH и \xhhh 0xhhh Шестнадцатеричное число

Функция printf имеет специальные форматирующие спецификации (сим­волы) для вывода переменных. Общий вид этих спецификаций таков:

% [flags] [width] [.precision] [F | N | h | l | L ] <символ типа>

Опции flags могут определять выравнивание, отображение знака числа при выводе, вывод десятичной точки и символов заполнения. Кроме того, эти флаги определяют префиксы для восьмеричных и шестнадцатеричных чисел. Воз­можные значения флагов приведены в таблице 2.

Таблица 7.2. Значения флагов строки формата функции printf

Символ

Назначение

- Выравнивать вывод по левому краю поля
+ Всегда выводить знак числа
Пробел Выводить пробел перед положительным числом и знак минус — перед отрицательным
# Не влияет на вывод десятичных целых, для шестнадцатеричных чисел выводит префикс 0х или 0Х, перед восьмеричными целыми выводит ноль, десятичную точку для вещественных чисел.

Спецификация width определяет минимальное количество выводимых символов. Если необходимо, используются заполнители — пробелы или нули. Когда значение для width начинается с нуля, printf использует в качестве заполнителей нули, а не пробелы. Если в качестве значения для width используется универсальный символ *, а не число, то printf подставляет на место этого символа значение, которое должно содержаться в списке аргументов. Это значение ширины поля должно предшествовать выводимому значению. Ниже приведен пример вывода числа 2, занимающего три позиции, согласно значе­нию второго аргумента printf:

printf("%*d", 3, 2);

Спецификатор precision определяет максимальное количество выводимых цифр. В случае целого числа он определяет минимальное количество выво­димых символов. Для precision также можно применить символ *, вместо которого будет подставлено значение из списка аргументов. Это значение точности представления должно предшествовать выводимому значению. Ниже приведен пример вывода числа с плавающей точкой 3.3244 с использованием десяти символов, как это задано вторым аргументом printf:

printf("%7.*f", 10, 3.3244);

Символы F, N, h, l и L являются символами размера, переопределяющими размер по умолчанию. Символы F и N применяются с указателями, far и near соответственно. Символы h, l, и L используются для указания соответ­ственно типов short int, long или long double.

Символам типа данных должен предшествовать форматирующий символ %. В таблице 7.2 мы показали возможные значения флагов форматирующей строки printf. Символы типов данных перечислены в таблице 7.3.

Таблица 3. Символы типов данных строки формата функции printf

Тип данных

символ типа

результат

Символ c Один символ
d Десятичное целое со знаком
i Десятичное целое со знаком
O Восьмеричное целое без знака
N Десятичное целое без знака
X Шестнадцатеричное целое без знака; набор цифр - 0123456789abcdef
X Шестнадцатеричное целое без знака; набор цифр - 0123456789ABCDEF
Указатель P Для указателей near выводит только смещение в виде: 0000. Указатели far отображаются в виде: SSSS:0000
Указатель на целое N
Вещественное F Выводит величину со знаком в формате [-]dddd.dddd
E Выводит вещественную величину со знаком в экспоненциальном формате [-]d.dddde[+|-]ddd
Е Выводит вещественную величину со знаком в экспоненциальном формате [-]d.ddddE[+|-]ddd
G Выводит вещественную величину со знаком в формате f или е в зависимости от ее значения и заданной точности
G Выводит вещественную величину со знаком в формате F или Е в зависимости от ее значения и заданной точности
Указатель S Выводит строку символов, пока не встретит нуль-терминатор строки

Разберем небольшой пример. Программа OUT2.CPP, исходный код ко­торой приведен в листинге 3, создана на основе программы OUT1.CPP. В этой программе используется форматированный вывод с использованием функции printf. Программа выводит те же числа, что и OUT1.CPP, используя три различных набора спецификаций преобразования.

Листинг 3. Исходный текст программы OUT2.CPP в файле List7-3.CPP

01

// Программа, использующая printf для форматирования вывода

02

03

#include <stdio.h>

04

05

int main()

06

{

07

int      anInt      = 67;

08

Unsigned char aByte = 128;

09

char     aChar      = '@';

10

Float    aSingle    = 355.0;

11

Double   aDouble    = 1.130e+002;

12

13

Printf("%3d + %2d = %3d\n",

14

aByte, anInt, aByte + anInt );

15

16

Printf("Вывод использует спецификации преобразования %%lf :\n");

17

Printf("   %6.4f / %10.4lf = %7.5lf\n",

18

aSingle, aDouble, aSingle / aDouble );

19

20

Printf("Вывод использует спецификации преобразования %%le :\n");

21

printf("   %6.4e / %6.4le = %7.5le\n",

22

aSingle, aDouble, aSingle / aDouble );

23

24

printf("Вывод использует спецификации преобразования %%lg :\n");

25

printf("   %6.4g / %6.4lg = %7.5lg\n",

26

aSingle, aDouble, aSingle / aDouble );

27

28

printf("Символьная переменная aChar: %c\n", aChar);

29

printf("ASCII-код %c: %d\n", aChar, aChar);

30

return 0;

31

}

Пример вывода программы из листинга 3:

128 + 67 = 195

Вывод использует спецификации преобразования %lf :

   355.0000 /   113.0000 = 3.14159

Вывод использует спецификации преобразования %le :

   3.5500e+02 / 1.1300e+02 = 3.14159e+00

Вывод использует спецификации преобразования %lg :

      355 /    113 =  3.1416

Символьная переменная aChar: @

ASCII-код @: 64

В программе из листинга 3 объявляется целый набор переменных раз­личных типов. Оператор вывода в строках 13 и 14 выводит целые, используя спецификацию формата %d. В таблице 4 приведены результаты действия спецификаций преобразования из строки 13. Обратите внимание на то, что первая переменная была преобразована из типа unsigned char в тип integer.

Таблица 4. Результат действия спецификаций форматирования в функции printf из строки 13

Спецификация формата

Переменная

Тип данных

Тип после преобразования

%3d aByte unsigned char Int
%2d anInt int Int
%3d aByte + anInt int Int

Оператор вывода в строке 17 выводит переменные aSingle, aDouble и вы­ражение aSingle / aDouble, используя спецификации преобразования %6.4f, %6.41f и % 7.51f. Точность представления задается ими равной 4, 4 и 5 цифрам, а минимальная ширина поля 6, 6 и 7 цифрам соответственно. Две последних спецификации осуществляют преобразование величин двойной точности.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11


на тему рефераты
НОВОСТИ на тему рефераты
на тему рефераты
ВХОД на тему рефераты
Логин:
Пароль:
регистрация
забыли пароль?

на тему рефераты    
на тему рефераты
ТЕГИ на тему рефераты

Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое.


Copyright © 2012 г.
При использовании материалов - ссылка на сайт обязательна.