Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 2: Giới thiệu ngôn ngữ C/C++
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 2: Giới thiệu ngôn ngữ C/C++", để 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:
- bai_giang_cau_truc_du_lieu_va_giai_thuat_chuong_2_gioi_thieu.pdf
Nội dung text: Bài giảng Cấu trúc dữ liệu và giải thuật - Chương 2: Giới thiệu ngôn ngữ C/C++
- CHƯƠNG 2 GIỚI THIỆU NGƠN NGỮ C/C++ 1
- LỊCH SỬ RA ĐỜI Ngơn ngữ C do Dennis Ritchie xây dựng từ năm 1972 tại phịng thí nghiệm Bell Telephone với mục đích tạo ngơn ngữ để viết HĐH UNIX. Song nhờ cĩ các tính năng ưu việt và tính mềm dẻo nên được giới tin học chấp nhận Năm 1978, xuất bản quyển sách “The C programming language” do Kernighan và Ritchie viết. 2
- C++ dựa trên ngơn ngữ lập trình C C++ được phát minh bởi Bijarne Stroustroup, bắt đầu năm 1979 Các trình biên dịch phổ biến: Borland C++, Microsoft Visual C++ 3
- ƯU ĐIỂM Bộ lệnh phù hợp với phương pháp lập trình cĩ cấu trúc module, cĩ thể sử dụng nhiều lần trong chương trình hoặc chương trình khác, hỗ trợ lập trình hướng đối tượng. Kiểu dữ liệu phong phú, cho phép định nghĩa kiểu dữ liệu mới. Linh động về cú pháp, ít từ khĩa. Ngơn ngữ mạnh và mềm dẻo, được dùng để viết Hệ điều hành, chương trình điều khiển, soạn thảo văn bản, đồ hoạ, bảng tính và các chương trình dịch cho các ngơn ngữ khác . 4
- KHUYẾT ĐIỂM Cú pháp thuộc loại lạ và khĩ học. Nếu người lập trình đã học qua một ngơn ngữ khác thì sẽ dễ dàng tiếp cận. Một số ký hiệu cĩ nhiều nghĩa khác nhau. Ví dụ: dấu “*” là tốn tử nhân, là khai báo con trỏ, là tốn tử thay thế, Việc sử dụng đúng nghĩa các tốn tử phụ thuộc vào ngữ cảnh sử dụng. Việc truy nhập tự do vào dữ liệu, việc trộn lẫn các kiểu dữ liệu làm cho chương trình cĩ phần bất ổn. 5
- VÍ DỤ CHƯƠNG TRÌNH C++ Xuất ra màn hình dịng chữ: “Xin chao cac ban” Viết bằng VC++6.0 Viết bằng VC++2003 hoặc BC++3.1 hoặc 2005, 2008, #include #include using namespace std; void main() void main() { { cout<<"Xin chao cac ban"; cout<<"Xin chao cac ban"; } } 6
- CÁC KHÁI NIỆM Lệnh : Là việc thực hiện một chức năng nào đĩ (khai báo, gán, xuất, nhập, ) và được kết thúc bằng dấu chấm phẩy (;) Khối lệnh Khối lệnh gồm nhiều lệnh và được đặt trong cặp dấu ngoặc { } 7
- DÕNG GHI CHƯ (COMMENT) Từ vị trí cụ thể đến cuối dịng: dùng // ngay tại vị trí đĩ. Tạo nhiều dịng ghi chú: dùng cặp ký tự /* ngay trước dịng đầu tiên, và cặp ký tự */ ngay sau dịng cuối cùng. Ví dụ : void main() { // đây là câu xin chào cout<<"Xin chao cac ban"; /* kết thúc */ } 8
- TẬP CÁC KÝ TỰ THƯỜNG DÙNG Chữ cái hoa: A, B, , Z Chữ cái thường: a, b, c, , z Chữ số: 0, 1, , 9 Các ký hiệu tốn học: +, -, *, /, =, (, ), Ký hiệu gạch nối: _ Các ký hiệu đặc biệt như: . , ; [] {} ? ! \ & | % # Khơng được dùng các ký hiệu như: α, φ, Ω, π, hoặc tiếng việt cĩ dấu: â, ă, ơ 9
- TỪ KHĨA (KEYWORD) auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while bool catch class delete friend inline new namespace operator private protected public template this throw try 10
- BIẾN Một biến đại diện cho một vùng nhớ hay tập các vùng nhớ trên bộ nhớ chính của máy tính. Tên biến được dùng để tham khảo đến những vùng nhớ này. Biến để lưu trữ các giá trị do người dùng nhập vào hoặc các giá trị tạm thời trong quá trình tính tốn. Mỗi biến sẽ cĩ tên và kiểu dữ liệu tương ứng. Kiểu dữ liệu của biến xác định những giá trị kiểu nào cĩ thể được lưu trong biến (ví dụ số hay chữ ). PHẢI khai báo BIẾN trước khi sử dụng 11
- CÁC KIỂU DỮ LIỆU Kiểu cơ sở Tích hợp sẵn trong ngơn ngữ – Số nguyên – Số thực – Luận lý – Mảng (xét sau) – Chuỗi (xét sau) Kiểu tự định nghĩa (xét sau) Dùng những kiểu cơ sở để xây dựng thành những kiểu dữ liệu mới cho phù hợp với bài tốn. 12
- KIỂU SỐ NGUYÊN ST KÍCH TÊN KIỂU GHI CHÚ MIỀN GIÁ TRỊ T THƯỚC Ký tự 1 byte Chứ 255 ký tự 1 char Sớ nguyên 1 byte -126 đến 127 2 Sớ nguyên unsigned char dương 1 byte 0 đến 255 3 short Sớ nguyên 2 bytes -32763 đến 32762 4 Số nguyên unsigned short dương 2 bytes 0 đến 65535 5 int Sớ nguyên 4 bytes -2147483648 đến 2147483647 6 Sớ nguyên unsigned int dương 4 bytes 0 đến 4294967295 7 long Sớ nguyên 4 bytes -2147483648 đến 2147483647 8 Sớ nguyên unsigned long dương 4 bytes 0 đến 4294967295 13
- KIỂU SỐ THỰC GHI KÍCH STT TÊN KIỂU MIỀN GIÁ TRỊ CHÚ THƯỚC 1 float số thực 4 bytes 3.4*10–38 đến 3.4*1038 2 double số thực 8 bytes 1.7*10–308 đến 3.4*10308 3 long double số thực 10 bytes 3.4*10–4932 đến 3.4*104932 KIỂU LUẬN LÝ TÊN STT GHI CHÚ KÍCH THƯỚC GIÁ TRỊ KIỂU 1 bool Kiểu luận lý 1 byte 1 true 0 false 14
- QUI TẮC ĐẶT TÊN Dùng để đặt tên biến, tên hằng, tên hàm, Bắt đầu bằng một ký tự. Các ký tự trong tên biến chỉ cĩ thể là các ký tự chữ, số hoặc dấu gạch dưới (_) Khơng được trùng với các từ khố. Khơng được trùng với phạm vi khai báo. Tên dễ hiểu, súc tích và gợi nhớ. Phân biệt chữ hoa và thường 15
- KHAI BÁO BIẾN Cú pháp tênbiến; Ví dụ: int a; //Khai báo biến để lưu số nguyên tên a float c; //Khai báo biến để lưu số thực tên c Khai báo nhiều biến cùng kiểu tênbiến1, tênbiến2, tênbiến3; Ví dụ: int a, x, y; 16
- KHAI BÁO VÀ KHỞI GÁN GIÁ TRỊ BAN ĐẦU CHO BIẾN tênbiến = giá trị; Ví dụ: int a = 5; float b = 5.4, c = 9.2; char ch = „n‟; 17
- ĐỊNH NGHĨA HẰNG SỐ Hằng là đại lượng khơng thay đổi giá trị trong quá trình thi hành chương trình Dùng tốn tử #define Cú pháp: #define Ví dụ: #define MAX 100 Biến hằng được định nghĩa nhờ từ khố const với cú pháp như sau: const = ; Ví dụ: const int MAX = 100; Tên hằng số nên viết bằng chữ in HOA 18
- CÁC LOẠI HẰNG SỐ Hằng số: Đĩ là các giá trị xác định, một hằng số cĩ thể là nguyên (cĩ kiểu dữ liệu int, hay long int) hay thực (cĩ kiểu dữ liệu là float, double, long double). Hằng ký tự: Được đặt trong dấu nháy đơn. Ví dụ: 'A', 'a' tương ứng với giá trị nguyên 65, 97 trong bảng mã ASCII. Hằng chuỗi: Là tập hợp các ký tự được đặt trong cặp dấu nháy kép " ". Ví dụ: “Lap trinh C" Chú ý: Một hằng chuỗi được trữ tận cùng bằng ký tự null (\0) 19
- KÝ HIỆU CÁC PHÉP TỐN PHÉP STT Ý NGHĨA GHI CHÚ TỐN PHÉP TỐN SỚ HỌC 1 + Cợng 2 - Trừ 3 * Nhân Đối với 2 số nguyên thì kết quả 4 / Chia là chia lấy phần nguyên 5 % Chia lấy phần dư Chỉ áp dụng cho 2 số nguyên PHÉP TỐN QUAN HỆ 1 > Lớn hơn 2 = Lớn hơn hoặc bằng 4 <= Nhỏ hơn hoặc bằng 5 = = Bằng nhau 6 != Khác nhau 20
- PHÉP TỐN LOGIC 1 ! NOT 2 && AND 3 || OR TỐN TỬ TĂNG GIẢM 1 ++ Tăng 1 Nếu tốn tử tăng giảm đặt trước thì tăng giảm trước rời tính biểu 2 Giảm 1 thức hoặc ngược lại. PHÉP TỐN THAO TÁC TRÊN BIT 1 & AND 2 | OR 3 ^ XOR 4 > Dịch phải 6 ~ Lấy phần bù theo bit 21
- Ví dụ: int x = 5, y = 11; int z = ++x + y++; Kết quả: x=6; y=12; z=17 Tốn tử điều kiện (ĐK)? : Ví dụ: int n; (n%2==0)? n ++ : n ; nếu n = 10 thì giá trị n = 11 nếu n = 21 thì giá trị n = 20 22
- THỨ TỰ ƯU TIÊN PHÉP TỐN Tốn tử Độ ưu tiên Trình tự kết hợp () [] -> 1 Từ trái qua phải ! ~ ++ - + * & sizeof 2 Từ phải qua trái * / % 3 Từ trái qua phải + - 4 Từ trái qua phải > 5 Từ trái qua phải = > 6 Từ trái qua phải == != 7 Từ trái qua phải & 8 Từ trái qua phải | 9 Từ trái qua phải ^ 10 Từ trái qua phải && 11 Từ trái qua phải || 12 Từ trái qua phải ? : 13 Từ phải qua trái = += -= *= /= %= 14 Từ phải qua trái 23
- CÁC LỖI THƯỜNG GẶP KHI VIẾT CHƯƠNG TRÌNH Quên khai báo các biến sử dụng trong chương trình. Lưu một giá trị vào một biến nhưng khơng cùng kiểu dữ liệu với biến. Sử dụng biến trong một biểu thức khi nĩ chưa cĩ giá trị. Lỗi này thì khơng được phát hiện bởi trình biên dịch, khi đĩ giá trị của biến là một giá trị bất kỳ và kết quả của biểu thức là vơ nghĩa. 24
- CÁC LỖI THƯỜNG GẶP KHI VIẾT CHƯƠNG TRÌNH Sử dụng giá trị của phép chia khơng chính xác. Lỗi này thường xuất hiện trong các biểu thức cĩ nhiều tốn hạng và lỗi này rất khĩ phát hiện. Ví dụ: 3.2 + 2/3 + 1.5 thì sẽ khác (3.2 + 2)/3 + 1.5 Sử dụng một biểu thức mà trong đĩ chứa nhiều loại dữ liệu nhưng lại khơng biết chắc chắn kiểu dữ liệu của kết quả. 25
- HÀM NHẬP XUẤT Thư viện hàm: iostream.h Hàm nhập giá trị từ bàn phím: cin>>tênbiến; Ví dụ: int a; cin>>a; //Người dùng nhập giá trị từ phím sẽ lưu vào biến a Hàm xuất giá trị ra màn hình: cout<<tênbiến hoặc chuỗi ký tự; Ví dụ: int a = 5; cout<<“Gia tri cua a =“<<a; Các biến và chuỗi cách nhau bởi dấu << (chuỗi nằm trong cặp dấu nháy kép “” ) 26
- VÍ DỤ HÀM NHẬP XUẤT #include using namespace std; void main() { short a; cout >a; cout<<"So a vua nhap la :"<<a; } 27
- XUẤT CĨ ĐỊNH DẠNG Thư viện iomanip.h cout<<setw(n)<<tênbiến; Chừa 1 khoảng n ký tự để xuất giá trị Ví dụ: int a=7, b=9; cout<<a<<setw(5)<<b;//Chừa 5 vị trí để xuất giá trị b Kết quả: 7 9 28
- XUẤT CĨ ĐỊNH DẠNG cout<<setprecision(n); Xuất số thập phân gồm n chữ số lẻ (phần thập phân) Ví dụ: Kết quả: float a=7.56745, b=5.339; cout<<a<<endl; 7.56745 cout<<setprecision(2)<<a<<endl; 7.57 cout<<setprecision(1)<<b<<endl; 5.3 cout<<setprecision(5)<<b; 5.339 29
- HÀM NHẬP XUẤT CỦA C Thư viện Xuất: printf(“hằng chuỗi”); Vd: printf(“Xin chao cac ban”); printf(“chuỗi định dạng”, đối số 1, đối số 2); Vd: int a=5; float b=2.7; printf(“Gia tri cua bien a=%d, b=%f“, a, b); Nhập: scanf(“chuỗi định dạng”, &tên biến); Vd: int x; scanf(“%d”, &x); 30
- HÀM NHẬP XUẤT CỦA C #include void main () { float number ; printf ( “Nhap mot so thuoc [1 10]: “) ; scanf ( “%f”, &number) ; if (number >5) printf ( “So ban nhap lon hon 5. \n”) ; printf ( “%f la so ban nhap. “ , number); } 31
- CHUỖI ĐỊNH DẠNG STT KIỂU GHI CHÚ ĐỊNH DẠNG KIỂU LIÊN TỤC (SỚ THỰC) 1 float %f 2 double %lf 3 long double %lf KIỂU RỜI RẠC (SỚ NGUYÊN) Ký tự %c 1 char Số nguyên %d 2 unsigned char Số nguyên dương %d 3 int Số nguyên %d 4 unsigned int Sớ nguyên dương %u 5 long Số nguyên %ld 6 unsigned long Sớ nguyên dương %lu 7 char * Chuỗi %s 32
- XUẤT KÝ TỰ ĐẶC BIỆT Ký tự Ý nghĩa Ví dụ cout<<“ \‟ ”; \‟ Xuất dấu nháy đơn Kết quả: „ cout<<“ \” ”; \” Xuất dấu nháy đơi Kết quả: “ cout<<“ \\ ”; \\ Xuất dấu chéo ngược “\” Kết quả: \ Dùng để gán ký tự kết thúc \0 Ký tự Null của chuỗi \a Alert : Tiếng bip 33
- XUẤT KÝ TỰ ĐẶC BIỆT Ký tự Ý nghĩa Ví dụ Tab vào mợt đoạn cout<<"xyz\tzyx”; \t ký tự trắng Kết quả: xyz zyx cout<<"xyz\t\bzyx”; \b Xuất lùi về sau Kết quả: xyzzyx cout<<"xyz\nzyx”; \n hoặc Xuống dịng Kết quả: xyz endl zyx cout<<"xyz\rzyx”; \r Về đầu dịng Kết quả: zyx 34
- CÁCH TRÌNH BÀY CHƯƠNG TRÌNH Mỗi lệnh nằm trên một dịng. Cuối dịng lệnh PHẢI cĩ dấu chấm phẩy (;). Lệnh quá dài cĩ thể được viết thành nhiều dịng sao cho mỗi lệnh phải được quan sát trọn vẹn trong pham vi cửa sổ lệnh. 35
- CÁCH TRÌNH BÀY CHƯƠNG TRÌNH (tt) Khơng nên đặt nhiều lệnh trên cùng một dịng, ngay cả các khai báo biến, nếu các biến cĩ khác kiểu cũng nên đặt trên các dịng khác nhau. Cĩ các chú thích, ghi chú đầy đủ Chương trình phân cấp các khối lệnh con theo từng cột 36
- HƯỚNG DẪN SỬ DỤNG BC++3.1 37
- TẠO MỚI PROJECT TRONG MS VC++ 2005 38
- BÀI TẬP 1 Cho biết kết quả của những lệnh sau: int a, b; b=a++ + ++a + a; cout<<"a=“<<a<<“, b=“<<b; Với a = 2 Kết quả: Với a = 9 Kết quả: int a, b; b= a + a; b; cout<<"a=“<<a<<“, b=“<<b; Với a = 19 Kết quả: Với a = 10 Kết quả: 39
- int a, b; b=a%2 + a/2 + a; cout<<"a=“<<a<<“, b=“<<b; Với a = 17 Kết quả: Với a = 3 Kết quả: int a, b; b=a/3 + a ; cout<<"a=“<<a<<“, b=“<<b; Với a = 8 Kết quả: Với a =21 Kết quả: int k; cout<<(k%3==0)?k++: k ; Với k =10 Kết quả: Với k =15 Kết quả: 40
- Các định danh nào sau đây là khơng hợp lệ? Main Tinh Tong Tinh-Tong Tinh_Tong x_Mu_2 2_Mu_2 using class Tien$ default yahoo.com 41
- Cho biết những chỗ sai và sửa lại cho đúng int n = -100; uint i = -100; int = 2.9; long m = 2, p = 4; int 2k; float y = y * 2; char ch = “b”; Viết chương trình in ra màn hình thơng tin cá nhân theo mẫu sau: Ho ten: Lop: Thong tin lien lac: Dia chi: So dien thoai: 42
- BÀI TẬP 2 Mơ tả giải thuật bằng mã giả, lưu đồ và viết các chương trình sau: Viết chương trình nhập vào giờ phút và giây, đổi ra giây và xuất kết quả ra màn hình. Viết chương trình nhập vào 3 số nguyên a, b và c, tính giá trị trung bình cộng của 3 số trên và xuất kết quả ra màn hình. 43
- Viết chương trình cho phép nhập vào một số đo nhiệt độ theo độ Fahrenheit và xuất ra nhiệt độ tương đương của nĩ theo độ Celsius, sử dụng cơng thức chuyển đổi: 5 0C (0F 32) 9 Viết chương trình nhập vào 3 số nguyên a, b và c, cho biết 3 số vừa nhập cĩ thứ tự tăng dần (a<b<c) khơng? Và xuất kết quả. 44