История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Топ:
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Интересное:
Финансовый рынок и его значение в управлении денежными потоками на современном этапе: любому предприятию для расширения производства и увеличения прибыли нужны...
Мероприятия для защиты от морозного пучения грунтов: Инженерная защита от морозного (криогенного) пучения грунтов необходима для легких малоэтажных зданий и других сооружений...
Уполаживание и террасирование склонов: Если глубина оврага более 5 м необходимо устройство берм. Варианты использования оврагов для градостроительных целей...
Дисциплины:
2019-12-21 | 190 |
5.00
из
|
Заказать работу |
|
|
using System;
namespace ConsoleApplication1
{
class Class1
{
//[STAThread]
static void ]Main(string[ ] args)
{
//основное тело программы
Console.WriteLine(“Любая строка текста”);
}
}
}
Директива using System разрешает использовать имена стандартных классов из пространства имен System непосредственно без указании я пространства. Ключевое слово namespace создает для проекта собственное пространство имен, названное по умолчанию ConsoleApplication1. Это сделано для того, чтобы можно было давать программным объектам имена, не заботясь о том, что они могут совпасть с именами в других пространствах имен.
В языке С# программа представляет собой совокупность взаимодействующих между собой классов. В программе автоматически создан класс с именем Class1. Внутри класса – метод Main(), который обязан присутствовать в любом приложении - с него начинается выполнение программы.
Console – имя стандартного класса из пространства имен System. Его метод WriteLine() выводит на экран заданный в кавычках текст.
8
Все тексты на языке пишутся с помощью его алфавита. Например, в русском языке один алфавит (набор символов), а в албанском — другой. В С# используется кодировка символов Unicode.
Компьютер умеет работать только с числами, и для того чтобы можно было хранить в его памяти текст, требуется определить, каким числом будет представляться (кодироваться) каждый символ. Соответствие между символами и кодирующими их числами называется кодировкой, или кодовой таблицей (character set).
Существует множество различных кодировок символов. Например, в Windows часто используется кодировка ANSI, в которой каждый символ представляется одним байтом (8 бит), поэтому в этой кодировке можно одновременно задать только 256 символов.
Кодировка Unicode позволяет представить символы всех существующих алфавитов одновременно, что коренным образом улучшает переносимость текстов. Каждому символу соответствует свой уникальный код. Естественно, что при этом для хранения каждого символа требуется больше памяти. Первые 128 Unicode-символов соответствуют первой части кодовой таблицы ANSI.
|
Алфавит с# включает:
Из символов составляются более крупные строительные блоки: лексемы, директивы препроцессора и комментарии.
Лексема (token) - это минимальная единица языка, имеющая самостоятельный смысл. Существуют следующие виды лексем:
Лексемы языка программирования аналогичны словам естественного языка.
9
Комментарии предназначены для записи пояснений к программе и формирования документации. Из лексем составляются выражения и операторы.
Идентификаторы
Имена в программах служат той же цели, что и имена в мире людей, - чтобы обращаться к программным объектам и различать их, то есть идентифицировать. Поэтому имена также называют идентификаторами. В идентификаторе могут использоваться буквы, цифры и символ подчёркивания. Прописные и строчные буквы различаются, например, sysop, SySoP, SYSOP – три разных имени.
Первым символом идентификатора может быть буква или знак подчёркивания, но не цифра. Длина идентификатора не ограничена. Пробелы внутри имён не допускаются. В идентификаторах C# разрешается использовать помимо латинских букв буквы национальных алфавитов. Например, Васяявляется правильным идентификатором. Более того, в идентификаторах можно применять даже так называемые escape-последовательности Unicode, то есть представлять символ с помощью его кода в шестнадцатеричном виде с префиксом \u, например, \u00F2.
|
ПРИМЕЧАНИЕ ———————————————————————————————
Примеры неправильных имён: 2late, Big gig, Б#г; первое начинается с цифры, второе и третье содержат недопустимые символы (пробел и #).
Имена даются элементам программы, к которым требуется обращаться: переменным, типам, константам, методам, меткам и т.д., после этого его можно использовать в последующих операторах программы. При выборе идентификатора необходимо иметь в виду следующее:
Ключевые слова
Ключевые слова - это зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смысле, в котором они определены. Список ключевых слов С# приведен в таблице 2.1.
Знаки операций и разделители
Знак операции — это один или более символов, определяющих действие над операндами. Внутри знака операции пробелы не допускаются. Например, в выражении а+=b знак += является знаком операции, а а и b — операндами. Символы, составляющие знак операций, могут быть как специальными, например, &&, | и <, так и буквенными, такими как as или new.
Операции делятся на унарные, бинарные и тернарную по количеству участвующих в них операндов. Один и тот же знак может интерпретироваться по-разному в зависимости от контекста. Все знаки операций, за исключением [ ], () и?:, представляют собой отдельные лексемы.
Таблица 2.1 - Ключевые слова С#
break
checked
default
ehum
finally
goto
interface
namespace
out
public
sealed
string
true
unchecked
void.bool
char
decimal
else
false
foreach
int
long
operator
protected
sbyte
static
throw
ulong
virtual
base
catch
continue
double
extern
for
in
lock
object
private
return
stackalloc
this
uint
using as
case
const
do
explicit
float
implicit
is
null
params
ref
sizeof
switch
typeof
ushort
while
abstract
byte
class
delegate
event
fixed
if
internal
new
override
readonly
short
struct
try
unsafe
volatil
Разделители используются для разделения или, наоборот, группирования элементов. Примеры разделителей: скобки, точка, запятая. Ниже перечислены все знаки операций и разделители, использующиеся в С#:
{ } [ ] ().,:; + - * / % & | ^! ~ =
< >? ++ -- && << >> ==!= <= >= += -= *= /= %=
&= |= ^= <<= >>= ->
10
Тип данных однозначно определяет:
|
· Внутреннее представление данных – множество их значений
· Допустимые действия над данными (операции и функции)
Каждое выражение в программе имеет определенный тип. Память, в которой хранятся данные во время выполнения программы, делятся на две области – стек и динамическая память. Стек используется для хранения величин, память под которые выделяет компилятор. В динамической области памяти (heap- куча) память резервируется и освобождается во время выполнения программы с помощью специальных команд самим программистом.
Классификация типов данных в С# представлена на рисунке 3.1
11
Константы и переменные есть основными объектами, которые используются в программе. Константы и переменные – это именованные объекты, для которых выделяется память.
Значение константы обязательно устанавливается при ее объявлении в программе.
В отличие от переменной значение константы не может изменяться программно. Если константа уже объявлена, то при попытке присвоить константе какое-нибудь новое значение компилятор выдаст сообщение об ошибке.
Все переменные и константы должны быть объявлены до их применения. Это нужно, чтобы сообщить компилятору о типе данных, который сохраняется в переменной. Если известен тип переменной, то компилятор осуществляет соответствующую компиляцию любого оператора, в котором используется данная переменная.
Константа объявляется с помощью оператора следующей формы:
const тип имя_константы = значение;
где
const – ключевое слово, которое определяет что именно это есть константа; тип – тип данных, которые сохраняются в константе; имя_константы – имя константы; значение – значение константы, которое есть неизменяемым в программе.
Переменные объявляются с помощью оператора следующей формы:
тип имя_переменной;
где тип – это тип данных, которые сохраняются в переменной; а имя_переменной – это ее имя.
Объявить переменную можно любого типа, который существует в программе. Тип переменной может быть также типом-значением.
12
Есть два основных способа преобразования типов:
- Неявное преобразование типов, когда компилятор автоматически конвертирует один фундаментальный тип данных в другой.
|
- Явное преобразование типов, когда разработчик использует один из операторов casts для выполнения конвертации объекта из одного типа данных в другой.
Неявное преобразование типа (или ещё «автоматическое преобразование типа») выполняется всякий раз, когда требуется один фундаментальный тип данных, но предоставляется другой, и пользователь не указывает компилятору, как выполнить конвертацию (не использует явное преобразование типов через операторы casts).
Есть два основных типа неявного преобразования типов:
числовое расширение;
числовая конверсия.
Числовое расширение
Когда значение из одного типа данных конвертируется в другой тип данных побольше (по размеру и по диапазону значений), то это называется числовым расширением. Например, int может быть расширен в long, а float может быть расширен в double:
1 2 | long l(65); // расширяем значение типа int (65) в тип long double d(0.11f); // расширяем значение типа float (0.11) в тип double |
В C++ есть два типа расширений:
Интегральное расширение (или ещё «целочисленное расширение»). Включает в себя преобразование целочисленных типов, меньших, чем int (bool, char, unsigned char, signed char, unsigned short, signed short) в int (если это возможно) или unsigned int.
Расширение типа с плавающей точкой. Конвертация из float в double.
Интегральное расширение и расширение типа с плавающей точкой используются для преобразования «меньших по размеру» типов данных в типы int/unsigned int или double (они наиболее эффективны для выполнения разных операций).
Важно: Числовые расширения всегда безопасны и не приводят к потере данных.
Числовые конверсии
Когда мы конвертируем значение из более крупного типа данных в аналогичный, но более мелкий тип данных, или конвертация происходит между разными типами данных, то это называется числовой конверсией. Например:
1 2 | double d = 4; // конвертируем 4 (тип int) в double short s = 3; // конвертируем 3 (тип int) в short |
В отличие от расширений, которые всегда безопасны, конверсии могут (но не всегда) привести к потере данных. Поэтому, в любой программе, где выполняется неявная конверсия, компилятор будет выдавать предупреждение.
Есть много правил по выполнению числовой конверсии, но мы рассмотрим только основные.
Во всех случаях, когда происходит конвертация значения из одного типа данных в другой, но который не имеет достаточный диапазон для хранения конвертируемого значения, результаты будут неожиданные. Поэтому так делать не рекомендуется. Например, рассмотрим следующую программу:
1 2 3 4 5 6 7 8 9 10 11 | #include <iostream> int main() { int i = 30000; char c = i; std::cout << static_cast<int>(c); return 0; } |
В этом примере мы присвоили огромное целочисленное значение типа int переменной типа char (диапазон которого составляет от -128 до 127). Это приведёт к переполнению и следующему результату:
|
48
Однако, если число подходит по диапазону, то конвертация пройдёт успешно. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <iostream> int main() { int i = 3; short s = i; // конвертируем значение типа int в тип short std::cout << s << std::endl; double d = 0.1234; float f = d; std::cout << f << std::endl; return 0; } |
Здесь мы получим ожидаемый результат:
3
0.1234
В случаях со значениями типа с плавающей точкой могут произойти округления из-за худшей точности в меньших типах. Например:
1 2 3 4 5 6 7 8 9 10 | #include <iostream> #include <iomanip> // для std::setprecision() int main() { float f = 0.123456789; // значение типа double - 0.123456789 имеет 9 значащих цифр, но float может хранить только 7 std::cout << std::setprecision(9) << f; // std::setprecision определён в заголовочном файле iomanip return 0; } |
В этом случае мы наблюдаем потерю в точности, так как точность в float меньше чем в double:
0.123456791
Конвертация из типа int в тип float успешна до тех пор, пока значения подходят по диапазону. Например:
1 2 3 4 5 6 7 8 9 10 | #include <iostream> int main() { int i = 10; float f = i; std::cout << f; return 0; } |
Результат:
10
Аналогично, конвертация из float в int успешна до тех пор, пока значения подходят по диапазону. Но следует помнить, что любая дробь отбрасывается. Например:
1 2 3 4 5 6 7 8 9 | #include <iostream> int main() { int i = 4.6; std::cout << i; return 0; } |
Дробная часть значения (.6) игнорируется и результат:
4
|
|
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой...
Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!