Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 45 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
45
Dung lượng
1,78 MB
Nội dung
Đề Cương Bài Tập C++ Đề nghị các bạn học thuộc hết lý thuyết ở trên này rồi mới bắt đầu làm bài tập vì như thế các bạn sẽ hiểu và nhớ lâu hơn!!!. Câu 1: Sự khác biệt giữa một trình xử lý văn bản và một bộ xử lý từ là gì? Một trình xử lý văn bản sẽ tạo ra các file dạng thô chỉ chứa ký tự mã ASCII (plain text) trong chúng. Chúng không có các lệnh định dạng hoặc các biểu tượng nào khác được yêu cầu bởi bộ xử lý từ. Các file văn bản không tự động ngắt từ in đậm, in nghiêng,… Câu 2: Hỏi #include sẽ thực hiện chức năng gì? Đây là một chỉ thị tiền xử lý và nó sẽ hoạt động khi bạn gọi trình biên dịch. Chỉ thị đặc biệt này làm cho file có tên sau từ khóa include được đọc vào giống như nó được nhập vào tại vị trí đó trong mã nguồn của bạn. Câu 3: Hỏi: Sự khác biệt giữa các chú giải kiểu // và các chú giải kiểu /* */ là gì? Dấu chú giải // sẽ hết hiệu lực ở cuối dòng. Các chú giải /* có hiệu lực cho đến khi nào có một chú giải đóng */. Câu 4:Hỏi: Sự khác biệt giữa một chú giải tốt và một chú giải không tốt là gì? Một chú giải tốt sẽ thông báo cho người đọc biết mục đích của một đoạn mã phức tạp. Một chú giải không tốt trình bày lại những gì mà một đoạn mã đang thực hiện. Câu 5: Biến là gì? Trong C++, biến là nơi để lưu trữ thông tin. Câu 6: Lập trình là gì? Lập trình thực chất là điều khiển – bằng một ngôn ngữ lập trình cụ thể - các xử lý thông tin trên máy tính điện tử theo yêu cầu của bài toán đặt ra. Kết quả của lập trình là chương trình được hợp thức hóa. Câu 7: Chương trình là gì? Một chương trình (program) có thể được định nghĩa là một tập hợp lệnh do người lập trình tạo nên hoặc một phần mềm có khả năng thực thi. Câu 8: Con trỏ là gì? Con trỏ là một biến lưu trữ một địa chỉ của bộ nhớ. Câu 9: Toán tử là gì? Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 1 Một toán tử là một ký hiệu yêu cầu trình biên dịch thực hiện một hành động. Các toán tử hoạt động trên các toán hạng, và trong C++ tất cả các toán hạng đều là biểu thức. Trong C++ có nhiều loại toán tử khác nhau. Hai trong các loại này là: • Toán tử gán. • Toán tử toán học. Câu 10: Hãy liệt kê các ký hiệu toán tử trong C++? Toán tử gán (Assignment Operator): Ký hiệu là “=” chuyển kết quả của các toán hạng bên vế phải của toán tử gán sang toán hạng bên trái của toán tử gán. Biểu thức x = a + b; . Biểu thức này sẽ gán kết quả của phép cộng a và b sang toán hạng x. Toán hạng hợp lệ ở vế trái của toán tử gán được gọi là lvlue (left value). Toán hạng ở bên vế phải của toán tử gán được gọi là rvalue (right value). Các hằng số luôn là rvalue. Chúng ko thể là lvalue. Vì thế bạn có thể viết: X = 35; // ok Nhưng bạn ko thể viết 35 = X; // error, not an lvalue! Giải thích: Lvalue là một toán hạng nằm ở bên trái của toán tử gán. Rvalue là một toán hạng nằm ở bên phải của toán tử gán. Toán tử toán học: Có năm toán tử toán học: cộng(+), trừ(-), nhân(*), chia(/) và phép chia lấy dư(%). Phép cộng và phép trừ sẽ thực hiện đúng những gì mà bạn đã biết. Tuy nhiên phép trừ với các số nguyên không dấu (unsigned) có thể sẽ dẫn đến những kết quả đáng ngạc nhiên. Ví dụ: Cho Kq = 105, Bạn hãy use các toán tử làm sao cho kết quả bằng 5. Trả lời: Dùng %= để tính toán ta có: Kq %= 10; Câu lệnh này có nghĩa là lấy Kq / 10 = 10.5 và lấy phần dư, ở đây dư 0.5 thì kết quả sẽ là 5. Lưu ý là Kq phải ở dạng int or unsigned thì mới được. Toán tử quan hệ: Tên Toán tử Ví dụ Kết quả Bằng == 100 == 50; Sai 50 == 50; Đúng Không bằng != 100 != 50; Đúng 50 != 50; Sai Lớn hơn > 100 > 50; Đúng 50 > 50; Sai Lớn hơn hoặc bằng >= 100 >= 50; Đúng Nhỏ hơn < 100 < 50; Sai Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 2 50 < 50; Sai Nhỏ hơn hoặc bằng <= 100 <= 50; Sai 50 <= 50; Đúng Chia số nguyên và chia lấy số dư (Modulus): Phép chia số nguyên hơi khác với phép chia thông thường. Khi bạn chia 21 với 4, kết quả sẽ là một số thực có phần thập phân (các kiểu như float, double, long double). Do đó số nguyên ko có phần thập phân nên phần thập phân sẽ bị bỏ đi. Kết quả sẽ là 5.Để lấy số dư, bạn phải thực hiện phép chia lấy dư 21 cho 4 (21 % 4). Kết quả sẽ là 1. Toán tử % cho bạn biết số dư sau một phép chia số nguyên. Ví dụ: Bạn hãy chạy chương trình sau để luyện skill của bạn(nếu ko hiểu đề nghị bạn coi cái bảng hồng hồng ở dưới). Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 3 Kết quả phải như sau: Kết hợp toán tử gán và toán tử toán học: Việc cộng một giá trị vào một biến, và sau đó gán kết quả ngược lại biến này là một vấn đề rất phổ biến. Nếu bạn có một biến myAge và bạn muốn tăng giá trị của nó lên hai thì bạn có thể viết int myAge = 5; int temp; temp = myAge + 2; // add 5+2 and put it in temp myAge = temp; // put it back in myAge Tuy nhiên phương pháp này rất phức tạp. Trong C++, bạn có thể đặt cùng một biến trên cả hai vế của toán tử gán, như vậy đoạn mã trên trở thành: int myAge = 5; myAge = myAge + 2; Trong C++, câu lệnh thứ hai được đọc là “ Cộng hai vào giá trị của myAge và gán kết quả vào myAge”. Có một cách viết khác đơn giản hơn nhưng có thể hơi khó đọc: myAge += 2; Toán tử cộng tự gán (+=) sẽ cộng rvalue và lvalue sau đó gán lại kết quả vào lvalue. Toán tử này đọc là “cộng – bằng”. Câu lệnh trên được đọc là myAge cộng bằng 2”. Nếu myAge có giá trị là 4 thì nó sẽ có giá trị là 6 sau câu lệnh này. Ngoài ra chúng ta còn có các toán tử trừ(-=), chia(/=), nhân(*=) và chia lấy số dư(%=) tự gán. Phép tăng và phép giảm: Giá trị phổ biến nhất để tăng (hoặc giảm) và sau đó gán lại vào một biến là 1. Trong C++, việc tăng giá trị lên một được gọi là phép tăng, và việc giảm bớt giá trị đi 1 được gọi là phép giảm. Có những toán tử đặc biệt để thực hiện những thao tác này. Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 4 Toán tử tăng sẽ cộng thêm 1 vào giá trị của biến, Và toán tử giảm ( ) sẽ trừ giá trị của biến đi 1. Vì thế, nếu bạn có một biến C, và bạn muốn tăng nó bạn có thể thực hiện câu lệnh sau: C++; // Start with C and increment it. Câu lệnh trên tương đương với câu lệnh C = C + 1; Và cũng tương đương với câu lệnh C += 1; Tiền tố và hậu tố: Cả hai toán tử tăng và toán tử giảm đều có hai loại khác nhau là tiền tố và hậu tố. Tiền tố được viết trước tên biến (++myAge) và hậu tố được viết sau tên biến(myAge++). Toán tử tiền tố được thực hiện trước khi gán và toán tử hậu tố được thực hiện sau khi gán. Về ngữ nghĩa thì tiền tố là tăng(or giảm) giá trị của biến rồi sau đó mới sử dụng giá trị này. Còn hậu tố thì sử dụng giá trị này trước rồi sau đó mới tăng(or giảm). Nếu x là một số nguyên có giá trị là 5 và bạn viết int a = ++x; thì trình biên dịch sẽ tăng x (lúc này x = 6) và sau đó sử dụng giá trị gán vào a. Như vậy bây giờ a là 6 và x là 6. Nếu sau khi thực hiện điều này bạn viết int b = x++; thì trình biên dich sử dụng giá trị trong x(6) và gán nó sang b, sau đó tăng x. Như vậy bây giờ b là 6 nhưng x là 7. Nếu bạn sử dụng việc gia tăng hậu tố ví dụ như x++ thì việc gia tăng sẽ xảy ra sau khi in(sau khi bạn sử dụng cout). Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 5 Và kết quả xuất ra màn hình như sau: Thứ tự ưu tiên của các toán tử: Thứ tự Tên toán tử Toán tử 1 Toán tử phân giải phạm vi (setiosflags(ios::left)) :: 2 Toán tử thành viên, toán tử chỉ số, toán tử gọi hàm, toán tử tăng hậu tố(tiền tố), toán tử giảm hậu tố(tiền tố). . [] () ++ 3 Toán tử tăng tiền tố, toán tử giảm tiền tố, toán tử lấy phần bù, phép đảo, cộng một ngôi, trừ một ngôi, toán tử lấy địa chỉ, toán tử lấy nội dung, toán tử ép kiểu. ++ ~ ! + - & () 4 Phép nhân, chia, chia lấy số dư * / % 5 Toán tử cộng, toán tử trừ + - 6 Toán tử dịch chuyển << >> 7 Các toán tử so sánh không bằng < <= > >= 8 Toán tử bằng, toán tử không bằng == != 9 Phép và từng bit & 10 Phép hoặc loại trừ từng bit ^ 11 Phép hoặc từng bit | 12 Phép và luận lý && 13 Phép hoặc luận lý || 14 Toán tử điều kiện ?: 15 Các toán tử gán = *= /= %= += -= < <= > >= &= |= ^= Toán tử logic: Thông thường bạn muốn hỏi nhiều câu hỏi quan hệ ở cùng một thời điểm. “Có đúng là x lớn hơn y và có đúng là y lớn hơn z hay không?” Một chương trình có thể cần xác định nhiều điều kiện để thực hiện một hoạt động. Có ba toán tử logic trong C++ và chúng được liệt kê trong bảng sau đây. Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 6 Toán tử Ký hiệu Ví dụ AND && biểuthức_1 && biểuthức_2 OR || biểuthức_1 || biểuthức_2 NOT ! ! biểuthức AND: Toán tử logic AND sẽ trả về giá trị là đúng nếu cả hai biểu thức đều đúng. Như vậy biểu thức trong câu lệnh if sau đây: if ((x == 5) && (y == 5)) Sẽ có giá trị là đúng nếu x và y đều bằng 5, và là sai nếu x or y không bằng 5. Chú ý rằng toán tử logic AND được ký hiệu là &&. Còn & là ký hiệu của toán tử lấy địa chỉ (toán tử VÀ tôi trình bày ở bên dưới ). OR: Toán tử logic OR trả về giá trị là đúng nếu một trong hai biểu thức này là đúng. Như vậy biểu thức trong câu lệnh if sau đây: if ((x == 5) || (y == 5)) Có giá trị là True nếu x hoặc y bằng 5 hoặc cả hai đều bằng 5. Ký hiệu của toán tử logic OR là ||. Biểu tượng | là ký hiệu của toán tử hoặc. NOT: Toán tử logic NOT trả về giá trị là đúng nếu biểu thức được kiểm tra là sai. Như vậy: if (!(x == 5) là đúng chỉ khi x không bằng 5. Câu lệnh này hoàn toàn có thể viết lại là: if (x != 5) // Đọc là “Nếu x không bằng 5 thì đúng”. Toán tử != là toán tử không bằng (bạn coi bảng hồng hồng ở trên). Đúng và Sai: Trong C++, 0 là sai và bất kỳ giá trị nào khác đều là đúng(bạn chỉ nên sử dụng 1 là đúng cho đỡ nhầm lẫn). Bởi vì một biểu thức luôn luôn có một giá trị nên nhiều nhà lập trình C+ + tận dụng tính năng này trong các câu lệnh if của họ. Một câu lệnh chẳng hạn như: if (x) // if x is true (nonzero) nghĩa là x chỉ đúng nếu x khác không x = 0; câu lệnh trên được đọc như sau: “Nếu x ≠ 0(if(x)), thì gán giá trị cho x là 0(x = 0)”. Sẽ làm cho bạn dễ hiểu hơn nếu nó được viết lại là: if (x != 0) // if x is nonzero x = 0; cả hai câu lệnh trên đều hợp lệ nhưng câu sau rõ ràng hơn vì bạn có thể thấy được là nó khác không(x != 0). Hai lệnh sau tương đương với nhau: if (!x) // if x is false (zero), bạn có thể hiểu như sau: Nó trái với câu “if(x) hay if(x != 0)”, ở đây nó nói là “Nếu x = 0, thì câu lệnh này là sai và không được thực thi(không gán cho x một giá trị nào hết). if (x == 0) // if x is zero , câu này tương tự câu if(!x) Ví dụ: Bạn hãy chạy chương trình sau để luyện skill của bạn. Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 7 Nếu bạn use file .h thì nó phải viết như sau: bool LaSoNT(int x) { if (x < 2) return false; else { int m = (int)sqrt((double)x); for(int k = 2; k <= m; k++) if(x % k == 0) return false; return true; } } Toán tử điều kiện: Toán tử điều kiện (?:) là toán tử duy nhất của C++ có ba toán hạng. Toán tử điều kiện có dạng: (biểu thức 1) ? (biểu thức 2) : (biểu thức 3) Bạn có thể đọc lại theo ngôn ngữ bình thường như sau: “Nếu biểu thức 1 là đúng , sẽ trả về giá trị của biểu thức 2, ngược lại sẽ trả về giá trị của biểu thức 3”. Giá trị này sẽ được gán vào một biến. Ví dụ: Bạn hãy chạy chương trình sau để luyện skill của bạn. Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 8 Kết quả xuất phải như sau: Phân tích code: Ba biến kiểu int được tạo ra là: x, y và z. Hai biến đầu tiên được người sử dụng cung cấp giá trị. Câu lệnh if trên dòng 16 sẽ kiểm tra xem giá trị nào lớn hơn và gán giá trị đó cho z. Giá trị này được in trên dòng 20 . Toán tử điều kiện trên dòng 22 thực hiện phần kiểm tra tương tự và gán cho z giá trị lớn hơn. Dòng 22 có thể đọc theo ngôn ngữ bình thường như sau: “Nếu x lớn hơn y, sẽ gán giá trị của x cho z, ngược lại sẽ gán giá trị của y cho z”. Giá trị của z sẽ được in ra trên dòng 23. Như bạn có thể thấy, câu lệnh sử dụng toán tử điều kiện là một câu lệnh tương đương nhưng ngắn gọn hơn so với câu lệnh if…else. Ví dụ: Bạn hãy chạy chương trình sau để luyện skill của bạn(minh họa cho if…else như nói ở trên). Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 9 Và kết quả xuất phải như sau: Phân tích code: Các dấu ngoặc móc trên dòng 15 và 18 làm cho tất cả các câu lệnh có trong nó trở thành một câu lệnh duy nhất và bây giờ else trên dòng 19 sẽ gắn với if ở dòng 14 như dự định. Nếu bạn nhập vào số 20 thì biểu thức trong câu lệnh if trên dòng 14 là đúng, tuy nhiên, biểu thức trong câu lệnh if trên dòng 16 là sai nên sẽ không có thông báo nào được in. Tốt hơn là bạn hãy tự mình đặt một mệnh đề else khác sau dòng 17 để nắm bắt được các lỗi và in ra một thông báo. Cuối cùng là các toán tử thao tác trên bit: Gồm có 4 toán tử là : Toán tử VÀ, toán tử HOẶC, toán tử HOẶC LOẠI TRỪ, toán tử LẤY PHẦN BÙ. Ký hiệu Toán tử & VÀ Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 10 [...]... trị đều được xem là giá trị trong C++ Một biểu thức sẽ trả về một giá trị Vì thế 3+2 sẽ trả về giá trị 5 và nó là một biểu thức Tất cả các biểu thức đều là các câu lệnh Có rất nhiều mã được gọi là biểu thức có thể làm bạn ngạc nhiên Sau đây là hai ví dụ: 3.2 // return the value 3.2 PI // float const that returns the value 3.14 Giả sử rằng PI là một hằng số có giá trị là 3.14, cả hai câu lệnh trên đều... tiếp Bạn không thể nhập “Sunday” vì chương trình không biết cách dịch Sunday thành một giá trị Câu 14: Câu lệnh là gì? Trong C++, một câu lệnh có thể điều khiển trình tự thực thi, xác định giá trị của một biểu thức, hoặc không làm gì cả (câu lệnh NULL) Tất cả các câu lệnh của C++ đều kết thúc bằng dấu “;” (trừ lệnh tạo ra một hằng số - #define MAX 100 thì không có dấu “;” sau nó) Câu 15: Khối lệnh là... lệnh khác nếu biểu thức điều kiện có giá trị là sai Trong bài tập RedSoxScore vs YankeesScore bạn muốn in một thông báo (Go Sox!) nếu biểu thức (RedSoxScore> YankeesScore) có giá trị là True, và một thông báo khác (Go Yanks!) nếu nó có giá trị là False Từ khóa else có thể làm cho mã dễ đọc hơn: if (biểu thức) Các câu lệnh; else Các câu lệnh; Bài EG dưới đây sẽ chứng minh điều tôi nói ở trên: Phân tích... chỉ có chức năng xuất n! và yêu cầu người dùng nhập vào n để máy tính xử lý” Tất cả code của bài toán bạn có thể hiểu là như thế Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 33 Bài 26:Viết chương trình tính tổ hợp chập k của n phần tử ( ) Phân tích code: Ta thấy cái khúc code tạo n! thì như bài ở trên, chỉ thêm một đoạn mã là: unsigned long To_hop_chap(int k, int n) { return (Giaithua(n)... thức 1 không đúng thì biểu thức 4 sẽ được thực thi”.Như bạn thấy đấy, các câu lệnh if phức tạp rất dễ gây nhầm lẫn Bài ví dụ sau đây sẽ cm điều tôi nói ở trên: Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 21 Và kết quả xuất phải như sau: Câu 18: Mảng là gì? Một mảng là một tập hợp các vị trí lưu trữ dữ liệu, mỗi một vị trí lưu trữ dữ liệu thuộc cùng kiểu Mỗi vị trí lưu trữ được gọi là... Bạn dựa vào bài toán này để xác định ký tự đó là số mấy trong bảng mã ASCII(American Standard Code for Information Interchange) mà khỏi mất công dùng Hợp ngữ trong Debug để kiếm từng chữ.Nếu bạn muốn xuất ký tự xuất hiện từ số 1 thì chỉ việc thay đổi i = 1 là ok Kết quả xuất phải như sau: Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 11 Ký tự in đặc biệt: Trình biên dịch C++ nhận dạng... – k)”, giải thích như vậy tôi nghĩ bạn đã hiểu công thức này Bài 27: Viết chương trình tính Chỉnh hợp chập k của n phần tử? Tương tự như trên chỉ khác ở đoạn mã: unsigned long To_hop_chap(int k, int n) { return (Giaithua(n) / Giaithua(n - k)) ; } Tương ứng với công thức: (lưu ý là chỉnh hợp còn được ký hiệu là Và kết quả xuất ra như sau: Bài 28: Viết chương trình giải phương trình bậc nhất aX + b =... kê: Các hằng liệt kê( enumerated constant ) giúp bạn tạo ra các kiểu dữ liệu mới và sau đó giúp bạn định nghĩa biến của những kiểu dữ liệu này, giá trị của những kiểu dữ liệu này được giới hạn trong một tập hợp giá trị hợp lý Ví dụ sau đây minh họa cho điều này: Hoặc ví dụ sau đây: Và kết quả xuất phải như sau: Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 14 Phân tích mã nguồn: Trên dòng... chứng minh điều tôi nói ở trên: Phân tích Code: Biểu thức điều kiện trong câu lệnh if trên dòng 13 sẽ được kiểm tra Nếu biểu thức có giá trị là đúng thì câu lệnh trên dòng 14 sẽ thực hiện Nếu xóa mệnh đề else trên dòng 13, thì câu lệnh trên dòng 14 sẽ thực hiện bất kể biểu thức có giá trị là True hay False Nên nhớ rằng câu lệnh if Lương Thanh Bình – Khoa Công Nghệ Thông Tin – Đại Học Đà Lạt 20 sẽ kết... thúc sau dòng 14 Nếu else ko có ở đó thì dòng 16 sẽ là dòng lệnh kế tiếp được thực thi trong chương trình Câu 17: Phát biểu về câu lệnh if nâng cao? Bất kỳ câu lệnh nào cũng có thể đc use trong mệnh đề if or else cho dù nó là một câu lệnh if khác Vì thế bạn có thể gặp các câu lệnh if phức tạp có dạng sau đây: Câu lệnh if cồng kềnh này phát biểu rằng: “ Nếu biểu thức 1 đúng và biểu thức 2 đúng thì . Đề Cương Bài Tập C++ Đề nghị các bạn học thuộc hết lý thuyết ở trên này rồi mới bắt đầu làm bài tập vì như thế các bạn sẽ hiểu và nhớ lâu hơn!!!. Câu. hiện một hành động. Các toán tử hoạt động trên các toán hạng, và trong C++ tất cả các toán hạng đều là biểu thức. Trong C++ có nhiều loại toán tử khác nhau. Hai trong các loại này là: • Toán. lệnh là gì? Trong C++, một câu lệnh có thể điều khiển trình tự thực thi, xác định giá trị của một biểu thức, hoặc không làm gì cả (câu lệnh NULL). Tất cả các câu lệnh của C++ đều kết thúc bằng