Материал: Разработка консольных приложений в Visual Studio .NET. практикум. Ганцева Е.А

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Контрольная работа № 2

ОПЕРАТОРЫ ЯЗЫКОВ С/С++ и С#

Цель работы: составление алгоритмов и программ разветвленной и циклической структуры на С/С++ и С# с использованием простых типов, явного и неявного преобразования типов.

Теоретические сведения Структура программы. Переменные и выражения

Код на С/С++ и C# представлен последовательностью операторов, оканчивающихся ; .

Пробельные символы игнорируются компилятором, поэтому удобно писать 1 оператор в строке, делать отступы и пропускать строки. Т.е. стиль программирования не страдает.

Программа обладает блочной структурой, скобки { } отмечают начало и конец блока, который может содержать 0 или более операторов. В С# { } не сопровождается ; .

Блоки могут быть вложенными

{

<строка1 кода>;

{

<строка2 кода>;

<строка3 кода>;

}

<строка4 кода>;

}

Для записи комментариев используются /* */, // , /// .

Переменные отличаются по своему типу. Для объявления переменных используется запись

<тип> <имя>;

<тип> <список имен>;

Одновременно с объявлением можно проводить инициализацию. Переменные создаются не при объявлении, а при инициализации. Для задания имени переменной пользуются правилами:

  • 1-й символ обязательно буква, или _ , или @ (только для C#);

  • 2-й и последующие символы – буквы, цифры, знак _ ;

  • имена переменных не должны совпадать с ключевыми словами;

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

Для выбора имен можно пользоваться соглашениями:

  • венгерской нотацией (szString1);

  • нотацией PascalCase (MyVar);

  • нотацией camelCase (myVar).

Рассмотрим дальнейшие правила, относящиеся к языку С#, как более легкому для самостоятельного изучения. В дальнейшем, имея опыт программирования на С#, можно быстрее освоить языки С/С++, тем более, что он изначально поддерживает объектно-ориентированный стиль.

Система типов имеет принципиальный характер, согласно которой в С# все типы можно разделить на 4 категории:

- типы-значения (value) или значимые типы;

- ссылочные (reference).;

- указатели (pointer);

- тип void.

Классификация основана на том, где и как хранятся значения типов. Для ссылочного типа значение задает ссылку на область памяти в "куче", где расположен соответствующий объект. Для значимого типа используется прямая адресация, значение хранит собственно данные, и память для них отводится, как правило, в стеке. Указатели могут использоваться только в небезопасных блоках, помеченных как unsafe. Тип void указывает на отсутствие какого-либо значения. В языке C# к значимым типам относятся: логический, арифметический, структуры, перечисление. Массивы, строки и классы относятся к ссылочным типам.

В C# массивы рассматриваются как динамические, их размер может определяться на этапе вычислений, а не в момент трансляции. Строки могут менять свою длину. Структуры C#, также и как и в С++, представляют частный случай класса. Определив свой класс как структуру, программист получает возможность отнести класс к значимым типам.

Также типы делятся на встроенные и определенные пользователем. Встроенные типы фактически совпадают с системными типами каркаса .Net Framework из пространства имен System.

Таблица 1

Логический тип

Имя типа

Системный тип

Значения

Размер

bool

System.Boolean

true, false

8 бит

Арифметические целочисленные типы

Имя типа

Системный тип

Диапазон

Размер

sbyte

System.SByte

-128 — 128

Знаковое, 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 цифр

double

System.Double

+5.0*10^-324 - +1.7*10^308

15-16 цифр

Арифметический тип с фиксированной точкой

Имя типа

Системный тип

Диапазон

Точность

decimal

System.Decimal

+1.0*10^-28 - +7.9*10^28

28-29 значащих цифр

Символьные типы

Имя типа

Системный тип

Диапазон

Точность

char

System.Char

U+0000 - U+ffff

16 бит Unicode символ

string

System.String

Строка из символов Unicode

Объектный тип

Имя типа

Системный тип

Примечание

object

System.Object

Прародитель всех встроенных и пользовательских типов

Литеральные константы

Константы C# могут появляться в виде литералов и именованных констант. Например:

y = 7.7f;

Значение константы "7.7f" является одновременно ее именем, оно же позволяет однозначно определить тип константы. В примере добавляется суффикс - специальный символ для точного указания типа. Примеры литеральных констант:

bool sw1=true, sw2=false; //нельзя присвоить 0 или 1

byte myByte=23;

sbyte mySByte=-5;

short myShort=34;

ushort myUShort=234;

int myInt=-453;

uint myUint=10u; // u или U

long myLong=1523L; // l можно спутать с 1

ulong myUlong1=564ul,

myUlong2=435Lu; // в любом порядке

decimal myDec=123.4m; // или М

float myFloat=234.5f; // или F

double myDoub1=34.56,

myDoub2=45.32d; // или D

char myChar='a'; // или Esc-последовательность

string myString1="Проба\nПера", // обычная строка

myString2=@"На

нескольких

строках"; // дословная строка, удобная для записи пути

Таблица 2

Esc-последовательность

Выводимый символ

Код символа в Unicode

\’

Одиночная кавычка

\x0027

\”

Двойная кавычка

\x0022

\\

Обратный слэш

\x005C

\0

Null

\x0000

\a

Тревога (звуковой сигнал)

\x0007

\b

backspace

\x0008

\f

Начать новую страницу

\x000C

\n

Новая строка

\x000A

\r

Возврат каретки

\x000D

\t

Горизонтальная табуляция

\x0009

\v

Вертикальная табуляция

\x000B

\u

Символ Unicode

\xNNNN

В объявлении константы добавляется модификатор 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);

}

Рассмотрим пример, демонстрирующий спецификаторы формата при выводе на консоль.

static void Main(string[] args)

{

string myStr=@"Вывод

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

переменной float=1054.4567f";

Console.WriteLine(myStr);

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

Операции в C#, их приоритет и порядок унаследованы из языка C++.

При вычислении выражения определяется его значение и тип по типам операндов, входящих в выражение.

В табл. 3 операции перечислены по строкам в порядке убывания приоритетов.

Таблица 3

Прио-ритет

Категория

Операции

Порядок

0

Первичные

(expr) x.y f(x) a[x] x++ x-- new sizeof(t) typeof(t) checked(expr) unchecked(expr)

Слева направо

1

Унарные

+ - ! ~ ++x --x (T)x

-“-

2

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

* / %

-“-

3

Аддитивные (Сложение)

+ -

-“-

4

Сдвиг

<< >>

-“-

5

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

< > <= >= is as

-“-

6

Эквивалентность

== !=

-“-

7

Логическое

&

-“-

8

Логическое исключающее ИЛИ (XOR)

^

-“-

9

Логическое ИЛИ (OR)

|

-“-

10

Условное И

&&

-“-

11

Условное ИЛИ

||

-“-

12

Условное выражение

? :

Справа налево

13

Присваивание

= *= /= %= += -= <<= >>= &= ^= |=

-“-

Источник: https://studfile.net/preview/16562901/