Ngôn ngữ lập trình C/C++ - Chương 2: Cấu trúc điều khiển

 Cấu trúc tuần tự  Cấu trúc lựa chọn  Cấu trúc lặp Cấu trúc điều khiển

pdf49 trang | Chia sẻ: thuychi16 | Lượt xem: 1091 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Ngôn ngữ lập trình C/C++ - Chương 2: Cấu trúc điều khiển, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Cấu trúc tuần tự Cấu trúc lựa chọn Cấu trúc lặp Cấu trúc điều khiển Các lệnh trong chương trình thực hiện tuần tự từ trên xuống. Cấu trúc tuần tự Lệnh 1 Lệnh 2 Lệnh 3 . . . 4void main() { int a, b, tong, hieu, tich; float thuong; printf(“Nhap vao a: “); scanf(“%d”,&a); printf("Nhap vao b: “); scanf(“%d”,&b); tong = a + b; hieu = a - b; tich = a * b; thuong = (float)a / b; //Ép kiểu printf("Tong=%d ",tong); printf(“\nHieu=%d“,hieu); printf(“\nTich=%d“,tich); printf(“\nThuong= %f“,thuong); } Ví dụ Bắt đầu Kết thúc Cấu trúc lựa chọn cho phép máy tính chọn thực hiện một khối lệnh nào đó dựa vào kết quả của biểu thức điều kiện. Có hai dạng:  If  If Else Cấu trúc lựa chọn Cấu trúc If Cấu trúc lựa chọn if (biểu thức điều kiện) { ; } Nếu biểu thức điều kiện cho kết quả true thì thực hiện khối lệnh bên trong if. Ví dụ: Viết chương trình nhập vào một số nguyên từ 1 đến 10, nếu nhập sai thì hiển thị thông báo void main() { int k; printf(“Nhap mot so [1..10]: “); scanf(“%d”,&k); if (k 10) { printf("So vua nhap khong hop le“); } } Cấu trúc If Else Cấu trúc lựa chọn if (biểu thức điều kiện) { ; } else { ; } Nếu biểu thức điều kiện cho kết quả true thì thực hiện khối lệnh 1, ngược lại thi ̀ thực hiện khối lệnh 2 Ví dụ: Nhập vào số nguyên a và b, nếu a là bội số của b thì in thông báo “a là bội số của b”, ngược lại in “a không là bội số của b” printf(“Nhap vao a: “); scanf(“%d”,&a); printf(“Nhap vao b: “); scanf(“%d”,&)b; { printf(“a la boi so cua b“); } else { printf(“a khong la boi so cua b“); } if(a%b==0) Begin End Lưu đồ thuật toán Chương trình cài đặt: void main() { int a, b; printf("Nhap so a:"); scanf("%d",&a); printf("Nhap so b:"); scanf("%d",&b); if(a%b==0) printf("%d la boi so cua %d",a,b); else printf("%d khong la boi so cua %d",a,b); } Ví dụ: Giải và biện luận phương trình phương trình bậc1 ax+b=0 Begin End Lưu đồ thuật toán void main() { float a, b; printf("Nhap so a:"); scanf("%f",&a); printf("Nhap so b:"); scanf("%f",&b); if (a==0) if (b==0) printf("Phuong trinh vo so nghiem"); else printf("Phuong trinh vo nghiem"); else printf("Phuong trinh co nghiem x = %.2f",-b/a); } Cài đặt 1. Cho biết kết quả của chương trình sau: Bài tập 1 int a=9, b=6; a++; a=a+b--; a=a+(--b); if(a%2==0) printf(“Gia tri cua a la chan”); printf(“Tong cua a va b la: %d“,a + b); 2. Cho biết kết quả của chương trình sau: int a=7, b=8; a++; a=a+b--; --b; a--; a = (--a)+(--b); if(a%2 != 0) printf(“a la so le”); else printf(“a la so chan”; Printf(“Gia tri cua a: %d“, a); Bài tập 2: Viết chương trình 1. Nhập từ bàn phím hai số nguyên a, b. In ra màn hình giá trị số lớn nhất. 2. Nhập từ bàn phím ba số nguyên a, b, c. In ra màn hình số lớn nhất. 3. Nhập từ bàn phím ba số nguyên a, b, c. Hãy in ra màn hình theo thứ tự tăng dần. (Chỉ được dùng thêm hai biến phu ̣). 4. Viết chương trình nhập vào một số nguyên n gồm ba chữ sô ́. Xuất ra màn hình vị trí của chữ số lớn nhất Ví dụ: n=291. Chữ số lớn nhất nằm ở hàng chục (chữ số 9). 5. Viết chương trình nhập vào số nguyên n gồm ba chữ số. Xuất ra màn hình theo thứ tự tăng dần của các chữ số. Ví dụ: n=291. Xuất ra 129. 6. Viết chương trình tính diện tích và chu vi các hình: tam giác, hình vuông, hình chữ nhật và hình tròn với những thông tin cần được nhập từ bàn phím Bài tập 2: Viết chương trình 1. Nhập vào ngày, tháng, năm. Kiểm tra xem ngày, tháng, năm đó có hợp lê ̣ hay không? In kết quả ra màn hình. 2. Nhập vào giờ, phút, giây. Kiểm tra xem giờ, phút, giây đó có hợp lê ̣ hay không? In kết quả ra màn hình. 3. Viết chương trình nhập vào ngày, tháng, năm hợp lê ̣. Cho biết năm này có phải là năm nhuận hay không? In kết quả ra màn hình. 4. Nhập vào 3 số nguyên dương. Kiểm tra xem 3 số đó có lập thành tam giác không? Nếu có hãy cho biết tam giác đó thuộc loại nào Bài tập 3* switch (biểu thức)  case n1: các câu lệnh ; break ; case n2: các câu lệnh ; break ; case nk: ; break ; [default: các câu lệnh]  Giá trị biểu thức = n1 Giá trị biểu thức = n2 Các trường hợp còn lại • Cấu trúc switch Cấu trúc switch  ni là các hằng số nguyên hoặc ký tự.  ni phụ thuộc vào giá trị của biểu thức sau switch  Nếu: giá trị của biểu thức = ni thì thực hiện câu lệnh sau case ni.  Nếu gia ́ trị biểu thức không thỏa các ni thi ̀ thực hiện câu lệnh sau default nếu có, hoặc thoát khỏi câu lệnh switch.  Mặc định chương trình thực hiện tuần tự các câu lệnh của các case ni, do đó sau mỗi case phải dùng lệnh break để thoát khỏi switch. 22 Ví dụ: Nhập vào số nguyên n có giá trị từ 1 đến 12. In ra màn hình tháng tương ứng, nếu n có giá trị 12 thì in ra chuỗi “tháng không hợp lệ”. void main() { int n; printf(“Nhap vao n (1<=n<=12): “); scanf(“%d”, &n); switch (n) { case 1: ptintf(“thang mot”); break; case 2: ptintf(“thang hai“); break; case 3: printf(“thang ba”); break; case 12: printf(“thang 12”); break; default : printf(“thang khong hop le“); } } 1. Viết chương trình nhập vào 1 số nguyên dương gồm 2 chữ số, in ra cách đọc của số này 2. Viết chương trình nhập vào ngày tháng năm, kiểm tra xem ngày tháng năm có hợp lệ không? In kết quả kiểm tra ra màn hình Bài tập Tổng quát Cấu trúc lặp Lệnh / Khối lệnh Điều kiện lặp Yes No Cấu trúc lặp For Khởi gán Điều kiện lặp Lệnh / Khối lệnh Cập nhật vòng lặp Yes for ( ; ; ) { ; } Cấu trúc For  Khởi gán: khởi gán giá trị ban đầu cho biến điều khiển vòng lặp  Điều kiện lặp: kiểm tra điều kiện thực hiện vòng lặp  Cập nhật: cập nhật giá trị của biến điều khiển vòng lặp Bất kỳ đối số nào trong câu lệnh for đều có thể thiếu nhưng phải có dấu chấm phẩy (;) để phân cách. Cấu trúc lặp For Các bước thực hiện vòng lặp for  Bước 1: Khởi gán  Bước 2: Kiểm tra điều kiện  Nếu giá trị của biểu thức điều kiện bằng true thi ̀  Thực hiện các lệnh của vòng lặp  Cập nhật biến điều khiển vòng lặp. Quay trở lại bước 2.  Ngược lại thoát khỏi lặp. Cấu trúc lặp For  Ví dụ: viết chương trình in ra bảng cửu chương n, với n là số nguyên dương nhập từ bàn phím. Chương trình  Ví dụ: viết chương trình nhập số n nguyên dương từ bàn phím. Tính tổng các số từ 1 đến n S = 0 i = 1 i <= n S = S + i Yes n i = i + 1 “Tổng = “ S Bắt đầu Kết thúc Chương trình  Lưu ý: Cách hoạt động của while giống for Cấu trúc lặp - While while ()  lệnh/ khối lệnh;   Ví dụ: viết chương trình nhập số n nguyên dương từ bàn phím. Tính tổng các số từ 1 đến n Cấu trúc lặp Do While do { ; ; } while (điều kiện); • Thực hiện lệnh trước, sau đó kiểm tra điều kiện • Lệnh được thực hiện đến khi biểu thức có giá trị sai Khởi gán Điều kiện lặp Lệnh / Khối lệnh Cập nhật vòng lặp Yessai đúng  Ví dụ: nhập các số nguyên dương có giá trị <=10, xuất ra tổng các số hợp lệ.  Cấu trúc For và While: kiểm tra điều kiện trước khi thực hiện lệnh lặp, do đó các lệnh lặp có thể không thực hiện lần nào.  Cấu trúc do while: thực hiện lệnh trước, kiểm tra điều kiện sau, do đó các lệnh có thể được thực hiện ít nhất là 1 lần. Nhận xét break: thoát khỏi cấu trúc lệnh switch, while, for, dowhile đang chứa nó.  return: thoát khỏi chương trình đồng thời cũng thoát khỏi các vòng lặp và trả về kết quả. Lệnh break và return Lệnh continue được sử dụng trong các vòng lặp while, for, dowhile. Khi kệnh continue được gọi thì chương trình sẽ kết thúc vòng lặp hiện tại và bắt đầu vòng lặp mới tiếp theo. Lệnh continue  Ví dụ: Cho phép người dùng nhập liên tục số nguyên dương, nếu nhập số nguyên âm thì dừng Ví dụ: In ra màn hình giá trị từ 10 đến 20 trừ đi số 13 và số 17. Bài tập: Xác định kết quả của các chương trình sau int a=18; for(int i = 1; i <= a; i++) if(a%i == 0) printf(“%d\t”,i); 1. for(int i = 0; i < 5; i++) { for(int j = 0; j <= i; j++) printf(“%d\t”,j); printf(“\n”); } 2. Bài tập: Xác định kết quả của các chương trình sau int i = 10, s = 0; while(i > 0) { if(i%2 == 0) s+=i; else if(i > 5) s+=2*i; i--; } printf(“s = %d”,s); 3. Bài tập: Xác định kết quả của các chương trình sau int a = 18, i = 1; do{ if(a%i == 0) printf(“%d\t”,i); i++; } while(i <= a); 4. Bài tập: Xác định kết quả của các chương trình sau int a = 11, b = 16, i = a; while( i < b ) { if(i%2 == 0) { printf(“%d\t”,i); break; } i++; } 5. Bài tập: Xác định kết quả của các chương trình sau int a = 10, s = 0, i = 0; while( i < a ) { i++; if (i % 2 == 0) continue; s=s+i; } printf(“Tong = %d" ,s); 6. Bài tập: Xác định kết quả của các chương trình sau int i = 1, s = 0; while(true) { s = s + i++; if (i % 2) i = i + 2; else i = i + 1; if (i > 20) break; } printf(“Tong = %d" ,s); 7. Bài tập: Xác định kết quả của các chương trình sau int i = 1, s = 0; while(true) { s = s + i++; if (i % 2) i = i + 2; else i = i + 1; if (i > 20) break; } printf(“Tong = %d" ,s); 7. 1. Viết chương trình nhập số nguyên dương n. Liệt kê n số nguyên tô ́ đầu tiên. 2. Viết chương trình nhập vào hai sô ́ nguyên dương a va ̀ b. Tìm ước sô ́ chung lớn nhất va ̀ bội sô ́ chung nho ̉ nhất của a va ̀ b. 3. Viết chương trình nhập vào một sô ́ nguyên n gồm tối đa 10 chữ sô ́ (4 bytes). In ra màn hình giá trị nhị phân của sô ́ trên. (Hướng dẫn: chia lấy dư cho 2 va ̀ xuất theo thứ tự ngược lại). 4. Viết chương trình đếm sô ́ ước sô ́ của sô ́ nguyên dương N. Ví dụ: N=12 sô ́ ước sô ́ của 12 là 6 Bài tập viết chương trình 5. Một sô ́ hoàn thiện là một sô ́ có tổng các ước số của nó (không kê ̉ nó) bằng chính nó. Hãy liệt kê các số hoàn thiện nho ̉ hơn 30000. Ví dụ: sô ́ 6 là sô ́ hòan thiện vì tổng các ước sô ́ là 1+2+3 = 6. 6. Nhập vào ngày, tháng, năm. Cho biết đó là ngày thứ mấy trong năm. Bài tập viết chương trình