Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_k_zachetu.docx
Скачиваний:
41
Добавлен:
10.05.2015
Размер:
233.91 Кб
Скачать
  1. NET.Framework: общая характеристика, основные компоненты.

NET.Framework – инфраструктура платформы Microsoft.NET, определяющая особенности разработки и выполнения программного кода на данной платформе. Предполагает наличие средств организации взаимодействия с операционной системой и прикладными программами. Включает следующие основные компоненты: Common Language Runtime (CLR) и NET.Framework Class Library (NET.FCL).

CLR – среда времени выполнения или виртуальная машина. Обеспечивает выполнение сборки. Под виртуальной машиной понимают абстракцию инкапсулированной (обособленной) управляемой операционной системы высокого уровня, которая обеспечивает выполнение (управляемого) программного кода. CLR – набор служб, необходимых для выполнения управляемого кода.

FCL – соответствующая CLS-спецификации объектно-ориентированная библиотека классов, интерфейсов и системы типов, которые включаются в состав платформы Microsoft.NET. Эта библиотека обеспечивает доступ к функциональным возможностям системы и предназначена служить основой при разработке NET-приложений, компонентов, элементов управления.

*CLS – общая спецификация языков программирования. Это набор конструкций и ограничений, которые являются руководством для создателей библиотек и компонентов в среде NET.Framework. Языки, соответствующие CLS (C#, Basic, C++), могут интегрироваться друг с другом. CLS – основа межъязыкового взаимодействия в рамках платформы Microsoft.NET.

*NET-приложения – приложение, разработанное для выполнения на платформе Microsoft.NET. Реализуется на языках программирования, соответствующих CLS.

  1. NET.Framework: виртуальная машина и управляемый код.

Виртуальная машина CLR, обеспечивающая работу программ платформы Microsoft.NET.Framework, закрывает доступ этим программам к ресурсам других процессов, работающих на том же компьютере. В результате программа никоим образом не сможет нарушить работоспособность остальных программ или ОС.

Код MSIL, получающийся в результате трансляции программы, составленной на языке С# или другом языке платформы Microsoft.NET.Framework, выполняется под полным контролем виртуальной машины CLR. Такой код, в отличие от обычного исполняемого кода, получающегося после трансляции программ С и Pascal, называется управляемым кодом (managed code).Когда пишется программа на C#, то создается так называемый управляемый код. Правила управляемого кода обеспечивают корректную работу программ, написанных на любом языке платформы Microsoft.NET.Framework. Требования, которым должен соответствовать управляемый код, следующие:

  • Компилятор должен создать MSIL-файл специально для CLR;

  • Программа должна использовать библиотеки классов NET.Framework.

  1. Алфавит языка C#. Лексемы, идентификаторы, ключевые слова, неименованные константы.

Алфавит (или множество литер) языка программирования С# составляют символы таблицы кодов ASCII. Алфавит С# включает: 

  • Строчные и прописные буквы латинского алфавита (мы их будем называть буквами);

  • Цифры от 0 до 9 (назовем их буквами-цифрами); 

  • Символ «_» (подчеркивание — также считается буквой);

  • Набор специальных символов: " { }, 1 [ ] + — %/ \; ' : ? < > = ! & # ~ *- ;

  • Прочие символы. 

Лексема – минимальная единица языка, имеющая самостоятельный смысл. Различают 5 лексем:

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

  • Ключевые слова;

  • Знаки операций;

  • Разделители;

  • Литералы (константы).

Почти все типы лексем (кроме ключевых слов и идентификаторов) имеют собственные правила словообразования, включая собственные подмножества алфавита. Лексемы обособляются разделителями. Этой же цели служат множество пробельных символов, к числу которых относятся пробел, табуляция, символ новой строки и комментарии.

Идентификаторы служат для того, чтобы обращаться к программным объектам и различать их, т.е. идентифицировать. В идентификаторе могут пользоваться буквы, цифры и символы подчеркивания.

  • Рассмотрим правила построения идентификаторов из букв алфавита;

  • Первым символом идентификатора С# может быть только буква;

  • Следующими символами идентификатора могут быть буквы, цифры и нижнее подчеркивание;

  • Длина идентификатора не ограничена.

Вопреки правилам словообразования, в С# существуют ограничения относительно применения подчеркивания в качестве самой первой буквы в идентификаторах. Из-за особенностей реализации использование идентификаторов, которые начинаются с этого символа, нежелательно. Любая случайным образом составленная последовательность букв, цифр и знаков подчеркивания с точки зрения грамматики языка идеально подходит на роль имени любого объекта, если только начинается с буквы.

Ключевые слова – зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смысле, в котором они определены. Ниже приводится таблица со списком ключевых слов. Вы не можете использовать эти имена для образования классов, функций, переменных и других языковых структур. Их нельзя использовать в программе в качестве идентификаторов, если только они не содержат префикс @. Например, @if является допустимым идентификатором, но if таковым не является, поскольку if — это ключевое слово.

Неименованные константы не имеют имен, и потому их не нужно описывать:

  • Любая последовательность цифр (возможно предваряемая «-» или «+» или разбиваемая точкой) воспринимается компилятором как неименованная константа – число;

  • Любая последовательность символов, заключенная в апострофы – строка;

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

  1. Типы данных языка C#: концепция, основные типы.

Типы данных имеют особенное значение в C#, поскольку это строго типизированный язык. Это означает, что все операции подвергаются строгому контролю со стороны компилятора на соответствие типов, причем недопустимые операции не компилируются. Следовательно, строгий контроль типов позволяет исключить ошибки и повысить надежность программ. Для обеспечения контроля типов все переменные, выражения и значения должны принадлежать к определенному типу. Такого понятия, как «бес типовая» переменная, в данном языке программирования, вообще не существует. Более того, тип значения определяет те операции, которые разрешается выполнять над ними. Операция, разрешенная для одного типа данных, может оказаться недопустимой для другого.

Типы данных в C#:

  1. Целочисленные типы (byte, sbyte, short, ushort, int, uint, long, unlong);

  2. Типы с плавающей запятой (double, float);

  3. Символы (char);

  4. Логический (bool);

  5. Десятичный (decimal);

  6. Ссылочные:

  • Объекты (object);

  • Строки (string).

  1. Переменные: правила описания, инициализация.

Синтаксис объявления переменных в C# выглядит следующим образом:

ТипДанных Идентификатор

Объявить можно переменную любого действительного типа. Возможности переменной определятся её типом. Тип переменной нельзя изменять в течение срока её существования. Все переменные в C# должны быть объявлены до их применения. Это нужно для того, чтобы уведомить компилятор о типе данных, хранящиеся в переменной, прежде чем он попытается правильно скомпилировать любой оператор, в котором используется переменная.

Задать значение переменной можно, в частности, с помощью оператора присваивания, т.е. произойдет инициализация переменной.

int = 10; // задаем целочисленной переменной i значения равное 10

  1. Операции языка C#. Правила вычисления выражений.

Операции языка C#:

  1. Операции присваивания - операция, обозначаемая знаком =. Данная операция является бинарной, имеет два операнда. Например, X=Y. Операнд слева от знака может быть только переменной, объектом. Операнд справа может быть выражением, т.е. записью в которой используются знаки других операций. Как правило, операция = является главной операцией, образующей оператор присваивания. Имеется интересная особенность этой операции. Она допускает цепочку присваиваний. Например, X=Y=Z=10;

  2. Арифметические:

;

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

;

  1. Операции отношения. Все операции отношения используются для сравнения значений переменных или выражений. Эти операции вырабатывают значение булевского типа: ИСТИНА (true) или ЛОЖЬ (false). Численных эквивалентов для этих значений в языке C# не существует. Перечень операций приведён в таблице:

;

  1. Логические операции – составление логических выражений на основе выражений, которые используют операции сравнения:

;

  1. Операция «приведение к типу» - необходимо преобразовать значение одного типа в значение другого типа:

int n = 10:

double z;

z = n;

n = (int) z;

;

  1. Строковые преобразования:

string = s;

int n = 2010;

s = “Год” + ToString(n);

  1. Понятие исключения – при обнаружении ошибки система прерывает выполнение программы.

Правила вычисления выражений:

  1. Приоритет операций;

  2. Для операций одного приоритета порядок применения – слева направо или справа налево;

  3. Преобразование типов операндов и выбор реализации для перегруженных систем;

  4. Тип и значение результат выполнения операции над заданными значениями операндов определенного типа.

  1. Операторы языка C#. Составной оператор. Блок. Метки.

Операторы языка C#:

  1. Оператор присваивания;

  2. Блок или составной оператор – с помощью фигурных скобок несколько операторов языка можно объединить в единую синтаксическую конструкцию;

  3. Вызов метода;

  4. Операторы добавления (if, switch);

  5. Операторы цикла (for, while, foreach);

  6. Оператор перехода (goto, break, continue, return);- позволяет прерывать естественный порядок выполнения операторов блока.

Метка –уникальный идентификатор, предшествующий оператору и отделенный от него символом двоеточия.

  1. Операторы выбора: if и switch.

Оператор if определяет, какой блок будет выполняться при выполнении условия, заданное выражение Boolean. Выражения в круглых скобках должны быть булевого типа. Точнее, при вычислениях выражения должны давать значения true или false. Вспомним, что арифметический тип не имеет явных или неявных преобразований к булевому типу. Каждый из операторов может быть любым оператором – в частности, блоком или другим if-оператором. Поэтому возможна и такая конструкция:

If (выражение_1) if (выражение_2) if (выражение_3) ...

Ветви else и if, позволяющие организовать выбор из многих возможностей, могут отсутствовать. Может отсутствовать заключительная else-ветвь. Выполняется тот оператор, который записан после выражения, имеющего истинное значение. Проверка истинности выражений выполняется в порядке их написания. Если все выражения ложны, то выполняется оператор после else. Пример записи оператора:

if (k % 7 = = 0) {  Console.WriteLine("Число делится на 7 нацело"); } else

{

Console.WriteLine("Число не делится на 7");

}

Оператор switch – оператор, выбирающий из списка возможных вариантов раздел переключения, для выполнения содержащегося в нем кода. Вот его синтаксис:

switch (выражение) { case константное_выражение_1: операторы_1 оператор_перехода_1 ... case константное_выражение_K: операторы_K оператор_перехода_K default: операторы_N оператор_перехода_N }

Конструкция не очень строгая. Ветвь default может отсутствовать. Так же могут отсутствовать операторы перехода (если программисту так надо). А вот константные выражения в case должны иметь тот же тип, что и switch-выражение.

Из-за нестрогости конструкции семантика оператора switch чуть-чуть запутана. Вначале вычисляется значение switch-выражения. Затем оно поочерёдно в порядке следования case сравнивается на совпадение с константными выражениями. Как только достигнуто совпадение, выполняется соответствующая последовательность операторов case-ветви. Поскольку последний оператор этой последовательности является оператором перехода (чаще всего это оператор break), то обычно он завершает выполнение оператора switch. При его отсутствии управление "проваливается" в следующую case-ветвь. Если значение switch-выражения не совпадает ни с одним константным выражением, то выполняется последовательность операторов ветви default, если, конечно, она есть. Пример записи оператора:

switch (variant) { case 1: Console.Write("Сторона А = "); temp = Console.ReadLine(); a = Convert.ToDouble(temp); Console.Write("Сторона B = "); temp = Console.ReadLine(); b = Convert.ToDouble(temp); Console.WriteLine("Площадь прямоугольника = "+a*b); break; case 2: Console.Write("Сторона А = "); temp = Console.ReadLine(); a = Convert.ToDouble(temp); Console.Write("Высота H = "); temp = Console.ReadLine(); h = Convert.ToDouble(temp); Console.WriteLine("Площадь треугольниика = "+ a * h / 2); break; . . . . . . . . . . . . . . . . . . . . default: Console.WriteLine("Выбор неверен "); break; }

  1. Операторы цикла.

Оператор for задает тело цикла.

for (инициализаторы; условие; список_выражений) оператор

Оператор, стоящий после круглой закрывающей скобки, задаёт тело цикла. В большинстве случаев телом цикла является блок, но может быть и любой одиночный оператор. Сколько раз будет выполняться тело цикла, зависит от трёх управляющих элементов, заданных в скобках. Инициализаторы задают начальное значение одной или нескольких переменных, часто называемых счётчиками или просто переменными цикла. В большинстве случаев цикл for имеет один счётчик, но иногда бывает полезно иметь несколько счётчиков. Значение условия определяет, должен продолжаться цикл или должен завершиться. Если значение условия true, то цикл продолжается. Если false, то цикл завершается. Список выражений, записанный через запятую, показывает, как меняются счётчики цикла на каждом шаге выполнения.

Выполнение начинается с выполнения инициализаторов. Затем проверяется условие. Если условие цикла истинно, то выполняется тело цикла, затем изменяются значения счётчиков и снова проверяется условие. Как только условие становится ложным, цикл завершает свою работу. В цикле for тело цикла может ни разу не выполняться, если условие цикла ложно после инициализации, а может происходить зацикливание, если условие всегда остаётся истинным. В нормальной ситуации тело цикла выполняется конечное число раз. Счётчики цикла зачастую объявляются непосредственно в инициализаторе и, соответственно, являются переменными, локализованными в цикле, так что после завершения цикла они перестают существовать. Пример записи оператора – вычисление факториала натурального числа:

for (int i = 1, r = 1; i <= n; i++) {  r = r*i; }

Оператор while – тело цикла выполняется до тех пор, пока остается истинным выражение while. В языке C# у этого вида цикла две модификации – с проверкой условия в начале (цикл с предусловием) и в конце цикла (цикл с постусловием). Первая модификация имеет следующий синтаксис:

while (выражение) оператор

Эта модификация соответствует стратегии: "сначала проверь, а потом делай". В результате проверки может оказаться, что и делать ничего не нужно. Тело такого цикла может ни разу не выполняться. Конечно же, возможно и зацикливание. В нормальной ситуации каждое выполнение тела цикла – это очередной шаг к завершению цикла. С помощью этого вида цикла факториал вычисляется так:

i = 1; r = 1; while (i <= n) { r = r * i; i++; }

Цикл, проверяющий условие завершения в конце, соответствует стратегии: "сначала делай, а потом проверь". Вот синтаксис этой модификации:

do оператор while(выражение);

Тело такого цикла выполняется, по меньшей мере, один раз. Пример записи цикла:

i = 1; r = 1; do { r = r * i; i++; }while (i <= n)

Оператор foreach – тело цикла выполняется для каждого элемента в контейнере:

int [,,] arr3d = new int [10,10,10];

for (int i = 0, …)

for (int j = 0, …)

for (int k = 0, …)

long sum = 0;

int min = arr3d [0,0,0], max = arr3d [0,0,0]

foreach (int item in arr3d0

{

sum + = item;

if (item > max) max = item;

else if (item < min) min = item;

}

Console.WriteLine(“sum = {0}, min {1}, max = {2}”, sum, min, max);

  1. Операторы управления.

Оператор goto, конструкция оператора имеет вид:

goto <имя метки>;

***

<имя метки>: оператор;

  

Оператор goto передает управление непосредственно на оператор, обозначенный меткой <имя метки>. Обозначенный оператор выполняется сразу же после выполнения оператора goto, если оператор с данной меткой отсутствует или есть больше одного оператора обозначенного одной и той же меткой, то выдается сообщение про ошибку. 

if ( errorcode > 0 )

goto exit;

***

exit: return(errorcode);

В примере оператор goto передает управление на оператор, обозначенный меткой exit, когда происходит ошибка.

Оператор continue, данный оператор передает управление на следующую итерацию в операторах цикла do, for, while. Операторы, которые остались в теле вышеуказанных циклов при этом не выполняются. В середине циклу do, while такая итерация означает переход к перерасчету условных выражений и цикла. Для оператора for такая итерация приводит к приросту переменных цикла і перерасчету условного выражения цикла. 

while (i > 0 )

{

x = f(i);

if (x == 1) continue;

y = x*x;

}

Тело оператора выполняется, если і > 0. сначала значение f(i) присваивается переменной х, потом, если х = 1 выполняется оператор сontinue, при этом остальные операторы тела цикла игнорируются и выполнение цикла повторяется с его заголовка.

#include <stdio.h> //библиотека ввода/вывода

#include <math.h> //библиотека матем. функций

#include <conio.h> //библиотека для работы с экраном - для getch() и clrscr()

#include <iostream.h> //библиотека потокового ввода/вывода - для cout и cin

float a,b,c,d,x1,x2; //переменные

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