Buổi 3: Cấu trúc điều khiển

Giảng viên: TS. Lê Hoàng Sơn

lehoangson@hus.edu.vn

1

Lập trình tính toán khoa học kỹ thuật

Nội dung chính

Cấu trúc rẽ nhánh

1

Cấu trúc lặp

2

Bài tập

3

2/18 Lê Hoàng Sơn

1. Cấu trúc rẽ nhánh

 Cú pháp If tổng quát: If (biểu thức A) { Các lệnh; } else If (biểu thức B) { Các lệnh; } else { Các lệnh; }

 Trong C cho phép sử dụng các cấu trúc if lồng nhau để giải quyết bài toán

3/18 Lê Hoàng Sơn

Ví dụ: So sánh hai số a và b

Nhập số nguyên a

Nếu a lớn hơn b

Nếu a nhỏ hơn b

Nếu a bằng b

# include # include int main() { int a, b; printf("Nhap vao so a: "); scanf("%d", &a); printf("Nhap vao so b: "); scanf("%d", &b); if (a>b) { printf("a lon hon b.\n"); } else if (a

4/18 Lê Hoàng Sơn

Cấu trúc switch

 Cú pháp switch tổng quát: switch (biểu thức) { case A: các lệnh; break; case B: các lệnh; break; case C: các lệnh; break; };

 Nếu biểu thúc (toán học, logic) nhận giá trị nào thì sẽ thực hiện các

lệnh tương ứng

5/18 Lê Hoàng Sơn

Ví dụ: In ra dấu *

Xóa màn hình

Xem xét các trường hợp của biến i

Nếu i == 3

# include # include int main() { int i; clrscr(); printf("Nhap vao so 1, 2 hoặc 3: "); scanf("%d", &i); switch(i) { case 3: printf("***"); break; case 2: printf("**"); break; case 1: printf("*"); break; }; printf("An phim bat ky de ket thuc!\n"); getch(); return 0; }

6/18 Lê Hoàng Sơn

Nội dung chính

Cấu trúc rẽ nhánh

1

Cấu trúc lặp

2

Bài tập

3

7/18 Lê Hoàng Sơn

2. Cấu trúc lặp

 Cú pháp for tổng quát: for (đk khởi tạo; đk dừng; thay đổi giá trị biến) { Các lệnh; }

 Điều kiện khởi tạo chỉ được thực hiện đúng một lần duy nhất  Khi nào gặp điều kiện dừng thì mới thoát khỏi vòng for. Nếu không

thì thay đổi giá trị biến

 Có thể dùng cấu trúc các vòng for lồng nhau  Muốn thoát khỏi vòng lặp không qua điều kiện dừng, phải dùng lệnh

break, goto hoặc return

8/18 Lê Hoàng Sơn

Ví dụ: In ma trận 2 x 3

Vòng for thứ nhất theo i

Vòng for thứ hai theo j

In phần tử ma trận

Xuống dòng

# include # include int main() { int i, j; clrscr(); for(i = 1; i<=2; i++) { for(j = 1; j<=3; j++) { printf(“[%d,%d] ", i,j); } printf(“\n”); } getch(); return 0; }

9/18 Lê Hoàng Sơn

2. Cấu trúc lặp

 Cú pháp while tổng quát: while (biểu thức) { Các lệnh; }

 Dùng cú pháp này khi không biết trước số vòng lặp  Nếu biểu thức nhận giá trị true thì thực hiện lệnh; còn ngược lại thì

thoát ra ngoài luôn.

 Sau khi thực hiện lệnh lại kiểm tra lại giá trị của biểu thức.  Ta có thể dùng câu lệnh break để thoát khỏi vòng lặp theo ý muốn

10/18 Lê Hoàng Sơn

Ví dụ: Tính tổng số nguyên từ 1 đến n

Khởi tạo i

Kiểm tra nếu i

Tính tổng

In kết quả

# include # include int main() { int i = 0, n, tong = 0; printf("Nhap vao so n: "); scanf("%d", &n); while (i++ < n) { tong += i; } printf("Tong: %d", tong); getch(); return 0; }

11/18 Lê Hoàng Sơn

2. Cấu trúc lặp

 Cú pháp do .. while tổng quát: do { Các lệnh; } while (biểu thức);

 Dùng cú pháp này khi không biết trước số vòng lặp  Thực hiện lệnh trước  Nếu biểu thức nhận giá trị true thì chạy tiếp các lệnh. Ngược lại,

thoát ra ngoài luôn.

 Ta có thể dùng câu lệnh break để thoát khỏi vòng lặp theo ý muốn

12/18 Lê Hoàng Sơn

Ví dụ: Kiểm tra password

Khởi tạo

Thực hiện nhập mật khẩu

Kiểm tra mật khẩu vừa nhập

# include # include # define PASSWORD 123456 int main() { int in; do { printf("Nhap vao password: "); scanf("%d", &in); } while (in != PASSWORD); printf(“\nBan da nhap dung mat khau”); getch(); return 0; }

13/18 Lê Hoàng Sơn

Tóm tắt bài học

Cấu trúc rẽ nhánh: if và switch Cấu trúc lặp

 for  while  do .. while

14/18 Lê Hoàng Sơn

Câu hỏi thảo luận

15/18 Lê Hoàng Sơn

Nội dung chính

Cấu trúc rẽ nhánh

1

Cấu trúc lặp

2

Bài tập

3

16/18 Lê Hoàng Sơn

Bài tập

1. Nhập 2 số thực a, b từ bàn phím. Tìm và in ra

màn hình số lớn nhất và số bé nhất

2. Viết chương trình nhập vào tháng, in ra tháng đó

có bao nhiêu ngày

3. Viết chương trình tính n!. Với n nhập từ bàn phím 4. Viết chương trình nhập vào N số nguyên, đếm

xem có bao nhiêu số âm, bao nhiêu số dương và bao nhiêu số không

5. Viết chương trình tính tổng của n số đầu tiên của

dãy số sau:

S = 1+1/2+1/3+1/4+...+1/n

17/18 Lê Hoàng Sơn

Thuật toán sắp xếp

Khởi tạo

Thực hiện đổi chỗ

# include # include int main() { float max, min, tam; printf("Nhap vao so max, min: "); scanf("%f%f", &max, &min); if (max < min) { tam = max; max = min; min = tam; } printf("Max = %5.3f Min = %5.3f", max, min); getch(); return 0; }

18/18 Lê Hoàng Sơn

SWITCH .. CASE (2)

day = 30; break;

day = 31; break;

day = 28;

case 1: case 3: case 12: { } case 4: case 11: { } default: { }

 switch (month) { }

19/18 Lê Hoàng Sơn

Lê Hoàng Sơn

C l i c k t o e d i t c o m p a n y s l o g a n .

Lập trình tính toán khoa học kỹ thuật