Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 15
Текст из файла (страница 15)
пзтпд Бувсепн с1авв Воо10ешо ( втат1с чохи Махп() ( ЬО01 Ь: Ь = та1вет Сопво1е.нгхте11пе("Ь равно " ь Ь); Ь = споет Сопзо1е.ыгхпеьтпе("Ь равно " ь Ы; // Логическое значение может управлять // оператором хт. 1т(Ь) Сопзо1е.нгтте11пе("Выполняется.") Ь = та1вет 11(Ь) Сопзо1е.ыгтте11пе("Не выполняется."); // результатом выполнения оператора отношения // является логическое значение. Сопво1е.Игхтег Ьпе("10 > Э равно " ь (10 > Э)); ) ) Эта программа дает следующий результат: Ь равно Га1ве Ь равно тгпе Выполняется. 10 > Э равно тгпе В приведенной выше программе обнаруживаются три интересных свойства. Вопервых, при выводе логического значения типа Ьоо1 с помощью метода Игттептпе () на экране появляегся значение "Тгпе" или "та)зе".
Во-вторых, самого значения переменной типа Ь001 достаточно для управления оператором 1т. Для этого не нужно, например, записывать оператор хт следующим образом: 11(Ь == Сгче) И в-третьих, результатом выполнения оператора отношения является логическое значение.
Именно поэтому в результате вычисления выражения 10 > 9 на экран выводится значение "Тгпе." Кроме того, выражение 10 > 9 следует заключить в скобки, поскольку оператор + имеет более высокий приоритет, чем оператор >. 72 часть (. язык Сэ Другие возможности вывода До сих пор при выводе с помощью метода Хг10е11пе () данные отображались в формате, используемом по умолчанию. Но в среде .)ь)ЕТ Ргатетчог(г определен достаточно развитый механизм форматирования, позволяющий во всех деталях управлять выводом данных. Форматированный ввод-вывод подробнее рассматривается далее в этой книге, а до тех пор полезно ознакомиться с некоторыми возможностями форматирования.
Они позволяют указать, в каком именно виде следует выводить значения с помощью метода хг1сеь1пе () . Благодаря этому выводимый результат выглядит более привлекательно. Следует, однако, иметь в виду, что механизм форматирования поддерживает намного больше возможностей, а не только те, которые рассматриваются в этом разделе. При выводе списков данных в предыдущих примерах программ каждый элемент списка приходилось отделять знаком +, как в следующей строке: Сопзо1е.нгьлет.).пе("Вы заказали " ь 2 ь " предмета по цене $" т 3 а " каждый.")т Конечно, такой способ вывода числовой информации удобен, но он не позволяет управлять внешним видом выводимой информации. Например, при выводе значения с плавающей точкой нельзя определить количество отображаемых десятичных разрядов. Рассмотрим оператор сопзо1е.хггсеьгпе("деление 10/3 дает: " е 10.0/3.0)т который выводит следующий результат: Деление 10/3 дает: 3.33333333333333 В одних случаях такого вывода может оказаться достаточно, а в других — он просто недопустим.
Например, в финансовых расчетах после десятичной точки принято указывать лишь два десятичных разряда. Для управления форматированием числовых данных служит другая форма метода Хгугеьупе (), позволяющая встраивать информацию форматирования, как показано ниже. Хг1севьпе( "форматирующая строка", атдО, агд1, ..., алды); В этой форме аргументы метода Хг1геь1пе () разделяются запятой, а не знаком +. А Форматирующая строка состоит из двух элементов: обычных печатаемых символов, предназначенных для вывода в исходном виде, а также спецификаторов формата. Последние указываются в следующей обшей форме: (агдлит, ыхоелт Гтг) где агдпию — номер выводимого аргумента, начиная с нуля; ыус(сп — минимальная ширина поля; гас — формат. Параметры ыхс)с)т и йлс являются необязательными.
Если во время выполнения в форматирующей строке встречается спецификатор формата, то вместо него подставляется и отображается соответствующий аргумент, обозначаемый параметром агдп цю. Таким образом, местоположение спецификатора формата в форматирующей строке определяет место отображения соответствующих данных. Параметры ыхс(с)т и гюс указывать необязательно. Это означает, что в своей простейшей форме спецификатор формата обозначает конкретный отображаемый аргумент.
Например, спецификатор ( 0 ) обозначает аргумент а гдО, спецификатор (1 ) — аргумент агд1 и т.д. Начнем с самого простого примера. При выполнение оператора Сопво1е.нгхсевапе("В феврале (О) иди (1) дней.", 28, 29)т получается следующий результат: В феврале 28 ипи 29 дней Как видите, значение 28 подставляется вместо спецификатора ( 0 ), а значение 29— вместо спецификатора (1].
Следовательно, спецификаторы формата обозначают место в строке, где отображаются соответствующие аргументы (в данном случае — значения 28 и 29). Кроме того, обратите внимание на то, что дополнительные значения разделяются запятой, а не знаком +. Ниже приведен видоизмененный вариант предыдущего оператора, в котором указывается ширина полей. Сопво1е.Игьге11пе("В феврале (0,10) или (1,5) дней.", 28, 29); Выполнение этого оператора дает следующий результат: 28 иди 29 днеи. В феврале Как видите, неиспользуемые части полей заполнены пробелами.
Напомним, что минимальная ширина поля определяется параметром их с)с)т. Если требуется, она может быть превышена при выводе результата. Разумеется, аргументы, связанные с командой форматирования, не обязательно должны быть константами. Ниже приведен пример программы, которая выводит таблицу результатов возведения чисел в квадрат и куб.
В ней команды форматирования используются для вывода соответствующих значений. // Применить команды форматирования. ив1пч Яувсепн с1авв гфвр1ауоргхопв ( вгасас но1с Ма1п () ( хпг х; Сопво1е.нгггеЬ1пе("Число1сквадрат1СКуб"); лог(1 = 1; 1 < 10; 1++) Сопзо1е.нг1гестпе("(0)1С(1)1С(2)", 1., 1*1., 1*1*1.)т Результат выполнения этой программы выглядит следующим образом: число 1 2 3 5 б 7 8 9 квадрат 1 4 9 1б 25 зб 49 64 81 куо 1 8 27 б4 125 21б 343 512 729 Глава 3.
Типы данных, литералы и переменные. 73 74 Часть >. язык Сз В приведенных выше примерах сами выводимые значения не форматировались. Но ведь основное назначение спецификаторов формата — управлять внешним видом выводимых данных. Чаще всего форматированию подлежат следующие типы данных: с плавающей точкой и десятичный. Самый простой способ указать формат данных — описать шаблон, который будет использоваться в методе игзсеыпе () . Для этого указывается образец требуемого формата с помощью символов ф, обозначающих разряды чисел. Кроме того, можно указать десятичную точку и запятые, разделяющие цифры. Ниже приведен пример более подходящего вывода результата деления 10 на 3. Сопяо1е.нгзсеььпе("деление 10/3 дает: (О:$.Н>", 10.0/3.0>т Выполнение этого оператора приводит к следующему результату: Деление 10/3 лает: 3.33 В данном примере шаблон $ .
фф указывает методу иг1СеЫпе () отобразить два десятичных разряда в дробной части числа. Следует, однако, иметь в виду, что метод игфгеьфпе () может отобразить столько цифр слева от десятичной точки, сколько потребуется для правильной интерпретации выводимого значения.
Рассмотрим еще один пример. Оператор Сопяо1е.игксе11пе("(О:ЗН,ЗЗЗ.$$)", 123456.56); дает следующий результат. 123,456.56 Для вывода денежных сумм рекомендуется использовать спецификатор формата С. Например: бесзва1 Ьа1апсет Ьа1апсе 12323.09вт Сопяо1е.ыг1сепзпе("Текущий баланс равен (О:С)", Ьа1апсе>к Результат выполнения этого фрагмента кода выводится в формате денежных сумм, указываемых в долларах США.
Текущий баланс равен 512,323.09 Форматом С можно также воспользоваться для того, чтобы представить в более подходящем виде результат выполнения рассматривавшейся ранее программы расчета цены со скидкой. // Испольэовать спецификатор формата С для вывода // результата в местной валюте. цязпч Буягесн с1аяв ОяеОесзва1 ( вгакзс но1б Мазп() ( бесзва1 ргзсе; бесзва1 бзясоцпс; бесзва1 бзясоцпсеб ргзсет // рассчитать цену со скидкой.
рг1се 19.95вт бзясоцпс 0.15вт // норма скидки составляет 15$ бзясоцпсеб ргзсе = ргзсе - ( рг1се * бзясоцпс)т Глава 8. Типы данных, литералы и переменные 75 сооно1е.нг1сеььле)"цека со скидкой: )О:с)", с)1лсоилсеа ргьсе)т ) ) Вот как теперь выглядит результат выполнения этой программы: Цена со скидкой: 1б, 9б грн. Литералы В Ст) литералами называют постоянные значения, представленные в удобной для восприятия форме. Например, число 100 является литералом. Сами литералы и их назначение настолько понятны, что они применялись во всех предыдущих примерах программ без всяких пояснений.
Но теперь настало время дать им формальное объяснение. В С)т литералы могут быть любого простого типа. Представление каждого литерала зависит от конкретного типа. Как пояснялось ранее, символьные литералы заключаются в одинарные кавычки. Например, 'а' н '%' являются символьными литералами. Целочисленные литералы указываются в виде чисел без дробной части. Например, 1 0 и -100 — это целочисленные литералы, Для обозначения литералов с плавающей точкой требуется указывать десятичную точку и дробную часть числа.
Например, 11. 123 — это литерал с плавающей точкой. Для вещественных чисел с плавающей точкой в Ст) допускается также использовать экспоненциальное представление. У литералов также должен быть конкретный тип, поскольку Стт является строго типизированным языком. В этой связи возникает естественный вопрос: к какому типу следует отнести числовой литерал, например 2, 123987 или О. 23? К счастью, для ответа на этот вопрос в Стт установлен ряд простых для соблюдения правил.
Во-первых, у целочисленных литералов должен быть самый мелкий целочисленный тип, которым они могут быть представлены, начиная с типа 1пС. Таким образом, у целочисленных литералов может быть один из следующих типов: 1пс, пбпс, 1оп9 или о1оп9 в зависимости от значения литерала. И во-вторых, литералы с плавающей точкой относятся к типу с)оиЬ1е. Если вас не устраивает используемый по умолчанию тип литерала, можете явно указать другой его тип с помощью суффикса.