Справочник от Автор24
Поделись лекцией за скидку на Автор24

Консольное приложение на языке c#. Запись классов и объектов на c#

  • 👀 316 просмотров
  • 📌 266 загрузок
Выбери формат для чтения
Загружаем конспект в формате doc
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Консольное приложение на языке c#. Запись классов и объектов на c#» doc
Консольное приложение на языке c#. Запись классов и объектов на c# 1) Основные сведения о языке C# и NET Framework. Консольное приложение C# Компиляции программы с одного из языков NET Framework(C#, C++, Visual basic ) выполняется в код CIL (common intermediate language - общий промужуточный язык. Далее перед выполнением запускается JIT (just in time) компилятор для перевода программы в машинный язык. CLR (common language runtime - общая среда времени выполнения) - среда предназначена для выполнения специально скомпилированной программы (managed - управляемого кода). Среда для managed кода обеспечивает автоматическое выделение и освобождение памяти. C# - только managed код! Программа на C# .cs -> код CIL ->управляемый машинный код с помощью JIT -> выполнение средой CLR. Сравнение с Java: исходная программа .java -> байт код .class -> выполнение JVM(java virtual machine) Консольное приложение: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { } } } 2) Пример консольного приложения C# Пример программы: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { double z, x; int y; string s; // string - встроенный базовый тип для java и c# Console.WriteLine("Введите x:"); // вывод строки s=Console.ReadLine(); // ввод строки x = Convert.ToDouble(s); // Convert - преобразование одного типа в другой s=Console.ReadLine(); y=Convert.ToInt32(s); z = Math.Sin(x) + y; // Math.sin(x) - статическая функция как в java math. s = Convert.ToString(z); Console.WriteLine(s); Console.ReadKey(); // ожидание нажатия символа } } } Форматный вывод: Console.WriteLine("Результат:{0}",s); double y0=1,y1=2; int y2=3; Console.WriteLine("Первый:{2} Второй {1}, Третий {0}",y0,y1,y2); // значение y2, y1, y0 3 2 1 double y0=1.3456,y1=213.1; int y2=3; Console.WriteLine("Первый:{0:f2} Второй {1:e}, Третий {2,4}",y0,y1,y2); // 2,4 - 4 позиции для y2 Первый: 1.35 Второй 2,131000e002, Третий: 3 оператор выбора c# Аналогичен C++, но break обязателен. Пример. Ввести номер дня недели и вывести его название using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int k; string s; s=Console.ReadLine(); k = Convert.ToInt32(s); switch (k) { case 1: s = "Понедельник"; break; case 2: s = "Вторник"; break; case 3: s = "Среда"; break; case 4: s = "Четверг"; break; case 5: s = "Пятница"; break; case 6: s = "Суббота"; break; default: s = "Воскресенье"; break; } Console.WriteLine(s); Console.ReadKey(); } } } 8 Воскресенье default: s = "Воскресенье"; break; -> case 7: s = "Воскресенье"; break; 8 8 // ни один case не подошел Отличие от Си и С++ для условий на java и c# В Си можно писать, например, while(1) { ....// выход при выполнении некоторого условия } или k=10; while|(k) { ..... k--; } В Си и иС++ - проверка, что выражение не равно 0. В c# и java возможны только логические выражения. k=10; while(k>0) { .... k--; } bool Flag; Flag=true; while(Flag) // или while(Flag==true) { ... Flag=false; } циклы Операторы while, do while, for, break, continue. Аналогичны c++ break прерывает работу цикла while, do while, for. Сразу выполняется команда, следующая за областью действия цикла. continue - пропускает выполнение операторов до проверки нового условия продолжения/ окончания цикла. Пример использования for, break, continue Вещественные числа вводятся по одному, не более заданного n и вычисляется их сумма. Если введенное число меньше заданного a, оно не добавляется к сумме, если больше b, суммирование прекращается и выводится полученная сумма. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { double a, b,x,y; int n,i; string s; Console.Write("Введите a: "); s = Console.ReadLine(); a = Convert.ToDouble(s); Console.Write("Введите b: "); s = Console.ReadLine(); b = Convert.ToDouble(s); Console.Write("Введите n: "); s = Console.ReadLine(); n = Convert.ToInt32(s); y = 0.0; for (i = 0; i < n; i++) // цикл максимум n слагаемых { s=Console.ReadLine(); x = Convert.ToDouble(s); // очередное число if (x < a) continue; // не добавлять переход на ввод следующего else if (x > b) break; // выход из цикла for else y += x; // обычное продолжение, добавка числа } Console.WriteLine("Сумма: {0}", Convert.ToString(y)); Console.ReadKey(); } } } 3) Массивы на C# Массивы как в java являются ссылками и требуют инициализации. Пример - инициализация массива и сложение всех его элементов using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int[] mas1; // объявление массива целых чисел string s = ""; int i = 0; int k = 0; s=Console.ReadLine(); k = Convert.ToInt32(s); // k-размер массива пусть введен 15 mas1 = new int[k]; // инициализация массива mas1 - 15 элементов все нули mas1 = new int []{1,3,5,7,9}; // повторно, теперь 5 элементов, нечетные числа k = 0; for (i = 0; i < mas1.Length; i++) // mas1.Length-размер массива равен 5 { k+= mas1[i]; } Console.WriteLine(Convert.ToString(k)); // сумма всех элементов = 25 Console.ReadKey(); } } } Пример работы двумерного массива double[,] matr1; // объявление массива int m, n,j; matr1 = new double[4, 3]; // инициализация 4x3 for (i = 0; i < 4; i++) { for (j = 0; j < 3; j++) { matr1[i, j] = i + j; // заполнение элементов } } m = matr1.Length; // m=12=4x3 всего элементов n = matr1.Rank; // n=2 размерность массива for (i = 0; i < 4; i++) { for (j = 0; j < 3; j++) { s = Convert.ToString(matr1[i, j]); s = s + " "; Console.Write(s); // вывод элемента } Console.WriteLine(); // перевод на другую строку } Console.WriteLine("{0} {1}", m, n); // 12 2 Console.ReadKey(); 0 1 2 1 2 3 2 3 4 3 4 5 12 2 4) Ввод нескольких чисел с консоли После приглашения ввода трех чисел , пользователь вводит их с несколькими пробелами и табуляциями 2 4 6 Преобразованные числа записываются в массив Data. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string[] s1; // массив строк для разбивки строки на числа string s = ""; int[] Data = new int[100]; // максимальное возможное количество int N = 0; // количество чисел в массиве Console.WriteLine("Введите 3 числа:"); s = Console.ReadLine(); // разбивать строку по пробелам и табуляциям убрав пустые элементы s1 = s.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); for (i = 0; i < s1.Length; i++) // s1[0]=2 s1[1]=4 s1[2]=6 { Data[N] = Convert.ToInt32(s1[i]); N++; } for (i = 0; i < N; i++) { Console.WriteLine(Convert.ToString(Data[i])); } Console.ReadKey(); } } } считана строка: s="2 4 6" Split разбивает на подстроки , разбивая по пробелу и табуляции: s1[0]="2" s1[1]="4" s1[2]=" " s1[3]="6" RemoveEmptyEntries удаляет пустые: s1[0]="2" s1[1]="4" s1[2]="6" s1.Length=3 вывод: 2 4 6 5) Проверка правильности ввода чисел с консоли При вводе строки через ReadLine() и переводе в число Convert.ToDouble(s) возможен случай, когда введенные символы в строку s в число не переводятся. 1 вариант. Использование Convert с исключениями try catch. 2 вариант. Использование функций TryParse int k; double y; string s; s = Console.ReadLine(); k = Convert.ToInt32(s); // обычный перевод bool p; p = int.TryParse(s,out k); // p=true - перевод удался в k - результат p = double.TryParse(s, out y); // y - результат out - параметр, возвращающий значение Пример с повторением ввода в случае ошибки при вводе. double y; string s; bool p; p = false; Console.WriteLine("Введите k:"); while (!p) { s = Console.ReadLine(); p = int.TryParse(s, out k); if (!p) { Console.WriteLine("Повторите ввод:"); } } 6) Классы на C# Создать новое консольное приложение. Проект - добавить класс имя: Record создан файл Record.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Record { } } В C# кроме полей и методов имеются свойства (property) для задания доступа к private полям. работа со свойствами Record.cs namespace ConsoleApplication1 { class Record { private int min; private int sec; // поле public int Sec // свойство { get { return sec; } set { if (value >= 0 && value < 60) { sec = value; } } } } } Program.cs namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Record a=new Record(); // как в java инициализация a.Sec = 26; // set - вызов метода у свойства a.Sec=72; // не присвоилось осталось прежнее 26 int b; b = a.Sec; // get - вызов метода у свойства } } } Добавление методов, полный пример класса Record. Record.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Record { private int min; private int sec; lic int Sec { get { return sec; } set { if (value >= 0 && value < 60) { sec = value; } } } public void Init(int m,int s) { min=m; sec=s; } public void Display() { string s, s1; s1 = Convert.ToString(min); s = "min: "+s1 + " "; s1 = Convert.ToString(sec); s = s + "sec:" + s1; Console.WriteLine(s); } public void Read() { string s=""; s= Console.ReadLine(); string[] s1; s1 = s.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); min = Convert.ToInt32( s1[0]); sec = Convert.ToInt32(s1[1]); } public int Numbersec() { return min * 60 + sec; // число секунд } public Record Add(Record a, Record b) // сложение 2 Record { Record c; c = new Record(); c.min = a.min + b.min; c.sec = a.sec + b.sec; if (c.sec >= 60) { c.min++; c.sec = c.sec - 60; } return c; // результат тип Record } } } Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Record a=new Record(); a.Sec = 26; a.Sec = 72; // не присвоилось a.sec=26 прежнее значение int k; k = a.Sec; // k=26 Record b = new Record(); b.Init(2, 10); // 2 min, 10 sec b.Display(); Record c = new Record(); c.Read(); c.Display(); k = b.Numbersec(); Console.WriteLine("{0}", k); Record d = new Record(); d = a.Add(b, c); d.Display(); Console.ReadKey(); } } } 7) Несколько классов на C# Record.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Record { private int min, sec; public void Init(int m, int s) { min = m; sec = s; } public void Display() { string s, s1; s1 = Convert.ToString(min); s = "min: " + s1 + " "; s1 = Convert.ToString(sec); s = s + "sec:" + s1; Console.WriteLine(s); } public int Numbersec() { return min * 60 + sec; // число секунд } public Record Add(Record a, Record b) // сложение 2 Record { Record c; c = new Record(); c.min = a.min + b.min; c.sec = a.sec + b.sec; if (c.sec >= 60) { c.min++; c.sec = c.sec - 60; } return c; // результат тип Record } } } Sportsman.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Sportsman { private string fam; // фамилия public string Fam // свойство { get { return fam; } } private Record r1 = new Record(); // первый результат private Record r2 = new Record(); // второй результат public void Init(string f, int m1, int s1, int m2, int s2) { fam = f; r1.Init(m1, s1); // задание значений 1 результата r2.Init(m2, s2); // задание значений второго результата } public void Display() { string s; s = "Фамилия: " + fam; Console.WriteLine(s); // вывод фамилии Console.Write("первый результат: "); r1.Display(); // вывод 1 результата Console.Write("второй результат: "); r2.Display(); // вывод 2 результата } public Record Sumrez() { return r1.Add(r1,r2); // возвращает суммарный результат Record (r1+r2) } public Sportsman Better(Sportsman a, Sportsman b) // лучший из 2 спортсменов { int k1, k2; k1 = a.r1.Numbersec() + a.r2.Numbersec(); // общее число секунд первого k2 = b.r1.Numbersec() + b.r2.Numbersec();// общее число секунд второго if (k1 < k2) return a; else return b; } } } Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Sportsman P1,P2,P3; P1 = new Sportsman(); P2 = new Sportsman(); P3 = new Sportsman(); P1.Init("Иванов", 2, 56, 3, 12); P1.Display(); // вывод информации P1 (1) P2.Init("Петров", 2, 48, 3, 19); P3=P3.Better(P1,P2); // P3 - лучший из P1, P2 string s; s = P3.Fam; // s - фамилия лучшего Console.WriteLine("Спортсмен " + s + " лучше"); Record r; r = P3.Sumrez(); // Record r - сумма 2 результатов P3 Console.WriteLine("Его результат:"); r.Display(); Console.ReadKey(); } } } 8) Массивы объектов на C# Массивы объектов аналогичны java Record[] ms; ms = new Record[5]; int i; for(i=0;i<5;i++) { ms[i] = new Record(); // инициализация каждого элемента } for (i = 0; i < 5; i++) { ms[i].Init(1, i); } int[] c = new int[5]; for (i = 0; i < 5; i++) { c[i] = ms[i].Numbersec(); } for (i = 0; i < 5; i++) { Console.WriteLine(Convert.ToString(c[i])); } 9) Присваивание объектов в c++, java,c# во всех языках объекты можно присваивать друг другу. с++ Присваивание обычных объектов #include "stdafx.h" #include class Record { private: int min,sec; public: void Init(int m,int s); void Display(); }; void Record::Init(int m,int s) { min=m; sec=s; } void Record::Display() { printf("%d %d \n",min,sec); } int _tmain(int argc, _TCHAR* argv[]) { Record a,b; a.Init(3,5); // 3 min 5 sec b.Init(4,6); // 4 min 6 sec a=b; // теперь a (4 min 6 sec) поля копируются ! b.Init(7,8); // меняется b (7 min 8 sec) b.Display(); // 7 8 что проинициализировано, то выводится a.Display(); // 4 6 что присвоено, то выводится } 7 8 4 6 Присваивание динамических объектов Record *c,*d; c=new Record; d=new Record; c->Init(3,5); // 3 min 5 sec d->Init(4,6); // 4 min 6 sec c=d; // теперь d(4 min 6 sec) c и d - один и тот же адрес ! d->Init(7,8); // меняется d (7 min 8 sec) d->Display(); // 7 8 что проинициализировано c->Display(); // 7 8 !!! 7 8 7 8 // меняем d и одновременно меняется c !!! // c и d указывают на одну и ту же ячейку (одинаковые адреса) // меняя поля одного объекта, меняются поля другого На java и c# объекты - ссылки, также при присваивании получаются одинаковые адреса Присваивание на java class Record { private int min,sec; public void Init(int m,int s) { min=m; sec=s; } public void Display() { System.out.printf("%d %d \n",min,sec); } } public class lab1 { public static void main(String[] args) { Record c,d; c=new Record(); d=new Record(); c.Init(3, 5); d.Init(4, 6); c=d; d.Init(7, 8); d.Display(); c.Display(); } 7 8 7 8 // как с указателями на c++ Присваивание на c# class Record { private int min; private int sec; public void Init(int m,int s) { min=m; sec=s; } public void Display() { string s, s1; s1 = Convert.ToString(min); s = "min: "+s1 + " "; s1 = Convert.ToString(sec); s = s + "sec:" + s1; Console.WriteLine(s); } } static void Main(string[] args) { Record c, d; c = new Record(); d = new Record(); c.Init(3, 5); d.Init(4, 6); c = d; d.Init(7, 8); d.Display(); c.Display(); min: 7 sec: 8 min: 7 sec: 8 // как с указателями на c++ и ссылками на java 10) Структуры на c# Структура на c # аналогична классам на c++ . Объекты структуры не являются ссылками. При присваивании копируются поля. struct Record { private int min, sec; public void Init(int m, int s) { min = m; sec = s; } public void Display() { string s, s1; s1 = Convert.ToString(min); s = "min: " + s1 + " "; s1 = Convert.ToString(sec); s = s + "sec:" + s1; Console.WriteLine(s); } } class Program { static void Main(string[] args) { Record c,d; c = new Record(); d = new Record(); c.Init(3, 5); d.Init(4, 6); c = d; d.Init(7, 8); // у c прежние значения, c,d - различные объекты d.Display(); c.Display(); Console.ReadKey(); } } } min: 7 sec: 8 min: 4 sec: 6 // !!! // как с обычными объектами на c++ Структуры не являются ссылками и их можно не инициализировать new. public int min, sec; ........................... Record c; c.min = 3; c.sec = 4; c.Init(3, 5); c.Display(); min: 3 sec:5 Если записать: private int min, sec; .................... Record c; c.Init(3,5); // ошибка компиляции c - не задано значение, // хотя у структур min=0 sec=0 при определении Record c;
«Консольное приложение на языке c#. Запись классов и объектов на c#» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot