Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие СS_Шульга.doc
Скачиваний:
48
Добавлен:
12.02.2015
Размер:
703.49 Кб
Скачать

Int.MinValue

Все допустимые элементы класса можно посмотреть в окне редактора, введя символ точки сразу после имени типа, например,

int.

Над переменными различных типов можно совершать различные операции, например, для целочисленного типа - арифметические операции(сложение, умножение, инкремента и т.д.), операции отношения (больше, меньше и т.д) и многие другие. Знаки операций в языке С# совпадают со знаками операций языка С, потому в данном учебном пособии они описываться не будут. В С# есть всего несколько операций, которых нет в языке С. Одна из них описанная выше операция new. Со знаками операций языка С# в библиотеке MSDN 4.

Задание 2. Описание переменных и преобразование типов

Каждому студенту рекомендуется выполнить упражнения 1–3.

  1. Определите количество байтов, которые занимают в памяти переменные всех типов даннях из таблицы 2 . Результат выведите на экран в виде

sizeof (int)=4

sizeof (long)=8…

  1. Опишите в программе две переменные целого типа и инициализируйте их числами 10 и 3. Выведите на экран вещественное число, равное делению первой переменной на вторую. (Используйте операцию деления /. При делении целых чисел эта операция возвращает только целую часть частого. Результат операции деления / будет вещественным, если делимое или (и) делитель – вещественное число. Поэтому, в данной задачи необходимо использовать явное преобразование типов).

  2. Опишите в программе переменную символьного типа и инициализируйте ее произвольным символом. Выведите на экран ASCII–код введенного символа, а также символы – больший и меньший «сосед» данного по ASCII–коду.

Глава 3. Ввод – вывод значений переменных

Значение переменной может быть указано при описании, а может быть введено с клавиатуры. Рассмотрим, как происходит ввод – вывод в языке С#.

В языке С# не определено операторов ввода – вывода. Вместо них для обмена с внешними устройствами используются стандартные объекты. Для работы с консолью (ввода с клавиатуры, вывода на экран) применяется класс Console из пространства имен System, в котором определены, в частности, основные методы для ввода-вывода данных:

  • Write и WriteLine (методы вывода данных),

  • ReadиReadLine(методы ввода данных).

Данные методы являются перегруженными, то есть в классе Console описано несколько методов с одним именем, например WriteLine, но разными параметрами. Для ввода – вывода данных вызывается один из перегруженных методов в зависимости от типов параметров. Например,

Console.WriteLine("Результат");// вывод строки

Console.WriteLine(10);// вывод целой константы

Console.WriteLine(‘a’);// вывод символа

Методы вывода перегружены для всех основных типов данных, кроме того предусмотрены варианты для форматированного вывода. Методы Write и WriteLine отличаются тем, что первый переводит строку после вывода параметра, а второй – нет.

Метод WriteLine может быть вызван с одним или несколькими параметрами.

Если метод WriteLine вызывается с одним параметром, то в качестве этого параметра можно использовать любую переменную или выражение вcтроенного типа.

Например,

Console.WriteLine ("Результат");

int a=10, b=5;

char c= ‘a’;

Console.WriteLine (a+b);// 15

Console.WriteLine (c);// a

Кроме того в качестве параметра можно использовать конкатенацию (сцепление) нескольких объектов, которая образуется с помощью знака операции +. Например

Console.WriteLine("Результат ="+(a+b)+" Символ="+с);

//Результат=15 Символ=a

Такого же результата можно добиться использую так называемый форматный вывод, при котором метод WriteLine имеет более одного параметра.

Console.WriteLine("Результат ={0} Символ={1}",(a+b),с);

При этом в качестве первого параметра методу передается строковая константа, которая кроме символов, предназначенных для вывода на экран, содержит параметры в фигурных скобках. Эти параметры нумеруются с нуля и перед выводом заменяются значениями соответствующих значений объектов в списке параметров метода WriteLine: нулевой параметр заменяется значением первого объекта (в нашем случае выражения a+b), первый параметр - вторым объектом (в нашем случае переменной c) и т.д.

В общем случает параметр формата задается следующим образом:

{n [, m:спецификатор формата [число]]} , где

n- номер параметра;

m – минимальная ширина поля вывода (если выводимому значению достаточно меньшего количества позиций, то остальные заполняются нулями, если больше – параметр игнорируется; вывод осуществляется по правому краю ширины области вывода);

спецификатор формата – спецификатор, определяющий формат вывода значения (например, С – вывод валюты, с учетом национальных особенностей представления, F – вывод числа с фиксированной точкой, D – вывод десятичного целого числа);

число – количество позиций, отводимых под дробную часть выводимого значения.

Например,

float a=3.5F, b=5.1F, c=6.2F;

Console.Write("{0,40:C}\n{1:F5}\n{2:D4}", a,b,c);

// в центе экрана5будет выведено 3,50р.

// на следующей строке будет выведено 5,10000

// на следующей строке будет выведено 0006

Следующий пример демонстрирует работы метода Console.WriteLine(string,object) с различными спецификаторами формата.

using System;

class Sample

{

enum Color {Yellow = 1, Blue, Green};

static DateTime thisDate = DateTime.Now;

/* DateTime– структура, определенная в пространстве именSystem. Представляет текущее время, обычно выраженное как дата и время суток. Now – свойства структуры DateTime, получает объект DateTime, которому присвоены текущие дата и время данного компьютера, выраженные как местное время. */

staticvoidMain()

{

// Форматирование отрицательных целых чисел и вещественных чисел

Console.WriteLine("Standard Numeric Format Specifiers");

Console.WriteLine(

"(C) Currency:..{0:C}\n" + //(C) Currency:..(123.00р)

"(D) Decimal:..{0:D}\n" + //(D) Decimal:..-123

"(E) Scientific:..{1:E}\n" +//(E) Scientific:..-1.234500E+002

"(F) Fixed point:..{1:F}\n" +//(F)Fixed point:..-123.45

"(G) General:..{0:G}\n" + //(G) General:.. -123

"(default):..{0} (default = 'G')\n" +

//(default):.. -123 //(default = 'G')

"(N) Number: ..{0:N}\n" + //(N) Number:..-123.00

"(P) Percent:..{1:P}\n" + //(P) Percent:..-12,345.00 %

"(R) Round-trip:..{1:R}\n" +//(R) Round-trip:..-123.45

"(X) Hexadecimal:..{0:X}\n",//(X) Hexadecimal:..FFFFFF85

-123, -123.45f);

// Форматирование текущей даты

Console.WriteLine("Standard DateTime Format Specifiers");

Console.WriteLine(

"(d) Short date:.. {0:d}\n" +//(d) Short date:.. 6/26/2004

"(D) Long date:.. {0:D}\n" +

//(D) Long date:..Saturday, June 26, 2004

"(t) Short time:.. {0:t}\n" +//(t) Short time:.. 8:11 PM

"(T) Long time:.. {0:T}\n" +//(T) Long time:.. 8:11:04 PM

"(f) Full date/short time:.. {0:f}\n" +

//(f) Full date/short time:..Saturday, June 26,2004 8:11 PM

"(F) Full date/long time:.. {0:F}\n" +

// (F) Full date/long time:..Saturday, June 26,2004 8:11:04 PM

"(g) General date/short time:.. {0:g}\n" +

//(g) General date/short time:..6/26/2004 8:11 PM

"(G) General date/long time:.. {0:G}\n" +

//(G) General date/long time:.. 6/26/2004 8:11:04 PM

" (default):.. {0} (default = 'G')\n" +

//(default):.. 6/26/2004 8:11:04 PM (default = 'G')

"(M) Month:.. {0:M}\n" +//(M) Month:.. June 26

"(R) RFC1123:.. {0:R}\n" +

//(R) RFC1123:.. Sat, 26 Jun 2004 20:11:04 GMT

"(s) Sortable:.. {0:s}\n" +

//(s) Sortable:..2004-06-26T20:11:04

"(u) Universal sortable:..{0:u} (invariant)\n" +

//(u) Universal sortable:..2004-06-26 20:11:04Z (invariant)

"(U) Universal full date/time: {0:U}\n" +

//(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM

"(Y) Year:.. {0:Y}\n", //(Y) Year:.. June, 2004

thisDate);

// Форматирование перечисления Color

Console.WriteLine("Standard Enumeration Format Specifiers");

Console.WriteLine(

"(G) General:.. {0:G}\n" +// G) General:.. Green

" (default):.. {0} (default = 'G')\n" +

//( (default):.. Green (default = 'G')

"(F) Flags:.. {0:F} (flags or integer)\n" +

//(F) Flags:.. Green (flags or integer)

"(D) Decimal number:.. {0:D}\n" +//(D) Decimal number:..3

"(X) Hexadecimal:.. {0:X}\n", // (X) Hexadecimal:.. 00000003

Color.Green);

}

}

Кроме того, при форматном выводе могут использоваться пользовательские шаблоны форматирования. При этом после двоеточия задается вид выводимого значения посимвольно. Если, например, на месте символа стоит знак #, то будет выведена цифра, при условии что она не равна нулю. Если на месте символа стоит 0, то будет выведена любая цифра. Например,

float a=3.421F, b=0.1F;

Console.Write("{0,4:0.##} \t{1,4:#.00}", a,b); //3,42 ,10

Строки настраиваемых числовых форматов приведены в библиотеке MSDN6.

Ввод с клавиатуры данных осуществляется следующим образом. Методы Read и ReadLine предназначены для ввода с клавиатуры данных в строку.

Console.Write("Введите строку: ");

string s = Console.ReadLine();

Console.WriteLine(s);

Для ввода с клавиатуры символа можно преобразовать строку, считанную методом Read, к типуcharcпомощью явного преобразования типов

Console.Write("Введите символ: ");

char ch = (char) Console.Read();

Console.ReadLine();

Console.WriteLine(ch);

Обратите внимание, что метод Read, в отличии от метода ReadLine, не очищает буфер7, поэтому следующий после него ввод будет выполняться с того места, на котором закончился предыдущий. Поэтому после оператора Console.Read(); использовать следует Console.ReadLine().

Метода, который считывает с клавиатуры значение чисел, в классе Console нет, поэтому ввод числовых данных выполняется в два этапа.

  1. С помощью метода ReadLine осуществятся чтение данных в переменную типа string

  2. Осуществляется преобразование считанной строки в переменную соответствующего типа одним из следующих способов:

  • Используется класс Convert и один из его методов (ToInt32, ToDouble и т.д.)

  • Используется метод Parse, имеющий в каждом арифметическом классе

Нижеприведенный пример демонстрирует ввод вещественного числа двумя способами и ввод целого числа двумя способами.

stringbuf;

Console.Write("Введите вещественное число: ");

buf =Console.ReadLine();

double a = Convert.ToDouble(buf);

Console.WriteLine(a);

Console.Write("Введите вещественное число: ");

buf = Console.ReadLine();

double b = float.Parse(buf);

Console.WriteLine(b);

Console.Write("Введите целое число: ");

buf = Console.ReadLine();

int c = Convert.ToInt32(buf);

Console.WriteLine(c);

Console.Write("Введите целое число: ");

buf = Console.ReadLine();

int d = int.Parse(buf);

Console.WriteLine(d);

Кроме описанных методов ввода-вывода класс Console содержит много других методов и свойств. Рассмотрим, наиболее используемые из них.

Для изменения цвета экрана используется свойство BackgroundColor, например

Console.BackgroundColor=ConsoleColor.DarkGreen;

Для получения или задания высоты и ширины экрана используют свойства WindowHeightиWindowWidthсоответственно, например

Console.WindowWidth= 40;// по умолчанию ширина равна 80, высота 40

Для очистки экрана используется метод Clear(), например

Console.Clear();

Для установки позиции курсора используется метод SetCursorPosition(int n, int m), где n-номер столбца, m-номер строки. Например, вывод строки ровно в центре экрана можно осуществить следующим образом:

string s = "Hello";

Console.SetCursorPosition(Console.WindowWidth/2-s.Length/2, Console.WindowHeight/2);

Console.WriteLine(s);//вывод в центре экрана

Со всеми свойствами и методами класса Console можно познакомиться в библиотеке MSDN8.

Пример 1. Ввести с клавиатуры два вещественных числа. Очистить экран, изменить фон на зеленый. В верхнем левом углу окна вывести текущее время в коротком формате, в центральной строке экрана вывести на экран два вещественных числа в формате 2 знака поле запятой и заполнить пространство между ними символами ‘0’ следующим образом:

32.76000000000000000000000000000000000000000000000000005.41

using System;

using System.Text;

namespace programm_1

{

class Class1

{

static void Main()

{

Console.OutputEncoding = Encoding.GetEncoding(866);

Console.Write("Введите 2 вещественных числа: ");

string buf;

buf = Console.ReadLine();

double a = float.Parse(buf);

buf = Console.ReadLine();

double b = float.Parse(buf);

Console.BackgroundColor = ConsoleColor.DarkGreen;

//Изменение цвета фона

Console.Clear();//Очистка экрана

DateTime thisDate = DateTime.Now;

//Получение даты и времени

Console.WriteLine("{0:t}",thisDate);//Вывод времени

Console.SetCursorPosition(0,Console.WindowHeight/2);

//Установка позиции курсора

Console.Write("{0:F2}", a);

Console.WriteLine("{0:F2}".PadLeft(30,'0'),b);

/*PadLeft – метод класса string, который возвращает новую строку выравненную по правую краю, путем добавления слева указанного символа ('0') до указанной длины (30)*/

Console.ReadKey();

}

}

}