Vòng Lặp While trong C: Cửa ngõ vào Lập trình Lặp lại

Xin chào, siêu sao lập trình tương lai! Bạn đã sẵn sàng nhảy vào thế giới kỳ diệu của các vòng lặp chưa? Hôm nay, chúng ta sẽ khám phá một trong những khái niệm cơ bản nhất trong lập trình: vòng lặp while trong C. tin tôi đi, một khi bạn thành thạo điều này, bạn sẽ cảm thấy như mình đã解锁 một siêu năng lực trong lập trình!

C - While loop

Vòng lặp While là gì?

Trước khi chúng ta đi vào chi tiết, hãy hiểu xem vòng lặp while là gì. Hãy tưởng tượng bạn đang chơi một trò chơi video và bạn cần đánh bại 10 kẻ thù để hoàn thành cấp độ. Thay vì viết mã "tấn công" 10 lần, bạn có muốn chỉ cần nói, "Tiếp tục tấn công cho đến khi không còn kẻ thù"? Đó chính xác là điều mà vòng lặp while làm trong lập trình!

Một vòng lặp while cho phép bạn lặp lại một khối mã miễn là một điều kiện nhất định là đúng. Nó giống như bạn đang nói với máy tính, "Hey, tiếp tục làm điều này cho đến khi tôi bảo bạn dừng lại!"

Cú pháp của vòng lặp while trong C

Hãy cùng nhìn vào cấu trúc cơ bản của vòng lặp while trong C:

while (điều kiện) {
// mã cần lặp lại
}

Đó là tất cả! điều kiện được kiểm tra trước mỗi lần lặp. Nếu nó là đúng, mã trong dấu {} sẽ được thực thi. Quá trình này tiếp tục cho đến khi điều kiện trở thành sai.

Sơ đồ 流程 của vòng lặp while trong C

Để hình dung cách vòng lặp while hoạt động, hãy nhìn vào sơ đồ 流程:

┌─────────────┐
│   Bắt đầu   │
└──────┬──────┘
│
▼
┌─────────────────┐
│ Kiểm tra điều kiện │
└────────┬────────┘
│
▼
┌───────────┐    Không
┌───┤ Điều kiện ├────────┐
│   │   đúng?   │        │
│   └───────────┘        │
│         │ Có           │
│         ▼              │
│  ┌──────────────┐      │
│  │ Thực thi mã │      │
│  └──────┬───────┘      │
│         │              │
└─────────┘              │
▼
┌──────────┐
│   Kết thúc   │
└──────────┘

Sơ đồ 流程 này cho thấy điều kiện được kiểm tra đầu tiên. Nếu nó là đúng, mã được thực thi, và sau đó chúng ta quay lại kiểm tra điều kiện. Vòng lặp này tiếp tục cho đến khi điều kiện trở thành sai.

Vòng lặp while hoạt động như thế nào trong C?

Hãy phân tích quá trình:

  1. Chương trình gặp vòng lặp while.
  2. Nó kiểm tra điều kiện trong dấu ngoặc.
  3. Nếu điều kiện là đúng, nó thực thi mã trong vòng lặp.
  4. Sau khi thực thi mã, nó quay lại bước 2.
  5. Nếu điều kiện là sai, nó bỏ qua vòng lặp và tiếp tục với phần còn lại của chương trình.

Ví dụ về vòng lặp while trong C

Đã đến lúc cho ví dụ đầu tiên! Hãy tạo một chương trình đếm ngược đơn giản:

#include <stdio.h>

int main() {
int countdown = 5;

while (countdown > 0) {
printf("%d...\n", countdown);
countdown--;
}

printf("Nổ!\n");
return 0;
}

Kết quả đầu ra:

5...
4...
3...
2...
1...
Nổ!

Hãy phân tích điều này:

  1. Chúng ta bắt đầu với countdown = 5.
  2. Vòng lặp while kiểm tra nếu countdown > 0 (mà là đúng).
  3. Nó in giá trị đếm ngược hiện tại.
  4. Chúng ta giảm countdown đi 1 bằng countdown--.
  5. Bước 2-4 tiếp tục cho đến khi countdown trở thành 0.
  6. Khi countdown là 0, điều kiện trở thành sai, và chúng ta thoát khỏi vòng lặp.
  7. Cuối cùng, chúng ta in "Nổ!".

Sử dụng vòng lặp while như vòng lặp điều kiện

Vòng lặp while rất phù hợp cho các tình huống bạn không biết chính xác bạn cần lặp lại bao nhiêu lần. Hãy nhìn vào ví dụ sau khi chúng ta yêu cầu người dùng đoán một số:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
srand(time(0));  // Seed for random number generation
int secret = rand() % 100 + 1;  // Random number between 1 and 100
int guess = 0;
int attempts = 0;

printf("Tôi đang nghĩ về một số介于 1 và 100. Bạn có thể đoán nó không?\n");

while (guess != secret) {
printf("Nhập猜测 của bạn: ");
scanf("%d", &guess);
attempts++;

if (guess < secret) {
printf("Quá thấp! Hãy thử lại.\n");
} else if (guess > secret) {
printf("Quá cao! Hãy thử lại.\n");
}
}

printf("Chúc mừng! Bạn đã đoán đúng số trong %d lần thử!\n", attempts);
return 0;
}

Trong ví dụ này, chúng ta không biết người dùng sẽ cần bao nhiêu lần thử, vì vậy vòng lặp while rất phù hợp. Vòng lặp tiếp tục miễn là猜测 không khớp với số bí mật.

Vòng lặp while với break và continue

Đôi khi, bạn có thể muốn thoát khỏi vòng lặp sớm hoặc bỏ qua lần lặp tiếp theo. Đó là lúc breakcontinue rất hữu ích.

break

Lệnh break thoát khỏi vòng lặp ngay lập tức. Dưới đây là một ví dụ:

#include <stdio.h>

int main() {
int i = 1;
while (1) {  // This creates an infinite loop
printf("%d ", i);
if (i == 5) {
break;  // Exit the loop when i reaches 5
}
i++;
}
printf("\nVòng lặp kết thúc!\n");
return 0;
}

Kết quả đầu ra:

1 2 3 4 5
Vòng lặp kết thúc!

continue

Lệnh continue bỏ qua phần còn lại của lần lặp hiện tại và nhảy đến lần lặp tiếp theo. Hãy nhìn vào ví dụ sau:

#include <stdio.h>

int main() {
int i = 0;
while (i < 10) {
i++;
if (i % 2 == 0) {
continue;  // Skip even numbers
}
printf("%d ", i);
}
printf("\nVòng lặp kết thúc!\n");
return 0;
}

Kết quả đầu ra:

1 3 5 7 9
Vòng lặp kết thúc!

Nhiều ví dụ hơn về vòng lặp while

Hãy nhìn vào một vài ví dụ khác để cố định kiến thức của chúng ta:

Ví dụ 1: Tích của các số

#include <stdio.h>

int main() {
int num, sum = 0;

printf("Nhập các số để tính tổng (nhập 0 để kết thúc):\n");

while (1) {
scanf("%d", &num);
if (num == 0) {
break;
}
sum += num;
}

printf("Tổng là: %d\n", sum);
return 0;
}

Chương trình này tiếp tục cộng các số cho đến khi người dùng nhập 0.

Ví dụ 2: Dãy Fibonacci

#include <stdio.h>

int main() {
int n, first = 0, second = 1, next;

printf("Nhập số lượng các thuật ngữ Fibonacci cần tạo: ");
scanf("%d", &n);

printf("Dãy Fibonacci:\n");

int i = 0;
while (i < n) {
if (i <= 1) {
next = i;
} else {
next = first + second;
first = second;
second = next;
}
printf("%d ", next);
i++;
}

printf("\n");
return 0;
}

Chương trình này tạo dãy Fibonacci đến n thuật ngữ.

Vòng lặp while và vòng lặp do while

Trước khi chúng ta kết thúc, hãy nhanh chóng so sánh vòng lặp while với cousin của nó, vòng lặp do while:

Tính năng Vòng lặp while Vòng lặp do while
Kiểm tra điều kiện Tại đầu Tại cuối
Số lần thực thi tối thiểu 0 (nếu điều kiện ban đầu là sai) 1 (luôn thực thi ít nhất một lần)
Cú pháp while (điều kiện) { ... } do { ... } while (điều kiện);
Tình huống sử dụng tốt nhất Khi bạn không chắc chắn bạn có cần thực thi vòng lặp hay không Khi bạn biết bạn cần thực thi vòng lặp ít nhất một lần

Sự khác biệt chính là vòng lặp do while luôn thực thi mã block ít nhất một lần trước khi kiểm tra điều kiện.

Và thế là bạn đã có nó, học viên lập trình của tôi! Bạn đã解锁 sức mạnh của vòng lặp while trong C. Hãy nhớ, thực hành làm nên hoàn hảo, vì vậy đừng ngần ngại thử nghiệm với các khái niệm này. Trước khi bạn biết, bạn sẽ lặp lại như một chuyên gia! Chúc bạn may mắn! ??

Credits: Image by storyset