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

4431

.pdf
Скачиваний:
4
Добавлен:
08.01.2021
Размер:
1.01 Mб
Скачать

11

В табл. 2.2 приведены все беззнаковые целые типы данных.

Таблица 2.2

Беззнаковые целые типы данных

Тип

Размер,

Диапазон допустимых значений

 

байт

 

 

 

 

 

 

byte

1

0

255

 

 

 

 

ushort

2

0

65535

 

 

 

 

uint

4

0

4294967295

 

 

 

 

ulong

8

0

18446744073709551615

 

 

 

 

Примеры объявления переменных целых беззнаковых типов: byte a; ushort b; uint k; ulong j;

Для целых типов допустимы следующие группы операций:

арифметические операции;

побитовые операции;

операции сравнения;

автоувеличение и автоуменьшение.

Возможно автоматическое преобразование от менее широкого (мощного) к более широкому (мощному) типу, но не наоборот.

Например: int i = 3;

short k = 2;

i = k; // это допустимо

k = i; // так нельзя, будет сообщение об ошибке

k = (short) i; //так можно - выполняем явное преобразование

Вещественные типы

Для работы с действительными числами в языке C# имеется два вещественных типа: float (одинарная точность) и double (двойная точность). Краткая характеристика этих типов представлена в табл. 2.3.

 

 

 

 

 

 

 

Таблица 2.3

 

 

 

Вещественные типы

 

Тип

 

Размер,

Диапазон возмож-

 

Точность (количество

 

 

байт

ных значений (по

 

десятичных цифр)

 

 

 

модулю)

 

 

 

 

 

 

 

 

 

 

 

 

float

 

4

10-45

1038

 

7

 

 

 

 

 

 

 

 

double

 

8

10-324

10308

 

15

 

 

 

 

Примеры объявления переменных вещественных типов:

float x;

double y;

 

 

 

 

12

Для вещественных типов допустимы следующие группы операций:

арифметические операции;

операции сравнения;

автоувеличение и автоуменьшение.

Тип decimal

Этот тип специально создан для выполнения финансовых расчётов и обеспечивает точность до 29 десятичных цифр. Диапазон возможных значений (по модулю) от 10-28 до 1028. Под переменные этого типа отводится 16 байт. Пример объявления переменной этого типа:

decimal m;

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

Для хранения отдельных символов используется тип char. Так как в языке C# для кодирования символов используется Unicode, то под каждый символ отводится 2 байта. Пример объявления переменной этого типа:

char c;

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

Для работы с логическими величинами используется тип bool. Допустимы два значения: true (истина) и false (ложь). Пример объявления переменной логического типа:

bool p;

Для данных логического типа допустимы операции проверки на равенство и неравенство. Следует иметь в виду, что для булевого типа в C# запрещены какие-либо преобразования в целые типы.

Практические задания

1.Использовать встроенные (предопределённые) целые типы данных в объявлениях переменных в программе. Проверить для них допустимость преобразований типов.

2.Использовать встроенные вещественные типы данных в объявлениях переменных в программе. Проверить для них допустимость преобразований типов, например, целого типа в вещественный.

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

13

Лабораторная работа №3. Использование условных операторов и оператора выбора в программах на языке C# (4 часа)

Оператор ветвления if-else

Наиболее часто используется условный оператор if-else, синтаксис

которого можно представить следующим образом: if (логическое_условие)

оператор_1;

[else

оператор_2;]

или

if (логическое_условие)

{

оператор_1;

. . .

оператор_N;

}

[else

{

оператор_1;

. . .

оператор_M;

}];

В условном операторе if-else секция else является необязательной, т.е. при необходимости она может быть опущена (в синтаксической нотации этот факт отражен заключением секции else в квадратные скобки; при этом сами скобки не являются элементами синтаксиса оператора).

Логическое условие может содержать логические операторы < (меньше), > (больше), <= (меньше или равно), >= (больше или равно), ! (отрицание), != (не равно), == (равно), && (логическое «И»), || (логическое «ИЛИ») и т.д. Логическое условие всегда заключается в круглые скобки.

Если логическое условие является составным, то его части могут не заключаться в круглые скобки, если это не отражается на смысле условия.

Пример использования оператора if-else:

Console.WriteLine("Enter a character: "); char c = (char)Console.Read();

if (Char.IsLetter(c))

{

Console.WriteLine("It is an alphabetic character."); if (Char.IsLower(c))

Console.WriteLine("The character is lowercase.");

else

Console.WriteLine("The character is uppercase.");

}

else

14

{

Console.WriteLine("Not an alphabetic character.");

}

Условный оператор ?: возвращает одно из двух значений в зависимости от значения логического выражения, и имеет следующий синтаксис:

(логическое условие) ? выражение 1 : выражение 2;

Пример использования оператора ?: имеет следующий вид:

double s = x != 0.0 ? Math.Sin(x) / x : 1.0;

Другие примеры использования оператора if-else приведены ниже. Задача 1. Определить, является ли заданное целое число кратным 3. Возможный текст программы:

using System; namespace Prim_IF

{

class Program

{

public static void Main(string[] args)

{

Console.Write("Задайте n = ");

int n = int.Parse(Console.ReadLine()); if(n % 3 == 0)

Console.WriteLine("Число {0} кратно 3", n); else

Console.WriteLine("Число {0} не кратно 3", n); Console.Write("Press any key to continue . . . "); Console.ReadKey(true);

}

}

}

Задача 2. Даны три числа: a, b, c. Могут ли эти числа быть длинами сторон треугольника? Если «да», то вычислить его площадь, используя формулу

Герона: Возможный текст программы:

, где .

using System; namespace Prim_IF_2

{

class Program

{

public static void Main(string[] args)

{

double a, b, c, p, s; Console.Write("a=");

a = double.Parse(Console.ReadLine()); Console.Write("b=");

b = double.Parse(Console.ReadLine());

15

Console.Write("c=");

c = double.Parse(Console.ReadLine()); if(a + b > c && b + c > a && a+ c > b)

{

Console.WriteLine("Треугольник существует"); p = (a + b + c) / 2;

s = Math.Sqrt(p * (p - a) * (p - b) * (p - c)); Console.WriteLine("s={0}", s);

}

else

Console.WriteLine("Треугольник не существует"); Console.Write("Press any key to continue . . . "); Console.ReadKey(true);

}

}

}

Оператор switch

Оператор if позволяет сделать выбор одного из двух возможных продолжений. Если вариантов выбора более двух, то можно использовать вложенные операторы if. Однако, это не всегда удобно. Когда счёт вариантов выбора идёт на десятки, применение оператора if становится совершенно неудобным. Для таких случаев рекомендуется использовать оператор выбора switch.

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

switch (выражение)

{

case значение_1: оператор_1;

. . .

оператор_K; break;

case значение_2: оператор_1;

. . .

оператор_L; break;

. . .

[default:

оператор_1;

. . .

оператор_N; break;

]

}

Управление передается секции case, значение которой совпадает со зна-

16

чением выражения в операторе switch. Это выражение может содержать переменные символьного, строкового или целочисленных типов, а также операции, возвращающие результат одного из перечисленных типов.

Пример использования оператора switch:

Console.Write("Please enter a number between 1 and 3: "); string myInput = Console.ReadLine();

int myInt = Int32.Parse(myInput);

switch (myInt)

{

case 1:

Console.WriteLine("Your number is 1"); break;

case 2: case 3:

Console.WriteLine("Your number is 2 or 3"); break;

default:

Console.WriteLine("Your number {0} is not between 1 and 3.", myInt);

break;

}

Задача 3. По номеру дня недели вывести на экране монитора название этого дня недели.

Возможный текст программы:

using System; namespace Prim_switch

{

class Program

{

public static void Main(string[] args)

{

Console.WriteLine("Задайте номер недели:"); int n = int.Parse(Console.ReadLine()); switch(n)

{

case 1:

Console.WriteLine("Понедельник"); break;

case 2:

Console.WriteLine("Вторник"); break;

case 3:

Console.WriteLine("Среда"); break;

case 4:

Console.WriteLine("Четверг"); break;

case 5: Console.WriteLine("Пятница");

17

break; case 6:

Console.WriteLine("Суббота"); break;

case 7: Console.WriteLine("Воскресенье"); break;

default:

Console.WriteLine("Неверный номер дня недели:

{0}", n);

break;

}

Console.Write("Press any key to continue . . . "); Console.ReadKey(true);

}

}

}

 

 

Примечание. Все ветви

в операторе switch завершаются

операто-

ром break. Что произойдёт,

если оператор break отсутствует?

В языках

C/C++ выполняется следующая ветвь и, возможно, не одна, и так до тех пор, пока не встретится первый оператор break. В языке C# допускается пустая ветвь case. Ветвь case с хотя бы одним оператором должна заканчиваться оператором break или оператором goto.

Вопросы для самопроверки

1.Приведите примеры условных операторов.

2.Какие выражения можно использовать в операторе switch?

3.Что означает метка default в операторе switch?

Практические задания

1.Написать программу, которая запрашивает ввод числа, лежащего в диапазоне от 1 до 365 (номер дня в году), переводит этот число в месяц и день (число) месяца. Например, число 40 соответствует 9 февраля (високосный год не учитывать).

2.Добавить к предыдущей задаче проверку числа введённого пользователем. Если число меньше 1 или больше 365, программа должна вырабатывать исключение, и выдавать на экран соответствующее сообщение.

3.Изменить программу для задач 1 и 2 так, чтобы она учитывала год (високосный или нет). Год вводится с экрана. Год является високосным, если выполняются одновременно два условия:

1) год делится на 4; 2) не делится на 100 и не делится на 400.

18

Лабораторная работа №4. Использование операторов цикла в программах на языке C# (4 часа)

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

Цикл это последовательность каких-либо действий, которая может повторяться многократно. В цикле всегда выделяют:

тело цикла это те действия, что многократно повторяются;

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

По расположению управляющей части циклы делятся на циклы с предусловием и на циклы с постусловием.

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

Цикл с постусловием всегда выполняется хотя бы один раз. В нём вначале выполняется тело цикла, а затем делается проверка: надо ли снова повторять цикл.

В языке программирования С# имеется четыре оператора цик-

ла: while-do, do-while, for и foreach-in. Первые три вида цикла унас-

ледованы из языков C/C++, а оператор foreach-in является новым. Конечно, цикл можно организовать и искусственно, применяя операторы if и goto, но рекомендуется всегда использовать «настоящие» операторы цикла.

Цикл while-do

Словосочетание while-do переводится как «пока-выполнять», т.е. пока истинно некоторое условие, повторять тело цикла. Другими словами, цикл while-do это цикл с предусловием. Вначале проверяется истинность некоторого условия, а затем, если оно истинно, выполняются операторы (один или несколько), составляющие тело цикла. Такой цикл не выполниться ни разу, если условие изначально ложно. Условие это любое выражение, имеющее результат логического типа, т.е. условие для операторов цикла записывается точно так же, как для оператора ветвления if-else.

Формально оператор while-do можно записать так:

while(условие) // Заголовок

{

операторы тела цикла

}

Тело цикла практически всегда необходимо оформлять как блок, так как оператор while-do редко содержит в своём теле только один оператор.

Алгоритм работы оператора while-do:

1. Вычисляется значение условия в заголовке оператора.

19

2.Если оно истинно, то выполняются операторы тела цикла, а затем управление снова передаётся на заголовок. Если условие ложно, то оператор заканчивает работу. После этого будет выполняться оператор, следующий сразу же за оператором цикла.

Задача 1. Найти сумму квадратов первых n натуральных чисел. Возможный текст программы:

using System; namespace Prim_while

{

class Program

{

public static void Main(string[] args)

{

int i, n, s; Console.Write("n=");

n = int.Parse(Console.ReadLine()); s = 0;

i = 1; while(i <= n)

{

s += i * i; i++;

}

Console.WriteLine("s={0}", s); Console.Write("Press any key to continue . . . "); Console.ReadKey(true);

}

}

}

Цикл do-while

Цикл do-while это цикл с постусловием. Формальная запись:

do

{

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

} while(Условие);

Цикл do-while всегда выполняется хотя бы один раз. Поэтому цикл do-while удобно использовать для проверки входных данных.

Задача 2. Найти сумму квадратов первых n натуральных чисел. Возможный текст программы:

using System; namespace Prim_do

{

class Program

{

public static void Main(string[] args)

20

{

int i, n, s; do

{

Console.WriteLine("Задайте n>0:"); n = int.Parse(Console.ReadLine());

}

while(n < 1); s = 0;

i = 1; do

{

s += i * i; i++;

}

while(i <= n); Console.WriteLine("s={0}", s);

Console.Write("Press any key to continue . . . "); Console.ReadKey(true);

}

}

}

Цикл for

Это самый популярный оператор цикла для всех С-подобных языков. Популярность объясняется необычайной гибкостью и мощью этого оператора.

Формальная запись оператора for следующая:

for(начальные действия; условие; дополнительные действия)

{

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

}

Начальные действия это любые операторы присваивания, записанные через запятую. Здесь, как правило, делается инициализация различных переменных, необходимых для работы в цикле for.

Условие логическое выражение, записывается так же, как и для других операторов цикла и оператора if.

Дополнительные действия любые записанные через запятую операторы присваивания и (или) операторы-выражения (автоувеличение, автоуменьшение).

Алгоритм работы оператора for:

1.Вычисляются операторы, составляющие начальные действия.

2.Вычисляется условие. Если оно ложно, то оператор заканчивает свою

работу. Если условие истинно, то выполняются операторы тела цикла, потом операторы, составляющие группу дополнительных действий, и затем снова делается проверка истинности условия. И так до тех пор, пока оно остаётся истинным.

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