Bài giảng Kỹ thuật lập trình - Bài 3: Câu lệnh và biểu thức - Đào Trung Kiên

pdf 22 trang ngocly 3260
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kỹ thuật lập trình - Bài 3: Câu lệnh và biểu thức - Đào Trung Kiên", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfbai_giang_ky_thuat_lap_trinh_bai_3_cau_lenh_va_bieu_thuc_dao.pdf

Nội dung text: Bài giảng Kỹ thuật lập trình - Bài 3: Câu lệnh và biểu thức - Đào Trung Kiên

  1. Bài 3: Câu lệnh và biểu thức 1 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  2. Câu lệnh (statements) 2 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  3. Khái niệm  Câu lệnh được dùng để thực hiện một nhiệm vụ trong chương trình: gán, tính toán, đọc/ghi dữ liệu, gọi hàm,  Phân loại:  Câu lệnh đơn  printf("Xin chao!");  x = PI*R*R;  Khối lệnh trong dấu { }  Các lệnh rẽ nhánh và điều kiện: for, if, while, switch,  Đặc biệt: câu lệnh trống, câu lệnh biểu thức, tạo nhãn, return, 3 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  4. Câu lệnh if  Rẽ nhánh theo điều kiện  Cú pháp:  if ( ) [else ]  Ví dụ:  if (x != 0.) printf("Nghich dao = %f",1/x); else printf("Khong co gia tri nghich dao");  if (score > current_record) NewRecord(score); 4 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  5. Câu lệnh if lồng nhau  Câu lệnh if thường được dùng lồng nhau để kiểm tra nhiều điều kiện khác nhau  Ví dụ:  if (diem >= 8.) printf("Xep loai gioi"); else if (diem >= 7.) printf("Xep loai kha"); else if (diem >= 5.) printf("Xep loai trung binh"); else printf("Khong dat"); 5 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  6. Biểu thức logic  Là biểu thức chứa các toán tử logic, biến/hằng logic  Trả về kết quả 1 (true) hoặc 0 (false)  Trong C, kiểu int có thể được ngầm hiểu là kiểu logic với việc chuyển đổi: 0 false, khác 0 true  Hệ quả: so sánh một số nguyên với 0 có thể bỏ qua trong trong các biểu thức logic:  if (x != 0) if (x)  Ví dụ:  8*4 >= 10  x != y  b*b > 4*a*c  (a>2) && ((b 4)))  2-3 /* được ngầm chuyển thành true */ 6 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  7. Câu lệnh switch  Rẽ nhiều nhánh theo điều kiện  Cú pháp:  switch ( ) { case : case : [default: ] }  Tuỳ giá trị của biểu thức phân nhánh bằng giá trị của trường hợp nào, sẽ nhảy tới chạy các câu lệnh ở trường hợp đó  default là trường hợp còn lại nếu không trường hợp nào thoả mãn  Các câu lệnh thực hiện xong sẽ chạy tiếp case tiếp theo dùng break để ngắt nếu không muốn  Chỉ dùng điều kiện được với các kiểu tương đương số nguyên (char, int, enum, ) và các giá trị phải là hằng 7 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  8. Câu lệnh switch (tiếp)  switch (x) { case 0: printf("x is 0"); break; case 1: printf("x is 1"); break; default: printf("x is something else"); }  switch (day) { case Thu7: case ChuNhat: printf("Duoc nghi"); break; default: printf("Di lam"); } 8 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  9. Vòng lặp do và while  Lặp đi lặp lại việc thực hiện một câu lệnh  Cú pháp:  while( ) Kiểm tra điều kiện trước khi thực hiện mỗi lần lặp  do while( ); Kiểm tra điều kiện sau khi thực hiện mỗi lần lặp  Ví dụ:  x = 0; do printf("%d ", x++); while (x < 10);  x = 0; while (x < 10) printf("%d ", x++); Kết quả chạy: 0 1 2 3 4 5 6 7 8 9 9 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  10. Vòng lặp for  Rất phổ biến trong C vì cú pháp ngắn gọn và linh hoạt  Cú pháp:  for ( ; ; )  Mỗi câu lệnh đều có thể được để trống nếu không dùng  Điều kiện được kiểm tra trước  Ví dụ:  for (x = 0; x < 10; x++) printf("%d ", x); Kết quả chạy: 0 1 2 3 4 5 6 7 8 9  for (i = 0; i < N; i++) for (j = 0; j < M; j++) a[i][j] = i + j; 10 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  11. break và continue  break dùng để ngắt giữa chừng một vòng lặp mà không cần kiểm tra điều kiện  for (x = 1; x <= 10; x++) { if (x == 8) break; printf ("%d ", x); }  continue dùng để kết thúc lần lặp đang chạy và nhảy sang lần lặp mới  for (x = 1; x <= 10; x++) { if (x == 8) continue; printf ("%d ", x); } 11 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  12. Khối lệnh  Gộp các lệnh đơn lại bằng { }  Thường được dùng với các câu lệnh rẽ nhánh/lặp  Ví dụ:  if (delta > 0) { d = sqrt(delta); x1 = (-b+d)/2.; x2 = (-b-d)/2.; printf("x1 = %.3f, x2 = %.3f", x1, x2); }  tong_le = 0; tong = 0; for (i = 0; i < N; i++) { if (i%2 == 1) tong_le += a[i]; tong += a[i]; } 12 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  13. Câu lệnh rỗng (null statement)  Không có gì, chỉ dùng “;” để kết thúc  Câu lệnh rỗng không thực hiện gì, không gây ra hiệu ứng gì và không mất thời gian chạy của máy  Đôi khi cần dùng để kết thúc câu lệnh một cách hợp lệ: vòng lặp, điều kiện, nhãn,  Ví dụ:  for (i=0; i<N; a[i]=b[i++]) ;  for (i=0; i<10; printf("%d ",i++)) ;  if (x==y) ; else x=y; 13 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  14. Câu lệnh goto và nhãn  Nhãn: dùng để đánh dấu một vị trí trong mã nguồn  Câu lệnh goto: nhảy tới vị trí của nhãn và chạy tiếp  printf("Nhap ngay: "); scanf("%d", &ngay); if (ngay 31) goto error; printf("Nhap thang: "); scanf("%d", &thang); if (thang 12) goto error; /* */ error: printf("Loi nhap du lieu!");  Sau nhãn phải có ít nhất một câu lệnh (có thể dùng câu lệnh rỗng nếu cần)  Lệnh goto phá vỡ tính cấu trúc, nên hạn chế sử dụng 14 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  15. Biểu thức (expressions) 15 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  16. Khái niệm  Một biểu thức có chứa ít nhất một toán hạng và 0 hoặc nhiều toán tử  Toán hạng có thể là: giá trị hằng, hằng, biến, kết quả của một hàm hay biểu thức con  Các toán tử có độ ưu tiên khác nhau, nhưng có thể bị thay đổi bằng cách dùng ngoặc ( )  Các toán tử có cùng độ ưu tiên được thực hiện tử trái sang phải: sin(x) + cos(x) hàm sin(x) được gọi trước cos(x)  Ví dụ:  47  i  x++  sin(x+2)  ( 2 * log( ( 3 + 10 ) - ( 2 * 6 ) ) ) 16 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  17. Toán tử số học  Cơ bản: a+b a-b a*b a/b  Nhân/chia ưu tiên cao hơn cộng/trừ: 2+3*4+1  Phép toán giữa 2 số nguyên kết quả là số nguyên  Phép toán có ít nhất 1 số thực kết quả là số thực  Modulo (chia lấy số dư): a%b  Tăng, giảm 1 đơn vị: a++ a ++a a  Toán hạng phải là một biến kiểu số nguyên  a++ và a thực hiện phép tính với giá trị của a rồi mới tăng/giảm giá trị của a, trong khi ++a và a thì ngược lại  a++ * 2  ++a * 2  a++ + a++ /* nên tránh dùng */ 17 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  18. Toán tử logic và so sánh  Logic:  and: A && B  or: A || B  not: !A  So sánh:  x == y  x != y  x > y  x = y  x <= y 18 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  19. Toán tử bit  Bao gồm:  and: a & b  or: a | b  xor: a ^ b  not: ~a  Dịch trái, phải: a >b  Chỉ áp dụng với kiểu số nguyên  Chú ý tránh nhầm lẫn với các toán tử logic 19 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  20. Toán tử gán  Cơ bản: a = b  Các toán tử gộp: Toán tử gán Tương đương Toán tử gán Tương đương a += b a = a + b a &= b a = a & b a -= b a = a – b a |= b a = a | b a *= b a = a * b a ^= b a = a ^ b a /= b a = a / b a >= b a = a >> b  Toán tử gán có trả về giá trị đúng bằng giá trị được gán  x = y = 15;  if ((c = getchar()) == 'y' || c == 'n') { }  if (a = b) { } /* vẫn dịch được dù viết nhầm */ 20 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  21. Các toán tử đặc biệt khác  Cộng, trừ đơn hạng: +a, -a  sizeof: trả về kích thước của kiểu/biến/hằng  Toán tử ngoặc (): (a+b)*c  Toán tử phảy “,”: không làm gì, chỉ bỏ qua giá trị thứ nhất  x++, y = x*2;  for (i=2, j=3, x=1; i tuoi  Ép kiểu: (int)a  Gọi hàm (): sin(x), pow(x, 3)  Điều kiện: ? :  biggest = a > b ? a : b; 21 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội
  22. Bài tập 1. Nhập các hệ số a, b, c và giải phương trình bậc 2 2. Tính tổng nghịch đảo các số chẵn từ 2 tới 100: 1/2+1/4+1/6+ +1/100 3. Nhập một dãy số và tính giá trị trung bình 4. Viết lại câu lệnh sau dùng while for (A; B; C) do_something(); 5. In ra màn hình một menu và đọc lựa chọn của người dùng bằng 2 cách: dùng lệnh rẽ nhánh hoặc dùng mảng 6. Tính quãng đường đi được của một vật rơi tự do tại các thời điểm t = 1, 2, 3, , 20s 7. Vẫn bài toán trên, nhập thêm độ cao ban đầu, chỉ tính tới thời điểm mà vật chạm đất 22 EE3490: Kỹ thuật lập trình – HK1 2017/2018 TS. Đào Trung Kiên – ĐH Bách khoa Hà Nội