Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

c#1_osnovy

.PDF
Скачиваний:
14
Добавлен:
26.03.2016
Размер:
698.93 Кб
Скачать

Основы языка C#

© ЗГА & ПТА 2015

Состав языка

Символы:

буквы: A-Z, a-z, _, A- Я, ф-я

цифры: 0-9, A-F

спец. символы: +, *, {, …

пробельные символы

Лексемы:

Лексема (token, токен) – минимальная единица языка, имеющая самостоятельный смысл

константы

2

0.11

“Минск”

имена

dog

a

_11

ключевые слова

double

do

if

знаки операций

+=

*=

< >

разделители

;

[ ]

,

Выражения (statement):

 

 

 

 

int k = 24;

c = a + b;

Console.WriteLine(S);

Операторы (operator)

 

 

 

исполняемые:

=

+

+= if for ( ) { } ;

описания:

double

a, b;

Литералы (константы, значения переменных…)

Имена (идентификаторы)

имя должно начинаться с буквы или _ ;

имя должно содержать только буквы, знак подчеркивания и цифры;

прописные и строчные буквы различаются;

длина имени практически не ограничена.

имена не должны совпадать с ключевыми словами (допустимо @if, @float..)

в именах можно использовать управляющие последовательности Unicode

Нотации Понятные и согласованные между собой имена — основа хорошего стиля.

Существует несколько нотаций — соглашений о правилах создания имен. В C# для именования различных видов программных объектов чаще всего используются две нотации:

Нотация Паскаля - каждое слово начинается с прописной буквы: MaxLength, MyFatCat

Camel notation - с прописной буквы начинается каждое слово, составляющее идентификатор, кроме первого:

maxLength, myFatCat

Ключевые слова, знаки операций, разделители

Ключевые слова — идентификаторы, имеющие специальное значение для компилятора.

Их можно использовать только в том смысле, в котором они определены.

abstract

as

base

bool

break

byte

case

catch

char

checked

class

const

continue

decimal

 

default

delegate

do

double else

enum

event

explicit

false

finally

fixed

float

for

foreach goto

if

implicit

 

in

int

interface internal

is

lock

long

namespace

new

null

object

operator

out

override

params private protected

public

readonly

 

ref

return

sbyte

sealed

short

sizeof

stackalloc

static

string

struct

switch

 

this

throw

true

try

uint

using

virtual void

volatile

 

while

 

 

Знак операции

- один или более символов, определяющих действие над

операндами. Внутри знака операции пробелы не допускаются!.

Например: +

- = += ==

%=

new

is

Операции делятся на унарные (с одним операндом),

 

бинарные (с двумя) и тернарную (с тремя)

= ?

:

Разделители используются для разделения или группирования элементов, например: скобки, точка, запятая.

Типы данных

Тип данных определяет:

внутреннее представление данных;

множество возможных значений;

допустимые действия над данными операции, методы…

Различные классификации типов данных

Основная классификация типов C#

Хранение в памяти величин значимого и ссылочного типа

Встроенные типы данных C#:

Булевский Целые Вещественные Финансовый

Символьный Строковый

Object

Поля и методы встроенных типов

Любой встроенный тип C# построен на основе соответствующего стандартного класса библиотеки .NET.

Это значит, что у встроенных типов данных C# есть методы и поля.

С их помощью можно, например, получить, например:

double.MaxValue (или System.Double.MaxValue) — максимальное число типа double;

uint.MinValue (или System.UInt32.MinValue) - минимальное число типа uint.

Логический (булевский) и целые типы

В вещественных классах есть элементы:

положительная бесконечность PositiveInfinity;

отрицательная бесконечность NegativeInfinity;

«не является числом»: NaN.

Класс Math (математические функции)

Линейные программы

Простейшая программа на С#

using System; namespace myPro

{

class Program

{

static void Main()

{

// описания и операторы, например:

Console.WriteLine("Привет, С#");

}

………………………………………………

}

}

Переменные Переменная — это величина, которая во время работы программы

может изменять свое значение.

Все используемые в программе переменные должны быть описаны.

Для каждой переменной задается ее тип и имя :

int k; double x, y, z = 3.51; char ch; string stroka;

Тип переменной выбирается исходя из диапазона и требуемой точности представления данных.

Структура программы на С#

Область действия и время жизни переменных Переменные описываются внутри какого-либо блока:

1) класса; 2) метода или блока внутри метода Блок — фрагмент кода, заключенный в фигурные скобки { … }. Назначение — группировка выражений, операторов…

Переменные, описанные непосредственно внутри класса, называются полями класса.

Переменные, описанные внутри метода класса, называются локальными переменными.

Область действия (видимости) переменной (scope)

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

Время жизни: переменные создаются при входе в их область действия (блок) и уничтожаются при выходе.

Инициализация переменных При объявлении переменной можно присвоить начальное значение (инициализировать).

int k = 100; double x = 0.02; char ch = ’ю’;

При инициализации можно использовать не только константы, но и выражения,

главное, чтобы на момент описания они были вычислимыми,

 

например: int a = 2, b = 50; int x = a * b + 25;

// 125

Поля класса автоматически инициализируются значением по умолчанию (нулем соответствующего типа).

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

Именованные константы Вместо значений констант следует использовать в программе их имена.

Это облегчает читабельность программы и внесение в нее изменений: const int num = 12; const float g = 9.81;

Выражения (statement, expression)

В выражении участвуют операнды, объединенные знаками операций.

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

Операции выполняются в соответствии с приоритетами.

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

Результатом выражения всегда является значение определенного типа, который определяется типами операндов.

Используемые в выражении величины должны быть совместимых типов.

Приоритеты операций C#

 

 

 

1.

Первичные

(),

[],

new

2.

Унарные

~, !, ++, --, -,

3.

Типа умножения (мультипликативные)

*, /, % ...

4.

Типа сложения (аддитивные)

+, -

 

5.

Сдвига

<<, >>

6.

Отношения и проверки типа

<, >,

is,

7.

Проверки на равенство

==, !=

8.

Поразрядные логические

&, ^,

|

9.

Условные логические

&&,

||

10.

Условная (тернарная)

? :

 

 

11.

Присваивания

=, +=, *=, /=,

Тип результата выражения

Если входящие в выражение операнды одного типа и операция для этого типа определена, то результат выражения будет иметь тот же тип.

Если операнды разного типа и (или) операция для этого типа не определена, перед вычислениями автоматически выполняется

преобразование типа по правилам, обеспечивающим приведение более коротких типов к более длинным для сохранения значимости и точности.

int k = 100; double d = 10.6; char c = 'A'; // код 65

double summa = c + k + d;

// 175.6

Преобразование типа

Автоматическое (неявное) преобразование возможно не всегда, а только если при этом не может произойти потеря значимости.

Явное преобразование типа можно задать с помощью: 1) операции (тип) x.

int k = 100; char c = 'A';

// код 65

с = (char)k;

 

// - символ ’d’ с кодом 100

long b = 300;

 

 

int a = (int) b;

 

// 300, данные не теряются

byte d = (byte) a;

//??? , данные теряются

2) методов класса Convert

 

string s = “123”;

Convert.ToInt32(s)

3) методов Parse

int.Pаrse(s)

 

Неявные арифметические преобразования типов

Инкремент и декремент

 

int x = 3, y = 3;

 

Console.Write( "Значение префиксного выражения: " );

//4

Console.WriteLine( ++x );

 

Console.Write( "Значение х после приращения: " );

//4

Console.WriteLine( x );

 

Console.Write( "Значение постфиксного выражения: " );

//3

Console.WriteLine( y++ );

 

Console.Write( "Значение у после приращения: " );

//4

Console.WriteLine( y );

 

Операция new

Cлужит для создания нового объекта (выделение памяти + инициализация). Формат: new тип ( [ аргументы ] )

С помощью этой операции можно создавать объекты как ссылочных,

так и значимых типов, например:

 

Dog Barbos = new Dog(”brown”);

 

int j = new int();

// то же, что int j = 0;

Для значимых типов обычно не применяется!

Умножение *, ( аналогично деление /, остаток % )

Возвращает результат перемножения двух операндов.

Стандартная операция умножения определена

для типов int, uint, long, ulong, float, double и decimal. К величинам других типов ее можно применять,

если для них возможно неявное преобразование к этим типам.

Тип результата операции равен «наибольшему» из типов операндов, но не менее int.

Если оба операнда целочисленные или типа decimal и результат операции

слишком велик для представления с помощью заданного типа, генерируется исключение System.OverflowException

int x = 11, y = 4; float z = 4;

 

Console.WriteLine( z * y );

// 16

Console.WriteLine( z * 1e308 );

// бесконечность

Console.WriteLine( x / y );

// 2

Console.WriteLine( x / z );

// 2.75

Console.WriteLine( x % y );

// 3

Операции отношения и проверки на равенство

Операции отношения (<, <=, >, >=, ==, !=) сравнивают первый операнд со вторым. Операнды должны быть арифметического типа.

Результат операции— логического типа равен true или false.

Условные логические операции && и ||

 

 

Console.WriteLine( true && true

);

// true

Console.WriteLine( true && false );

// false

Console.WriteLine( true || true

);

// true

Console.WriteLine( true || false );

// true

(a < b) || (a < c) Если первое условие истинно, второе не вычисляется

Операция присваивания Присваивание заменяет старое значение переменной на новое.

При этом старое значение стирается бесследно.

Операция может использоваться в программе как законченный оператор. int a = 1, b = 2; int x = a + b; // 3 x = x + 1.5; //4.5

Правый операнд операции присваивания должен иметь неявное преобразование к типу левого операнда, например: вещественный целый

Присваивание с операцией

 

x += 3;

соответствует x = x + 3; x *= 2.5; соответствует x = x * 2.5;

пример:

string s = “Язык ”; s += “C#”;

// Язык C#

Условное присваивание (тернарный оператор = ? : )

 

 

перем = (условие)

?

значение1

:

значение2

условие — выражение, для которого существует

 

 

неявное преобразование к логическому типу.

Если условие выполняется, то результат = значение1,

иначе — значение2.

 

int a = 12, b = 5;

 

 

int max = (b > a) ? b : a;

// Результат 12

 

 

 

 

 

 

 

Консольный ввод-вывод

Консоль – совокупность стандартных устройств ввода-вывода (клавиатура, экран…)

Для работы с консолью предназначен класс Console в пространстве имен System

Методы: Console.Read, Console.ReadLine,… Console.Write, Console.WriteLine…..

Вывод данных на консоль

1. Простейший вывод – конкатенация + int i = 5, d = 600;

double y = 4.12; string s = “байт"; Console.Write( i ); Console.WriteLine("y = " + y);

Console.WriteLine("d = " + d + " " + s );

2. Форматный вывод:

использование в строке местозаполнителей {номер} , параметров формата и управляющих символов \n , \t …

int i = 5, d = 600 ;

double y = 4.12; string s = “байт"; Console.Write( i );

Console.WriteLine(" y = {0} \nd = {1} {2}", y, d, s );

3. Форматный вывод: int i = 5, d = 600 ;

double y = 4.1215; string s = “байт"; Console.Write( i );

Console.Write(" y = {0:F2} \nd = {1} {2}", y, d, s );

4. Пользовательский формат вывода double y = 4.123;

Console.Write( "y = {0,6:0.# ' руб '} \n", y );

6 позиций под значение

Формат местозаполнителя (placeholder)

{номер [ , длина ] [ : формат ] }

номер – номер элемента в списке вывода (может идти не по порядку и повторяться)

длина – количество позиций под значение.

Если длина отрицательная, значение выравнивается по левому краю, иначе - по правому.

формат – строка формата для выводимого значения

Некоторые описатели формата (см таблицы)

F или f - количество цифр дробной части; C или c - значение валюты.…

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]