Bài giảng Hệ thống máy tính và ngôn ngữ lập trình - Chương 7: Các thành phần cơ bản và các kiểu dữ liệu của C - Nguyễn Phúc Khải

Danh hiệu
 Các kiểu dữ liệu chuẩn của C
 Hằng (constant)
 Biến (variable)
 Biểu thức
 Các phép toán của C
 Cấu trúc tổng quát của một chương trình C
 Bài tập cuối chương 
pdf 100 trang xuanthi 29/12/2022 2580
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ thống máy tính và ngôn ngữ lập trình - Chương 7: Các thành phần cơ bản và các kiểu dữ liệu của C - Nguyễn Phúc Khải", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfbai_giang_he_thong_may_tinh_va_ngon_ngu_lap_trinh_chuong_7_c.pdf

Nội dung text: Bài giảng Hệ thống máy tính và ngôn ngữ lập trình - Chương 7: Các thành phần cơ bản và các kiểu dữ liệu của C - Nguyễn Phúc Khải

  1. Các nội dung: . Danh hiệu . Các kiểu dữ liệu chuẩn của C . Hằng (constant) . Biến (variable) . Biểu thức . Các phép toán của C . Cấu trúc tổng quát của một chương trình C . Bài tập cuối chương © TS. Nguyễn Phúc Khải 2
  2. DANH HIỆU . Ký hiệu (symbol) là các dấu đã được C quy định để biểu diễn cho một thao tác nào đó. . Nếu dùng một dấu để biểu diễn cho một thao tác thì ta có ký hiệu đơn (single symbol).  Ví dụ: +, -, *, /, %, =, >, =, <=, /*, */, ++, , &&, ||, © TS. Nguyễn Phúc Khải 4
  3. DANH HIỆU . Danh hiệu là tên của các hằng, biến, hàm . Nếu các hằng, biến, hàm này do C đã khai báo và thiết kế sẵn thì các danh hiệu có được gọi là các danh hiệu chuẩn.  Ví dụ: main, scanf, printf . Nếu các hằng, biến, hàm này do lập trình viên khai báo và định nghĩa trong quá trình thiết kế chương trình thì các danh hiệu đó được gọi là các danh hiệu không chuẩn.  Ví dụ: a, b, delta © TS. Nguyễn Phúc Khải 6
  4. DANH HIỆU . Nguyên tắc đặt tên của danh hiệu không chuẩn cũng cần phải được nêu cụ thể:  Danh hiệu không chuẩn không trùng với từ khóa  Danh hiệu không chuẩn không trùng với danh hiệu chuẩn © TS. Nguyễn Phúc Khải 8
  5. DANH HIỆU . Ví dụ:  Main ?  -batdau ?  _batdau ?  2thang9 ?  ket thuc ? © TS. Nguyễn Phúc Khải 10
  6. DANH HIỆU . Ví dụ: ket_thuc_vong_lap_in_ra_ky_tu_khoang_trang ket_thuc_vong_lap_in_ra_k © TS. Nguyễn Phúc Khải 12
  7. CÁC KIỂU DỮ LIỆU CỦA C . Kiểu char . char là kiểu nguyên một byte, kiểu này có thể được sử dụng để khai báo biến và có thể giữ một ký tự hoặc một giá trị 8 bit. . Mỗi bộ dịch C sẽ có quy định khác nhau về tầm trị của kiểu char, đối với bộ dịch TURBO C VERSION 2.0 kiểu char là kiểu có dấu. © TS. Nguyễn Phúc Khải 14
  8. CÁC KIỂU DỮ LIỆU CỦA C . Kiểu int là một kiểu số nguyên, biến đó có kích thước trong bộ nhớ là kích thước của số nguyên mà máy quy định . Đối với bộ dịch Borland C/C++ thì chiều dài của kiểu int là 16 bit có dấu, tầm trị biểu diễn từ –32768 đến 32767 (tức từ –215 đến 215 – 1). © TS. Nguyễn Phúc Khải 16
  9. CÁC KIỂU DỮ LIỆU CỦA C . Kiểu float và double . float là kiểu số thực dấu chấm động, có độ chính xác đơn (7 ký số sau dấu chấm thập phân), double là kiểu số thực, dấu chấm động, có độ chính xác kép (15 ký số sau dấu chấm thập phân). . double còn có thể được khai báo là long float, do đó khi khai báo double b; thì cũng hoàn toàn tương đương với long float b; © TS. Nguyễn Phúc Khải 18
  10. CÁC KIỂU DỮ LIỆU CỦA C . Ví dụ: #include #include #include main() { double x, y, luy_thua; clrscr(); printf ("Moi nhap 2 so:"); scanf ("%lf %lf“, &x, &y); if (x < 0 && (y - (int)y != 0)) printf ("Ban da nhap sai tri"); else { luy_thua = pow (x, y); printf ("Luy thua cua %5.2lf voi %5. 2lf la %5.2lf", x, y, luy_thua); } } © TS. Nguyễn Phúc Khải 20
  11. CÁC KIỂU DỮ LIỆU CỦA C . Để bổ sung cho bốn kiểu dữ liệu cơ bản C còn đưa ra các dạng bổ sung signed, unsigned, short, long :  signed xác định kiểu có dấu.  unsigned xác định kiểu không dấu.  short xác định kiểu ngắn của kiểu cơ bản.  long xác định kiểu dài của kiểu cơ bản. © TS. Nguyễn Phúc Khải 22
  12. CÁC KIỂU DỮ LIỆU CỦA C . Chú ý rằng trong bộ nhớ máy tính, các giá trị đều được lưu trữ dưới dạng mã nhị phân có nhiều bit (8, 16 hoặc 32 bit), trong đó số thứ tự của các bit được đánh số từ phải sang trái bắt đầu từ 0, số hiệu này được gọi là vị trí của bit. . Mỗi bit như vậy có một trọng số là 2 mũ n, với n là vị trí của bit đó. © TS. Nguyễn Phúc Khải 24
  13. CÁC KIỂU DỮ LIỆU CỦA C . Ví dụ:  Một giá trị kiểu integer  0000001010001010b  1000001010001010b  Một giá trị kiểu unsigned  1000001010001010b © TS. Nguyễn Phúc Khải 26
  14. CÁC KIỂU DỮ LIỆU CỦA C © TS. Nguyễn Phúc Khải 28
  15. HẰNG (CONSTANT) . Hằng số . Hằng số là các trị số đã xác định, một hằng số có thể là số nguyên hoặc số thực. . Hằng số nguyên  Trong ngôn ngữ C, hằng số nguyên có thể thuộc một trong hai kiểu là integer hoặc long. Ứng với mỗi kiểu, hằng số có thể được biểu diễn ở dạng thập phân, bát phân hay thập lục phân(0x6). © TS. Nguyễn Phúc Khải 30
  16. HẰNG (CONSTANT) . Ví dụ: Xét chương trình sau: #include main() { printf ("%d %d %d", 32767, 32767 + 1, 32767 + 2); } Kết quả xuất màn hình: 32767 -32768 –32767 © TS. Nguyễn Phúc Khải 32
  17. HẰNG (CONSTANT) Ví dụ: Các hằng số sau đây ở dạng unsigned 123U 234u 24UL © TS. Nguyễn Phúc Khải 34
  18. HẰNG (CONSTANT) . Hằng số thực . Một hằng thực ở dạng số dấu chấm động có thể có các thành phần sau:  phần nguyên: phần này là tùy yêu cầu.  dấu chấm thập phân: bắt buộc phải có.  phần lẻ: tùy yêu cầu.  các ký tự "e" hoặc "E" và một số mũ. Số mũ bản thân nó có thể âm. © TS. Nguyễn Phúc Khải 36
  19. HẰNG (CONSTANT) . Cần lưu ý:  Các hằng số được viết không có dấu thập phân và số mũ, sẽ được hiểu là nguyên và được lưu trữ theo kiểu int, ngược lại sẽ được lưu trữ theo kiểu double.  Các hằng số nguyên lớn hơn khả năng một int được tự động lưu trữ theo kiểu long.  Các hằng số nguyên lớn hơn một long được lưu trữ theo kiểu double. © TS. Nguyễn Phúc Khải 38
  20. HẰNG (CONSTANT) . Hằng ký tự . Ví dụ 1.26: #include main() { printf ("Ky tu: %c %c %c \n", 'A', '$', '1' ); printf ("Ma ASCII (Octal): %o %o %o \n", 'A', '$', '1' ); printf ("Ma ASCII (Decimal): %d %d %d \n", 'A', '$', '1' ); } © TS. Nguyễn Phúc Khải 40
  21. HẰNG (CONSTANT) . Chuỗi ký tự: . Chuỗi ký tự là một loạt các ký tự nằm trong cặp dấu nháy kép (“ ”); các ký tự này có thể là ký tự được biểu diễn bằng chuỗi thoát. . Ví dụ:  “Mot chuoi ky tu"  "Chuoi ky tu co chuoi thoat: i can\'t go to school \n\a" © TS. Nguyễn Phúc Khải 42
  22. HẰNG (CONSTANT) . Biểu thức hằng . Một biểu thức được xem là một biểu thức hằng nếu giá trị của biểu thức hoàn toàn xác định, như vậy một biểu thức toán học là một biểu thức hằng khi trong biểu thức đó các toán hạng đều là những hằng số hoặc hằng ký tự. . Ví dụ: Xét các biểu thức hằng sau  10 – 13 % 3 sẽ được ghi là 9  'a' – 'A' sẽ được ghi là 32  1 < 8 sẽ được ghi là 1 (true) © TS. Nguyễn Phúc Khải 44
  23. BIẾN (VARIABLE) . Khai báo biến . Cú pháp khai báo biến kiểu dsach_tenbien; . Giải thích:  kiểu : kiểu của các biến cần khai báo  dsach_tenbien : danh sách liệt kê các tên biến cần khai báo, các biến cách nhau bằng dấu “,” . Ví dụ: int lap, count, max; double he_so_1, he_so_2, delta; © TS. Nguyễn Phúc Khải 46
  24. BIẾN (VARIABLE) . Ví dụ: #include int a, b;  khai báo biến ngoài main() { a = 10; b = a + 24; } © TS. Nguyễn Phúc Khải 48
  25. BIẾN (VARIABLE) . Ví dụ: int luy_thua (int n, char ket_qua)  đối số hàm { for (i =1; } © TS. Nguyễn Phúc Khải 50
  26. BIẾN (VARIABLE) . Các bổ túc kiểu const và volatile . Từ khóa const: khi được khai báo cho biến thì nó xác định rằng biến sẽ không bị thay đổi trị trong suốt quá trình thực thi chương trình, mọi sự thay đổi trị đều gây ra lỗi, biến đó ta gọi là biến hằng. . Cú pháp: const kiểu tên_biến [ = trị được thay thế]; . Ví dụ: const double bat_dau = 3.1415: . const int max = 100; © TS. Nguyễn Phúc Khải 52
  27. BIẾN (VARIABLE) . Từ khóa volatile: chỉ ra rằng một biến có thể bị thay đổi trị từ một tác nhân không nằm trong chương trình. Từ khóa này làm cho biến của C có một tính linh động rất cao, ví dụ như biến có thể thay đổi theo đồng hồ hệ thống hay theo một chương trình nền nào đó. . Cú pháp: volatile ; © TS. Nguyễn Phúc Khải 54
  28. CÁC PHÉP TOÁN CỦA C . Toán tử số học:  Toán tử cộng (+) : thực hiện phép toán cộng  Toán tử trừ (–) : thực hiện phép toán trừ  Toán tử nhân (*) : thực hiện phép nhân  Toán tử chia (/) : thực hiện phép chia  Toán tử modulo (%): thực hiện phép toán lấy số dư của phép chia nguyên © TS. Nguyễn Phúc Khải 56
  29. CÁC PHÉP TOÁN CỦA C . Dấu cộng, trừ cũng có thể được dùng như phép toán đơn hạng (lấy dương và âm của một toán hạng). . Phép nhân và chia các số nguyên sẽ chỉ cho kết quả nguyên. © TS. Nguyễn Phúc Khải 58
  30. CÁC PHÉP TOÁN CỦA C . Nếu có nhiều toán hạng khác kiểu nhau thì C sẽ thực hiện việc chuyển kiểu tự động theo quy luật: toán hạng thuộc kiểu có trị nhỏ hơn sẽ được chuyển sang kiểu có trị lớn hơn. . Ví dụ: double a = 10, c; int b = 3; c=a/b; . Trong quá trình tính b kiểu double, sau khi tính b thuộc kiểu int © TS. Nguyễn Phúc Khải 60
  31. CÁC PHÉP TOÁN CỦA C . Khi mối quan hệ giữa hai toán hạng theo toán tử quan hệ trong biểu thức là ĐÚNG thì biểu thức đó sẽ trả về một trị nguyên là 1, còn ngược lại mối quan hệ đó là SAI thì biểu thức đó sẽ trả về một trị nguyên là 0, đây là các trị nguyên bình thường mà ta có thể dùng nó để tính toán. © TS. Nguyễn Phúc Khải 62
  32. CÁC PHÉP TOÁN CỦA C Ví dụ a = (b == 4); a = (b = 4); /*toán tử quan hệ*/ /*toán tử gán*/ © TS. Nguyễn Phúc Khải 64
  33. CÁC PHÉP TOÁN CỦA C . Toán tử logic Toán hạng 1 Toán hạng 2 Kết quả A B ! A A && B A ||B bằng 0 bằng 0 1 0 0 bằng 0 khác 0 1 0 1 khác 0 bằng 0 0 0 1 khác 0 khác 0 0 1 1 © TS. Nguyễn Phúc Khải 66
  34. CÁC PHÉP TOÁN CỦA C . Ví dụ: . Trong mệnh đề if sau đây thay vì viết if (delta == 0) { } . Ta có thể viết gọn hơn như sau: if (!delta) { } © TS. Nguyễn Phúc Khải 68
  35. CÁC PHÉP TOÁN CỦA C . Ví dụ: y = 10; scanf ("%d", &x); if ( (x >= 10) && (x <= (y = 100)) ) { } © TS. Nguyễn Phúc Khải 70
  36. CÁC PHÉP TOÁN CỦA C Bit Bit Phép toán A B ~ A A & B A | B A ^ B 0 0 1 0 0 0 0 1 1 0 1 1 1 0 0 0 1 1 1 1 0 1 1 0 © TS. Nguyễn Phúc Khải 72
  37. CÁC PHÉP TOÁN CỦA C . Toán tử trên bit: . Toán tử dịch trái ( >) cho phép thực hiện việc dời các bit của toán hạng sang bên trái hoặc sang phải. Cú pháp như sau: biểu_thức_nguyên > số_bit_dời . Với biểu_thức_nguyên và số_bit_dời có thể là hằng, biến hoặc biểu thức kiểu nguyên. © TS. Nguyễn Phúc Khải 74
  38. CÁC PHÉP TOÁN CỦA C © TS. Nguyễn Phúc Khải 76
  39. CÁC PHÉP TOÁN CỦA C © TS. Nguyễn Phúc Khải 78
  40. CÁC PHÉP TOÁN CỦA C . Cần lưu ý rằng cặp dấu ++ hoặc phải được viết liền nhau và cần phải rõ ràng, trong những trường hợp có thể lầm lẫn, ví dụ như 2 biểu thức: a++ + b . và a + ++b . là khác nhau. © TS. Nguyễn Phúc Khải 80
  41. CÁC PHÉP TOÁN CỦA C . Ví dụ: . Trong thân vòng while của chương trình tính tổng từ 1 tới n, ta có thể viết như sau: s = 0; so = 1; while (so <= n) { s = s + so; so++; } © TS. Nguyễn Phúc Khải 82
  42. CÁC PHÉP TOÁN CỦA C . Ví dụ: int a, b = 2; a = 4; b *= a * 3; © TS. Nguyễn Phúc Khải 84
  43. CÁC PHÉP TOÁN CỦA C Kiểu toán hạng Kiểu toán hạng Trị có thể mất sau khi gán trái phải signed char unsigned char Giá trị > 127, thành số âm char short int Mất trị từ bit 8 trở đi char int Mất trị từ bit 8 trở đi char long Mất trị từ bit 8 trở đi short int long int Mất 16 bit cao (một int) int float Mất phần thập phân và phần trị lớn hơn một int float double Độ chính xác do làm tròn © TS. Nguyễn Phúc Khải 86
  44. CÁC PHÉP TOÁN CỦA C . Ví dụ: . Thay vì viết: n = n * (x + 5) + n * (a + 8); . ta chỉ cần viết: n *= x + 5 + a + 8; . Hoặc phức tạp hơn a[i][j] –= b[i][j]; . thay vì phải viết dài dòng a[i][j] = a[i][j] – b[i][j]; © TS. Nguyễn Phúc Khải 88
  45. CÁC PHÉP TOÁN CỦA C . Toán tử phẩy - Biểu thức phẩy . Cú pháp: biểu_thức_1, biểu_thức_kết_quả . Với biểu_thức_1 và biểu_thức_kết_quả là hai biểu thức bất kỳ. . Ví dụ: m = (a = 2, t = a + 3); . sẽ cho a = 2, t = 5 và m = t = 5 . Hoặc x = (t = 1, t + 4); . sẽ cho t = 1 và x = 5 © TS. Nguyễn Phúc Khải 90
  46. CÁC PHÉP TOÁN CỦA C . Ví dụ: . Thay vì phải viết dài dòng if ( i >0 ) n = 1; else n = 0; . ta chỉ cần dùng biểu thức điều kiện n =(i > 0) ? 1 : 0; © TS. Nguyễn Phúc Khải 92
  47. CÁC PHÉP TOÁN CỦA C . Toán hạng của sizeof là một biến hoặc một kiểu dữ liệu bất kỳ nào đó đã định nghĩa. sizeof (biến) sizeof biến sizeof (kiểu) . Kết quả của toán tử này là một giá trị nguyên chỉ kích thước (tính bằng byte hoặc char) của kiểu dữ liệu hoặc của biến đó. Biến hoặc kiểu này có thể là một biến hoặc một kiểu đơn giản hay phức hợp. © TS. Nguyễn Phúc Khải 94
  48. CẤU TRÚC TỔNG QUÁT . Một chương trình C tổng quát gồm hai phần: phần khai báo đầu (header) và phần hàm (function). . Phần khai báo đầu bao gồm:  Các lệnh tiền xử lý: include, define  Các khai báo hằng, biến ngoài  Các prototype của các hàm được sử dụng trong chương trình . Phần hàm là phần định nghĩa các hàm sử dụng trong chương trình, trong các hàm này phải có hàm main(). © TS. Nguyễn Phúc Khải 96
  49. CẤU TRÚC TỔNG QUÁT main() { int n; clrscr(); printf ("Nhap mot so: "); scanf ("%d", &n); if (kiem_tra(n)) printf ("So da nhap la so le \n"); else printf ("So da nhap la so chan \n"); © TS. Nguyễn Phúc Khải 98
  50. © TS. Nguyễn Phúc Khải 100