![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Символьный тип данных (тип char)Содержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
В стандарте C++ нет типа данных, который можно было бы считать действительно символьным. Для представления символьной информации есть два типа данных, пригодных для этой цели, – это типы char и wchar_t. Переменная типа char рассчитана на хранение только одного символа (например, буквы или пробела). В памяти компьютера символы хранятся в виде целых чисел. Соответствие между символами и их кодами определяется таблицей кодировки, которая зависит от компьютера и операционной системы. Почти во всех таблицах кодировки есть прописные и строчные буквы латинского алфавита, цифры 0,..., 9, и некоторые специальные символы. Самой распространенной таблицей кодировки является таблица символов ASCII (American Standard Code for Information Interchange – Американский стандартный код для обмена информацией). Так как в памяти компьютера символы хранятся в виде целых чисел, то тип char на самом деле является подмножеством типа int. Под величину символьного типа отводится 1 байт. Тип char может использоваться со спецификаторами signed и unsigned. В данных типа signed char можно хранить значения в диапазоне от –128 до 127. При использовании типа unsigned char значения могут находиться в диапазоне от 0 до 255. Для кодировки используется код ASCII. Символы с кодами от 0 до 31 относятся к служебным и имеют самостоятельное значение только в операторах ввода-вывода. Величины типа char также применяются для хранения чисел из указанных диапазонов. Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например в кодировке Unicode. Размер типа wchar_t равен 2 байтам. Если в программе необходимо использовать строковые константы типа wchar_t, то их записывают с префиксом L, например, L "Слово". Например: char c='c'; char a,b; char r[]={'A','B','C','D','E','F','\0'}; char s[] = "ABCDEF"; Логический (булевый) тип данных (тип bool) В языке С++ используется двоичная логика (истина, ложь). Лжи соответствует нулевое значение, истине – единица. Величины данного типа могут также принимать значения true и false. Внутренняя форма представления значения false соответствует 0, любое другое значение интерпретируется как true. В некоторых компиляторах языка С++ нет данного типа, в этом случае используют тип int, который при истинных значениях выдает 1, а при ложных – 0. Под данные логического типа отводится 1 байт.
Вопрос 25. Операции над данными стандартных типов и их старшинство.
Присваивание В одной строке может стоять больше одной операции присваивания =. Пример. a=b=c=d=100; Знак = всегда означает: "переменной слева присвоить значение, стоящее справа ". Операция выполняется справа налево. Поэтому первой значение 100 получает переменная d, затем с, b и а. Знак присвоить может стоять даже внутри математического выражения: value=5+(r=9-c) Присваивание имеет более высокий приоритет, чем сложение и вычитание. Поэтому сначала переменной r будет присвоено значение 9-с. А затем переменная value получит значение 5+9-с. Составное присваивание При написании программы часто требуется изменить значение переменной. Например, требуется взять текущее значение переменной, прибавить или умножить это значение на какое-то выражение, а затем присвоить это значение той же переменной. Такие операции выполняют операторы составного присваивания.
Преобразование типов (тип данных) выражение v=(double)age*f; - переменная age временно преобразуется к типу с плавающей точкой двойной точности и умножается на переменную f.
Операции отношения
Операции инкремента (++) и декремента (-) В языке C++ предусмотрены две уникальные операции, которые увеличивают или уменьшают значение переменной на 1.
Префиксный и постфиксные операции различаются приоритетом. Префиксные операции имеют самый большой приоритет и выполняются до любой другой операции. Постфиксные операции имею самый маленький приоритет и выполняются после всех остальных операции.
Операция sizeof Имеет формат sizeof данные или sizeof (тип данных) Операция sizeof возвращает размер в байтах указанного в ней данного или типа данных. Пример. cout " "Размер типа float в байтах=\t" "sizeof (float) Результат: 4. Операция "запятая" Дополнительная операция (,) не работает непосредственно с данными, а приводит к вычислению выражения слева направо. Эта операция позволяет Вам использовать в одной строке несколько выражений, разделенных запятой. Оператор?: (Условие)? (выражение1):(выражение2) Если условие истинно, то выполняется выражение1, а если ложно, то выражение2. Пример. (а>b)? (ans =10):(ans=25); или ans=(a>b)?(10):(25); Если а>b, то переменная ans получается значение 10, иначе - значение 0.25 Поразрядные операции &, и |,или ^ исключающее или Логические бинарные операции (&&-конъюнкция(И) и || дизъюнкция (или)) Унарные операции: & - операция получения адреса операнда * - операция обращения по адресу, т.е. раскрытия ссылки, иначе операция разыменования (доступа по адресу к значению того объекта, на который указывает операнд (адрес)). - - унарный минус- изменяет знак арифметического операнда. + - унарный плюс (введен для симметрии с унарным минусом) ! – логическое отрицание значения операнда. ++ - увеличение на единицу (инкремент или автоувеличение): префиксная операция – увеличение значения операнда на 1 до его использования постфиксная операция – увеличение значения операнда на 1 после его использования. Операнд не может быть константой. -- - уменьшение на 1 (декремент) sizeof – операция вычисления размера(в байтах) для объекта того типа, который имеет операнд. Бинарные операции: - Аддитивные (+- сложение арифметических операндов, - вычитание арифметических операндов) - Мультипликативные (* - умножение операндов арифметического типа, / - деление операндов арифметического типа, %- получение остатка от деления целочисленных операндов (деление по модулю)) -Операции сдвига (<<- сдвиг влево битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда, >>- сдвиг вправо битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого целочисленного операнда) -Операции отношения (сравнения) (> < <= >=!= = =-равно) -Логические бинарные операции (&&-конъюнкция(И) и || дизъюнкция (или)) -Операции присваивания (=- присвоить значение выражения-операнда из правой части операнду левой части p=10.3 – 2*x, *= присвоить левой части произведение значений обоих операндов P*=2 эквивалентно P = P*2, /= P/=2.2-d эквивалентно P=P/ (2.2-d), %= N%3 эквивалентно N=N % 3;,+= присвоить операнду левой части сумму значений обоих операндов А+= В эквивалентно А=А+В, -= Х -=4.5 – z эквивалентно Х=Х – (4.2 – z), -Запятая в качестве операции (несколько выражений, разделенных запятыми, вычисляются последовательно слева направо. В качестве результата сохраняются тип и результат самого правого значения). Приоритеты операций задают последовательность вычислений в сложном выражении
Вопрос 26. Потоковый ввод и вывод информации в языке С++ Дело в том, что никакая полезная программа не может быть написана на языке С++ без привлечения библиотек, включаемых в конкретную среду (в компилятор) языка. Самая незаменимая из этих библиотек - библиотека ввода-вывода.
Потоки ввода-вывода В соответствии с названием заголовочного файла iostream.h (stream - поток; "i" - сокращение от input - ввод; "o" - сокращение от output - вывод) описанные в этом файле средства ввода-вывода обеспечивают программиста механизмами для извлечения данных из потоков и для включения (внесения) данных в потоки. Поток определяется как последовательность байтов (символов) и с точки зрения программы не зависит от тех конкретных устройств (файл на диске, принтер, клавиатура, дисплей, стример и т.п.), с которыми ведется обмен данными. При обмене с потоком часто используется вспомогательный участок основной памяти - буфер потока. В буфер потока помещаются выводимые программой данные перед тем, как они будут переданы к внешнему устройству. При вводе данных они вначале помещаются в буфер и только затем передаются в область памяти выполняемой программы. Использование буфера как промежуточной ступени при обменах с внешними устройствами повышает скорость передачи данных, так как реальные пересылки осуществляются только тогда, когда буфер уже заполнен (при выводе) или пуст (при вводе). Работу, связанную с заполнением и очисткой буферов ввода-вывода, операционная система очень часто берет на себя и выполняет без явного участия программиста. Поэтому поток в прикладной программе обычно можно рассматривать просто как последовательность байтов. При этом очень важно, что никакой связи значений этих байтов с кодами какого-либо алфавита не предусматривается. Задача программиста при вводе-выводе с помощью потоков - установить соответствие между участвующими в обмене типизированными объектами и последовательностью байтов потока, в которой отсутствуют всякие сведения о типах представляемой (передаваемой) информации. Используемые в программах потоки логически делятся на три типа: • входные, из которых читается информация; • выходные, в которые вводятся данные; • двунаправленные, допускающие как чтение, так и запись. Все потоки библиотеки ввода-вывода последовательные, т.е. в каждый момент для потока определены позиции записи и (или) чтения, и эти позиции после обмена перемещаются по потоку на длину переданной порции данных. В соответствии с особенностями "устройства", к которому "присоединен" поток, потоки принято делить на • стандартные, • консольные, • строковые и • файловые. В заключение перечислим отличительные особенности применения механизма потоков. Потоки обеспечивают:
• буферизацию при обменах с внешними устройствами; • независимость программы от файловой системы конкретной операционной системы; • контроль типов передаваемых данных; • возможность удобного обмена для типов, определенных пользователем. Под вводом-выводом в программировании понимается процесс обмена информацией между оперативной памятью и внешними устройствами: клавиатурой, дисплеем, магнитными накопителями и т. п. Ввод — это занесение информации с внешних устройств в оперативную память, а вывод — вынос информации из оперативной памяти на внешние устройства. Такие устройства, как дисплей и принтер, предназначены только для вывода; клавиатура — устройство ввода. Магнитные накопители (диски, ленты) используются как для ввода, так и для вывода. Основным понятием, связанным с информацией на внешних устройствах ЭВМ, является понятие файла. Всякая операция ввода-вывода трактуется как операция обмена с файлами: ввод — это чтение из файла в оперативную память; вывод — запись информации из оперативной памяти в файл. Поэтому вопрос об организации в языке программирования ввода-вывода сводится к вопросу об организации работы с файлами. Вспомним, что в Паскале мы использовали представления о внутреннем и внешнем файле. Внутренний файл — это переменная файлового типа, являющаяся структурированной величиной. Элементы файловой переменной могут иметь разный тип и, соответственно, разную длину и форму внутреннего представления. Внутренний файл связывается с внешним (физическим) файлом с помощью стандартной процедуры Assign. Один элемент файловой переменной становится отдельной записью во внешнем файле и может быть прочитан или записан с помощью одной команды. Попытка записать в файл или прочитать из него величину, не совпадающую по типу с типом элементов файла, приводит к ошибке. Аналогом понятия внутреннего файла в языках Си/Си++ является понятие потока. Отличие от файловой переменной Паскаля состоит в том, что потоку в Си не ставится в соответствие тип. Поток — это байтовая последовательность, передаваемая в процессе ввода-вывода. Поток должен быть связан с каким-либо внешним устройством или файлом на диске. В терминологии Си это звучит так: поток должен быть направлен на какое-то устройство или файл. Основные отличия файлов в Си состоят в следующем: здесь отсутствует понятие типа файла и, следовательно, фиксированной структуры записи файла. Любой файл рассматривается как байтовая последовательность:
Стрелочкой обозначен указатель файла, определяющий текущий байт файла. EOF является стандартной константой — признаком конца файла. Стандартные потоки (istream, ostream, iostream) служат для работы с терминалом. Строковые потоки (istrstream, ostrstream, strstream) служат для ввода-вывода из строковых буферов, размещенных в памяти. Файловые потоки (ifstream, ofstream, fstream) служат для работы с файлами. · ios базовый потоковый класс · streambuf буферизация потоков · istream потоки ввода · ostream потоки вывода · iostream двунаправленные потоки · iostream_withassign поток с переопределенной операцией присваивания
· istrstream строковые потоки ввода · ostrstream строковые потоки вывода · strstream двунаправленные строковые потоки · ifstream файловые потоки ввода · ofstream файловые потоки вывода · fstream двунаправленные файловые потоки · Потоки для работы с файлами создаются как объекты следующих классов: · ofstream - запись в файл; · ifstream - чтение из файла; · fstream - чтение/запись. · · · · Ввод/вывод в C++ осуществляется с помощью потоков библиотеки C++, доступных при подключении заголовочного файла iostream.h (в VC++.NET – объекта-заголовка iostream). Поток представляет собой объект какого-либо потокового класса. · Потоковые классы сконструированы на основе базового класса ios: · ios – базовый потоковый класс; · istream – класс входных потоков; · ostraem – класс выходных потоков; · iostream – класс двунаправленных потоков ввода/вывода. · В потоковые классы включены операторы добавления данных в поток << и извлечения данных из потока >>. · На основе класса istream в библиотеке C++ объявлен объект-поток cin, представляющий собой стандартный буферизованный входной поток, связанный обычно с клавиатурой консоли. Извлечение данных из потока имеет следующую форму записи: · int a; · float b; · cin >> a >> b; · где a и b – переменные заданного типа, в которые помещаются данные из потока cin. · В роли разделителей значений в потоке используются пробельные символы (пробел, знак табуляции, перевод строки), поэтому для ввода данных с помощью cin при выполнении программы следует ввести с клавиатуры значения следующими способами: · 34 5.78 Enter · или · 34 Enter 5.78 Enter · Ввод данных в поток завершается нажатием клавиши Enter. Если количество заполняемых переменных меньше, чем количество значений в потоке, из потока извлекается столько значений, сколько переменных надо заполнить, а остальные значения сохраняются в потоке и будут прочитаны при следующем извлечении данных из потока. · На основе класса ostream объявлен объект-поток cout, представляющий собой стандартный буферизованный выходной поток, связанный обычно с дисплеем консоли. · Форма записи добавления данных в поток следующая: · cout << a << b; · при этом значения переменных a и b выводятся на экран без разделителя и в формате, заданном по умолчанию. Перемещение курсора на следующую строку экрана после вывода данных не происходит. · Для перевода курсора на новую строку используется манипулятор endl: · cout << a <<" "<< b << endl; · В этом примере значения переменных a и b на экране разделены пробелом, после вывода данных происходит переход на новую строку, а сами значения выводятся на экран в виде, соответствующем их типу: 34 5.78. · Для потока cin определен специальный метод для ввода символов – getline(Str,Count), позволяющий в строковую переменную Str ввести из потока заданное количество символов(Count−1): · char str1[128]; · cout <<"STR1-->"; · cin.getline(str1,9); · cout << str1 << endl; · Если при выполнении этого фрагмента программы ввести с клавиатуры последовательность символов abcdefghj, в переменную str1 будут помещены 8 символов и символ '\0', а на экране появится строка abcdefgh. · В потоках cin и cout можно форматировать данные, для этого используются специальные манипуляторы, доступные через заголовочный файл iomanip.h. · Пример · Форматирование вывода в потоке cout: · #include <iostream.h> · #include <iomanip.h> · int main(void) · { · //Выравнивание по левому краю – left, по правому краю – right · cout.setf(ios_base::left); · //Вывод с плавающей точкой – scientific, с фиксированной – fixed · cout.setf(ios_base::scientific); · //Точность вывода числа на экране · cout << setprecision(3); · double x=2.5,y=125.76435; · //Ширина поля вывода числа – 15 знаков · cout << setw(15) << x << setw(15) << y << endl; · return 0; · } · Ответ на экране
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-08-15; просмотров: 2586; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.220.12.210 (0.014 с.) |