Bài giảng Lập trình DOTNET - Chương 1: Cơ bản về ngôn ngữ lập trình C# - Huỳnh Lê Uyên Minh

pdf 74 trang Gia Huy 17/05/2022 3150
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình DOTNET - Chương 1: Cơ bản về ngôn ngữ lập trình C# - Huỳnh Lê Uyên Minh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_lap_trinh_dotnet_chuong_1_co_ban_ve_ngon_ngu_lap_t.pdf

Nội dung text: Bài giảng Lập trình DOTNET - Chương 1: Cơ bản về ngôn ngữ lập trình C# - Huỳnh Lê Uyên Minh

  1. CHƯƠNG 1: CƠ BẢN VỀ NGƠN NGỮ LẬP TRÌNH C# Mơn học: Lập trình DOTNET Giảng viên: Huỳnh Lê Uyên Minh Khoa: Sư phạm Tốn – Tin, ĐH Đồng Tháp 1
  2. NỘI DUNG 1. Giới thiệu ngơn ngữ C# 2. Kiểu dữ liệu, các phương thức chuyển kiểu 3. Khai báo biến, hằng, phép tốn 4. Các cấu trúc lệnh 5. Hàm, tham số và cách truyền tham số 6. Các lớp cơ sở: chuỗi, mảng, tập hợp 7. Những ứng dụng Console
  3. 1. Ngơn ngữ lập trình C# • Ngơn ngữ lập trình được xây dựng dựa trên nền tảng những ngơn ngữ tương tự C (C, C++, Java). • Hướng đối tượng • Hỗ trợ kiểm sốt và xử lý ngoại lệ (exception) tốt. • Các loại ứng dụng: Console, Windows Forms, Web Forms, Windows Services, Web Services CLR trên Linux Hello.exe CLR trên Hello.cs C# Compiler hoặc Windows Hello.dll MSIL CLR trên MacOS 3
  4. Giới thiệu .Net Framework • Framework là một tập hợp các thư viện để hỗ trợ cho người lập trình. • Mỗi Framework được tạo ra cĩ một kiến trúc khác nhau  LTV phải tuân theo kiến trúc đĩ • .NET Framework là thư viện tài nguyên của Microsoft, hỗ trợ cho các lập trình viên trong nhiều yêu cầu khác nhau 4
  5. Giới thiệu .Net Framework • Tất cả các chương trình phát triển trên .NET sẽ được chuyển về mã trung gian - Microsoft Intermediate Language (MSIL) – Bước 1: Dịch mã nguồn MSIL – Bước 2: MSIL mã CLR thực thi • CLR: Common Language Runtime/ Bộ thực thi ngơn ngữ dùng chung • FCL: Framework Class Library 5
  6. Tạo ứng dụng Console 6
  7. Cấu trúc chương trình C# • Phần chú thích (option) // Chương trình C# đầu tiên • Phần khai báo dùng namespace (option) using System; using System.Collections.Generic; using System.Text; • Phần định nghĩa namespace, lớp và các phương thức namespace HelloWorld { class Program { static void Main(string[] args){ { Console.Write("Hello World!"); Console.ReadLine(); } } } 7
  8. Vùng tên - Namespaces • Namespace là một khái niệm được sử dụng để phân nhĩm các lớp đối tượng trong .Net Framework, tránh việc trùng tên giữa các lớp đối tượng Ví dụ 1: using System; using System.Data; using System.Windows.Forms; Ví dụ 2: System.Drawing2D.Pen và System.Drawing3D.Pen đều đề cập đến một lớp đối tượng Pen nhưng thuộc hai namespace khác nhau, do đĩ chúng là hai lớp đối tượng khác nhau. • Namespace System chứa nhiều lớp giao tiếp với hệ thống • Từ khĩa using dùng để khai báo namespace VD: using System.Data.OleDb; 8
  9. Câu lệnh • Các câu lệnh được viết trong thân của phương thức (ở đây là phương thức Main) • Thực hiện một cơng việc nào đĩ • Kết thúc bởi dấu chấm phẩy (;) • Khối lệnh gồm nhiều lệnh và được đặt trong cặp dấu ngoặc nhọn { } namespace HelloWorld { class Program { Phương thức Main static void Main(string[] args) { Console.Write("Hello World!"); Các câu lệnh Console.ReadLine(); } } } 9
  10. Chú thích • Chú thích (comment) được dùng để giải thích về chương trình và các câu lệnh • Giúp cho chương trình dễ hiểu hơn • Được bỏ qua khi biên dịch • Khơng ảnh hưởng tới kết quả thực thi của chương trình • Gõ phần chú thích sau cặp ký tự // • Gõ phần chú thích giữa cặp ký tự /* và */ /* Chương trình C# đầu tiên In ra câu chào "Hello World" */ using System; namespace HelloWorld { class Program { static void Main(string[] args) { Console.Write("Hello World!"); // Xuất ra câu chào Console.ReadLine(); // Chờ nhấn Enter } } } 10
  11. 2. Kiểu dữ liệu • KDL là các loại dữ liệu và phạm vi giá trị của chúng trong bộ nhớ mà người lập trình sử dụng để lưu trữ. • Cĩ 2 loại : KDL dựng sẵn & KDL tự định nghĩa. • C# cũng chia tập dữ liệu thành hai kiểu: giá trị và tham chiếu. Biến kiểu giá trị được lưu trong vùng nhớ stack, cịn biến kiểu tham chiếu được lưu trong vùng nhớ heap. 11
  12. Kiểu dữ liệu số nguyên Common Type Name Description Range (min:max) System sbyte System.SByte 8-bit signed integer -128:127 (-27:27-1) Số nguyên cĩ dấu -32,768:32,767 (- short System.Int16 16-bit signed integer Số nguyên cĩ dấu 215:215-1) - int System.Int32 32-bit signed integer 2,147,483,648:2,147, Số nguyên cĩ dấu 483,647 (-231:231-1) - 9,223,372,036,854,7 Số nguyên cĩ dấu long System.Int64 64-bit signed integer 75,808: 9,223,372,036,854,7 75,807 (-263:263-1) byte System.Byte 8-bit signed integer 0:255 (0:28-1) Số nguyên dương khơng dấu ushort System.UInt16 16-bit signed integer 0:65,535 (0:216-1) Số nguyên dương khơng dấu 0:4,294,967,295 uint System.UInt32 32-bit signed integer Số nguyên dương khơng dấu (0:232-1) 0:18,446,744,073,70 ulong System.UInt64 64-bit signed integer Số nguyên dương khơng dấu 9,551,615(0:264-1) 12
  13. Kiểu dữ liệu số thập phân Common Type Descriptio Name Range (approximate) System n float System.Single 32-bit ±1.5 × 10-45 to ±3.4 × 1038 Kiểu dấu chấm động, với 7 chữ số cĩ nghĩa ±5.0 × 10-324 to ±1.7 × double System.Double 64-bit Kiểu dấu chấm động cĩ độ chính xác gấp 10308 đơi, với 15 chữ số cĩ nghĩa -28 28 Cĩ độ chính xác đến 28 con số, phải cĩ hậu decimal System.Decimal 128-bit ±1.0 × 10 to ±7.9 × 10 tố “m” hoặc “M” theo sau giá trị Kiểu Boolean bool System.Boolean true or false Giá trị logic Kiểu Ký tự, Chuỗi char System.Char 16-bit (Unicode) character Ký tự Unicode string System.String Unicode character string Kiểu đối tượng The root type, from which object System.Object all other types in the CTS derive 13
  14. Kiểu chuỗi (string) • Kiểu string cĩ thể chứa nội dung khơng giới hạn, vì đây là kiểu dữ liệu đối tượng được chứa ở bộ nhớ heap. • Khai báo: string s = “Nguyen Van A”; 14
  15. Kiểu mảng • Mảng là một tập hợp các phần tử cùng một kiểu dữ liệu liên tiếp nhau và được truy xuất thơng qua chỉ số. • Chỉ số bắt đầu từ 0. • Cĩ 2 loại: mảng một chiều và mảng 2 chiều 15
  16. Kiểu mảng • Mảng một chiều [] =new [Số phần tử]; VD: Khai báo mảng số nguyên arr gồm 5 phần tử int [] arr = new int [5]; • Mảng hai chiều [,] =new [Số dịng, số cột]; VD: Khai báo ma trận số nguyên mt gồm 5 dịng và 3 cột long [ ,] mt = new long [5, 3]; 16
  17. Enum – Kiểu liệt kê • Enum là một cách thức để đặt tên cho các trị nguyên (các trị kiểu số nguyên, theo nghĩa nào đĩ tương tự như tập các hằng), làm cho chương trình rõ ràng, dễ hiểu hơn • VD1: enum Ngay {Hai, Ba, Tu, Nam, Sau, Bay, ChuNhat}; Hai = 0; Ba = 1; ; ChuNhat = 6 • VD2: enum Ngay {Hai = 1, Ba, Tu, Nam, Sau, Bay, ChuNhat}; Hai = 1; Ba = 2; ; ChuNhat = 7 • VD3: enum Ngay {Hai = 1, Ba, Tu, Nam, Sau=10, Bay, ChuNhat}; Hai = 1; Ba = 2; ; Sau=10; Bay=11;ChuNhat = 12 17
  18. Các ký tự lệnh – Escape Sequence Escape Sequence Character \' Single quote \" Double quote \\ Backslash \0 Null \a Alert \b Backspace \f Form feed \n Newline \r Carriage return \t Tab character \v Vertical tab 18
  19. Chuyển đổi kiểu dữ liệu • Số thành chuỗi int so = 10; string chuoi = so.ToString(); • Chuỗi thành số string chuoi = “12345”; double n = double.Parse(chuoi); double n = Convert.ToDouble(chuoi); int n = double.ToInt32(chuoi); • Kiểm tra dữ liệu cĩ phải kiểu số khơng? 19
  20. 3. Khai báo biến, hằng, phép tốn Identifier (định danh) • Định danh là việc xác định tên: biến, hàm, hằng, • Phân biệt chữ hoa thường Quy ước đặt tên: • Sử dụng 26 chữ cái (thường/ hoa), 10 chữ số • Dấu nối ( _ ) • Khơng dùng chữ số ở đầu • Khơng trùng với từ khố 20
  21. Biến & khai báo biến • Biến dùng để lưu trữ dữ liệu. Mỗi biến thuộc về một KDL nào đĩ. • Khai báo: tên_biến; VD: int x; int a, b; VD: Khai báo và khởi tạo: int x = 5; int y = x; float z = 3.7; float k = (float) x/2; VD: int i; i = 0; int x = 10; y = 20; bool b = true; 21
  22. Hằng • Cú pháp khai báo hằng: const tên_hằng = ; VD: const int a = 20; 22
  23. Phép tốn số học Ký hiệu Ý nghĩa Ghi chú + Cộng - Trừ * Nhân Đối với số chia & bị chia là nguyên thì / Chia cho kết quả là phần nguyên Chỉ áp dụng cho số chia & bị chia là số % Chia lấy phần dư nguyên ++x; x++ Tăng x 1 đơn vị x; x Giảm x 1 đơn vị 23
  24. Ký hiệu so sánh và phép tốn bit Ký hiệu Ý nghĩa Ký hiệu Ý nghĩa > Lớn hơn & Và bit >= Lớn hơn hoặc bằng | Hoặc bit > Dịch phải <= Nhỏ hơn hoặc bằng << Dịch trái == Bằng ^ Xor bit != Khác && Và || Hoặc ! Phủ định 24
  25. 4. Câu lệnh điều khiển • Rẽ nhánh : if else • Lựa chọn : switch case • Lặp : for, while, do while, foreach • Các cấu trúc khác : goto, break, continue 25
  26. Cấu trúc rẽ nhánh: IF Biểu thức if (biểu thức điều kiện) Đúng { điều kiện ; } Nếu biểu thức điều kiện cho kết quả khác khơng (true) thì thực hiện khới lệnh. 26
  27. Cấu trúc rẽ nhánh: IF Ví dụ: Nhập vào sớ nguyên n. Kiểm tra nếu n > 0 tăng n lên 1 đơn vị. Xuất kết quả. static void Main(string[] args) { int n; Console.Write("Nhap vao mot so nguyen: "); n = int.Parse(Console.ReadLine()); if (n > 0) n++; Console.WriteLine("Ket qua: n = " + n); } 27
  28. Cấu trúc rẽ nhánh: IF if (biểu thức điều kiện) { Biểu thức Sai Đúng ; điều kiện } else { ; } Nếu biểu thức điều kiện cho kết quả khác khơng thì thực hiện khối lệnh 1, ngược lại thì cho thực hiện khối lệnh thứ 2. 28
  29. Cấu trúc rẽ nhánh: IF - VD: Giải và biện luận PT: ax+b=0 static void Main(string[] args) { int a, b; Console.Write("Nhap vao a: "); a = int.Parse(Console.ReadLine()); Console.Write("Nhap vao b: "); b = int.Parse(Console.ReadLine()); if (a == 0) if (b == 0) Console.WriteLine("PT VSN”); else Console.WriteLine("PT VN"); else Console.WriteLine("Ng cua PT: {0:0.00}", (float)-b/a); } 29
  30. Cấu trúc lựa chọn - switch case switch (biểu thức) case n1: các câu lệnh ; KQ phải là nguyên break ; case n2: các câu lệnh ; break ; case nk: ; break ; [default: các câu lệnh] break;  30
  31. Ví dụ: Nhập vào số nguyên n cĩ giá trị từ 1 đến 5. In cách đọc của số đĩ ra màn hình static void Main(string[] args) { int n; Console.Write("Nhap vao n (1<=n<=5): "); n = int.Parse(Console.ReadLine()); switch (n) { case 1: Console.WriteLine("So mot"); break; case 2: Console.WriteLine("So hai"); break; case 3: Console.WriteLine("So ba"); break; case 4: Console.WriteLine("So bon"); break; case 5: Console.WriteLine("So nam"); break; default : Console.WriteLine(“Gia tri khong hop le"); break; } } 31
  32. Bài tập • Nhập vào hai số nguyên a, b. In ra màn hình giá trị lớn nhất. • Cho ba số a, b, c đọc vào từ bàn phím. Hãy tìm giá trị lớn nhất của ba số trên và in ra kết quả.
  33. Cấu trúc lặp • while • for • do while • foreach 33
  34. Cấu trúc lặp while và for Khởi gán Sai (Biểu thức Đúng (Biểu thức điều kiện = 0) Kiểm tra biểu điều kiện khác 0) thức điều kiện Thực hiện các lệnh trong vòng lặp Tăng/ giảm chỉ số lặp 34
  35. Hoạt động cấu trúc lặp while và for • Bước 1: Thực hiện khởi gán • Bước 2: Kiểm tra biểu thức điều kiện - Nếu kết quả là true thì cho thực hiện các lệnh của vòng lặp, thực hiện biểu thức tăng/ giảm. Quay trở lại bước 2. - Ngược lại kết thúc vịng lặp.
  36. Cấu trúc lặp while ; while ( ) lệnh/ khối lệnh; ;  36
  37. VD: Xuất ra màn hình 10 dịng chữ ABC static void Main(string[] args) { int d = 1; while (d <= 10) { Console.WriteLine("Dong {0}: ABC", d); d++; } }
  38. Cấu trúc lặp for for ( ; ; ) { ; } 38
  39. VD: Xuất ra màn hình 10 dịng chữ ABC static void Main(string[] args) { for (int d = 1; d <= 10; d++) Console.WriteLine("Dong {0}: ABC", d); } 39
  40. Cấu trúc lặp do while Khởi gán do { Lệnh / Khối lệnh ; } while (biểu thức ĐK); Cập nhật vịng lặp Thực hiện khới lệnh Điều kiện lặp Yes cho đến khi biểu thức điều kiện là false 40
  41. Cấu trúc lặp foreach • Sử dụng cho mảng foreach ( in ) { Khối lệnh; } Xét từng phần tử trong mảng 41
  42. VD: Tính tổng các phần tử chẵn trong mảng static void Main(string[] args) { int s=0; int [ ] a = new int [5] {3, 8, 7, 1, 6}; foreach(int m in a) if(m%2==0) s+=m; Console.WriteLine("Tong chan = " +s); } 42
  43. Bài tập • Viết chương trình đếm số US của số nguyên dương. • Viết chương trình in ra màn hình hình chữ nhật đặc kích thước (m, n nhập từ bàn phím). Ví dụ: Nhập m=5, n=4 * * * * * * * * * * * * * * * * * * * * 43
  44. Các lệnh điều khiển • Lệnh goto: goto Label1; Console.WriteLine(“Cau lenh 1"); Label1: Console.WriteLine(“Cau lenh 2"); • Lệnh break: dùng câu lệnh break khi muốn thốt khỏi vịng lặp for (int i = 0; i 5) break; Console.WriteLine(" " + i); } 44
  45. Các lệnh điều khiển • Lệnh continue: được dùng trong vịng lặp khi muốn thi hành tiếp vịng lặp nhưng khơng thi hành các lệnh cịn lại trong vịng lặp, các lệnh sau lệnh continue. for (int i = 0; i < 10; i++) { if (i < 5) continue; Console.WriteLine(" " + i); } • Lệnh return: dùng để thốt khỏi một hàm, nếu hàm cĩ một kiểu dữ liệu trả về thì return phải trả về một kiểu dữ liệu này. 45
  46. 5. Một số hàm thơng dụng • Thơng qua lớp Math – Lấy giá trị tuyệt đối int x = Math.Abs(-10); // kết quả x = 10 – Lũy thừa int x = Math.Pow(2,3); // kết quả x = 2^3 – Lấy căn double x = Math.Sqrt(4); // kết quả x = 2 – Làm trịn double x = Math.Round(0.1234,2); // kết quả x = 0.12 46
  47. Một số hàm thơng dụng (tt) • Lớp ký tự - char – bool char.IsDigit(char c) : cĩ phải là ký số – bool char.IsLetter(char c) : cĩ phải là ký tự – bool char.IsLetterOrDigit(char c) : cĩ phải là ký tự hoặc ký số – bool char.IsLower(char c) : cĩ phải là ký tự thường – bool char.IsUpper(char c) : cĩ phải là ký tự hoa – char char.ToUpper(char c) : trả về ký tự hoa – char char.ToLower(char c) : trả về ký tự thường Ví dụ: string str = “123”; Console.WriteLine(“Ky tu dau la “ + str[0] + “. Do dai: “ + str.Length); bool b1 = char.IsDigit(str[0]); Console.WriteLine(b1); // true //Kiểm tra tất cả các ký tự của chuỗi cĩ phải là ký tự số ? 47
  48. Một số hàm thơng dụng (tt) static void Main(string[] args) { int a = 5; int b = 10; Console.WriteLine("Truoc ham: a = " + a.ToString() + " b = " + b.ToString()); Swap(a, ref b); Console.WriteLine("Sau ham: a = " + a.ToString() + " b = " + b.ToString()); Console.ReadKey(); } static void Swap(int a, ref int b) { a = a + b; b = a - b; a = a - b; Console.WriteLine("Trong ham: a = " + a.ToString() + " b = " + b.ToString()); } 48
  49. Một số hàm thơng dụng (tt) • Lớp chuỗi – string – Length : Chiều dài chuỗi (số ký tự) – IndexOf(): Vị trí xuất hiện đầu tiên của một chuỗi con trong chuỗi – LastIndexOf(): Vị trí xuất hiện cuối cùng của một chuỗi con trong chuỗi – ToUpper(): Trả về chuỗi chữ hoa – ToLower(): Trả về chuỗi chữ thường – Replace(): Thay thế chuỗi con trong chuỗi bằng một chuỗi con khác – Split(): Cắt một chuỗi thành nhiều chuỗi con – SubString(): Lấy một chuỗi con 49
  50. Một số hàm thơng dụng (tt) • Ví dụ 1: string str1 = “Hello world”, str2; char c = str1[0]; // c='H'; int i = str1.Length; // i = 10 int i = str1.IndexOf(“wo”); // i = 6 str2 = str1.Replace(“w”, “W”); // str2=”Hello World” str2 = str1.ToLower(); // str2 = “hello world” str2 = str1.ToUpper(); // str2 = “HELLO WORLD” 50
  51. Một số hàm thơng dụng (tt) • Ví dụ 2: int a = 1, b = 2, tong = a+b; string str = "Tong " + a.ToString() + " va " + b.ToString() + " la " + tong.ToString(); Console.WriteLine(str); str = string.Format("Tong {0} va {1} la {2}", a, b, tong); Console.WriteLine(str); // string str = “2,15,678”; string[] arrStr = str.Split(',') ; for (int i=0; i<arrStr.Length;i++) { sum += Convert.ToInt32(arrStr[i]); } 51
  52. Một số hàm thơng dụng (tt) • Ví dụ 3: Hàm kiểm tra MSSV cĩ phải là 7 ký tự số khơng? private bool KiemTraMSSV(string mssv) { // Kiem tra mssv chi co 7 ky tu if (mssv.Length != 7) return false; // Kiem tra cac ky tu phai la chu so for (int i = 0; i < mssv.Length; i++) { if (char.IsDigit(mssv[i]) == false) return false; } return true; } 52
  53. Bài tập – dữ liệu kiểu chuỗi • 1.Viết hàm tách tên. Tham số truyền vào là họ và tên, hàm sẽ trả về tên. • 2.Viết hàm tách họ. Tham số truyền vào là họ và tên, hàm sẽ trả về họ và chữ lĩt. • 3. Viết hàm chuẩn hĩa chuỗi họ tên: – Khơng cĩ khoảng trắng trước và sau tên – Khơng cĩ hơn 1 ký tự khoảng trắng giữa các ký tự – Ký tự đầu của các từ phải viết hoa – Ví dụ: “Nguyen Y Van” là hợp lệ • 4.Viết hàm đếm số từ trong chuỗi. – Ví dụ: “Truong Dai hoc Dong Thap” 5 • 5.Viết hàm chuyển đổi số thành chữ. – Ví dụ: 12345 Mười hai nghìn ba trăm bốn mươi lăm 53
  54. 6. Method - Phương thức • Phương thức (hay cịn gọi là hàm) là một đoạn chương trình độc lập thực hiện trọn vẹn một cơng việc nhất định sau đĩ trả về giá trị cho chương trình gọi nĩ, hay nĩi cách khác hàm là sự chia nhỏ của chương trình. Mục đích sử dụng phương thức: • Khi cĩ một cơng việc giống nhau cần thực hiện ở nhiều vị trí. • Khi cần chia một chương trình lớn phức tạp thành các đơn thể nhỏ (hàm con) để chương trình được trong sáng, dễ hiểu trong việc xử lý, tính tốn. 54
  55. Phương thức Mẫu tổng quát của phương thức TênPhươngThức([tham sớ]); Phạm vi • Xác định phạm vi hay cách phương thức được gọi (sử dụng) • Các từ khố phạm vi : private, public, static 55
  56. Phương thức KDL của phương thức (đầu ra), gồm 2 loại • void: Khơng trả về giá trị • float / int / long / string / kiểu cấu trúc / : Trả về giá trị cĩ KDL tương ứng với kết quả xử lý 56
  57. Phương thức • Tên phương thức : Đặt tên theo qui ước sao cho phản ánh đúng chức năng thực hiện của phương thức • Danh sách các tham số (nếu cĩ) : đầu vào của phương thức (trong một số trường hợp cĩ thể là đầu vào và đầu ra của phương thức nếu kết quả đầu ra cĩ nhiều giá trị - Tham số này gọi là tham chiếu) 57
  58. Khi hàm xử lý biến tồn cục thì khơng cần tham số static int a, b; static void Nhap() { Console.Write("Nhap a: "); a = int.Parse(Console.ReadLine()); Console.Write("Nhap b: "); b = int.Parse(Console.ReadLine()); } static void Xuat() { Console.WriteLine("a = {0}; b = {1}", a, b); } static void Main(string[] args) { Nhap(); Xuat(); } 58
  59. Phương thức khơng trả về giá trị static void TênPhươngThức([danh sách các tham sớ]) { Khai báo các biến cục bơ ̣ Các câu lệnh hay lời gọi đến phương thức khác. } • Gọi hàm: TênPhươngThức(danh sách tên các đối số); • Những phương thức loại này thường rơi vào những nhĩm chức năng: Nhập / xuất dữ liệu, thống kê, sắp xếp, liệt kê 59
  60. Viết chương trình nhập số nguyên dương n và in ra màn hình các ước số của n • Input: số nguyên dương (Xác định tham sớ) • Output: In ra các ước sớ của n (Xác định KDL trả về của phương thức) - Xuất Khơng trả về giá trị KDL là void. - Xác định tên phương thức: Phương thức này dùng in ra các US của n nên cĩ thể đặt là LietKeUocSo static void LietKeUocSo(uint n) 60
  61. Viết chương trình nhập số nguyên dương n và in ra màn hình các ước số của n static void LietKeUocSo(uint n) { for (int i = 1; i <= n; i++) if (n % i == 0) Console.Write("{0}\t", i); } static void Main(string[] args) { uint n; Console.Write("Nhap so nguyen duong n: "); n=uint.Parse(Console.ReadLine()); Console.Write("Cac uoc so cua {0}: ", n); LietKeUocSo(n); Console.ReadLine(); } 61
  62.  Phương thức cĩ trả về kết quả static TênPhươngThức([tham sớ]) { kq; Khai báo các biến cục bơ ̣ Các câu lệnh hay lời gọi đến phương thức khác. return kq; } Gọi hàm: Tên biến = TênPhươngThức(tên các đối số); Những phương thức này thường rơi vào các nhĩm: Tính tổng, tích, trung bình, đếm, kiểm tra, tìm kiếm 62
  63.  Phương thức cĩ trả về kết quả - Ví dụ Viết chương trình nhập sớ nguyên dương n và tính Sn 1 2 3  n ;n 0 • Input: số nguyên dương n (Xác định tham sớ) • Output: Tổng S (Xác định KDL trả về của phương thức)  Trả về giá trị tổng (S).  S là tổng các sớ nguyên dương nên S cũng là sớ nguyên dương Kiểu trả về của hàm là ulong. • Xác định TênPhươngThức: Dùng tính tổng S nên cĩ thể đặt là TongS static ulong TongS(uint n) 63
  64.  Phương thức cĩ trả về kết quả - Ví dụ static ulong TongS(uint n) { ulong kq = 0; for (uint i = 1; i <= n; i++) kq + = i; return kq; } static void Main(string[] args) { ulong S; uint n; Console.Write("Nhap vao so nguyen n: "); n = uint.Parse(Console.ReadLine()); S = TongS(n); Console.Write("Tong tu 1 den n: " + S); Console.ReadLine(); } 64
  65. Tham số là tham chiếu • Tham số lưu kết quả xử lý của hàm: out (thường dùng cho trường hợp nhập dữ liệu, kết quả hàm cĩ nhiều giá trị) • Tham số vừa làm đầu vào và đầu ra: ref • Dùng từ khĩa ref hoặc out trước KDL của khai báo tham số và trước tên đối số khi gọi phương thức. • Dùng từ khĩa ref bắt buộc phải khởi gán giá trị ban đầu cho đối số trước khi truyền vào khi gọi phương thức (Nếu dùng out thì khơng cần thiết) 65
  66. Ví dụ: Hốn vị 2 số nguyên a, b cho trước Đánh giá kết quả khi viết chương trình với hai trường hợp sau 1. Trường hợp khơng dùng tham chiếu 2. Trường hợp dùng tham chiếu: ref
  67.  Khơng dùng tham chiếu static void HoanVi(int a, int b) { int tam = a; a = b; b = tam; Console.WriteLine("Trong HoanVi: a = " + a + ";b = " + b); } static void Main(string[] args) { int a = 5, b = 21; Console.WriteLine("Truoc HoanVi: a = {0}; b = {1}", a, b); HoanVi(a, b); Console.WriteLine("Sau HoanVi: a = " + a + ";b = " + b); } 67
  68.  Dùng tham chiếu static void HoanVi(ref int a, ref int b) { int tam = a; a = b; b = tam; Console.WriteLine("Trong HoanVi: a = " + a + ";b = " + b); } static void Main(string[] args) { int a = 5, b = 21; Console.WriteLine("Truoc HoanVi: a = {0}; b = {1}", a, b); HoanVi(ref a, ref b); Console.WriteLine("Sau HoanVi: a = " + a + ";b = " + b); } 68
  69. Ví dụ - sử dụng tham chiếu out static void Nhap(out int a, out int b) { Console.Write("Nhap a: "); a = int.Parse(Console.ReadLine()); Console.Write("Nhap b: "); b = int.Parse(Console.ReadLine()); } static int Tong(int a, int b) { return a + b; } static void Main(string[] args) { int a, b; Nhap(out a, out b); s=Tinh(a, b); Console.WriteLine(“{0}+{1}={2}”, a, b, s); } 69
  70. Bài tập . Viết chương trình tính diện tích và chu vi của hình chữ nhật. . Viết chương trình tính diện tích và chu vi hình trịn. . Nhập vào 3 số thực a, b, c và kiểm tra xem chúng cĩ lập thành 3 cạnh của một tam giác hay khơng? Nếu cĩ hãy tính diện tích, chiều dài mỡi đường cao của tam giác và in kết quả ra màn hình. 70
  71. Bài tập . Viết chương trình nhập 2 sớ nguyên dương a, b. Tìm USCLN & BSCNN. . Viết chương trình nhập số nguyên dương n, tính tổng các ước số của n. Ví dụ: Nhập n=6 Tổng các ước số từ 1 đến n: 1+2+3+6=12. . Nhập vào giờ, phút, giây. Kiểm tra xem giờ, phút, giây đĩ cĩ hợp lệ hay khơng? 71
  72. 7. Những ứng dụng Consle • Các ứng dụng Console là mơi trường tốt cho những người mới bắt đầu học lập trình và giải thuật. • Các ứng dụng Console chạy trên mơi trường DOS, và cĩ giao diện dịng lệnh. • Sử dụng: Console. 72
  73. Thao tác trên Console Console.WindowWidth t CCửửaa ssổổ CCoonnssoollee h g i e (0, 0) H Cột w o d n i D W ị . n e l g o s n o C 73
  74. Một số site tham khảo lieu-hoc-c-danh-cho-nguoi-moi-bat-dau 74