- •Глава 1. Структура программы на языке с# 6
- •Глава 1. Структура программы на языке с#
- •Задание 1. Вывод строки на экран с использованием esp-последовательности
- •Глава 2. Переменные. Основные типы данных
- •Int.MinValue
- •Задание 2. Описание переменных и преобразование типов
- •Глава 3. Ввод – вывод значений переменных
- •Задание 3. Форматирование вывода
- •Глава 4. Обработка исключительных ситуаций
- •Задание 4. Обработка стандартных исключений
- •Задание 5. Генерация исключений
- •Глава 5. Массивы в c#
- •Initially,
- •Integer array: 1 2 3 4 5
- •Integer array: 1 2 3 4 5
- •Integerarray: 1 2 3 29 30
- •Задание 6. Одномерные массивы
- •Задание 7. Многомерные массивы и массивы массивов
- •Глава 6. Символы и строки
- •If (char.IsLetter(a)) Console.WriteLine("Буква");
- •Задание 8. Работа со строками
- •Глава 7. Описание классов
- •Int m, n;// числитель и знаменатель
- •Пример решения задачи
- •Intyear_tr;
- •If (Enum.IsDefined(typeof(gender_type),value))
- •Int year_tr;
- •If (Enum.IsDefined(typeof(gender_type),value))
- •Задание 9. Описание классов
- •Глава 8. Наследование
- •Задание 10. Наследование
- •Глава 9. Итерфейсы
- •Interface iOutput
- •Void outputName();
- •Interface iOutput
- •Void outputName();
- •If ( a is iOutput )
- •Interface iComparable
- •Int CompareTo( object obj )
- •Задание 11. Стандартные интерфейсы.
- •Глава 10. Файлы
- •Задание 12. Работа с файлами
- •Список использованных источников
Int.MinValue
Все допустимые элементы класса можно посмотреть в окне редактора, введя символ точки сразу после имени типа, например,
int.
Над переменными различных типов можно совершать различные операции, например, для целочисленного типа - арифметические операции(сложение, умножение, инкремента и т.д.), операции отношения (больше, меньше и т.д) и многие другие. Знаки операций в языке С# совпадают со знаками операций языка С, потому в данном учебном пособии они описываться не будут. В С# есть всего несколько операций, которых нет в языке С. Одна из них описанная выше операция new. Со знаками операций языка С# в библиотеке MSDN 4.
Задание 2. Описание переменных и преобразование типов
Каждому студенту рекомендуется выполнить упражнения 1–3.
Определите количество байтов, которые занимают в памяти переменные всех типов даннях из таблицы 2 . Результат выведите на экран в виде
sizeof (int)=4
sizeof (long)=8…
Опишите в программе две переменные целого типа и инициализируйте их числами 10 и 3. Выведите на экран вещественное число, равное делению первой переменной на вторую. (Используйте операцию деления /. При делении целых чисел эта операция возвращает только целую часть частого. Результат операции деления / будет вещественным, если делимое или (и) делитель – вещественное число. Поэтому, в данной задачи необходимо использовать явное преобразование типов).
Опишите в программе переменную символьного типа и инициализируйте ее произвольным символом. Выведите на экран 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 нет, поэтому ввод числовых данных выполняется в два этапа.
С помощью метода ReadLine осуществятся чтение данных в переменную типа string
Осуществляется преобразование считанной строки в переменную соответствующего типа одним из следующих способов:
Используется класс 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();
}
}
}