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

infpro_lab2_enc

.pdf
Скачиваний:
11
Добавлен:
14.05.2015
Размер:
1.03 Mб
Скачать

Лабораторная работа №2

Лабораторная работа №2

Переменные и выражения. Ввод-вывод числовых данных.

Роман Михайлович Ягодин

<redhound@inbox.ru>

Copyright © 2009-2010 ЯРМ

История переиздания

09.10.2009

ЯРМ

Дополнен раздел "Переменные" - про инициализацию переменных

 

25.09.2009

ЯРМ

Документ создан

 

14.09.2010

ЯРМ

Новые варианты заданий, правки текста и примеров во всех разделах

Содержание

Порядок выполнения Консольный ввод-вывод

Переменные. Вещественный тип данных Операторы и выражения Математические функции Варианты заданий Контрольные вопросы Литература

A. Вопросы и задания

Аннотация

Рассматриваются базовые возможности консольного ввода-вывода в приложениях .NET. Даются сведения о вещественных типах данных и составлении выражений с использованием арифметических операторов и математических функций. В практической части полученные знания закрепляются при выполнении ряда заданий.

Порядок выполнения

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

2.Выполнить практические задания

3.Самостоятельно ответить на контрольные вопросы

file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]

Лабораторная работа №2

4.Составить отчет по проделанной работе (в тетради)

5.Отчитаться о выполнении работы преподавателю

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

Консоль (console) в общем смысле - некоторое оборудование, позволяющее пользователю получить доступ к компьютеру. Как минимум, в консоль входит устройство вывода информации (принтер, монитор) и устройство ввода (клавиатура, возможно мышь, планшет или другие манипуляторы).

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

Консольное приложение (console application) - это приложение, использующее консольный режим обмена информацией с пользователем.

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

Платформа .NET предоставляет программисту возможность работы с функциями консоли через специальный системный объект Console. Вы уже сталкивались с его использованием в лабораторной работе №1. Ниже в таблице приведены основные методы объекта Console.

Таблица 1. Основные методы объекта Console

 

 

Метод

Описание

 

 

Console.WriteLine()

Вывод данных на экран. Последующий вывод идет с новой строки

Console.Write()

Вывод данных на экран. Последующий вывод продолжает текущую

строку

 

Console.ReadLine()

Ввод строки с клавиатуры

Console.ReadKey(true)

Ждет нажатия клавиши пользователем

Console.Clear()

Очистка окна консоли

Приведем пример простой программы возведения числа в целую степень.

Пример 1. Возведение числа в целую степень

01

// выводим приглашения для ввода данных пользователем:

02

Console.Write("Введите целое число a = ");

03

 

04

// вводим целое число а:

05

int a = int.Parse(Console.ReadLine());

06

 

07

// возводим а в квадра и выводим результат:

file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]

Лабораторная работа №2

08

Console.WriteLine("Квадрат числа {0} равен {1}", a, a*a);

09

 

10// ждем нажатия клавиши пользователем,

11// перед тем как закрыть программу

12Console.Write("Нажмите любую клавишу...");

13Console.ReadKey(true);

Структура данного примера очень типична для простых консольных приложений.

1)На строке 1 мы выводим на экран приглашение пользователю ввести исходные данные с помощью Console.Write(). Выводить на экран приглашение не обязательно, но очень желательно, поскольку пользователю не придется догадываться, что от него ждет программа

вданный конкретный момент.

2)Во второй строке вводим исходные данные с помощью Console.ReadLine() - пользователь набирает число на клавиатуре и жмет [Enter]. Затем преобразуем введенные данные в

нужный формат - Console.ReadLine() возвращает введенные данные как строку символов (в виде текста), а метод int.Parse() позволяет перевести введенную строку в целое число. Полученное целое число присваивается переменной a.

При вводе c консоли вещественных данных используется похожая запись. В рамках этой лабораторной работы вы будете работать именно переменными типа double, поэтому "не думая", используйте для ввода данных следующую запись:

Пример 2. Ввод вещественных чисел

1// вводим вещественное число xd двойной точности

2double xd = double.Parse(Console.ReadLine());

3

4// вводим вещественное число xf обычной точности

5float xf = float.Parse(Console.ReadLine());

3)На третьей строке вычисляем результат, и выводим его на экран с помощью Console.WriteLine(). В нашем случае, вычисление (возведение числа в квадрат) и вывод на экран можно объединить. В случае, когда вычисления более сложные (а иногда - просто для большей ясности), можно использовать дополнительные переменные (подробнее про переменные см. в следующем разделе):

Пример 3. Сохранение результата в дополнительной переменной

1Console.Write("Введите целое число a = ");

2int a = int.Parse(Console.ReadLine());

3

4 int a_sq = a*a;

5

6Console.WriteLine("Квадрат числа {0} равен {1}", a, a_sq);

4)На четвертой строке с помощью Console.Write() выводим приглашение "Нажмите любую клавишу", а на пятой строке ставим команду Console.ReadKey(), чтобы программа ждала реакции пользователя. Иначе, программа завершится сразу, и результат ее выполнения мы не увидим.

Результат работы программы представлен на рисунке:

Рисунок 1. Простая консольная программа

file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]

Лабораторная работа №2

Методы Console.WriteLine() и Console.Write() как минимум имеют 1 параметр - строку

формата, задаваемую в двойных кавычках. В этой строке могут содержаться символы формата - цифры в фигурных скобках вида "{0}", "{1}" и т.д.

Внимание

Еще раз обратите внимание и запомните, что является строкой формата и

что - символами формата.

Если в строке формата присутствуют символы формата, то при вызове Console.WriteLine(), справа, через запятую добавляется соответствующее количество параметров. В нашем случае, параметры - это переменная а и выражение а*а. При выводе на экран, значения параметров подставляются вместо соответствующих символов формата. Простой пример:

Пример 4. Подстановка значений параметров вместо символов формата

1

int n = 10;

2

 

3Console.WriteLine("Однажды {0} негритят отправились обедать. Один случайно поперхнулся и их осталось {1}", n, n-1);

Символы формата нумеруются начиная с нуля: 0,1,2 и т.д. Каждому номеру символа формата ставится в соответствие один параметр. Поэтому, при организации вывода по формату через Console.WriteLine() обязательно нужно:

сохранять порядок нумерации символов формата: 0,1,2 и т.д.

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

Ниже приведены примеры правильной и неправильной записи вывода по формату.

Пример 5. Соответствие параметров и символов формата

01

// правильно

02

Console.WriteLine

03

("Простые числа: {0}, {1}, {2}, ...", 2, 3, 5 );

04

 

05

// правильно,

06

// параметры и символы формата просто переставлены

file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]

Лабораторная работа №2

07

Console.WriteLine

08

("Простые числа: {0}, {2}, {1}, ...", 2, 5, 3 );

09

 

10// неправильно, пропущен символ формата {1}

11Console.WriteLine

12("Простые числа: {0}, {2}, {3}, ...", 2, 3, 5 );

14// неправильно, число разных символов формата - 3

15// не равно числу параметров - 4

16Console.WriteLine

17("Простые числа: {0}, {1}, {2}, ...", 2, 3, 5, 7);

Встроке формата один и тот же символ формата может повторяться сколько угодно раз:

Пример 6. Повторение символов формата

1

Console.WriteLine("{0}-{0}, {1}-{1} немного", "чуть", "совсем");

2

 

3

// Результат на экране: чуть-чуть, cовсем-совсем немного

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

Пример 7. Дополнительные возможности форматирования при выводе на экран вещественных чисел

01 double a = 123.456;

02

03 // выводим число а в обычной форме:

04 Console.WriteLine("Обычная форма (G): {0}", a);

05 // {0} в строке формата в данном случае 06 // означает то же самое, что и {0:G} 07

08 // выводим число а в научной (экспоненциальной) форме

09 Console.WriteLine("Научная форма (E): {0:E}", a);

10

11// выводим число а в научной (экспоненциальной) форме

12// с точностью 3 знака после запятой

13Console.WriteLine("Научная форма (E, 3 разряда): {0:E3}", a);

15// выводим число а в форме с фиксированной запятой

16Console.WriteLine("C фиксированной точкой (F): {0:F}", a);

18// выводим число а в форме с фиксированной запятой,

19// с точностью 3 знака после запятой

20Console.WriteLine("C фикс. точкой: (F, 3 разряда): {0:F3}", a);

Рисунок 2. Результат работы программы-примера

file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]

Лабораторная работа №2

Как видно на рисунке, все 5 вариантов - это просто разные способы изображения [отображения] на экране одного и того же значения переменной а.

Вызов Console.WriteLine() без параметров (с пустыми скобками) выводит на экран пустую строку. Это можно использовать для отделения на экране разных блоков информации.

Подробнее возможностях консольного ввода-вывода и форматирования строк см. в следующих работах.

Переменные. Вещественный тип данных

Переменная (variable) в языках программирования - поименованная область памяти компьютера, в которой хранятся данные. Как правило, объем памяти, занимаемый одной переменной, небольшой.

В отличие от математики, переменная в [императивном] языке программирования всегда имеет какое-либо значение.

Пример 8. Пример объявления переменных

1int a = 34;

2double pi = 3.14159;

3float e = 2.718f;

4string myName = "Вася";

Вприведенном выше примере мы объявили 4 переменные: целое число a, вещественные pi и e, а также строку myName. При объявлении, этим переменным сразу же присвоили значения (соответствующие их типу).

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

правила именования переменных:

имя переменной должно начинаться с буквы

имя переменной не должно содержать пробелов

имя переменной может содержать буквы, цифры (0-9), символ подчеркивания "_"

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

имя переменной должно быть по возможности коротким

имя переменной (хотя и краткое) должно отражать смысл содержащихся в ней данных

в языке C# различаются большие (прописные) и малые (строчные) буквы, поэтому переменные myName, MYNAME, MyName и т.п. - это абсолютно разные, независимые переменные с точки зрения компилятора

Замечание

В настоящее время, с развитием Unicode, появилась возможность

file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]

Лабораторная работа №2

использовать в программах при именования переменных не только буквы латинского алфавита, но и национальных алфавитов (русского, в частности). Тем не менее, настоятельно рекомендуется использовать имена переменных, записанные латинскими буквами, и еще лучше - с использованием английского языка.

Каждая переменная относится к определенному типу данных (data type). Тип данных переменной определяет, какие именно значения могут храниться в этой переменной, и какие операции можно с этими значениями производить.

Втесте программы следует различать объявление переменной (variable declaration), ее

инициализацию (initialization) и использование (use).

Вбольшинстве современных языков программирования объявление переменной должно предшествовать ее использованию.

Инициализация переменной означает присвоение переменной начального значения, и иногда совмещается с объявлением переменной. При инициализации используется так называемый оператор присваивания (assignment operator), в C# это знак "=".

В отличие от знака равенства в математике, оператор присваивания в [императивных] языках программирования не декларирует равенства правой и левой частей выражения. Он просто вычисляет (еvaluates) выражение, стоящее справа от знака "=", и присваивает результат вычислений переменной, стоящей слева от знака "=". Поэтому, в некоторых языках программирования оператор присваивания специально изображают другим символом, например знаком ":=" в языке Паскаль.

Пример 9. Объявление, инициализация и использование переменных

01 // объявление переменной

02 int a;

03

04 // объявление нескольких переменных

05 float f1, f2, f3;

06

07 // объявление, совмещенное с инициализацией

08 short b = 85;

09

10// инициализация переменной а,

11// использование переменной b

12a = b + 34;

13

14// использование f2 и f3 -

15// компилятор выдает предупреждение,

16// что f2 и f3 непроинициализированы:

17f1 = f2 + f3;

18

19// объявление сразу нескольких переменных,

20// с инициализацией:

21decimal m1 = 21.6m, m2, m3 = 18.3m;

При объявлении, переменные получают некоторые значения по умолчанию. Например, переменные типа int приравниваются к 0, переменные строкового типа (который мы рассмотрим позже) к null и т.д. Это характерно для всех языков программирования платформы .NET. Тем не менее, желательно явно указывать начальное значение переменной при ее объявлении (инициализировать ее), поскольку это повышает ясность

file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]

Лабораторная работа №2

кода.

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

Пример 10. Инициализация переменных разными значениями

1// 1) инициализация значением константый:

2double d1 = 833.5;

3

4// 2) инициализация значением другой переменной:

5double d2 = d1;

6

7// 3) инициализация значение произвольного выражения:

8double d3 = (d1 + 0.15) * 2.7 - Math.Sin(d2);

На самом деле, первые два варианта это просто упрощенный вид третьего. Константы и переменные в данном контексте представляют собой вид простых выражений.

Замечание

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

В языке C# нет специального раздела в программе, где должны объявляться переменные, как, например в языке Паскаль, где все переменные должны объявляться в разделе Var. В языке С# объявление новых переменных производится по мере возникновения необходимости в них.

Подробнее об области видимости переменных мы поговорим, когда будем рассматривать понятие пространств имен (namespaces).

В математических и научных расчетах обычно используются вещественные числа. Для хранения таких чисел используются переменные вещественных типов float и double:

Таблица 2. Вещественные типы данных

Короткое

Имя типа

Диапазон

Точность

 

имя типа в

(значащих цифр

Описание

C#

.NET

чисел

после запятой)

 

 

 

 

 

 

 

 

 

 

 

±1.5×10-45

 

Число с плавающей

float

System.Float ...

7 цифр

точкой

 

 

±3.4×1038

 

 

 

 

 

 

 

±5.0×10-324

 

Число с плавающей

double

System.Double ...

15-16 цифр

точкой двойной

 

 

308

 

 

file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]

Лабораторная работа №2

 

 

±1.7×10

 

точности

 

 

 

 

 

decimal

System.Decimal

±1.0×10-28

 

Число с

...

28-29 цифр

фиксированной

 

 

±7.9×1028

 

точкой

Утверждается, что для большинства типовых расчетов, точности типа данных float более чем достаточно. Тем не менее, пока (при выполнении лабораторной работы) рекомендуем использовать тип double для вещественных переменных в своих программах, поскольку математические функции C# (объект Math - см. ниже) возвращают результаты именно типа

double.

Примеры записи констант типов double и float:

Пример 11. Примеры записи констант для типов double и float

01

double pi = 3.14159;

02

 

 

03

// числа x1, x2, x3 равны:

04

double x1

= 0.005;

05

double x2

= .005;

06

double x3

= 5e-3;

07

 

 

08

double y = 5.67 E+3; // неправильно,

09

// лишние пробелы в записи константы!

10

 

 

11

double one = 1d; // то же, что и 1.0

12

 

 

13double seven = 7;

14// правильно, но:

15double h1 = 7 / 2; // h1 будет равно 3!

16// лучше:

17double h2 = 7.0 / 2.0; // h2 будет равно 3.5

19double speedOfLight1 = 3e8; // скорость света ~300 000 км/c

20double speedOfLight2 = 3.0E+8;

22float exp1 = 2.71828;

23// неправильно, 2.71828 это тип double!

25float exp2 = 2.71828f; // правильно

Просуммируем основные правила записи констант типов double и float:

В качестве разделителя целой и дробной части используется точка

Константы типа double могут быть явно обозначены буквой "d" после цифр

Константы типа float могут быть явно обозначены буквой "f" после цифр

Если буквы после цифр константы нет, но есть дробная часть - то считается, что константа имеет тип double

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

При записи числа в научной форме, для обозначения порядка числа (y×10±x) используется запись yE±x или ... ye±x (знак + необязательно указывать)

Целые числа в выражениях лучше (только в рамках данной лабораторной работы)

file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]

Лабораторная работа №2

писать как "2.0" (или "2d"), но не просто "2" !

Пробелы в записи констант не допускаются!

Переменные типа decimal обладают повышенной точностью представления чисел, но меньшим диапазоном, чем float и double. Основное их назначение - финансовые и денежные расчеты. Для обозначения констант этого типа используется буква m (от англ."money").

Операторы и выражения

В языке C# реализованы 4 основных арифметических оператора: сложение, вычитание, умножение и деление.

Пример 12. Основные арифметические операторы

01

double a = 12.0 + 0.75 - 3.33; // сложение и вычитание

02

double b = a * 2;

// умножение

03

double с = 52.3 / b;

// деление

04

double na = -a;

// изменение знака числа

05

 

// (унарный минус)

06

 

 

07

Console.WriteLine ("a = {0}", a);

08

Console.WriteLine ("b = {0}", b);

09Console.WriteLine ("c = {0}", c);

10Console.WriteLine ("na = {0}", na);

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

Линейная форма записи математической формулы - это такая форма, когда вся формула

записывается в одну строку. Знаки дробей заменяются на /, знаки возведения в степень: x2 на x^2, знаки корней: vx на sqrt(x). При необходимости, используются круглые скобки для задания порядка выполнения операторов. Правила такой замены для записи выражений на языке программирования C# см. ниже, в табл. "Часто используемые математические функции".

При записи выражения в линейной форме (а также выражений на языке программирования) следует учитывать, что:

Стандартный порядок вычисления операторов - слева направо.

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

Например, при вычислении выражения

1 double f1 = a + b / 2;

сначала будет вычислено x = b / 2, а затем f1 = a + x.

file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]

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