Bài giảng Lập trình cơ bản - Chương 2: Các thành phần cơ bản trong ngôn ngữ lập trình - Ngô Quốc Việt

pdf 49 trang huongle 6920
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình cơ bản - Chương 2: Các thành phần cơ bản trong ngôn ngữ lập trình - Ngô Quốc Việt", để 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_lap_trinh_co_ban_chuong_2_cac_thanh_phan_co_ban_tr.pdf

Nội dung text: Bài giảng Lập trình cơ bản - Chương 2: Các thành phần cơ bản trong ngôn ngữ lập trình - Ngô Quốc Việt

  1. CÁC THÀNH PHẦN CƠ BẢN TRONG NGÔN NGỮ LẬP TRÌNH NGÔ QUỐC VIỆT-LÊ ĐỨC LONG 2011
  2. 1. Tổng quát về lập trình 2. Khái niệm từ khoá 3. Các kiểu dữ liệu cơ bản 4. Đặt tên, khai báo biến, hằng, và các vấn đề liên quan sử dụng biến/hằng. 5. Nhập xuất dữ liệu 6. Sử dụng toán tử, biểu thức và cách viết một số lệnh cơ bản trong lập trình 7. Một số quy ước lập trình để viết chương trình trong sáng. 2
  3. Sinh viên sẽ nắm vững và vận dụng các kỹ năng cơ bản sau cần cho lập trình . Từ khoá . Các kiểu dữ liệu . Cách ghi chú . Đặt tên và khai báo biến . Phạm vi sử dụng biến Trình bày cách viết một chương trình dễ đọc và trong sáng. 3
  4. 1. Phân tích và xác định nhập-xử lý-xuất (I-P-O) 2. Xác định thuật giải (mã giả hay lưu đồ) 3. Cài đặt với ngôn ngữ lập trình cụ thể 4. Biên dịch (kiển tra cú pháp) và chạy thử 5. Kiểm chứng và hoàn thiện chương trình Lập trình phần nào đó là ánh xạ cách giải quyết đã xác định sang một ngôn ngữ lập trình. 4
  5. Là yếu tố quan trọng nhất của lập trình Giúp phân biệt ‘viên ngọc lập trình’ với ‘mớ hỗn độn’. Phân biệt giữa ‘nghệ sỹ lập trình’ và ‘tên đồ tể lập trình’ Làm sao có ‘phong cách’ ? Không có cách nào, ngoại trừ một vài nguyên tắc cơ bản: . Hãy đặt tên theo quy ước dễ hiểu . Hãy viết nhiều chú thích khi có thể. Nguyên tắc vàng: càng rõ ràng, càng đơn giản càng tốt. 5
  6. Không có thầy giáo nào dạy tốt hơn kinh nghiệm làm thực tế. Luôn viết thật nhiều chú thích khi lập trình. Ngay cả khi viết cho chính mình. Viết chú thích sẽ: . Giúp tổ chức lại các suy nghĩ. . Giúp nhớ lại những gì đã làm. . Giúp làm việc nhóm hiệu quả. Luôn đặt tên cho các thành phần của chương trình một cách tường minh và dễ hiểu. Cần tổ chức và quản lý các tập tin mã nguồn khoa học. 6
  7. Thực tế Ngôn ngữ lập trình Bắt đầu Điểm vào (thường là hàm main) Kết thúc Kết thúc hàm chính (hàm main) Xử lý vấn đề Các lệnh trong chương trình Xác định trước và không thay Hằng (cố định trong cả đổi, ví dụ: số (3.1416). chương trình) Thay đổi, ví dụ hệ số a, b, c Biến (thay đổi được). Phải của phương trình bậc 2 khai báo ba biến để có thể gán giá trị mới. Đủ loại dữ kiện Kiểu dữ liệu Giải thích thêm Chú thích trong chương trình 7
  8. Quy trình xử lý cơ bản của máy tính Ví dụ: xác định I-P-O của việc nấu cơm. Bài tập ngắn: xác định I-P-O của giải phương trình bậc 1. Bài tập: xác định I-P-O của giải phương trình bậc 2. Vẽ lưu đồ thể hiện. Xem: Giai PhuongTrinh Bac 2 8
  9. Chuyển từ bài toán thành chương trình BÀI TOÁN CHƢƠNG TRÌNH Dữ liệu Dữ liệu của bài toán của chƣơng trình Giá trị đầu vào, đầu ra Biến, hằng Input: a, b Output: max (a,b) Nếu a>b thì max  a Ngược lại max  b Quá trình tính toán của bài toán Các cấu trúc của chƣơng trình Các bước tính toán Các câu lệnh xử lý 9
  10. Dữ liệu của bài toán sẽ đƣợc biểu diễn lại dƣới dạng các biến (variable) của chƣơng trình thông qua các quy tắc xác định của NNLT cụ thể (*) (*) Hoàng Kiếm (2000), Giải một bài toán trên máy tính như thế nào – Tập 1, NXB Giáo dục 10
  11. Là tập các từ dành riêng (nghĩ là không dùng chúng làm của riêng) cho từng nnlt cụ thể. Ví dụ, trong ngôn ngữ C/C++. Các từ khoá sẽ tham gia như một thành phần của từng câu lệnh. Ngoài ra, mỗi lệnh còn có sự tham gia của biến, hằng và biểu thức. 11
  12. Tập kí tự dùng trong NNLT bậc cao  Ngôn ngữ C được xây dựng trên bộ ký tự sau: . 26 chữ cái hoa A B C Z . 26 chữ cái thường a b c z . 10 chữ số 0 1 2 9 . Các ký hiệu toán học + - * / = ( ) . Ký tự gạch nối _ . Các ký tự khác . , : ; [ ] {} ! \ & % # $ Dấu cách (space) dùng để tách các từ. Ví dụ: tiếng VIET NAM có 8 ký tự, còn VIETNAM chỉ có 7 ký tự. Tập kí tự dùng trong NNLT Pascal thì sao ??? 12
  13. Tại sao nên viết: cho dễ hiểu, nhớ là đã làm gì. Viết ở đâu? . Đầu mỗi tập tin mã nguồn. . Đầu mỗi hàm . Ở các lệnh quan trọng trong hàm (sẽ nói sau). Viết những gi? . Hàm hay tập tin mã nguồn này làm gì. . In, Output của từng hàm/tập tin mã nguồn. 13
  14. Heading Author (tác giả) Purpose (mục đích) Usage (cách sử dụng) References (tham khảo) File Formats (định dạng tập tin) Restrictions (một số hạn chế-nếu có) Revision History (phiên bản) Error Handling (điều khiển lỗi) Notes (chú thích thêm) 14
  15. /* * hello program to print out "Hello World". * Not an especially earth-shattering program. * Author: Ngô Quốc Việt * Purpose: Demonstration of a simple program * Usage: * Run the program and the message appears */ #include "stdafx.h" #include int main(int argc, char* argv[]) { // Tell the world hello printf("Hello World!\n"); getchar(); return 0; } 15
  16. Luôn dóng cột cho lệnh (hoặc khối lệnh) cho các cấu trúc điều khiển (thảo luận sau). Không viết hai (hay nhiều) lệnh trên cùng một dòng. Tránh lồng nhau quá sâu (thảo luận sau). Tách tập tin mã nguồn lớn (nhiều hơn 1000 dòng lệnh) thành những tập mã nguồn nhỏ Nguyên tắc vàng: càng rõ ràng, càng đơn giản càng tốt. 18
  17. Mọi kiểu dữ liệu (có hay không có cấu trúc) đều dựa trên các kiểu dữ liệu cơ bản. Cụ thể: char/string, integer, float, double, boolean Mỗi ngôn ngữ lập trình có khai báo và sử dụng kiểu dữ liệu khác nhau (tuy không nhiều) cho các biến, tham số, hằng. Lựa chọn kiểu dữ liệu là yếu tố quan trọng trong lập trình cần phải nắm vững miền giá trị, độ chính xác, dung lượng nhớ của kiểu. 19
  18. Các kiểu dữ liệu cơ bản trong C/C++ Nguồn: Chú ý đặc biệt: kích thước vùng nhớ và miền giá trị của kiểu dữ liệu không hoàn toàn giống nhau giữa các nnlt. Đọc thêm: cách biểu diễn dữ liệu kiểu số thực 20
  19. Kiểu Biểu diễn Giá trị char ‘A’, ‘B’ string “Hello world” short int 2, -8, 30 long int 2L, boolean true, false float 1.12345 double 1.12345, 1E-3 1.12345, 0.001 long double 1.12345, 1E-3 1.12345, 0.001 21
  20. Sử dụng tên dài (nhưng đừng quá dài) và có nghĩa dễ hiểu. int account //khai báo biến kiểu integer trong C. Chú thích cho biến Có kèm thêm kiểu của biến trong tên biến int iAccount; //số tài khoản String sAccount; //tên tài khoản double dbMoney; //số tiền còn bool bFaultTransaction; //giao dịch thất bại. Luôn có chú thích đầu hàm (hay tập tin mã nguồn) 22
  21. Có thể dùng chữ hoa hay dấu gạch dưới ở đầu các từ có nghĩa. double dbCurrentMoney; //hoặc double db_current_money; Nên dùng chữ hoa để đặt tên hằng (số, chuỗi, bool, ) MAX_ITEMS, SCREEN_WIDTH Chỉ dùng các ký tự a z, A Z, 0 9, dấu gạch dưới để đặt tên. Ký tự đầu tiên phải là chữ. Không dùng chữ tiếng Việt có dấu để đặt tên. 23
  22. Hầu hết nnlt phân biệt chữ hoa / chữ thường (gọi là case sensitive). . Nghĩa là: nội dung giống nhau, nhưng khác ở chữ hoa, chữ thường ở một vài ký tự cũng được xem là khác nhau . Ví dụ: name và Name. Chúng được xem là hai tên khác nhau. Hầu hết nnlt: biến, hằng luôn được khai báo và sử dụng sử dụng kèm theo kiểu dữ liệu. 24
  23. Nguyên ly ́ thư ́ hai !!! Chuyển đổi quá trình tính toán của Các cấu trúc của bài toán chƣơng trình MỌI QUÁ TRÌNH TÍNH TOÁN ĐỀU CÓ THỂ MÔ TẢ VÀ THỰC HIỆN DỰA TRÊN BA CẤU TRÚC CƠ BẢN: CẤU TRÚC TUẦN TỰ CẤU TRÚC RẼ NHÁNH CẤU TRÚC LẶP C. Bohm & G. Jacopini (1966), Flow Diagrams, Turing Machines and Languages With Only Two Formation Rules. In Communications of ACM, Vol.9, Number 5, May 1966. 25
  24. Chương trình Biến Hàm hay thủ tục Hằng Khối lệnh Lệnh Gán Điều kiện Lặp Biểu thức So sánh 26
  25.  Biến là nơi lưu trữ giá trị– số nguyên, số thực, kí tự, .  Một biến chỉ có thể lưu được một loại giá trịnh ất định kiểu dữ liệu của biến  Giá trị màbi ến đang lưu trữcó thể bị thay đổi nhiều lần trong quá trình chương trình thi hành  Một biến bất kì trong máy tính có 3 thuộc tính:  Tên biến (được đặt tên do người lập trình – gọi làđ ịnh danh – indentifier)  Kiểu dữ liệu của biến  Giá trịhi ện tại mà biến đang lưu trữ  Biến cần phải được khai báo (định nghĩa) trước khi sử dụng Ví dụ: STT 50 Biến cótên STT, kiểu số nguyên, đang lưu trữ giá trị là50 DiemTB 7.8 Biến cótên DiemTB, kiểu số thực, đang lưu trữ giá trị là7 .8 TenSV “Long” Biến cótên TenSV, kiểu chuỗi kí tự, đang lưu trữ một dòng chữ o Ý nghĩa của biến chỉđ ược hiểu bởi con người, kô có nghĩa với PC; o Tên biến cần gợi nhớ và thống nhất; o Tên biến phải hợp lệ– tuân thủ theo quy ước của NNLT. 27
  26. Biến (variable): dùng để lưu trữ giá trị có thể thay đổi được (qua lệnh gán) Cú pháp khai báo biến trong C/C++ . Datatype name; . Ví dụ: int iSonguyento; string sName; char cMychar; float fSoFloat; Mỗi chương trình có thể khai báo nhiều biến theo nhu cầu. Biến không được đặt trùng tên với từ khoá dành riêng 28
  27. Biến nên được khai báo ở đầu hàm, mặc dù có thể được đặt ở bất cứ đâu (thảo luận sau). Biến phải được khai báo trước khi sử dụng. #include #include int main() { int height; // Height of a rectangle (in inches) int width; // Width of the rectangle (in inches) int area; // Area of the rectangle (in square inches) height = 3; //lệnh gán giá trị 3 cho biến height width = 5 //lệnh gán giá trị 5 cho biến width area = height * width; //biểu thức printf("Area is %d sq. inches \n", area); /lệnh xem kết quả return 0; } 29
  28. KIỂU DỮ LIỆU (DATA TYPE) Trong NNLT, loại giá trị mà biến lưu trữ được phân thành những kiểu dữ liệu khác nhau Thông thường, trong một NNLT có các kiểu dữ liệu cơ sở sau: . Kiểu dữ liệu số: gồm có 2 loại • Kiểu dữ liệu số nguyên • Kiểu dữ liệu số thực . Kiểu luận lý (logic) . Kiểu kí tự . Kiểu chuỗi kí tự Mỗi kiểu dữ liệu có 1 miền giá trị khác nhau 30
  29. Kiểu số nguyên Có nhiều kiểu số nguyên Reading(*) Tuỳ vào độ lớn của miền giá trị, có: . Số nguyên 8 bit ( 1 byte) -128 0 127 • Loại có dấu: -128 127 0 255 • Loại không dấu: 0 255 . Số nguyên 16 bit (2 byte) • Loại có dấu: - 32,768 32,767 • Loại không dấu: 0 65,535 . Số nguyên 32 bit (4 byte) • Loại có dấu: -2,147,483,648 2,147,483,647 • Loại không dấu: 0 4,294,967,295  Một số ngôn ngữ lập trình còn hỗ trợ kiểu số nguyên 64 bit, 128 bit  Kiểu số nguyên k bit sẽ chiếm bộ nhớ k bit dữ liệu 31
  30. Ví dụ một số kiểu dữ liệu số nguyên Kiểu số nguyên Pascal C 8 bit có dấu shortint N/A 8 bit không dấu byte N/A 16 bit có dấu integer short (int*) 16 bit không dấu word unsigned short (int*) 32 bit có dấu longint long (int) 32 bit không dấu N/A unsigned long (int) 32
  31. Kiểu số thực Có 2 dạng số thực thường gặp Reading(*) . Số thực 32 bit (4 byte) • Miền giá trị: trong khoảng ± 3.4E-38 đến ± 3.4E+38 • Có 8 chữ số có nghĩa sau dấu phẩy . Số thực 64 bit (8 byte) • Miền giá trị: trong khoảng ± 1.7E-308 đến ± 1.7E+308 • Có 16 chữ số có nghĩa sau dấu phẩy  Một số ngôn ngữ lập trình còn hỗ trợ số thực 80 bit (10 byte) Loại Pascal Miền giá trị C Miền giá trị 32 bit real 2.9x10-39 3.4x1039 float 3.4x10-38 3.4x1038 64 bit double 5.0x10-324 1.7x10308 double 1.7x10-308 1.7x10308 33
  32. HẰNG (CONSTANT)  Hằng trong chương trình là một giá trị không đổi trong suốt quá trình thi hành  Mục đích của hằng là giúp cho chương trình dễ hiểu hơn, hoặc điều chỉnh chương trình dễ dàng hơn  Hằng phải được khai báo trước khi sử dụng  Hằng gồm 2 thành phần: tên hằng và giá trị gán cho hằng Có các loại hằng sau: o Hằng số: hằng nguyên, hằng thực – Vd: 2, -8, 30, 2.5, -2.0, 1E-3, o Hằng bool: có 2 giá trị là true và false o Hằng kí tự: có 2 dạng biểu diễn sau . Đặt kí tự trong dấu nháy đơn . Dùng mã ASCII o Pascal: #d (d là mã ASCII ở dạng thập phân) o C: \xFF (FF là mã ASCII ở dạng hexa) o Hằng chuỗi kí tự . Pascal, đặt chuỗi kí tự trong dấu nháy đơn – Vd: „Hello‟ . C, đặt chuỗi kí tự trong dấu nháy kép – Vd: “Hello” 34
  33. Hằng (thuộc kiểu dữ liệu bất kỳ): dùng làm sáng tỏ chương trình. Ví dụ: xem hai đoạn lệnh sau (bằng C/C++) double myMagicNumber, yourNumber; myMagicNumber = 3.1416; /// yourNumber = 3.141601 và const float PI = 3.1416; //khai báo hằng double myMagicNumber, yourNumber; //biến myMagicNumber = PI; //lệnh gán yourNumber = PI; //lệnh gán 35
  34. Hằng (thuộc kiểu dữ liệu bất kỳ): dễ thay đổi và bảo trì. Hằng thường được khai báo ở đầu các tập tin mã nguồn. Không nên sử dụng trực tiếp giá trị trong chương trình. 36
  35. Thường (trong hầu hết nnlt) kết thúc bằng dấu chấm phẩy ‘;’. Ví dụ: . Khai báo biến: char cMyChar; . Lệnh: cMyChar = ‘V’; Mỗi lệnh nên được viết trên một hàng. 37
  36. LỆNH GÁN (ASSIGNMENT)  Lệnh gán dùng để thay đổi giá trị hiện thời của biến  Lệnh gán không phải là phép so sánh giữa hai biểu thức, mà là thao tác tính kết quả biểu thức phía bên phải lệnh gán, sau đó đặt kết quả này vào biến ở phía bên trái lệnh gán.  Lệnh gán làm thay đổi giá trị hiện thời của biến và không thể nào lấy lại được giá trị này. Biểu diễn bằng lưu đồ: A B Ý nghĩa: đưa giá trị của biểu thức vế phải (B) gán vào cho biến ở vế trái (A) Cú pháp lệnh gán = ; A  5 A = 5; A  B A = B; A  B + 5 A = B +5; A  A + 1 A = A +1; A  (A + B) * C + D A = (A + B) * C + D; Cú pháp trong C: = 38
  37. Biểu thức toán học kết hợp các biến/hằng và các toán tử sau Ví dụ: 39
  38. Các phép tăng/giảm 1 đơn vị . Phép tăng: ++ hoặc ++ . Phép giảm: hoặc Lưu ý: . Phép toán ++ (hay ) đứng trước tên biến sẽ thực hiện trước . Phép toán ++ (hay ) đứng sau tên biến sẽ thực hiện sau Ví dụ int iCount = 0; iCount ++; //tăng iCount một đơn vị 40
  39. Ví dụ (tt) int iCount = 3; int t1 = i++; //gán t1 bằng i trước rồi mới tăng i int t2 = ++i; //tăng i rồi mới gán cho t2 Có thể kết hợp các phép toán số học với phép gán.Ví dụ: x += 3 ; // tương đương x = x + 3 x -= 3; // tương đương x = x – 3 x = x * 3; // tương đương x = x *3; x /= 3; // tương đương x = x / 3 41
  40. Biểu thức luận lý được kết hợp với các toán tử sau AND, OR, XOR, NOT. Kết quả biểu thức logic là: TRUE hoặc FALSE. bool bFlag; //khai báo biến bool trong C/C++ bFlag = true;//gán true cho biến bFlag TRUE (true) hay FALSE (false) chỉ là macro hay hằng logic trong ngôn ngữ. Kiểu bool có khi được dùng là boolean. Cần phân biệt với biểu thức trên BIT. 42
  41. Ký hiệu trong Ký hiệu Phép toán Pascal trong C Nhỏ hơn > So sánh bằng = == Khác nhau = >= Phép not not ! Phép and and && Phép or or || 43
  42. Các phép toán trên BIT Phép toán Kí hiệu . Ví dụ: int x = 5; // x = 101b Phép AND & int y = 4; // y = 100b Phép OR | Phép XOR ^ int r1 = x & y; // r1 = 100b int r2 = x | y; // r2 = 101b Bù bit ~ int r3 = ~x; // r3 = 010b Dịch trái > int r5 = x >> 1; // r5 = 10b 44
  43. Số nguyên có thể gán cho biến thực Số thực cũng có thể gán cho biến nguyên, nhưng phần sau dấu chấm sẽ bị mất. Biểu thức Kết quả Kiểu kết quả 19/10 1 Số nguyên 19.0/10 1.9 Số chấm động 19/10.0 1.9 Số chấm động 19.0/10.0 1.9 Số chấm động 45
  44. Nhập từ bàn phím và xuất ra màn hình Trong C Trong C++ Trong Pascal Nhập Xuất Nhập Xuất Nhập Xuất scanf printf Dùng cin Dùng cout readln writeln Xem thêm C.4. trong B. S. Gottfried (1996), Programming with C, 2nd Ed., SCHAUM’S Outline Series - McGRALL-HILL 46
  45. Hàm Mô tả Kiểu tham số Kiểu trả về Cùng kiểu tham abs(x) Tính trị tuyệt đối Số số exp(x) Tính hàm ex Số Số thực log(x) Tính ln Số Số thực Lấy trần số ceil(x) Số Số nguyên nguyên Floor Lấy sàn số nguyên Số Số nguyên sqrt(x) Căn bậc 2 Số Số thực Pow(x,y) Tính xy Số, Số Số thực 47
  46. Các thành phần của một chương trình . Kiểu chương trình . Kiểu chú thích . Quy tắc đặt tên Một số kiểu dữ liệu cơ bản Cách khai báo và sử dụng biến, hằng Một số hàm cơ bản 48
  47. 1. Thực hiện các bài tập trong Ex_Chapter_2.docx. 2. Viết chương trình đổi một số nguyên hệ 10 sang hệ 2, hệ 16. 3. Viết chương trình nhập vào số giây từ 0 đến 86399, đổi số giây nhập vào thành dạng "gio:phut:giay", mỗi thành phần là một số nguyên có 2 chữ số . 4. Viết chương trình đọc từ bàn phím 3 số nguyên biểu diễn ngày, tháng, năm và xuất ra màn hình dưới dạng "ngay/thang/nam" (chỉ lấy 2 số cuối của năm). 49