Tiếp nội dung phần 1, Bài giảng Nhập môn lập trình: Phần 2 cung cấp cho người học những kiến thức như: Các cấu trúc điều khiển; hàm và truyền tham số; các kiểu dữ liệu có cấu trúc; tập tin. Mời các bạn cùng tham khảo!
CHƯƠNG CÁC CẤU TRÚC ĐIỀU KHIỂN Một chương trình bao gồm nhiều câu lệnh Thông thường câu lệnh thực cách theo thứ tự mà chúng viết Các cấu trúc điều khiển cho phép thay đổi trật tự nói trên, máy nhảy thực câu lệnh khác ví trí trước sau câu lệnh thời Xét mặt cơng dụng, chia cấu trúc điều khiển thành nhóm chính: Nhảy khơng có điều kiện Rẽ nhánh Tổ chức chu trình Ngồi cịn số tốn tử khác có chức bổ trợ break, continue 3.1 Cấu trúc rẽ nhánh 3.1.1 Cấu trúc if-else Toán tử if cho phép lựa chọn chạy theo hai nhánh tuỳ thuộc vào không khác không biểu thức Nó có hai cách viết sau: if (biểu thức) if (biểu thức) khối lệnh 1; /* Dạng */ khối lệnh 1; else khối lệnh ; /* Dạng hai */ Hoạt động biểu thức dạng 1: Máy tính giá trị biểu thức Nếu biểu thức (biểu thức có giá trị khác 0) máy thực khối lệnh sau thực lệnh tiếp sau lệnh if chương trình Nếu biểu thức sai (biểu thức có giá trị 0) máy bỏ qua khối lệnh mà thực lệnh tiếp sau lệnh if chương trình 43 Hoạt động biểu thức dạng 2: Máy tính giá trị biểu thức Nếu biểu thức (biểu thức có giá trị khác 0) máy thực khối lệnh sau thực lệnh tiếp sau khối lệnh chương trình Nếu biểu thức sai (biểu thức có giá trị 0) máy bỏ qua khối lệnh mà thực khối lệnh sau thực tiếp lệnh tiếp sau khối lệnh chương trình Ví dụ 3.1: Chương trình nhập vào hai số a b, tìm max hai số in kết lên hình Chương trình viết hai cách sau: Cách 1: #include int main() { float a, b, max; printf("\n Cho a = "); scanf("%f", &a); printf("\n Cho b = "); scanf("%f", &b); max = a; if (b>max) max = b; printf(" \n Max cua hai so a = %8.2f Max = %8.2f", a, b, max); } Cách 2: #include int main() { float a, b, max; printf("\n Cho a = "); 44 va b = %8.2f la scanf("%f", &a); printf("\n Cho b = "); scanf("%f", &b); if (a>b) max = a; else max = b; printf(" \n Max cua hai so a = %8.2f va b = %8.2f la Max = %8.2f", a, b, max); } Sự lồng toán tử if: C cho phép sử dụng toán tử if lồng có nghĩa khối lệnh (1 2) chứa toán tử if - else khác Trong trường hợp này, khơng sử dụng dấu đóng mở ngoặc cho khối nhầm lẫn if-else Chú ý máy gắn toán tử else với tốn tử if khơng có else gần Chẳng hạn đoạn chương trình ví dụ sau: if (n>0) // if thứ if (a>b) // if thứ hai z = a; else z = b; else với if thứ hai Đoạn chương trình tương đương với: if (n>0) //if thứ { if (a>b) // if thứ hai z = a; else z = b; 45 } Trường hợp ta muốn else với if thứ ta viết sau: if (n>0) // if thứ { if (a>b) // if thứ hai z = a; } else z = b; 3.1.2 Cấu trúc switch: Là cấu trúc tạo nhiều nhánh đặc biệt Nó vào giá trị biểu thức nguyên để để chọn nhiều cách nhảy Cấu trúc tổng quát là: switch (biểu thức nguyên) { case n1 khối lệnh case n2 khối lệnh case nk khối lệnh k [ default khối lệnh k+1 ] } Với ni số nguyên, ký tự biểu thức Các ni cần có giá trị khác Đoạn chương trình nằm dấu { } gọi thân toán tử switch default thành phần không bắt buộc phải có thân switch 46 Sự hoạt động toán tử switch phụ thuộc vào giá trị biểu thức viết dấu ngoặc () sau: Khi giá trị biểu thức ni, máy nhảy tới câu lệnh có nhãn case ni Khi giá trị biểu thức khác tất ni cách làm việc máy lại phụ thuộc vào có mặt hay khơng lệnh default sau: Khi có default máy nhảy tới câu lệnh sau nhãn default Khi khơng có default máy nhảy khỏi cấu trúc switch Chú ý: Máy nhảy khỏi tốn tử switch gặp câu lệnh break dấu ngoặc nhọn đóng cuối thân switch Ta dùng câu lệnh goto thân toán tử switch để nhảy tới câu lệnh bên ngồi switch Khi tốn tử switch nằm thân hàm ta sử dụng câu lệnh return thân switch để khỏi hàm (lệnh return đề cập sau) Khi máy nhảy tới câu lệnh hoạt động phụ thuộc vào câu lệnh đứng sau câu lệnh Như máy nhảy tới câu lệnh có nhãn case ni thực tất câu lệnh sau gặp câu lệnh break, goto return Nói cách khác, máy từ nhóm lệnh thuộc case ni sang nhóm lệnh thuộc case thứ ni+1 Nếu nhóm lệnh kết thúc break tốn tử switch thực nhóm lệnh Ví dụ 3.2: Lập chương trình phân loại học sinh theo điểm sử dụng cấu trúc switch: #include int main() { int diem; printf("\nVao du lieu:"); printf("\n Diem = "); 47 scanf("%d", &diem); switch (diem) { case 0: case 1: case 2: case 3: printf("Kem\n"); break; case 4: printf("Yeu\n"); break; case 5: case 6: printf("Trung binh\n"); break; case 7: case 8: printf("Kha\n"); break; case 9: case 10: printf("Gioi\n"); break; default: printf("Vao sai\n"); } } 3.2 Cấu trúc lặp 3.2.1 Cấu trúc lặp for Toán tử for dùng để xây dựng cấu trúc lặp có dạng sau: 48 for (biểu thức 1; biểu thức 2; biểu thức 3) Lệnh khối lệnh ; Toán tử for gồm ba biểu thức thân for Thân for câu lệnh khối lệnh viết sau từ khoá for Bất kỳ biểu thức ba biểu thức vắng mặt phải giữ dấu ; Thông thường biểu thức toán tử gán để tạo giá trị ban đầu cho biến điều khiển, biểu thức quan hệ logic biểu thị điều kiện để tiếp tục chu trình, biểu thức ba tốn tử gán dùng để thay đổi giá trị biến điều khiển Hoạt động toán tử for: Toán tử for hoạt động theo bước sau: Xác định biểu thức Xác định biểu thức Tuỳ thuộc vào tính sai biểu thức để máy lựa chọn hai nhánh: - Nếu biểu thức hai có giá trị (sai), máy khỏi for chuyển tới câu lệnh sau thân for - Nếu biểu thức hai có giá trị khác (đúng), máy thực câu lệnh thân for - Tính biểu thức 3, sau quay lại bước để bắt đầu vịng chu trình Chú ý: Nếu biểu thức vắng mặt ln xem Trong trường hợp việc khỏi chu trình for cần phải thực nhờ lệnh break, goto return viết thân chu trình Trong dấu ngoặc trịn sau từ khố for gồm ba biểu thức phân cách dấu ; Trong biểu thức khơng viết biểu thức mà có quyền viết dãy biểu thức phân cách dấu phảy Khi biểu thức phần xác định từ trái sang phải Tính sai dãy biểu thức tính tính sai biểu thức cuối dãy 49 Trong thân for ta dùng thêm tốn tử for khác, ta xây dựng toán tử for lồng Khi gặp câu lệnh break thân for, máy khỏi toán tử for sâu chứa câu lệnh Trong thân for sử dụng tốn tử goto để nhảy đến ví trí mong muốn Ví dụ 3.3: Nhập dãy số đảo ngược thứ tự #include float x[] = {1.3, 2.5, 7.98, 56.9, 7.23}; int n = sizeof(x)/sizeof(float); int main() { int i, j; float c; for (i = 0, j = n-1; i