Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы программирования на языке C#. Учебное пособие
.pdf
23
Особый статус имеет и тип void, указывающий на отсутствие
Логический тип
Имя типа
Системный
тип
Диапазон
Размер
Bool
System.Boolean
true, false
8 бит
Арифметические целочисленные типы
Sbyte
System.SByte
-128 -127
Знаковое, 8 Бит
Byte
System.Byte
0 - 255
Беззнаковое, 8 Бит
Short
System.Short
-32768 - 32767
Знаковое, 16 Бит
Ushort
System.UShort
0 - 65535
Беззнаковое, 16 Бит
Int
System.Int32
≈(-2*10^9 - 2*10^9)
Знаковое, 32 Бит
Uint
System.UInt32
≈(0 - 4*10^9)
Беззнаковое, 32 Бит
Long
System.Int64
≈(-9*10^18 -
9*10^18)
Знаковое, 64 Бит
Ulong
System.UInt64
≈(0 - 18*10^18)
Беззнаковое, 64 Бит
Арифметический тип с плавающей точкой
Имя типа
Системный
тип
Диапазон
Точность
Float
System.Single
+1.5*10^-45+3.4*10^38
7 цифр
какого-либо значения.
В языке C# жестко определено, какие типы относятся к
ссылочным, а какие – к значимым. К значимым типам относятся:
логический, арифметический, структуры, перечисление. Массивы,
строки и классы относятся к ссылочным типам.
В заключение этого раздела приведем таблицу 2.6.,
содержащую описание всех встроенных типов языка C# и их
основные характеристики.
Таблица 2.6.
Встроенные типы языка C#
21

24
Вопросы для самоконтроля
1. Какие символы включает в себя алфавит языка C#?
2. Какие слова называют зарезервированными в языке C#?
3. Приведите примеры знаков операций, определенных в языке C#.
4. Какие величины называют константами?
5. Перечислите управляющие последовательности языка C#.
6. Как понимается тип данных в C#?
7. Какие типы данных называют простыми?
Структурированными?
8. Какие типы данных называют статическими? Динамическими?
9. Какие типы данных называют значимыми? Ссылочными?
10. Каково назначение типа void?
11. Перечислите встроенные типы языка C#.
22

25
3. ПЕРЕМЕННЫЕ И КОНСТАНТЫ. ВЫРАЖЕНИЯ
3.1. Переменные
Переменная – это именованная область памяти,
предназначенная для хранения данных определенного типа. Во
время выполнения программы значение переменной можно
изменять. Все переменные, используемые в программе, должны
быть описаны явным образом. При описании для каждой
переменной задаются имя и тип. Пример описания целой
переменной с именем а и вещественной переменной с именем x:
int а; float х;
Имя переменной служит для обращения к области памяти, в
которой хранится значение переменной. Имя дает программист.
Оно должно соответствовать правилам именования
идентификаторов С#, отражать смысл хранимой величины и быть
легко распознаваемым. Например, если в программе вычисляется i
количество каких-либо предметов, лучше назвать
соответствующую переменную quantity или, на худой конец, kolich,
но не, скажем, A, tl7_xz или prikol.
При объявлении можно присвоить переменной некоторое
начальное значение, т.е. инициализировать ее, например:
int a, b = 1;
float х = 0.1. у = 0.If.
Для инициализации можно использовать не только
константу, но и выражение – такое, чтобы на момент описания оно
было вычисляемым, например:
b = 1, а = 100;
х = b * а + 25.
Инициализировать переменную прямо при объявлении не
обязательно, но перед тем, как ее использовать в вычислениях, это
сделать все равно придется, иначе компилятор сообщит об ошибке.
Так называемая область действия переменной, т.е. область
программы, где можно использовать переменную, начинается в точке
ее описания и длится до конца блока, внутри которого она описана.
Блок – это код, заключенный в фигурные скобки. Основное
назначение блока – группировка операторов. В С# любая
переменная описана внутри какого-либо блока: класса, метода или
блока внутри метода.
23

26
Имя переменной должно быть уникальным в области ее
действия. Область действия распространяется на вложенные в метод
блоки, из этого следует, что во вложенном блоке нельзя объявить
переменную с таким же именем, что и в охватывающем его,
например:
class X // начало описания класса X
{
int А; // поле А класса X
int В; // поле В класса X
void Y() // метод Y класса
{
int С; // локальная переменная С, область
действия - метод Y
int А; // локальная переменная А (НЕ конфликтует
с полем А)
{ // ============ вложенный блок 1 ============
int D; // локальная переменная D, область
действия - этот блок
// int А: недопустимо! Ошибка компиляции,
конфликт с локальной
// переменной А
С = В: // присваивание переменной С поля В
класса X ( * * )
С = this.А: // присваивание переменной С поля А
класса X ( * * * )
} // ============ конец блока 1 ===============
{ // ============ вложенный блок 2 ============
int D; // локальная переменная D, область
действия - этот блок
} // ============ конец блока 2 ===============
} // конец описания метода Y класса
} // конец описания класса X
3.2. Константы
Можно запретить изменять значение переменной, задав при
ее описании ключевое слово const, например:
const int b = 1;
const float x = 0:1, у = 0.If : // const распространяется на обе
переменные.
24

27
Такие величины называют именованными константами, или
просто константами. Они применяются для того, чтобы вместо
значений констант можно было использовать в программе их
имена. Это делает программу более понятной и облегчает внесение
в нее изменений, поскольку изменить значение достаточно только в
одном месте программы.
Всюду, где можно объявить переменную, можно объявить и
именованную константу. Синтаксис объявления схож. В объявление
добавляется модификатор const, инициализация констант обязательна
и не может быть отложена. Инициализирующее выражение может
быть сложным, важно, чтобы оно было вычислимым в момент его
определения. Вот пример объявления констант:
public void Constants()
{
const int SmallSize = 38, LargeSize =58;
const int MidSize = (SmallSize +
LargeSize)/2;
const double pi = 3.141593;
//LargeSize = 60; //Значение константы нельзя
изменить.
Console.WriteLine("MidSize= {0}; pi={1}",
MidSize, pi);
}//Constants
3.3. Выражения
Выражение – это правило вычисления значения.
Выражения строятся из операндов – констант, переменных,
функций, – объединенных знаками операций и скобками. При
вычислении выражения определяются его значение и тип. Эти
характеристики однозначно задаются значениями и типами
операндов, входящих в выражение, и правилами вычисления
выражения. Правила также задают:
приоритет операций;
для операций одного приоритета порядок применения – слева
направо или справа налево;
преобразование типов операндов и выбор реализации для
перегруженных операций;
тип и значение результата выполнения операции над
заданными значениями операндов определенного типа.
25

28
Вычисление выражения начинается с выполнения операций
высшего приоритета. Первым делом вычисляются выражения в
круглых скобках – (expr), определяются значения полей объекта –
x.y, вычисляются функции – f(x), переменные с индексами – a[i].
Операции checked и unchecked включают и выключают проверку
преобразований арифметического типа в выражениях, которым они
предшествуют.
Операции «увеличить» и «уменьшить» (increment, decrement)
Операции «увеличить на единицу» и «уменьшить на
единицу» могут быть префиксными и постфиксными. К высшему
приоритету относятся постфиксные операции x++ и x--
Префиксные операции имеют на единицу меньший приоритет.
Главной особенностью как префиксных, так и постфиксных
операций является побочный эффект, в результате которого
значение x увеличивается (++) или уменьшается (--) на единицу.
Для префиксных (++x, --x) операций результатом их выполнения
является измененное значение x, постфиксные операции
возвращают в качестве результата значение x до изменения.
Приведем пример применения этих операций:
using System;
namespace ConsoleApplicationl
{ class Program
{ static void Main()
{
int x = 3, у = 3;
Console.Write( "Значение префиксного выражения:
" );
Consolе.WriteLine( ++х );
Console.Write( "Значение х после приращения: "
);
Console.WriteLine( х ) ;
Console.Write( "Значение постфиксного выражения:
" );
Console.WriteLine( у++ ) ;
Console.Write( "Значение у после приращения: "
);
Console.WriteLine( у ) ;
26

29
Арифметические операции
В языке C# имеются обычные для всех языков арифметические
операции - "+, -, *, /, %". Операции "+" и "-" могут быть унарными и
бинарными. Операция деления "/" над целыми типами осуществляет
деление нацело, для типов с плавающей и фиксированной точкой –
обычное деление. Операция "%" определена над всеми
арифметическими типами и возвращает остаток от деления нацело.
Тип результата зависит от типов операндов. Приведем пример
вычислений с различными арифметическими типами:
sing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{int x = 11, у = 4;
float z = 4;
Console.WriteLine( z * у ) ; // Результат 16
Console.WriteLine( z * 1e308 ); // Результат
"бесконечность
Console.WriteLine( x / у ) ; // Результат 2
Console. WriteLine( x / z ) ; // Результат
2.75
Console.WriteLine(x / у); // Результат 3
Console.WriteLine( 1e-324 / 1e-324 ); //
Результат NaN
}
}
}
27

30
Операции сдвига
Операции сдвига (<< и >>) применяются к целочисленным
операндам. Они сдвигают двоичное представление первого
операнда влево или вправо на количество двоичных разрядов,
заданное вторым операндом.
При сдвиге влево (<<) освободившиеся разряды обнуляются.
При сдвиге вправо (>>) освободившиеся биты заполняются
нулями, если первый операнд беззнакового типа (т.е. выполняется
логический сдвиг), и знаковым разрядом – в противном случае
(выполняется арифметический сдвиг). Операции сдвига никогда не
приводят к переполнению и потере значимости. Стандартные
операции сдвига определены для типов int, uint, long и ulong.
Пример применения операций сдвига:
using System;
namespace ConsoleApplicationl
{ class Program
{ static void Main()
byte а = 3, b = 9;
sbyte с = 9, d = -9;
Console.WriteLine(a << 1 )
Console.WriteLine( a << 2 )
Console.WriteLine( b >> 1 )
Console.WriteLine( с >> 1 )
Console.WriteLine( d >> 1 )
// Результат 6
// Результат 12
// Результат 4
// Результат 4
// Результат -5
Операции отношения и проверки на равенство
Операции отношения (<, <=, >, >=, ==, ! = ) сравнивают первый
операнд со вторым. Операнды должны быть арифметического типа.
Результат операции – логического типа, равен true или false. Правила
вычисления результатов приведены в табл. 3.1.
28

31
Таблица 3.1.
Операция
Результат
х == у
true, если х равно у, иначе false
х ! = у
true, если х не равно у, иначе false
х < у
true, если х меньше у, иначе false
х > у
true, если х больше у, иначе false
х <= у
true, если х меньше или равно у, иначе false
х >= у
true, если х больше или равно у, иначе false
Результаты операций отношения
Поразрядные логические операции
Поразрядные логические операции (&, |, ^) применяются к
целочисленным операндам и работают с их двоичными
представлениями. При выполнении операций операнды
сопоставляются побитно (первый бит первого операнда с первым
битом второго, второй бит первого операнда со вторым битом
второго и т.д.). Стандартные операции определены для типов int,
uint, long и ulong.
При поразрядной конъюнкции, или поразрядном И (операция
обозначается &), бит результата равен 1 только тогда, когда
соответствующие биты обоих операндов равны 1. При поразрядной
дизъюнкции, или поразрядном ИЛИ (операция обозначается | ), бит
результата равен 1 тогда, когда соответствующий бит хотя бы
одного из операндов равен 1.
При поразрядном исключающем ИЛИ (операция
обозначается ^) бит результата равен 1 только тогда, когда
соответствующий бит только одного из операндов равен 1.
Пример применения поразрядных логических операций
представлен в следующем листинге:
using System:
namespace ConsoleApplicationl
{ class Program
{ static void Main()
Console.WriteLine( 6 & 5)
Console.WriteLine( 6 | 5 )
Console.WriteLine( 6 ^ 5 )
// Результат 4
// Результат 7
// Результат 3
29

32
Условные логические операции
Условные логические операции И (&&) и ИЛИ (| |) чаще всего
используются с операндами логического типа. Результатом
логической операции является true или false. Операции
вычисляются по сокращенной схеме.
Результат операции логическое И имеет значение true, только
если оба операнда имеют значение true. Результат операции
логическое ИЛИ имеет значение true, если хотя бы один из
операндов имеет значение true.
Пример применения условных логических операций:
using System;
namespace ConsoleApplicationl
{ class Program
{ static void Main()
{
Console WriteLine( true & & true ) ; //
Результат true
Console WriteLine( true & & false ) ; //
Результат false
Console WriteLine( true || true ); // Результат
true
Console WriteLine( true | | false ) ; //
Результат true
}
}
}
Вопросы для самоконтроля
1. Каков синтаксис описания переменных в языке C#?
2. Как объявляются константы в C#?
3. Что понимают под выражениями в C#?
4. Перечислите арифметические операции языка C#.
5. Перечислите логические операции.
6. Каково назначение операций сдвига?
7. Как выполняются операции increment и decrement?
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
