Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 2565; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.43.200 (0.009 с.) |