13/4/15

Làm quen với ngôn ngữ C từ Pascal (Phần 2)

Trong phần này mình sẽ nói về các cú pháp vòng lặp, rẽ nhánh, điểm khác nhau của chúng trong C và Pascal.

Lệnh rẽ nhánh if
Đây là một lệnh rất quen thuộc. Trong C, biểu thức điều kiện được đặt trong cặp dấu ngoặc tròn thay vì giữa 2 từ khóa if .. then như Pascal. Tiếp theo là một lệnh hoặc khối lệnh. Khối lệnh trong C đặt giữa cặp dấu ngoặc nhọn {} còn trong Pascal đặt giữa begin .. end;

Ở dạng có thêm else trong Pascal được tính là một lệnh. Vì vậy nên khối lệnh trước else sẽ không có dấu chấm phẩy. Còn trong C tính là 2 lệnh nên cần dấu chấm phẩy trước else.

Ví dụ:
if a > b then writeln(a)
else writeln(b);

if (a > b) printf("%d\n", a);
else printf("%d\n", b);
Lệnh rẽ nhánh switch .. case
Tương đương với case .. of của Pascal. Nhưng switch .. case có vẻ khó sử dụng hơn, nó đòi hỏi phải có lệnh nhảy break sau mỗi case, nếu không nó sẽ thực hiện tất cả các case. Dưới đây là ví dụ:

case month of
   4, 6, 9, 11 : writeln('30 days');
   2: writeln('28 days');
   else writeln('31 days');
end;

switch (month)
{
case 4: case 6: case 9: case 11:
   printf("30 days\n");
   break;
case 2:
   printf("28 days\n");
   break;
default:
   printf("31 days");
}
Vòng lặp for
Cách vòng lặp for trong C hoạt động khác hoàn toàn với Pascal. Trong C, vòng lặp for có cú pháp:

for(<khởi tạo>;<điều kiện>;<tăng biến chạy>)

Trong đó phần <khởi tạo> dùng để tạo giá trị ban đầu cho biến chạy và chỉ được thực hiện 1 lần duy nhất. Phần <điều kiện> chứa điều kiện để vòng lặp thực hiện và phần <tăng biến chạy> mô tả cách thức tăng/giảm của biến chạy. Vòng for của C có thể thay thế tất cả các vòng lặp còn lại.

Tuy nhiên, vòng for của Pascal chỉ có thể tăng/giảm biến chạy 1 đơn vị.
Dưới đây là ví dụ: Tính S = 2 + 4 + 6 + 8 + ...+ 2n trong Pascal không thể thực hiện bằng for nhưng C thì có thể:
int s = 0;
for (int i = 2; i <= 2*n; i += 2)
   s += i;
Vòng lặp while và do .. while
Vòng lặp while trong C hầu như tương tự Pascal và mình không có gì để bàn. Trong C còn có vòng lặp do .. while, chỉ khác while ở chỗ thực hiện lệnh 1 lần rồi mới kiểm tra điều kiện lặp, nếu đúng mới lặp lại tiếp. Khác với repeat .. until của Pascal, điều kiện trong until là ngược với điều kiện trong while của do .. while.
Ví dụ: Nhập N trong khoảng từ 1 đến 100, nếu ngoài khoảng đó yêu cầu nhập lại.

repeat
   write('Nhap N: ');
   readln(n);
until n >= 1 and n <= 100;

do
{
   printf("Nhap N: ");
   scanf("%d", &n);
} while (n < 1 || n > 100);

Không có nhận xét nào:

Đăng nhận xét