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

Cú pháp:

if (<điềukiện>) <khốilệnh 1>

Nếu<điềukiện> đúng thì thựchiện<khốilệnh 1>

if (<điềukiện>) <khốilệnh 1> else <khốilệnh 2>

Nếu<điềukiện> đúng thì thựchiện<khốilệnh 1>

Ngượclạithựchiện<khốilệnh 2>

pdf6 trang | Chia sẻ: Mr Hưng | Ngày: 26/08/2016 | Lượt xem: 17 | Lượt tải: 0download
Nội dung tài liệu Ngôn ngữ lập trình C/C++ - Cấu trúc điều khiển, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
11 NGÔN NGỮ LẬP TRÌNH C/C++ Nguyễn Hải Châu Khoa Công nghệ thông tin Trường Đại học Công nghệ (Bài giảng tuần 3-4) 2 Nội dung zCác cấu trúc điều khiển rẽ nhánh và lặp zLàm một số bài tập trên lớp zKiểu dữ liệu mảng zXâu ký tự 3 Cấu trúc điều khiển 4 Câu lệnh rẽ nhánh ifelse z Cú pháp: if () Nếu đúng thì thực hiện if () else Nếu đúng thì thực hiện Ngược lại thực hiện 5 Ví dụ câu lệnh ifelse Ví dụ 1: if (delta == 0) printf(“Nghiem kep\n”); if (delta == 0) { x1 = x2 = nghiem; printf(“Nghiem kep\n”); } Ví dụ 2: if (delta < 0) printf(“Vo nghiem\n”); else if (delta == 0) printf(“Nghiem kep\n”); else printf(“Hai nghiệm\n”); 6 Câu lệnh lựa chọn switch zCâu lệnh ifelse cho ta 2 lựa chọn zKhi có nhiều lựa chọn: ifelse lồng nhau zC++ cung cấp câu lệnh khác để lựa chọn nhiều khả năng: switch 27 Câu lệnh lựa chọn switch: Cú pháp switch () { case : []; case : []; ...: ...............; case : []; [default: dãy lệnh n+1;] } 8 Ví dụ câu lệnh switch int th; cout > th ; switch (th) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: cout << "tháng này có 31 ngày" ; break ; case 2: cout << "tháng này có 28/29 ngày" ; break; case 4: case 6: case 9: case 11: cout << "tháng này có 30 ngày" ; break; default: cout << “Không có tháng này"; } 9 Câu lệnh nhảy goto zCú pháp: goto zNhãn là một tên gọi trong chương trình do người lập trình đặt tên zCách viết nhãn: label: zHạn chế dùng câu lệnh goto vì nếu lạm dụng câu lệnh này sẽ làm cho chương trình trở nên khó hiểu, dễ sinh lỗi 10 Ví dụ minh họa void main() { long m, n, kq = 0; // Các số cần nhân và kết quả kq cout > m >> n ; lap: // đây là nhãn để chương trình quay lại if (m%2) kq += n; // nếu m lẻ thì cộng thêm n vào kq m = m >> 1; // dịch m sang phải 1 bit tức m = m / 2 n = n << 1; // dịch m sang trái 1 bit tức m = m * 2 if (m) goto lap; // quay lại nếu m0 cout << “m nhân n =” << kq ; } 11 Lệnh lặp for z for (;<điều kiện lặp>;) { ;} zCác biểu thức trong các dãy biểu thức 1, 2 cách nhau bởi dấu phảy (,) zĐiều kiện lặp là biểu thức lôgic zHoạt động: Thực hiện zkiểm tra , nếu đúng thực hiện , thực hiện <dãy biểu thức 2>, quay lại kiểm tra .. 12 Ví dụ minh họa lệnh lặp for void main() { long m, n, kq; // Các số cần nhân và kết quả kq cout > m >> n ; for (kq = 0 ; m ; m >>= 1, n <<= 1) if (m%2) kq += n ; cout << “m nhân n =” << kq ; } 313 Ví dụ minh họa lệnh lặp for void main() { int i, kq = 0; for (i = 1 ; i <= 100 ; i ++) kq += i ; cout << "Tổng = " << kq; } 14 Lệnh lặp while z Cú pháp: while () { ; } z Hoạt động: Lặp lại trong khi đúng. z có thể không được thực hiện lần nào nếu sai. 15 Ví dụ lệnh lặp while void main() // Bài toán cổ 100 chân, 36 con vừa gà vừa chó { 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++; } } 16 Ví dụ lệnh lặp while void main() // Tìm UCLN theo thuật toán Euclide { int m, n, r; cout > m >> n ; if (m < n) { int t = m; m = n; n = t; }// nếu m<n đổi vai trò m,n while (m != n) { r = m - n ; if (r > n) m = r; else { m = n ; n = r ; } } cout << "UCLN = " << m ; } 17 Ví dụ lệnh lặp while z Tìm nghiệm xấp xỉ của phương trình ex - 1.5 = 0, trên đoạn [0, 1] với độ chính xác 10-6 bằng phương pháp chia đôi. void main() { float a = 0, b = 1, c; // các điểm mút a, b và điểm giữa c float fa, fc; // giá trị của f(x) tại các điểm a, c while (b-a > 1.0e-6) // trong khi độ dài đoạn còn lớn hơn e { c = (a + b)/2; // tìm điểm c giữa đoạn [a,b] fa = exp(a) - 1.5; fc = exp(c) - 1.5; // tính f(a) và f(c) if (fa*fc == 0) break; // f(c) = 0 tức c là nghiệm if (fa*fc > 0) a = c; else b = c; } cout << "Nghiem xap xi cua phuong trinh = " << c ; } 18 Lệnh lặp dowhile zCú pháp: do {} while () ; zHoạt động: Thực hiện trong khi đúng z được thực hiện ít nhất một lần 419 Ví dụ câu lệnh dowhile z Tính xấp xỉ số π theo công thức Euler với void main() { int n = 1; float S = 0; do S += 1.0/(n*n) while 1.0/(n*n) < 1.0e-6; float pi = sqrt(6*S); cout << "pi = " << pi ; } 2222 2 1 3 1 2 1 1 1 6 n ... ++++=π 62 101 −<n 20 Các lệnh break và continue zbreak dùng để thoát ra khỏi một khối lệnh (tức là tập các lệnh nằm trong {}) zcontinue dùng để quay lại đầu vòng lặp mà không cần thực hiện hết tất cả các lệnh trong khối lệnh lặp 21 Ví dụ lệnh continue // Tìm các số chính phương trong khoảng 1..100 int i ; for (i = 1; i <= 100; i++) { if (i là số chính phương) continue; { // dãy lệnh khác . . } } 22 So sánh cách dùng các câu lệnh lặp z for thường được sử dụng trong những vòng lặp mà số lần lặp được biết trước zNgược lại với for, while và dowhile thường dùng trong các vòng lặp mà số lần lặp không biết trước zNgược lại với for, while và dowhile thường dùng trong các vòng lặp mà số lần lặp không biết trước 23 Mảng (Bảng) và xâu ký tự 24 Mảng một chiều zMảng là một dãy các phần tử cùng kiểu được sắp kề nhau liên tục trong bộ nhớ zCác phần tử được đánh số thứ tự để phân biệt zNếu mảng có n phần tử thì các phần tử được đánh số từ 0 đến n-1 876543210 525 Khai báo mảng z [] ; // không khởi tạo z [] = { dãy giá trị } ; // có khởi tạo z [ ] = { dãy giá trị } ; // có khởi tạo 26 Ví dụ về khai báo mảng int a[10]; // Mảng 10 số nguyên không khởi tạo // Mảng 3 số thực độ chính xác kép có khởi tạo double b[3] = {1.0, 2.0, -3.4}; // Mảng 5 số thực độ chính xác đơn có khởi tạo float f[] = {0.2, 0.3, 0.0, -4.5, -2.1} 27 Ví dụ: Tính tổng, tích của hai phân số void main() { int a[2], b[2], tong[2], tich[2] ; cout > a[0] ; cout > a[1] ; cout > b[0] ; cout > b[1] ; tong[0] = a[0]*b[1] + a[1]*b[0] ; tong[1] = a[1] * b[1] ; tich[0] = a[0]*b[0]; tich[1] = a[1] * b[1] ; cout << "Tổng = " << tong[0] << '/' << tong[1] ; cout << "Tích = " << tich[0] << '/' << tich[1] ; } 28 Ví dụ: Tìm số bé nhất trong một dãy void main() { float a[100], i, n, min, k; // a chứa tối đa 100 số cout > n; for (i=0; i<n; i++) { cout > a[i]; } min = a[0]; k = 0; for (i=1; i<n; i++) if (a[i] < min ) { min = a[i]; k = i; } cout << "Số bé nhất là " << min << "tại vị trí " << k; } 29 Xâu ký tự zLà mảng có kiểu các phần tử là char zKhai báo: char [độ dài] ; // không khởi tạo char [độ dài] = ; // có khởi tạo char [] = xâu kí tự ; // có khởi tạo zCác xâu ký tự có ký tự kết thúc là ‘\0’ 30 Ví dụ khai báo xâu ký tự // Khai báo xâu độ dài 80, không khởi tạo char tenfile[80]; // Khai báo xâu độ dài 80, có khởi tạo char tenfile[80] = “autoexec.bat”; // Khai báo xâu có khởi tạo char tenfile = “config.sys”; 631 Một số hàm xử lý xâu ký tự (1) #include zstrcpy(s,t): gán nội dung của xâu t cho xâu s zstrncpy(s, t, n): Sao n ký tự đầu tiên của xâu t vào xâu s zstrcat(s, t): Nối xâu t vào xâu s zstrncat(s, t, n): Nối n ký tự đầu tiên của xâu t vào xâu s 32 Một số hàm xử lý xâu ký tự (2) zstrcmp(s, t): So sánh hai xâu s và t: {Nếu s < t thì trả lại kết quả âm {Nếu s == t hàm trả kết quả bằng 0 {Nếu s > t hàm trả kết quả dương zstrncmp(s, t, n): Giống strcmp nhưng chỉ thao tác với n ký tự đầu tiên của hai xâu zstrcmpi(s, t): Giống strcmp nhưng không phân biệt chữ hoa và chữ thường zstrlen(s): Trả lại độ dài của xâu s 33 Mảng hai chiều zKhai báo: [m][n]; zVí dụ: // Khai báo ma trận kích thước 10x20 double matran[10][20]; // Chỉ số hàng chạy từ 0..9 // Chỉ số cột chạy từ 0..19 34 Các vấn đề cần nhớ zCác câu lệnh rẽ nhánh và lặp zSự khác nhau giữa các câu lệnh if..else và switch zSự khác nhau giữa for, while và dowhile zCách sử dụng break và continue zMảng 1 chiều, 2 chiều zXâu ký tự, các hàm thư viện thao tác xâu ký tự 35 Bài tập z45 bài tập từ trang 78 đến trang 82 trong tập bài giảng zGiải các bài tập trên trong giờ thực hành

Các file đính kèm theo tài liệu này:

  • pdfthcs2_tuan3_4_2368.pdf