Lập trình C# - Phần 2: Cơ bản

Nếu bạn đã biết những ngôn ngữ như C/C++ hay Java, thì phần này sẽ rất dễ dàng đối với bạn. Thậm chí, bạn có thể bỏ qua phần này. Sau tất cả, những điều cơ bản của phần lớn các ngôn ngữ lập trình đều khá giống ngôn ngữ họ C. Thật không may, m ặc dù cú pháp của tất cả ngôn ngử gần như giống nhau, cách lập trình chúng lại khác nhau. C# có một số điểm khác biệt so với các ngôn ngữ khác, vì vậy tốt nhất hãy tiếp tục đọc phần này.

pdf11 trang | Chia sẻ: lylyngoc | Lượt xem: 1676 | Lượt tải: 2download
Bạn đang xem nội dung tài liệu Lập trình C# - Phần 2: Cơ bản, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSC Lập trình C# - Phần 2: Cơ bản Trang 1 Lập trình C# Dịch từ cuốn sách Beginning C Sharp Game Programming Phần 2: Cơ bản Vì sao bạn nên đọc phần này Nếu bạn đã biết những ngôn ngữ như C/C++ hay Java, thì phần này sẽ rất dễ dàng đối với bạn. Thậm chí, bạn có thể bỏ qua phần này. Sau tất cả, những điều cơ bản của phần lớn các ngôn ngữ lập trình đều khá giống ngôn ngữ họ C. Thật không may, mặc dù cú pháp của tất cả ngôn ngử gần như giống nhau, cách lập trình chúng lại khác nhau. C# có một số điểm khác biệt so với các ngôn ngữ khác, vì vậy tốt nhất hãy tiếp tục đọc phần này. Chương trình C# đầu tiên của bạn Bạn nên dùng Microsoft Visual Studio để có một giao diện lập trình tốt hơn, ở đây chỉ nhắc đến cú pháp. Truyền thống xa xưa trong ngành lập trình máy vi tính nói rằng chương trình đầu tiên của bạn nên là chương trình “Hello World”, một chương trình đơn giản in ra một thông điệp chào mừng trên máy vi tính. Cú pháp của chương trình đơn giản như sau: class HelloCSharp { static void Main( string[] args ) { System.Console.WriteLine( “Hello, C#!!” ); } } Lớp (Class) C# là một ngôn ngữ lập trình hướng đối tượng, điều này chẳng có nghĩa gì đối với bạn tại thời điềm này. Tôi sẽ nói về khái niệm này chi tiết hơn trong phần 3, “Giới thiệu về Lớp”, nhưng bây giờ, tất cả những gì cần biết là C# biểu diễn chương trình của nó như những đối tượng (object). Ý tưởng là chia chương trình của bạn thành danh từ và động từ, mà mỗi danh từ biển hiện cho một đối tượng. Ví dụ, nếu bạn làm một game mà có các tàu vũ trụ bay lượn xung quanh, thì tàu vũ trụ đó là đối tượng. Một lớp trong chương trình C# mô tả một danh từ; nó nói với máy vi tính đối tượng của bạn có những kiểu dữ liệu nào và những hành động nào có thể thực hiện bởi chúng. Một lớp tàu vũ trụ có thể nói với máy vi tính có bao nhiêu người ở trong nó, còn bao nhiêu nhiên liệu, và đi với tốc độ bao nhiêu. Trong C#, toàn bộ chương trình của bạn thật sự là một lớp. Trong chương trình trên, bạn có lớp HelloCSharp, đó là tên của chương trình. Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSC Lập trình C# - Phần 2: Cơ bản Trang 2 Điểm xuất phát Tất cả chương trình đều có một điểm xuất phát, một nơi trong mã mà máy vi tính bắt đầu thực thi. Trong những ngôn ngữ cũ hơn như C hay C++, điểm xuất phát thường là một hàm toàn cục gọi là main, nhưng trong C# thì hơi khác một chút. C# không cho phép bạn có hàm toàn cục (global function), thay vào đó nó buộc bạn cho các hàm đó và các lớp, vì vậy chắc chắn là bạn không thể sử dụng chung phương pháp cho điểm xuất phát ở C#. C# giống Java trong điểm này; điểm xuất phát cho tất cả chương trình C# là một hàm tĩnh (static function) được gọi là Main trong một lớp, giống như bạn thấy ở trong chương trình trên. Tôi sẽ đề cập chi tiết hơn tới hàm và hàm tĩnh trong phần 3, vì vậy hiện nay hãy chấp nhận điều này. Mọi chương trình C# phải có một lớp có hàm tĩnh Main, nếu không có, thì máy vi tính sẽ không biết nơi nào bắt đầu chương trình. Hơn nữa, bạn chỉ có thể có một hàm Main được định nghĩa trong một chương trình; nếu có hơn một, thì máy vi tính sẽ không biết bắt đầu từ cái nào. Hello, C#! Phần của chương trình thực hiện việc in ra màn hình là dòng này: System.Console.WriteLine( “Hello, C#!!” ); Dòng này lấy System.Console – một lớp xây dựng sẵn trong .NET framework – và nói với nó là in ra màn hình “Hello, C#!!” bằng cách sử dụng hàm WriteLine của nó. Biên dịch và Chạy Phần này sẽ được đề cập tới trong tài liệu Lập trình C# trên Microsoft Visual Studio 2010. Cơ bản Gần như mọi ngôn ngữ lập trình đều có những thuộc tính chung. Điều thứ nhất, ngôn ngữ lập trình nói chung biết cách lưu trữ dữ liệu. Chúng còn có thể xử lý dữ liệu bằng cách di chuyển nó lòng vòng và thực hiện phép tính. Các kiểu dữ liệu cơ bản Như nhiều ngôn ngữ lập trình, C# có một số lượng lớn kiểu dữ liệu xây dựng sẵn, đa số biễu diễn số và nhiều định dạng khác. Những kiểu này được mô tả ở bảng 2.1. Ghi chú C# là một ngôn ngữ có thể mở rộng, có nghĩa là bạn có thể tạo những kiểu dữ liệu cho riêng bạn nếu bạn muốn. Tôi sẽ đề cập chi tiết hơn trong chương 3. Bảng 2.1 Kiểu dữ liệu xây dựng sẵn trong C# Kiểu Kích cỡ (byte) Giá trị bool 1 true (đúng) hay false (sai) byte 1 0 đến 255 sbyte 1 -128 đến 127 char 2 Ký tự chữ và số (trong Unicode) short 2 -32 768 đến 32 767 ushort 2 0 đến 65 535 int 4 -2 147 483 648 đến 2 147 483 647 uint 4 0 đến 4 294 967 295 *float 4 -3.402823x1038 to 3.402823x1038 Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSC Lập trình C# - Phần 2: Cơ bản Trang 3 long 8 -9 223 372 036 854 775 808 đến 9 223 372 036 854 775 807 ulong 8 0 đến 18 446 744 073 709 551 615 *double 8 -1.79769313486232x10308 đến 1.79769313486232x10308 **decimal 16 -79 228 162 514 264 337 593 543 950 335 đến 79 228 162 514 264 337 593 543 950 335 * - Đây là những định dạng dấu phẩy động, nó biểu thị cho số thập phân không chính xác ** - Đây là định dạng dấu phẩy tĩnh, nó biểu thị chính xác số thập phân tới 28 chữ số Kiểu dữ liệu số nguyên (byte, short, int, long, …) chỉ có thể lưu trữ số nguyên như 0, 1, 2, …; chúng không thể lưu số thập phân như 1.5 hay 3.14159. Nếu muốn lưu số thập phân, bạn cần phải chuyển qua dùng những định dạng dấu phẩy động hay dấu phẩy tĩnh. Việc làm thế nào những loại số này có thể được lưu nằm ngoài cuốn sách này. Ghi chú Về cơ bản, số phẩy động không thể lưu trữ số một cách chính xác; chúng chỉ có thể lưu giá trị xấy xỉ với một sai số nào đó. Ví dụ, khi sử dụng float, bạn có thể biểu thị những số 1.0 và 1.00000012, nhưng bạn không thể biểu thị bất kì số nào giữa chúng. Vì vậy, nếu bạn đặt một float bằng 1.00000007, thì máy vi tính sẽ tự động làm tròn nó thành 1.00000012. Double cũng tương tự, nhưng chính xác hơn (tới 15 chữ số). Decimal được mã hóa theo một cách khác, kể cả khi tài liệu .NET nói nó là số phẩy tĩnh, về mặt kỹ thuật nó vẫn là số phẩy động, với độ chính xác lên tới 28 chữ số. Toán tử Toán tử là những ký hiệu xuất hiện trong ngôn ngữ máy tính; chúng nói cho máy vi tính thực hiện một số phép tính trên dữ liệu. Toán tử thường được sử dụng trong các phương trình toán, vì vậy tôi chắc chắn rằng phần này rất quen thuộc đối với bạn. Toán tử toán học C# có năm toán tử toán học cơ bản xây dựng sẵn trong ngôn ngữ, được mô tả ở bảng 2.2. Bảng 2.2 Toán tử toán học cơ bản trong C# Toán tử Ký hiệu Ví dụ Kết quả Cộng + 5 + 6 11 Trừ - 6 - 5 1 Nhân * 6 * 7 42 Chia / 8 / 4 2 Đồng dư % 9 % 3 0 Tăng thêm ++ 10++ 11 Giảm bớt -- 10-- 9 Bốn toán tử đầu tiên thì không cần phải đề cập đến. Toán tử thứ năm có thể mới với bạn nếu bạn chưa học lập trình trước đây. Phép đồng dư (Modulus) đôi khi được biết đến “phép lấy dư”. Về cơ bản, kết quả từ một phép đồng dư là số dư nếu bạn lấy số thứ nhất chia cho số thứ hai. Trong bảng 2.2, 9 chia hết cho 3, vì vậy số dư là 0. Nếu bạn lấy 10 % 3, kết quả sẽ là 1, và số dư của 10/3 là 1. Ghi chú Toán tử tăng và giảm thực ra có hai phiên bản khác nhau: phiên bản trước và sau. Ví dụ ++x là phiên bản tăng trước, và x++ là phiên bản tăng sau. Sự khác nhau là khi nào toán tử được thực hiện. Ví dụ, nếu x là 10 và bạn viết y = x++, thì máy vi tính sẽ cho giá trị x vào y đầu tiên, sau đó mới tăng x, để cho y có giá trị 10 và x là 11. Mặt khác, y = ++x sẽ thực hiện Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSC Lập trình C# - Phần 2: Cơ bản Trang 4 phép tăng trước và thực hiện việc gán sau, cho x và y đều có giá trị 11. Đó là một sự thừa hưởng từ C, có thể gây khó khăn khi đọc mã, vì vậy tôi khuyên rằng đừng sử dụng quá nhiều toán tử này. Bạn nên ghi chú là tất cả các toán tử toán học đều có phiên bản rút gọn cho phép bạn hiệu chỉnh trực tiếp trên một biến (coi thêm về các biến trong mục sau của phần này). Ví dụ, nếu bạn muốn cộng 10 vào x, bạn có thể làm thế này: x = x + 10; Nhưng một số thứ rườm rà và dư thừa có thể bỏ đi. Bạn có thể viết như sau x += 10; Tất cả các toán tử khác đều có phiên bản tương tự: x *= 10; // Nhân cho 10 x /= 10; // Chia cho 10 x -= 10; // Trừ 10 x %= 10; // Đồng dư cho 10 x >>= 2; // Dịch xuống cho 2 x <<= 2; // Dịch lên cho 2 Toán tử trên bit Bên cạnh những toán tử toán học, còn có những toán tử trên bit, nó thực hiện những phép tính nhị phân trên các số. Toán tử trên bit trong C# được liệt kê trong bảng 2.3. Bảng 2.3 Toán tử trên bit cơ bản trong C# Toán tử Ký hiệu Ví dụ Kết quả And Nhị phân & 6 & 10 2 Or Nhị phân | 6 | 10 14 Xor Nhị phân ^ 6 ^ 10 12 Not Nhị phân ~ ~7 248 Toán tử trên bit cũng có dạng rút gọn: x &= 10; // And cho 10 x |= 10; // Or cho 10 x ^= 10; // Xor cho 10 Toán tử dịch Có hai toán tử dịch, >. Những toán tử này dịch các bit trong một số lên hay xuống, kết quả dựa trên phương trình sau:  x << y tương tự với x * 2y  x >> y tương tự với x / 2y Vì vậy 5 > 3 tương đương với 40 / 8, hay 5. Ghi chú Dịch bit nhanh hơn rất nhiều so với nhân hoặc chia trực tiếp, nhưng hiếm dùng ngày nay. Tốc độ tiết kiệm không quan trọng lắm, và nó làm cho chương trình của bạn khó đọc hơn. Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSC Lập trình C# - Phần 2: Cơ bản Trang 5 Toán tử Logic Có một số điểm giống nhau giữa các toán tử logic là chúng thực hiện phép so sánh và trả lại giá trị Boolean true (đúng) hay false (sai). Bảng 2.4 liệt kê những toán tử logic. Bảng 2.4 Toán tử Logic trong C# Toán tử Ký hiệu Ví dụ Kết quả Bằng == 1 == 2 false Không bằng != 1 != 2 true Nhỏ hơn < 1 < 2 true Lớn hơn > 1 > 2 false Nhỏ hơn hoặc bằng <= 1 <= 2 true Lớn hơn hoặc bằng >= 1 >= 2 false Logic And && true && false false Logic Or || true || false true Logic Not ! !true false Biến Trong C#, như trong gần như bất kỳ ngôn ngữ khác, bạn có thể tạo các trường cho các kiểu cơ bản, gọi là biến, và thực hiện phép toán lên chúng. Khai báo một mảnh dữ liệu của chương trình là một điều đơn giản. Tất cả các điều bạn cần làm là gọi tên của kiểu dữ liệu, sau đó là tên biến bạn muốn tạo và sau đó (nếu cần) khởi tạo dữ liệu đó với một giá trị. Đây là một ví dụ: int x = 10; float y = 3.14159; decimal z; Cảnh báo Ghi chú rằng nếu bạn mún sử dụng một biến trước khi khởi tạo cho nó (nếu bạn muốn sử dụng z trong đoạn mã ví dụ trước), thì bạn sẽ nhận được một lỗi biên dịch trong C#. Trong ngôn nhữ trước đó, như C và C++, sẽ cho phép bạn sử dụng biến mà không cần cho nó giá trị, điều đó có thể dẫn đến rất nhiều lỗi vì bạn không bao giờ biết được cái gì trong biến của bạn nếu bạn không đặt giá trị cho nó. Đây là một ví dụ sử dụng biến trong các biểu thức toán học: int x = 10 + 5; // 15 int y = 20 * x; // 300 int z = x / 8; // 1 float a = (float)x / 8.0; // 1.875 x = (int)a; // 1 Chú ý vào hai dòng cuối. Những dòng này chỉ cho bạn cách sử dụng ép kiểu trong chương trình của bạn. Một lời giải thích cho ép kiểu sẽ đến trong các mục sau. Hằng Bạn có thể khai báo các hằng, một biến ảo nhưng không thể thay đổi, trong mã của bạn. Đây là một cách an toàn xuất hiện trong ngôn ngữ máy tính trong những năm gần đây. Ví dụ: const float pi = 3.14159; Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSC Lập trình C# - Phần 2: Cơ bản Trang 6 Bây giờ bạn có thể sử dụng pi trong những tính toán của bạn, nhưng bạn không thể thay đổi giá trị của nó (bởi vì thay đổi giá trị của pi thành 3.0 làm cho nó trở nên hoàn toàn vô nghĩa!). Điều này sẽ gây ra một lỗi biên dịch: pi = 3.0; // ERROR! Ép kiểu Hãy xem đoạn mã này: float a = 1.875; int x = (int)a; // 1 Hãy nhìn vào dòng cuối: giá trị của a là 1.875, một số hữu tỉ, và dòng cuối cố gắng cho giá trị của nó và x, một số nguyên. Rõ ràng là bạn không thể chuyển dữ liệu từ a sang x, vì vậy bạn cần mất đi một số độ chính xác. Các ngôn ngữ cũ hơn, như C/C++, điều này thực hiện một cách tự động, và cắt 1.875 xuống còn 1 để vừa với số nguyên. Tuy nhiên, nếu bạn cố gắng gõ dòng này vào C#, nó sẽ gây ra một lỗi biên dịch: x = a; // Lỗi, không thể chuyển đổi ngầm từ ‘float’ sang ‘int’ Đương nhiên, mã này hoạt động tốt trong những ngôn ngữ cũ hơn, vì vậy rất nhiều người sẽ tự động bỏ qua C# bởi vì “khó sử dụng”. Bạn có thể nghe họ nói: “Mi không thể tự động chuyển float sang int à, trình biên dịch ngu ngốc kia?”. Trình biên dịch không thật sự ngu ngốc; nó đang cố gắng tiết kiệm thời gian của bạn để gỡ lỗi. Bạn có thể không nhận ra điều đó, nhưng mà một nguồn lỗi chung của các chương trình là việc cắt xén không có chủ ý. Bạn có thể quên một kiểu là số nguyên và một số dữ liệu quan trọng có thể đánh mất trong khi cắt xén ở đâu đó. Vì vậy C# yêu cầu bạn nói một cách rõ ràng khi nào bạn muốn cắt xén dữ liệu. Bảng 2.5 liệt kê những chuyển đổi nào là ngầm (I – Implicit) và rõ ràng (E – Explicit). Bảng 2.5 Chuyển đổi ngầm/rõ ràng Từ byte sbyte short ushort int uint long ulong float double decimal byte I E I I I I I I I I I sbyte E I I E I E I E I I I short E E I E I E I E I I I ushort E E E I I I I I I I I int E E E E I E I E I I I uint E E E E E I I I I I I long E E E E E E I E I I I ulong E E E E E E E I I I I float E E E E E E E E I I I double E E E E E E E E E I E decimal E E E E E E E E E E I Biểu đồ có vẻ bối rối một chút, nhưng thực ra nó rất đơn giản. Ví dụ, nếu bạn muốn chuyển thì int sang double, nhìn vào bảng 2.5, tìm “int” ở bên trái và “double” ở trên. Vị trí đó là chữ I, tức là bạn có thể thực hiện một chuyển đổi ngầm: int a = 10; double b = a; // ok Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSC Lập trình C# - Phần 2: Cơ bản Trang 7 Bây giờ bạn muốn chuyển đổi từ double sang int. Nhìn bảng 2.5, tìm “double” phía trái và “int” ở trên. Ở đó là chữ E, nghĩa là bạn cần thực hiện một chuyển đổi rõ ràng: double a = 10.0; // int b = a <—- ERROR int b = (int)a; // ok Sự phân nhánh Nếu bạn đã thực sự học một ngôn ngữ lập trình, thì bạn biết rằng có ba đặc điểm khác nhau mà một ngôn ngữ cần có để có thể xem như một ngôn ngữ lập trình. Đó là  Sự tuần tự  Sự phân nhánh  Sự lặp lại Bạn đã biết về đặc điểm đầu tiên, sự tuần tự, trong ví dụ đầu đầu tiên. Sự tuần tự nghĩa là ngôn ngữ phải cho phép thực thi các lệnh theo một trình tự cho sẵn. Bây giờ, tôi muốn đề cập tới câu lệnh điều kiện, việc sử dụng nó được gọi là sự phân nhánh. Phân nhánh cho phép một chương trình máy tính xem xét đến các biến cho sẵn và quyết định xem nó nên tiếp tục thực thi hay nên rẽ nhánh sang phần khác của chương trình. C# có một số câu lệnh điều kiện xây dựng sẵn; tất cả chúng đều thừa kế từ C, vì vậy, bạn có thể quen thuộc với chúng. Câu lệnh If Khá phổ biến trong một chương trình, khi bạn muốn thử xem nếu một điều kiện có đúng hay không, và sau đó hành động theo kết quả. Ví dụ, nếu bạn muốn thực hiện một hành động nếu một điều kiện là đúng, thì bạn có thể viết như sau: if( x == 10 ) { // Làm gì đó } Đoạn mã kiểm tra xem nếu biến nào đó có tên là x có giá trị là 10 hay không, và sau đó thực thi đoạn mã bên trong dấu ngoặc nhọn nếu, và chỉ nếu, x là 10. Cái này được gọi là câu lệnh if. Bạn cũng có thể thêm và một mệnh đề else ở cuối, trong trường hợp bạn muốn thực thi đoạn mã nào đó nếu x không là 10: if( x == 10 ) { // Làm gì đó } else { // Làm gì đó } Máy vi tính sẽ thực thi tất cả những gì trong khối đầu tiên khi x là 10, và thực thi những gì trong khối thứ hai khi x là bất cứ cái gì không phải là 10. Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSC Lập trình C# - Phần 2: Cơ bản Trang 8 Hơn nữa, bạn có thể nối chuỗi câu lệnh else if ở cuối, để thực hiện nhiều yêu cầu: if( x < 10 ) { // Làm gì đó nếu x < 10 } else if( x < 20 ) { // Làm gì đó nếu 10 <= x < 20 } else if( x < 30 ) { // Làm gì đó nếu 20 <= x < 30 } Ghi chú Nếu bạn đã sử dụng một ngôn ngữ như C++, thì bạn có thể sử dụng số bên trong một điều kiện để tạo ra dòng mã như: if( x ), với x là một số nguyên. Trong những ngôn ngữ cũ, máy tính cho số 0 là false, và bất kỳ thứ gì khác là true, nghĩa là nếu x là 0, thì khối if sẽ không thực thi, nhưng nó sẽ thực thi cho bất kỳ số nào khác. C# không giống vậy, nó yêu cầu bạn phải sử dụng một Boolean bên trong một biểu thức điều kiện. Vì vậy, đoạn mã trên sẽ gây ra một lỗi biên dịch. Khi bạn nghĩ về nó, cách cũ không thực sự an toàn nữa, bởi vì nó không giải thích được bạn đang kiểm tra cái gì. C# làm chương trình của bạn an toàn và dễ đọc hơn. Câu lệnh Switch Sử dụng câu lệnh switch là một cách nhanh để so sánh nhiều kết quả của một biến duy nhất. V1i dụ, nếu bạn có một biến, x, biến có có thể giữa các giá trị 1, 2, 3 và 4, và chương trình của bạn sẽ thực hiện các hành động khác nhau cho mỗi giá trị. Bạn có thể dùng một câu lệnh switch để làm điều này: switch( x ) { case 1: // Làm gì đó nếu là 1 case 2: // Làm gì đó nếu là 2 case 3: // Làm gì đó nếu là 3 case 4: // Làm gì đó nếu là 4 default: // Làm gì đó nếu là một số khác } Vậy nếu x là 2, thì mã sẽ nhảy tới khối case 2, và vâng vâng. Tuy nhiên, trong đoạn mã trên, nếu x là 2, thì mã sẽ nảy ngay tới khối 2, nhưng nó sẽ tiếp tục và thực thi đoạn mã ở các khối ở dưới chúng. Có nghĩa là đoạn mã sẽ thực thi mã trong khối 3, 4 và mặc định. Đôi khi bạn muốn điều này xảy ra, nhưng phần lớn là không, vì vậy bạn cần sử dụng từ khóa break ở thoát khỏi switch sau mỗi khối: switch( x ) { case 1: // Làm gì đó Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSC Lập trình C# - Phần 2: Cơ bản Trang 9 break; // Nhảy khỏi switch case 2: // Làm gì đó break; // Nhảy khỏi switch default: // Làm gì đó break; // Ở đây tùy chọn } Vòng lặp Đặc điểm thứ ba của một ngôn ngữ máy tính là sự lặp lại, hay vòng lặp. Vòng lặp cho phép bạn thực hiện một công việc cụ thể một lần và nhiều lần nữa. C# có bốn cơ cấu xây dựng sẵn; ba cái sẽ được đề cập trong phần này là cơ cấu thừa kế từ ngôn ngữ C. Tôi sẽ không đề cập đến cái thứ tư cho đến Phần 4, “C# Nâng cao”. Vòng lặp while Cấu trúc vòng lặp đầu tiên và đơn giản nhất là vòng lặp while. Đây là ví dụ: while( x < 10 ) { // Làm gì đó } Bất cứ cái gì trong dấu ngoặc nhọn sẽ được thực thi lặp đi lặp lại khi giá trị x nhỏ hơn 10. Nếu x không bao giờ lớn hơn hoặc bằng 10, thì vòng lặp sẽ lặp vô hạn. Vòng lặp for Một vòng lặp phổ biến khác là vòng lặp for, là một cách khác để thực hiện một vòng lặp while. Cú pháp cơ bản cho vòng lặp for là: for( khởi tạo; điều kiện; hành động ) Phần khởi tạo là phần mã chỉ được thực thi một lần, khi bắt đầu vòng lặp for. Phần này cho phép bạn khởi tạo bất kỳ biến nào bạn cần sử dụng trong vòng lặp. Phần điều kiện được kiểm tra trước mỗi lần lặpl nếu nó trả về false, thì vòng lặp kết thúc. Phần hành động được thực thi ở cuối mỗi lần lặp. Nói chung, bạn sử dụng vòng lặp for để tạo một vòng lặp có số lần xác định (nhưng nó vẫn có thể bị lặp vô hạn). Ví dụ, nếu bạn muốn thực hiện 10 phép tính trên x, với x từ 0 đến 9, bạn có thể tạo vòng lặp như thế này: for( int x = 0; x < 10; x++ ) { // Làm gì đó } Trong lần thực thi đầu tiên của vòng lặp, x là 0, và lần sau là 1, và tiếp tục, cho đến khi nào nó đạt đến 9 (bằng 10 thì sẽ thoát khỏi vòng lặp). Bạn cũng có thể thực hiện nhiều việc trong khác for, như khởi tạo nhiều biến hay thực hiện nhiều hành động: Câu lạc bộ Khoa học - THPT Chuyên Lê Hồng Phong TPHCM LHPSC Lập trình C# - Phần 2: Cơ bản Trang 10 for( int x = 0, int y = 0; x < 10; x++, y += 2 ) Vòng lặp này tạo ra hai biến, x và y, với x lặp từ 0 đến 9, và y lặp từ 0 đến 18 vì bỏ qua các số lẻ. Vòng lặp do-while Đôi khi trong lập trình, một tình huống xuất hiện mà bạn muốn vòng lặp thực thi ít nhất một