НОУ ІНТУЇТ | лекція | Найпростіший введення-виведення. керуючі оператори

  1. Консольний введення-виведення
  2. Введення-виведення в файли
  3. Математичні функції - клас Math

Анотація: Основні можливості консольного вводу-виводу (клас Console) і керуючі оператори мови (розгалуження, цикли, передача управління).

Консольний введення-виведення

Презентацію до даної лекції Ви можете завантажити тут .

Будь-яка програма при введенні вихідних даних і виведення результатів взаємодіє із зовнішніми пристроями. Сукупність стандартних пристроїв введення та виведення, тобто клавіатури і екрану, називається консоллю. У мові C # немає операторів введення і виведення. Замість них для обміну з зовнішніми пристроями застосовуються стандартні об'єкти. Для роботи з консоллю в C # застосовується клас Console, визначений у просторі імен System. Методи цього класу Write і WriteLine вже використовувалися в лістингу 3.1 . Поговоримо про них докладніше, для чого внесемо деякі зміни в цей лістинг. Результати цих змін представлені в лістингу 4.1 .

using System; namespace ConsoleApplication1 {class Class1 {static void Main () {int i = 3; double y = 4.12; decimal d = 600m; string s = "Вася"; Console.WriteLine ( "i =" + i); // 1 Console.WriteLine ( "s =" + s); // 2 Console.WriteLine ( "y = {0} \ nd = {1}", y, d); // 3}}} Лістинг 4.1. методи виведення

Результат роботи програми:

i = 3 s = Вася y = 4,12 d = 600

До сих пір ми використовували метод WriteLine для виведення значень змінних і литералов різних вбудованих типів. Це можливо завдяки тому, що в класі Console існує кілька варіантів методів з іменами Write і WriteLine, призначених для виведення значень різних типів.

Методи з однаковими іменами, але різними параметрами називаються перевантаженими. Компілятор визначає, який з методів викликаний, по типу переданих в нього величин. Методи виведення в класі Console перевантажені для всіх вбудованих типів даних, крім того, передбачені варіанти форматного виведення.

лістинг 4.1 містить два найбільш уживаних варіанти виклику методів виведення. Якщо метод WriteLine викликаний з одним параметром, він може бути будь-якого вбудованого типу. У рядку з позначкою коментарями "1" і "2", нам потрібно вивести в кожному рядку не одну, а дві величини, тому перш ніж передавати їх для виведення, їх потрібно "склеїти" в один рядок за допомогою операції +.

Перед об'єднанням рядка з числом треба перетворити число з його внутрішньої форми подання в послідовність символів, тобто в рядок. Перетворення в рядок визначено у всіх стандартних класах C # - для цього служить метод ToString (). В даному випадку він виконується неявно.

Оператор 3 ілюструє форматний висновок. У цьому випадку використовується інший варіант методу WriteLine. Першим параметром методу передається строковий літерал, що містить, крім звичайних символів, призначених для виведення на консоль, параметри в фігурних дужках, а також керуючі послідовності. Параметри нумеруються з нуля, перед виведенням вони замінюються значеннями відповідних змінних в списку виведення.

З керуючих послідовностей найчастіше використовуються символи перекладу рядка (\ n) і горизонтальної табуляції (\ t).

Розглянемо найпростіші способи введення з клавіатури. У класі Console визначені методи введення рядка і окремого символу, але немає методів, які дозволяють безпосередньо зчитувати з клавіатури числа. Введення числових даних виконується в два етапи:

  1. Символи, що представляють собою число, вводяться з клавіатури в строкову змінну.
  2. Виконується перетворення з рядка в змінну відповідного типу.

Перетворення можна виконати або за допомогою спеціального класу Convert, визначеного в просторі імен System, або за допомогою методу Parse, наявного в кожному стандартному арифметичному класі. В лістингу 4.2 використовуються обидва способи.

using System; namespace ConsoleApplication1 {class Class1 {static void Main () {Console.WriteLine ( "Введіть рядок"); string s = Console.ReadLine (); // 1 Console.WriteLine ( "s =" + s); Console.WriteLine ( "Введіть символ"); char c = (char) Console.Read (); // 2 Console.ReadLine (); // 3 Console.WriteLine ( "c =" + c); string buf; // рядок - буфер для введення чисел Console.WriteLine ( "Введіть ціле число"); buf = Console.ReadLine (); int i = Convert.ToInt32 (buf); // 4 Console.WriteLine (i); Console.WriteLine ( "Введіть дійсне число"); buf = Console.ReadLine (); double x = Convert.ToDouble (buf); // 5 Console.WriteLine (x); Console.WriteLine ( "Введіть дійсне число"); buf = Console.ReadLine (); double y = double.Parse (buf); // 6 Console.WriteLine (y); Console.WriteLine ( "Введіть дійсне число"); buf = Console.ReadLine (); decimal z = decimal.Parse (buf); // 7 Console.WriteLine (z); }}} Лістинг 4.2. Введення з консолі

Введення рядка виконується в операторі 1. Довжина рядка не обмежена, введення виконується до символу перекладу рядка.

Введення символу виконується за допомогою методу Read, який зчитує один символ з вхідного потоку (оператор 2). Метод повертає значення типу int, що представляє собою код символу, або -1, якщо символів у вхідному потоці немає (наприклад, користувач натиснув клавішу Enter). Оскільки нам потрібно не int, а char, а неявного перетворення від int до char не існує, доводиться застосувати операцію явного перетворення типу.

Оператор 3 зчитує залишок рядка і нікуди його не передаô. Це необхідно тому, що введення даних виконується через буфер - спеціальну область оперативної пам'яті. Фактично дані спочатку заносяться в буфер, а потім зчитуються звідти процедурами введення. Занесення в буфер виконується після натискання клавіші Enter разом з її кодом. Метод Read, на відміну від ReadLine, що не очищає буфер, тому наступний після нього введення буде виконуватися з того місця, на якому закінчився попередній.

В операторах 4 і 5 використовуються методи класу Convert, в операторах 6 і 7 - методи Parse класів Double і Decimal бібліотеки. NET, які використовуються тут через імена типів С # double і decimal.

Увага

При введенні дійсних чисел дрібна частина відокремлюється від цілої за допомогою коми (або точки - залежить від регіональних налаштувань).

Якщо вводяться з клавіатури символи не можна інтерпретувати як дійсне число, генерується виняток.

Введення-виведення в файли

Часто буває зручно заздалегідь підготувати вихідні дані в текстовому файлі і зчитувати їх в програмі. Висновок з програми теж буває корисно виконати не на екран, а в текстовий файл. Робота з файлами докладно розглядається пізніше, а зараз наведемо лише зразки для використання в програмах. В лістингу 4.3 приведена версія програми з лістингу 4.1 , Що виконує висновок не на екран, а в текстовий файл з ім'ям output.txt. Файл створюється в тому ж каталозі, що і виконуваний файл програми, за замовчуванням - ... \ ConsoleApplication1 \ bin \ Debug.

using System; using System.IO; // 1 namespace ConsoleApplication1 {class Class1 {static void Main () {StreamWriter f = new StreamWriter ( "output.txt"); // 2 int i = 3; double y = 4.12; decimal d = 600m; string s = "Вася"; f.WriteLine ( "i =" + i); // 3 f.WriteLine ( "s =" + s); // 4 f.WriteLine ( "y = {0} \ nd = {1}", y, d); // 5 f.Close (); // 6}}} Лістинг 4.3. Висновок в текстовий файл

Для того щоб використовувати в програмі файли, необхідно:

  1. Підключити простір імен, в якому описуються стандартні класи для роботи з файлами (оператор 1).
  2. Оголосити файлову змінну і зв'язати її з файлом на диску (оператор 2).
  3. Виконати операції введення-виведення (оператори 3-5).
  4. Закрити файл (оператор 6).

Введення даних з файлу виконується аналогічно. В лістингу 4.4 приведена програма, аналогічна лістингу 4.2 , Але введення виконується з файлу з ім'ям input.txt, розташованого в каталозі D: \ C #. Текстовий файл можна створити за допомогою будь-якого текстового редактора, зручно використовувати Visual Studio. NET.

using System; using System.IO; namespace ConsoleApplication1 {class Class1 {static void Main () {StreamReader f = new StreamReader ( "d: \\ C # \\ input.txt"); string s = f.ReadLine (); Console.WriteLine ( "s =" + s); char c = (char) f.Read (); f.ReadLine (); Console.WriteLine ( "c =" + c); string buf; buf = f.ReadLine (); int i = Convert.ToInt32 (buf); Console.WriteLine (i); buf = f.ReadLine (); double x = Convert.ToDouble (buf); Console.WriteLine (x); buf = f.ReadLine (); double y = double.Parse (buf); Console.WriteLine (y); buf = f.ReadLine (); decimal z = decimal.Parse (buf); Console.WriteLine (z); f.Close (); }}} Лістинг 4.4. Введення з текстового файлу

Математичні функції - клас Math

Найпростіша програма, яку можна собі уявити (не рахуючи "Hello, World!"), Складається з введення вихідних даних, обчислень з якихось формулах і виведення результату. У виразах, з яких складаються формули, часто використовуються математичні функції, наприклад, синус або зведення в ступінь. Вони реалізовані в класі Math, визначеному в просторі імен System. Опис методів і полів класу наведено в таблиці 4.1 .

Таблиця 4.1. Основні поля і статичні методи класу Math Ім'я Опис Результат Пояснення Abs Модуль перевантажені | x | записується як Abs (x) Acos арккосинуса double Acos (double x) Asin Арксинус double Asin (double x) Atan Арктангенс double Atan2 (double x, double y) - кут, тангенс якого є результат ділення y на x BigMul Твір long BigMul (int x, int y) Ceiling Округлення до більшого цілого double Ceiling (double х) Cos косинус double сos (double x) Cosh Гіперболічний косинус double Cosh (double x) DivRem Розподіл і залишок перевантажені DivRem (x, y, rem) E База натурального логарифма (число е) double +2,71828182845905 Exp Експонента double e x записується як Exp (x) Floor Округлення до меншого цілого double Floor (double х) IEEERemainder Залишок від ділення double IEEERemainder (double x, double y) Log Натураль ний логарифм double loge x записується як Log (x) Log10 Десятковий логарифм double log10 x записується як Log10 (x) Max Максимум з двох чисел перевантажені Max (x, y) Min Мінімум з двох чисел перевантажені Min (x, y) PI Значення числа double +3,14159265358979 Pow Піднесення до степеня double xy записується як Pow (x, y) Round Округлення перевантажені Round (3.1) дасть в результаті 3 Round (3.8) дасть в результаті 4 Sign Знак числа int Аргументи перевантажені Sin Синус double Sin (double x ) Sinh Гіперболічний синус double Sinh (double x) Sqrt Квадратний корінь double x записується як Sqrt (x) Tan Тангенс double Tan (double x) Tanh Гіперболічний тангенс double Tanh (double x)

В лістингу 4.5 наведено приклад застосування методів класу Math.

using System; namespace ConsoleApplication1 {class Class1 {static void Main () {Console.Write ( "Введіть х:"); double x = double.Parse (Console.ReadLine ()); Console.Write ( "Введіть y:"); double y = double.Parse (Console.ReadLine ()); Console.WriteLine ( "Максимум з х і y:" + Math.Max ​​(x, y)); double z = Math.Pow (Math.Sin (x), 2) + Math.Pow (Math.Sin (y), 2); Console.WriteLine ( "Сума квадратів синусів х і y:" + z); }}} Лістинг 4.5. Застосування методів класу Math

Тепер ви знаєте достатньо, щоб писати лінійні програми, всі оператори в яких виконуються послідовно, один за іншим, наприклад: введення вихідних даних, обчислення за формулами, висновок результатів. Для написання програм більш складної структури необхідно вивчити керуючі оператори, які, як випливає з їх назви, управляють потоками обчислень.