No9 - Cấu trúc lặp while trong C/C++

1.    Lệnh lặp while

a.    Cú pháp

while (điều kiện) 

khối lệnh lặp ;
[break;]
[continue;]
 }

b.    Thực hiện

- Đầu tiên chương trình sẽ kiểm tra điều kiện.
     + Nếu đúng thì thực hiện khối lệnh lặp, sau đó quay lại kiểm tra điều kiện và tiếp tục.
     + Nếu điều kiện sai thì dừng vòng lặp.

[break]

Dùng để thoát ra khỏi (chấm dứt) các câu lệnh cấu trúc, chương trình sẽ tiếp tục thực hiện các câu lệnh tiếp sau câu lệnh vừa thoát.

[continue]


Lệnh dùng để quay lại đầu vòng lặp mà không chờ thực hiện hết các lệnh trong khối lệnh lặp.

c.    Đặc trưng

-        Khối lệnh lặp có thể không được thực hiện lần nào nếu điều kiện sai ngay từ đầu.
-        Để vòng lặp không lặp vô hạn thì trong khối lệnh thông thường phải có ít nhất một câu lệnh nào đó gây ảnh hưởng đến kết quả của điều kiện, ví dụ làm cho điều kiện đang đúng trở thành sai.
-        Nếu điều kiện luôn luôn nhận giá trị đúng (ví dụ biểu thức điều kiện là 1) thì trong khối lệnh lặp phải có câu lệnh kiểm tra dừng và lệnh break.

2.    Ví dụ minh hoạ

Ví dụ 1 : Nhân 2 số nguyên theo phương pháp Ấn độ

Cách 1:
void main()
{
   long m, n, kq;                                                // Các số cần nhân và kết quả kq
   cout << “Nhập m và n: “ ; cin >> m >> n ;
   kq = 0 ;
   while (m)
   {
               if (m%2) kq += n ;
               m >>= 1;
               n <<= 1;
}
   cout << “m nhân n =” << kq ;
}

Cách 2:
void main()
{
   long m, n, kq;                                                // Các số cần nhân và kết quả kq
   cout << “Nhập m và n: “ ; cin >> m >> n ;
   kq = 0 ;
   while (1) {
               if (m%2) kq += n ;
               m >>= 1;
               n <<= 1;
               if (!m) break ;                         // nếu m = 0 thì thoát khỏi vòng lặp
}
   cout << “m nhân n =” << kq ;
}


Ví dụ 2 : Bài toán cổ: vừa gà vừa chó bó lại cho tròn đếm dủ 100 chân. Hỏi có mấy gà và mấy con chó, biết tổng số con là 36.

void main()
{
   int g, c ;
g = 0 ;
   while (g <= 36) {
               c = 0 ;
               while (c <= 50) {
                           if (g + c == 36 && 2*g + 4*c == 100) cout << g << c ;
                           c++;
               }
               g++;
   }
}

Ví dụ 3 : Tìm ước chung lớn nhất (UCLN) của 2 số nguyên m và n.

Áp dụng thuật toán Euclide bằng cách liên tiếp lấy số lớn trừ đi số nhỏ khi nào 2 số bằng nhau thì đó là UCLN. Thêm biến phụ r để tính hiệu của 2 số. Sau đó đặt lại m hoặc n bằng r sao cho m > n và lặp lại. Vòng lặp dừng khi m = n.
void main()
{            
int m, n, r;
cout << "Nhập m, n: " ; cin >> m >> n ;
if (m < n) { int t = m; m = n; n = t; }       // nếu m < n thì đổi vai trò hai số
while (m != n) {
               r = m - n ;
               if (r > n) m = r; else { m = n ; n = r ; }
}
cout << "UCLN = " << m ;
}

Post a Comment

0 Comments