
- •Лабораторная работа №1
- •Теоретические сведения. Среда .Net RunTime и библиотека Framework
- •Процесс компиляции с# - программы:
- •Управляемый и неуправляемый код.
- •Создание проекта.
- •Анатомия программы.
- •Контрольные вопросы.
- •Лабораторная работа №2
- •Теоретические сведения. Операторы условия.
- •Оператор множественного выбора:
- •Форматирование вывода
- •Задание.
- •Контрольные вопросы.
- •Лабораторная работа №3
- •Теоретические сведения.
- •Объявление массивов
- •Значения по умолчанию
- •Обращение к элементам массива
- •Инициализация элементов массива
- •Цикл foreach
- •Инициализация одномерных массивов
- •Практический пример. Одномерный массив.
- •Задание.
- •Контрольные вопросы.
- •Лабораторная работа №4
- •Теоретические положения. Уровни доступа
- •Объявление статических полей и методов класса
- •Пометка и сжатие
- •Форсированная сборка мусора
- •Методы. Передача параметров по значению
- •Методы. Передача параметров по ссылке.
- •Практический пример. Класс Array (одномерный массив).
- •Задание.
- •Контрольные вопросы.
- •Лабораторная работа №5
- •Задание.
- •Список рекомендуемой литературы
Анатомия программы.
Пространство имен в С# представляет собой совокупность связанных типов. Некоторые пространства имен, например, System, очень велики и могут включать более 100 разного рода типов; другие пространства имен, например, System.Timers, содержат всего по несколько типов. Типы DateTime и Math входят в пространство имен System.
Использование пространств имен (также называемых пакетами, библиотеками или интерфейсами прикладного программирования, API от Application Programming Interface) — это практическая реализация концепции повторного использования, принципа, чрезвычайно поощряемого в современной программной инженерии.
В качестве имени пространства имен может служить любой допустимый идентификатор, имя также может содержать точки. Пространства имен могут содержать внутри себя вложенные пространства имен, классы, структуры, и пр.
Программа в примере начинается с заявления, что она собирается использовать пространство имен System, в частности, класс System.Console, содержащий методы для работы с консолью.
Внутри пространства имен Lab_1 объявляется класс Program вместе с его содержимым вслед за открывающей фигурной скобкой. Имена файла и программы (т. е. имя класса) не обязательно должны совпадать, хотя обычно они или одинаковы, или схожи. В языке C# отсутствуют глобальные переменные и функции, поэтому все объявления переменных и функций должны находиться внутри объявления класса (количество классов неограниченно).
В структуре класса прежде всего вводится метод Main, являющийся стартовой точкой (точкой входа) в приложение. Функция должна быть объявлена как статическая, так как в этом случае для вызова функции не требуется создавать объект класса.
Содержательные действия программы ограничивается выводом на экран некоторого текста и ожидания нажатия любой клавиши. Вывод осуществляется с помощью метода Console.WriteLine; для ожидания нажатия клавиши используется метод Console.ReadKey.
В языке C# нет заголовочных файлов. Все методы для работы с консолью содержатся в классе Console пространства имен System. Метод вызывается оператором принадлежности (.). Иными словами, чтобы вызвать WriteLine() объекта Console, следует написать Corsole. WriteLine(…), поставив вместо многоточия выводимую строку.
Запуск программы осуществляется выполнением команды меню Debug Start Debugging, или нажатием клавиши F5. Если в компилятор не обнаружил ошибок, то на экран выводится консольное окно с результатом работы программы (рисунок 1.4).
Рисунок 1.4 Консоль с результатами выполнения программы
Пример 2. Пусть необходимо вычислить значение функции y:
Некорректные ситуации при вычислении
возможны, если:
,
,
.
Фрагмент кода C#, который реализует вычисление функции, представлен ниже.
int a, b, x;
double y;
a = 7;
b = 10;
x = -10;
y = Math.Pow(x, 2); // Вычисление y = x^2
if ((x == 0) || (b <= 0) || (b == y))
{
Console.WriteLine("Вычисление невозможно!");
}
Else
{
y = (a * y - b) / Math.Log10(b / y);
Console.WriteLine("Значение y: {0}", y);
}
Console.ReadKey();
В этой программе вначале объявляются переменные a, b, x типа int, а также переменная y типа double. При объявлении переменных для них резервируется место в оперативной памяти, а идентификаторы (имена) переменных представляют собой ссылки на соответствующие места в памяти. Так, например, идентификатор b является ссылкой на область памяти размером 2 байта (для типа данных int), а идентификатор y является ссылкой на область памяти размером 4 байта (для типа данных double).
Далее следует 4 операции присваивания на основе оператора присваивания (=). Первые три операции присваивания обеспечивают инициализацию переменных a, b, x. Фактически при этом в области памяти, связанные с этими переменными заносятся указанные справа от оператора присваивания “=” константы (в примере числа 7 ,10, –10). Четвертая операция присваивания отличается от первых трех тем, что в правой части записано выражение, значение которого вычисляется и присваивается указанной слева переменной y. Можно сказать также, что переменная y инициализируется значением выражения. В этом выражении Math — наименование класса пространства имен System, который содержит методы для вычисления математических функций, таких как Pow (возведение в степень) или Log10 (вычисление десятичного логарифма), и др.
Структурный оператор ветвления if … else предназначен здесь для проверки возможности вычисления ,чтобы исключить ошибки выполнения (например, деление на ноль). Этот оператор рассматривается подробно в теоретических положениях к лабораторной работе №2.
Перечень математических функций, которые могут быть использованы при вычислении значений заданных функций:
Функция |
Назначение |
Abs(Double) |
Возвращает абсолютное значение аргумента |
Exp(Double) |
Вычисляет значение экспоненты в степени аргумента |
Log(Double) |
Вычисляет логарифм натуральный от аргумента |
Log10(Double) |
Вычисляет логарифм десятичный от аргумента |
Log(Double, Double) |
Вычисляет логарифм от аргумента 1 по основанию аргумента 2 |
Pow(Double, Double) |
Вычисляет значение аргумента 1 возведенного в степень аргумента 2 |
Sqrt(Double) |
Вычисляет значение квадратного корня из значения аргумента |
Некоторые приемы упрощенного решения вычислительных задач:
Выражение |
Вариант вычисления |
x2 |
x * x |
x3 |
x * x * x |
|
Math.Sqrt(Math.Sqrt(x)) |
|
p=1/n; Math.Pow(x, p) |
|
p=m/n; Math.Pow(x, p) |
Задание.
Создать консольное приложение так, как показано в примере 1.
Запустить программу и убедиться в корректности ее выполнения.
Дополнить функцию Main кодом, который вычисляет значение математической функции y в соответствии с индивидуальным заданием и выводит его на консоль. Значения аргументов задать явным присваиванием констант. При невозможности вычисления вывести на консоль сообщение.
Составить блок-схему алгоритма функции Main.
Выполнить контрольный просчет и сделать вывод.
Таблица 1.1 Варианты заданий:
1 |
|
11 |
|
21 |
|
2 |
|
12 |
|
22 |
|
3 |
|
13 |
|
23 |
|
4 |
|
14 |
|
24 |
|
5 |
|
15 |
|
25 |
|
6 |
|
16 |
|
26 |
|
7 |
|
17 |
|
27 |
|
8 |
|
18 |
|
28 |
|
9 |
|
19 |
|
29 |
|
10 |
|
20 |
|
30 |
|
Содержание отчета:
тема, цель, задание, в том числе индивидуальная часть и номер варианта;
листинг программы;
консольное окно с результатами работы программы;
блок-схема алгоритма;
контрольный просчет;
вывод по работе.