Tin học đại cương - Chương 1: Tổng quan về máy tính điện tử

Trong cuộc sống, người ta có nhu cầu đọc báo, xem truyền hinh, giao tiếp với

người khác để có thông tin. Thông tin là sự hiểu biết của con người về một sự kiện, một

hiện tượng nào đó thu nhận qua nghiên cứu, trao đổi, nhận xét, học tập, truyền thụ, cảm

nhận.

Con người hiểu được thông tin qua lời nói, chữ viết, qua các dạng biểu diễn

thông tin khác và diễn tả thông tin thành ngôn ngữ để truyền đạt cho nhau. Thông tin

được chuyển tải qua các môi trường vật lý khác nhau như ánh sáng, sóng âm, sóng điện

từ, Thông tin được ghi trên các phương tiện hữu hình như các văn bản tr ên giấy,

băng ghi âm hay phim ảnh,.

pdf92 trang | Chia sẻ: Mr Hưng | Lượt xem: 789 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Tin học đại cương - Chương 1: Tổng quan về máy tính điện tử, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hiều dài của chuỗi str. Chương trình sau đây đưa ra ví dụ đơn giản sử dụng hàm strlen(). Nó tìm chiều dài của tên một công ty và hiển thị tên công ty đó với các ký tự được phân cách nhau bởi ký tự „*‟.  Ví dụ 4.17: #include #include #include int main() { char compname[20] = "Microsoft"; int len, ctr; clrscr(); /* Determines the length of the string */ len = strlen(compname); /* Accesses and displays each character of the string*/ for(ctr = 0; ctr < len; ctr++) printf("%c * ", compname[ctr]); getch(); return 0; } Bài giảng Tin học đại cương Khoa Công nghệ thông tin Trang 65/92 BÀI TẬP CHƢƠNG 4 I. MẢNG MỘT CHIỀU a. Nhập xuất mảng một chiều 1. Viết chương trình nhập xuất mảng một chiều các số thực. 2. Viết chương trình khởi tạo giá trị các phần tử là 0 cho mảng một chiều các số nguyên gồm n phần tử. 3. Viết chương trình phát sinh ngẫu nhiên mảng một chiều các số nguyên âm. 4. Viết chương trình phát sinh ngẫu nhiên mảng một chiều các số nguyên sao cho mảng có thứ tự tăng dần (Không sắp xếp). 5. Viết chương trình nhập mảng các số thực và xuất các phần tử âm trong mảng. 6. Viết chương trình nhập mảng các số nguyên và xuất các phần tử lẻ có trong mảng. 7. Viết chương trình nhập vào mảng một chiều các số nguyên và xuất ra các phần tử chẵn nhỏ hơn 20. 8. Viết chương trình nhập vào mảng một chiều các số nguyên và xuất ra màn hình các phần tử là số nguyên tố. 9. Viết chương trình nhập vào số nguyên n và liệt kê các số nguyên tố nhỏ hơn n, nếu mảng không tồn tại số nguyên tố nào nhỏ hơn n thì phải xuất ra một câu thông báo. 10. Viết chương trình nhập vào mảng một chiều các số nguyên và xuất ra màn hình các phần tử là số chính phương nằm tại những vị trí lẻ trong mảng. b. Tìm kiếm trên mảng một chiều 11. Viết hàm tìm vị trí phần tử có giá trị x xuất hiện cuối cùng trong mảng. 12. Viết hàm tìm vị trí của phần tử nhỏ nhất trong mảng các số nguyên. 13. Viết hàm tìm vị trí của phần tử lớn nhất trong mảng các số nguyên. 14. Viết hàm in vị trí các phần tử nguyên tố trong mảng các số nguyên. 15. Viết hàm in vị trí các phần tử nguyên tố lớn hơn 23. 16. Viết hàm tìm vị trí phần tử âm đầu tiên trong mảng. Nếu không có phần tử âm trả về –1. 17. Viết hàm tìm vị trí phần tử âm lớn nhất trong mảng. 18. Viết hàm tìm vị trí phần tử duong đầu tiên trong mảng. Nếu không có phần tử âm trả về –1. 19. Viết hàm tìm vị trí phần tử duong bé nhất trong mảng. 20. Viết hàm in các phần tử là bội của 3 và 5. 21. Viết hàm tìm số chẵn cuối cùng có trong mảng, nếu không tồn tại số chẵn hàm trả về -1 . 22. Viết hàm tìm số lẻ lớn nhất có trong mảng, nếu không tồn tại số lẻ hàm trả về -1. 23. Viết hàm tìm và dổi chỗ phần tử lớn nhất với phần tử nhỏ nhất trong mảng. 24. Nhập vào X. Viết hàm in ra màn hình những phần tử có giá trị từ 1 dến X có trong mảng. 25. Viết chương trình nhập vào một dãy số a gồm n số thực (n<=100), nhập vào dãy số b gồm m số thực (m<=100). - In ra những phần tử chỉ xuất hiện trong dãy a mà không xuất hiện trong dãy b. - In ra những phần tử xuất hiện ở cả hai dãy. Bài giảng Tin học đại cương Khoa Công nghệ thông tin Trang 66/92 c. Ðếm – Tần suất 26. Viết hàm đếm các phần tử âm, dương trong mảng. 27. Viết hàm đếm các phần tử chẵn, lẻ trong mảng. 28. Viết hàm đếm số lần xuất hiện của phần tử x trong mảng. 29. Viết hàm đếm các phần tử nhỏ hơn x trong mảng. 30. Viết hàm đếm các phần tử là số nguyên tố trong mảng. 31. Viết hàm đếm các phần tử là số hoàn thiện trong mảng. 32. Viết hàm đếm các phần tử là bội của 3 và 5 trong mảng các số nguyên. d. Tính tổng – Trung bình có diều kiện 33. Viết hàm tính tổng các phần tử chẵn trong mảng. 34. Viết hàm tính tổng các phần tử lẻ trong mảng các số nguyên. 35. Viết hàm tính tổng các phần tử nguyên tố trong mảng. 36. Viết hàm tính tổng các phần tử nằm ở vị trí chẵn trong mảng các số nguyên. 37. Viết hàm tính tổng các phần tử nằm ở vị trí nguyên tố trong mảng. 38. Viết hàm tính tổng các phần tử chia hết cho 5 có trong mảng. 39. Viết hàm tính tổng các phần tử cực đại trong mảng các số nguyên (phần tử cực đại là phần tử lớn hơn các phần tử xung quanh nó). Ví dụ : 1 5 2 6 3 5 1 8 6 40. Viết hàm tính tổng các phần tử cực tiểu trong mảng các số nguyên ( phần tử cực tiểu là phần tử nhỏ hơn các phần tử xung quanh nó ). Ví dụ : 6 4 2 9 5 3 7 1 5 8 41. Viết hàm tính tổng các phần tử là bội của 3 và 5 trong mảng các số nguyên. 42. Viết hàm tính tổng các phần tử là số hoàn thiện trong mảng các số nguyên. 43. Viết hàm tính giá trị trung bình của các số hoàn thiện trong mảng các số nguyên. e. Sắp xếp 44. Viết hàm sắp xếp mảng theo thứ tự giảm dần. 45. Viết hàm sắp xếp mảng theo thứ tự tăng dần của các phần tử là số nguyên tố. 46. Viết hàm sắp xếp các phần tử lẻ tăng dần. 47. Viết hàm sắp xếp các phần tử chẵn giảm dần. 48. Viết hàm sắp xếp các phần tử chẵn nằm bên trái theo thứ tự tăng dần còn các phần tử lẻ bên phải theo thứ tự giảm dần. 49. Viết hàm sắp xếp các phần tử âm giảm dần từ trái sang phải, phần tử dương tăng dần từ phải sang trái. f. Xoá 50. Viết hàm xoá phần tử tại vị trí lẻ trong mảng. 51. Viết hàm xoá phần tử có giá trị lớn nhất trong mảng. 52. Nhập vào giá trị X. Viết hàm xoá tất cả các phần tử có giá trị nhỏ hơn X. 53. Nhập vào giá trị X. Viết hàm xoá phần tử có giá trị gần X nhất. g. Chèn 54. Viết hàm chèn phần tử có giá trị X vào vị trí đầu tiên của mảng. 55. Viết hàm chèn phần tử có giá trị X vào phía sau phần tử có giá trị lớn nhất trong mảng. Bài giảng Tin học đại cương Khoa Công nghệ thông tin Trang 67/92 56. Viết hàm chèn phần tử có giá trị X vào truớc phần tử có giá trị là số nguyên tố đầu tiên trong mảng. 57. Viết hàm chèn phần tử có giá trị X vào phía sau tất cả các phần tử có giá trị chẵn trong mảng. h. Tách / ghép mảng 58. Viết chương trình tách 1 mảng các số nguyên thành 2 mảng a và b, sao cho mảng a chứa toàn số lẻ và mảng b chứa toàn số chẵn. Ví dụ: Mảng ban đầu: 1 3 8 2 7 5 9 0 10 Mảng a: 1 3 7 5 9 Mảng b: 8 2 10 59. Cho 2 mảng số nguyên a và b kích thuớc lần luợt là n và m. Viết chương trình nối 2 mảng trên thành mảng c theo nguyên tắc chẵn ở đầu mảng và lẻ ở cuối mảng. Ví dụ: Mảng a: 3 2 7 5 9 Mảng b: 1 8 10 4 12 6 Mảng c: 6 12 4 10 2 8 3 1 7 5 9 II. CHUỖI KÝ TỰ 1. Viết chương trình nhập vào một chuỗi ký tự, đếm số ký tự có trong chuỗi. 2. Viết chương trình đếm có bao nhiêu khoảng trắng trong chuỗi. 3. Viết chương trình nhập vào một chuỗi, hãy loại bỏ những khoảng trắng thừa trong chuỗi. 4. Viết chương trình nhập vào hai chuỗi s1 và s2, nối chuỗi s2 vào s1. Xuất chuỗi s1 ra màn hình. 5. Đổi tất cảcác ký tự có trong chuỗi thành chữ thường (không dùng hàm strlwr). 6. Đổi tất cả các ký tự trong chuỗi sang chữ in hoa (không dùng hàm struppr). 7. Viết chương trình đổi những ký tự đầu tiên của mỗi từ thành chữ in hoa. 8. Viết chương trình đổi chữ xen kẻ 1 chữ hoa và 1 chữ thường. Ví dụ:nhập ABCDEfgh đổi thành AbCdEfGh 9. Viết chương trình đảo ngược các ký tự trong chuỗi. Ví dụ:nhập ABCDE, xuất ra màn hình là:EDCBA 10. Viết chương trình tìm kiếm 1 ký tự xem có trong chuỗi hay không, nếu có xuất ra vị trí của từ đó. 11. Viết 1 chương trình đếm một ký tự xuất hiện bao nhiêu lần trong chuỗi. 12. Viết chương trình tìm kiếm tên trong chuỗi họ tên. Nếu có thì xuất ra là tên này đã nhập đúng, ngược lại thông báo là đã nhập sai. 13. Viết chương đảo vị trí của từ đầu và từ cuối. Ví dụ:nhập “bo an co” xuat ra “co an bo” 14. Viết hàm cắt chuỗi họ tên thành chuỗi họ lót và chuỗi tên. Ví dụ: chuỗi họ tên là: ”Nguyễn Văn A” cắt ra 2 chuỗi là chuỗi họ lót: ”Nguyễn Văn”, chuỗi tên là: ”A” 15. Nhập một chuỗi bất kỳ, sau đó hỏi người dùng cần tách bắt đầu từ đâu trong chuỗi trở về sau. Ví dụ: Nhập chuỗi S1: “Trường Cao Đẳng Công Nghiệp Tuy Hòa”. Người nhập muốn tách bắt đầu từ chữ “Công” thì sẽ xuất ra chuỗi “Công Nghiệp Tuy Hòa” ra màn hình. 16. Viết hàm kiểm tra xem chuỗi có đối xứng hay không?. Bài giảng Tin học đại cương Khoa Công nghệ thông tin Trang 68/92 17. Viết hàm tra xem trong chuỗi có ký tự số hay không nếu có tách ra thành một mảng số riêng. 18. Nhập một chuỗi bất kì, yêu cầu nhập 1 ký tự muốn xóa. Thực hiện xóa tất cả những ký tự đó trong chuỗi. 19. Viết chương trình tìm kiếm xem ký tự nào xuất nhiện nhiều nhất trong chuỗi. III. MẢNG NHIỀU CHIỀU a. Bài tập nhập xuất 1. Viết hàm nhập ma trận các số nguyên dương (nhập sai báo lỗi và không cho nhập). 2. Viết hàm nhập/ xuất ma trận các số thực. 3. Viết hàm in ra những phần tử có ký số tận cùng là 5. 4. Viết chương trình in ra các phần tử nằm trên 2 đường chéo. 5. Viết hàm in ra các phần tử nằm phía trên đường chéo phụ của ma trận vuông các số nguyên. 6. Viết hàm in ra các phần tử nằm phía dưới đường chéo phụ của ma trận vuông các số nguyên. 7. Viết hàm in ra các phần tửnằm phía trên đường chéo chính của ma trận vuông các số nguyên. 8. Viết hàm in ra các phần tử nằm phía dưới đường chéo chính của ma trận vuông các số nguyên. 9. Viết chương trình khởi tạo giá trị các phần tử là ngẫu nhiên cho ma trận các số nguyên kích thước m x n. 10. Viết hàm tạo ma trận a các số nguyên gồm 9 dòng 14 cột. Trong đó phần tử a[i][j] = i * j 11. Viết hàm in tam giác Pascal với chiều cao h. Ví dụ: h = 5 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 b. Bài tập tính tổng 12. Viết hàm tính tổng các phần tử trên cùng một dòng. 13. Viết hàm tính tổng các phần tử trên cùng một cột. 14. Viết hàm tính tổng các phần tử chẵn có trong ma trận. 15. Viết hàm tính tổng các phần tử nằm trên đường chéo chính của ma trận vuông. 16. Viết hàm tính tổng các phần tử là số nguyên tố có trong ma trận. 17. Viết hàm tính tổng các số hoàn thiện trong ma trận các số nguyên. 18. Viết hàm tính tổng các giá trị lớn nhất trên mỗi dòng. 19. Viết hàm tính giá trị trung bình của các phần tử nhỏ nhất trên mỗi cột. 20. Viết hàm tính tổng các giá trị nhỏ nhất nằm trên từng đường chéo loại 2. 21. Viết hàm tìm đường chéo có tổng lớn nhất trong các đường chéo loại 1. c. Bài tập tìm kiếm 22. Viết hàm tìm vịtrí phần tử lớn nhất trong ma trận các số nguyên. 23. Viết hàm tìm vịtrí phần tử nhỏ nhất trong ma trận các số nguyên. 24. Viết hàm tìm vịtrí phần tử chẵn cuối cùng trong ma trận các số nguyên. 25. Viết hàm tìm phần tử âm lẻ lớn nhất trong ma trận. Bài giảng Tin học đại cương Khoa Công nghệ thông tin Trang 69/92 26. Viết hàm tìm phần tử chẵn dương và nhỏ nhất trong ma trận. 27. Viết hàm tìm số hoàn thiện đầu tiên trong ma trận các số nguyên. 28. Viết hàm tìm số hoàn thiện lớn nhất trong ma trận các số nguyên. 29. Viết hàm tìm vị trí phần tử nguyên tố cuối cùng trong ma trận các số nguyên. 30. Viết hàm tìm phần tử lớn nhất nằm trên đường chéo chính của ma trận vuông. 31. Viết hàm in các số nguyên tố nằm trên đường chéo phụ của ma trận vuông. 32. Viết hàm tìm trong 2 ma trận các số nguyên, những phần tử giống nhau. 33. Viết hàm tìm phần tử nhỏ nhất trên mỗi đường chéo loại 2 của ma trận. 34. Viết hàm tìm và liệt kê những phần tử cực đại trong ma trận (một phần tử được coi là cực đại khi nó lớn hơn các phần tử xung quanh nó). 35. Viết hàm tìm dòng có tổng lớn nhất trong ma trận các số thực. 36. Viết hàm tìm cột có tổng nhỏ nhất trong ma trận các số nguyên. d. Bài tập đếm 37. Viết hàm đếm các giá trị âm, dương trong ma trận các số thực. 38. Viết hàm đếm các giá trịchẵn, lẻ trong ma trận các số nguyên. 39. Viết hàm đếm số lần xuất hiện của phần tử x trong ma trận các số thực. 40. Viết hàm đếm các giá trị nhỏ hơn x trong ma trận các số thực. 41. Viết hàm đếm các phần tử nguyên tố trong ma trận các số nguyên. 42. Viết hàm đến các phần tử nguyên tố trên đường chéo chính của ma trận vuông các số nguyên. 43. Viết hàm đếm các giá trị chẵn trên đường chéo chính của ma trận vuông các số nguyên. 44. Viết hàm đếm các giá trị là bội của 3 và 5 trên đường chéo chính của ma trận các số nguyên. 45. Viết hàm đếm các giá trị nguyên tố trên 2 đường chéo (chính, phụ) của ma trận vuông các số nguyên. 46. Viết hàm đếm các giá trị cực đại trong ma trận các số nguyên. 47. Viết hàm đếm các giá trị cực tiểu trong ma trận các số nguyên. 48. Viết hàm đếm các cực trị trong ma trận các số nguyên (một phần tử được coi là cực trị khi nó là giá trị cực đại hay cực tiểu). 49. Viết hàm đếm các giá trị là số hoàn thiện trong ma trận các số nguyên. e. Bài tập sắp xếp 50. Viết hàm sắp xếp ma trận theo thứ tự tăng dần từ trên xuống dưới và từ trái qua phải theo phương pháp dùng mảng phụ. Hướng dẫn: Đổ ma trận sang mảng một chiều, sắp xếp trên mảng một chiều theo thứ tự tăng dần, sau đó chuyển ngược mảng một chiều thành ma trận kết quả. 51. Viết hàm sắp xếp ma trận theo thứ tự giảm dần từ trên xuống dưới và từ trái sang phải. 52. Viết hàm sắp xếp các dòng trên ma trận theo thứ tự tăng dần. 53. Viết hàm sắp xếp các cột trên ma trận theo thứ tự giàm dần. Bài giảng Tin học đại cương Khoa Công nghệ thông tin Trang 70/92 CHƢƠNG 5 LẬP TRÌNH MODULE 5.1. Phƣơng pháp lập trình module  Lấy ví dụ, một ông chủ yêu cầu các công nhân (A, B, C, ), mỗi công nhân thực hiện một công việc và báo cáo kết quả sau khi làm xong. Ông chủ không biết cụ thể từng công nhân làm thế nào để hoàn thành công việc được giao. Mỗi công nhân (chẳng hạn A) có thể phân chia công việc thành các công việc nhỏ hơn để giao cho các công nhân khác (C, D). Các công nhân này không biết ông chủ là ai, họ chỉ biết làm công việc của mình và báo cáo cho người công nhân A đã giao việc cho họ. Trong công ty này, mỗi người thực hiện một nhiệm vụ khác nhau nhưng đều hướng tới mục đích giúp công ty hoàn thành đúng hợp đồng với khách hàng. Trong lập trình cũng vậy. Khi giải một bài toán phức tạp, ta thường chia bài toán thành các bài toán con để việc giải bài toán ban đầu trở nên dễ dàng hơn. Phương pháp lập trình module chia nhỏ bài toán cần giải quyết thành các bài toán con, các bài toán con lại được chia thành các bài toán con nhỏ hơn, .... Việc chia nhỏ được lặp lại cho đến khi mọi bài toán con đều đơn giản và có thể giải quyết được, việc giải quyết bài toán lớn ban đầu sẽ quy về việc giải nhiều bài toán con.  Việc chia nhỏ “từ trên xuống” giúp LTV tập trung vào giải quyết từng bài toán cụ thể (nhỏ) mà không phải quán xuyến tất cả các công việc mà bài toán đặt ra. Hơn nữa, có thể giao cho các LTV khác giải giúp các bài toán con. Trong thực tế, các bài toán rất phức tạp đòi hỏi phải tập trung sức lực của rất nhiều LTV. Nhờ phương pháp lập trình module, một nhóm LTV có thể cùng tham gia giải quyết một bài toán: trưởng nhóm sẽ thiết kế sơ đồ giải quyết bài toán và xác định các bài toán con cần giải quyết, mỗi LTV sẽ nhận nhiệm vụ giải quyết một bài toán con (công việc sẽ độc lập và đơn giản hơn). CT sẽ được chia ra thành các module (CT con), các module này tiếp tục được phân thành các module nhỏ hơn, . Khi thực thi, CT chính (hàm main) sẽ gọi các module chính để yêu cầu chúng thực thi. Đến lượt mình các module này lại gọi đến các module con khác, . Ông chủ B C A C D Hình 5.1 Quan hệ ông chủ, công nhân Bài giảng Tin học đại cương Khoa Công nghệ thông tin Trang 71/92 5.2. Xây dựng hàm 5.2.1. Quy tắc xây dựng hàm Xét sơ đồ các CT: (CT1) tìm số lớn nhất trong hai số nguyên (hình 3.2), (CT2) xuất ra chu vi lớn nhất trong chu vi hình chữ nhật và chu vi hình vuông (hình 3.3), (CT3) tính số tổ hợp chập k của n phần tử (hình 3.4). Hình 5.3: Sơ đồ giải bài toán tìm chu vi lớn nhất của chu vi hình chữ nhật, hình vuông Hình 5.4: Sơ đồ giải bài toán tìm chu vi lớn nhất của chu vi hình chữ nhật, hình vuông Chu vi hình chữ nhật Chiều dài Tính chu vi hình chữ nhật Chu vi hình vuông Cạnh Tính chu vi hình vuông Chiều rộng Chu vi lớn Tìm số lớn Xuất số cn k k n cn k n k Tính tổ hợp Xuất số Tính tổ hợp n- k Tính giai thừa k Tính giai thừa n Tính giai thừa n! k! (n-k)! Số lớn b a Tìm số lớn Xuất số Hình 5.2: Sơ đồ giải bài toán tìm số lớn nhất trong hai số Bài giảng Tin học đại cương Khoa Công nghệ thông tin Trang 72/92 Ta thấy, bên trong các CT này tồn tại các module cơ bản: tìm số lớn trong hai số, tính giai thừa của một số, tính tổ hợp, tính chu vi hình chữ nhật, tính chu vi hình vuông, xuất một số.  C đưa vào khái niệm hàm để hỗ trợ lập trình module. Mỗi module tương ứng với một hàm. Hàm là một khối lệnh được đặt tên, thực hiện một nhiệm vụ xác định (một hoặc nhiều lần trong CT). Hàm nhận các đối số vào (hoặc không) và trả về giá trị (hoặc không: void) bằng câu lệnh return (có cú pháp return gia_tri_tra_ve;). Lệnh return sẽ chấm dứt quá trình xử lý của hàm. 5.2.1.1. Xác định tên hàm Tên của hàm cũng tuân theo quy tắc đặt tên cho hằng, biến: đặt tên gợi nhớ, mang tính thống nhất, Tất nhiên, hàm không được trùng tên với một biến, hằng đã có. Sau đây là một số gợi ý: 1) Tên hàm nên bắt đầu bằng động từ đặc trưng cho mục đích của hàm. Chẳng hạn: tính_giai_thừa, tìm_file, đóng_csdliệu, 2) Tên hàm trả về kiểu logic nên bắt đầu bằng từ “Là”. Chẳng hạn, LàNguyênTố, LàĐóngFile, 5.2.1.2. Xác định tên và trình tự các đối số Tên tham số nên gợi nhớ đến ý nghĩa của đối số. Các đối số nên được để theo trình tự tự nhiên của nó (chẳng hạn, hàm tính tổ hợp nên để đối số n trước k, nên giữ tên n, k giống như trong toán học), các đối số quan trọng để trước, các đối số ít quan trọng để sau, các đối số lấy dữ liệu trả về để sau (chẳng hạn, hàm tính giờ, phút giây nên để các đối số theo thứ tự sau: giay_doi, &gio, &phut, &giay), 5.2.1.3. Tiêu đề hàm Kiểu trả về của hàm, tên hàm, các đối số, kiểu tương ứng và hình thức truyền kết hợp lại hình thành tiêu đề hàm (prototype). Tiêu đề các hàm trong CT1, CT2, CT3 cho trong bảng Hàm Tiêu đề Tìm số lớn trong hai số int tim_so_lon (int a, int b); Xuất số void xuat_so (int so); Tính giai thừa của một số int tinh_giai_thua (int so); Tính chu vi hình chữ nhật int tinh_chu_vi_hcnhat (int chieu_dai, int chieu_rong); Tính chu vi hình vuông int tinh_chu_vi_hvuong (int canh); Tính tổ hợp int tinh_to_hop(int n, int k); Bài giảng Tin học đại cương Khoa Công nghệ thông tin Trang 73/92 5.2.2. Lời gọi hàm Khi CT gọi một hàm (bằng tên hàm) các đối số thực sẽ được truyền cho các đối số của hàm (nếu hàm có đối số), khối lệnh bên trong hàm được thực hiện và hàm trả về giá trị (nếu hàm có giá trị trả về).  Ví dụ 5.1: CT tìm số lớn nhất trong ba số #include // Các hàm float tim_so_lon (float a, float b) { return (a > b ? a : b); } void xuat_so (float so) // so: tham trị !!! { printf (“%f”, so); } // Hàm chính int main() { float so_1, so_2, so_3, so_lon_cua_3_so, so_lon_cua_2_so; printf( “Nhap vao ba so can tim so lon nhat:\n” ); scanf ( “%f %f %f ”, &so_1, &so_2, &so_3); so_lon_cua_2_so = tim_so_lon (so_1, so_2); so_lon_cua_3_so = tim_so_lon (so_lon_cua_2_so, so_3); printf(“\nSo lon nhat cua (%f,%f,%f):\t”, so_1, so_2, so_3); xuat_so (so_lon_cua_3_so); getch (); return 0; }  Ví dụ 5.2: CT xuất ra chu vi lớn nhất trong chu vi hình chữ nhật và chu vi hình vuông #include // Các hàm // Hàm tìm số lớn trong hai số. int tim_so_lon (int a, int b) { return (a > b ? a : b); } // Hàm xuất số ra màn hình. void xuat_so (int so) a, b đối số của hàm – hình thức so_1, so_2 đối số thực so_lon_cua_ 2_so, so_3 đối số thực a, b đối số của hàm – hình thức so đối số của hàm – hình thức Bài giảng Tin học đại cương Khoa Công nghệ thông tin Trang 74/92 { printf (“%d”, so); } // Hàm tính chu vi hình chữ nhật. int chu_vi_hcnhat (int chieu_dai, int chieu_rong) { return (chieu_dai + chieu_rong) * 2; } // Hàm tính chu vi hình vuông. int chu_vi_hvuong (int canh) { return canh * 4; } // Hàm chính int main() { int cdai, crong, canh, cvi_hcnhat, cvi_hvuong, cvi_lon; printf( “Nhap chieu dai va chieu rong cua hinh chu nhat:\n” ); scanf ( “%d %d”, &cdai, &crong); printf( “Nhap canh hinh vuong:\n” ); scanf ( “%d %d”, &canh); printf(“\nChu vi lon la:”); cvi_hcnhat = chu_vi_hcnhat(cdai, crong); cvi_hvuong = chu_vi_hvuong(canh); cvi_lon = tim_so_lon(cvi_hcnhat, cvi_hvuong); xuat_so(cvi_lon); getch (); return 0; } 5.2.3. Biến toàn cục, biến cục bộ Biến toàn cục là biến được khai báo trước hàm main, và không thuộc bất cứ hàm nào. Biến cục bộ là biến được khai báo trong các hàm. Biến toàn cục được hiểu và sử dụng trong tất cả các hàm (kể cả hàm main). Biến cục bộ chỉ được hiểu và sử dụng trong hàm mà nó được khai báo. Khi có biến cục bộ trùng tên với biến toàn cục thì trong phạm vi hàm: biến cục bộ sẽ được hiểu, biến toàn cục bị che (cơ chế che dấu). Biến cục bộ được tạo ra và phân phối bộ nhớ khi hàm đuợc gọi; khi hàm thực hiện xong, các biến cục bộ sẽ bị hủy.  Ví dụ 5.3: Minh họa biến toàn cục, cục bộ và cơ chế che dấu #include int x, y; // khai báo các biến toàn cục: x, y void thu_1 () // cơ chế che dấu chieu_dai, chieu_rong đối số của hàm – hình thức canh đối số của hàm – hình thức Các đối số thực:  cdai, crong.  canh.  cvi_hcnhat, cvi_hvuong.  cvi_lon. Bài giảng Tin học đại cương Khoa Công nghệ thông tin Trang 75/92  int x = 88, y = 100; // khai báo các biến cục bộ: x, y printf (“\n Gia tri cua x trong thu_1 = %d”, x); // “Gia tri cua x = 88” printf (“\n Gia tri cua y trong thu_1 = %d”, y); // “Gia tri cua y = 100”  void thu_2 ()  x = 88, y = 100; printf (“\n Gia tri cua x trong thu_2 = %d”, x); // “Gia tri cua x = 88” printf (“\n Gia tri cua y trong thu_2 = %d”, y); // “Gia tri cua y = 100”  int main()  x = 1; y = 2; printf (“\n Gia tri cua x truoc thu_1 = %d”, x); // “Gia tri cua x = 1” printf (“\n Gia tri cua y truoc thu_1= %d\n”, y); // “Gia tri cua y = 2” thu_1 (); printf (“\n Gia tri cua x sau thu_1 = %d”, x); // “Gia tri cua x = 1” printf (“\n Gia tri cua y sau thu_1= %d\n”, y); // “Gia tri cua y = 2” thu_2 (); printf (“\n Gia tri cua x sau thu_2 = %d”, x); // “Gia tri cua x = 88” printf (“\n Gia tri cua y sau thu_2= %d\n”, y); // “Gia tri cua y = 100” getch(); return 0; }  Khi viết CT, LTV: nên hạn chế sử dụng biến toàn cục vì rất khó kiểm soát chúng, hơn nữa tính độc lập của các hàm bị vi phạm; b) không nên tiết kiệm các biến cục bộ (vì chúng chỉ tồn tại tạm thời). Một lỗi lầm phổ biến khi sử dụng hàm là tận dụng biến toàn cục để tiết kiệm biến cục bộ và đối số của hàm (thực chất đối số của hàm được truyền bằng tham trị cũng là biến cục bộ). Chẳng hạn, trong CT tính tổng 11 + 22 + .. + 100100, do tiết kiệm biến cục bộ i trong hàm lũy thừa LuyThua mà CT sẽ bị lặp vô tận. #include int i, n; // Các biến toàn cục long LuyThua (int a, int n) { int ket_qua = 1; for (i = n; i>= 1; i--) ket_qua *= a; return ket_qua; } int main() Khi thoát vòng lặp giá trị của i là 0 Bài giảng Tin học đại cương Khoa Công nghệ thông tin Trang 76/92  long S = 0; for (i=1; i<=100; i++) S += LuyThua (i, i); printf (“S = %d”, S); getch(); return 0;   Khi CT lớn (chứa rất nhiều hàm) ta nên liệt kê tất cả các tiêu đề hàm lên đầu CT (trước hàm main) để tiện cho việc quản lý các hàm, cài đặt các hàm để ở dưới hàm main. Hơn nữa, điều đó còn giúp ta tránh lỗi “sử dụng (gọi) một hàm mà hàm đó chưa được định nghĩa”.  Ví dụ 5.4: CT tính số tổ hợp chập K của N phần tử #include // Các tiêu để hàm được liệt kê đầu CT int tinh_giai_thua (int so); int tinh_to_hop (int n, int k); int main() { int n, k, to_hop; printf (“N = \t”); scanf (“%d”, &n); printf (“K = \t”); scanf (“%d”, &k); to_hop = tinh_to_hop (n, k); printf (“\nC(%d, %d) = %d”, n, k, to_hop); getch (); return 0; } int tinh_giai_thua (int so) { // Khai báo các biến cục bộ int giai_thua = 1, i; for (i=1; i<=so; i++) giai_thua = giai_thua * i; return giai_thua; } int tinh_to_hop (int n, int k) { // Khai báo các biến cục bộ int n_gt, k_gt, nk_gt; Lệnh i++ sẽ làm cho giá trị của i là 1. Từ đó, dẫn đến vòng lặp vô tận. Đối số của hàm (hình thức) Ở lần lặp đầu tiên, giá trị của i là 1. Bài giảng Tin học đại cương Khoa Công nghệ thông tin Trang 77/92 n_gt = tinh_giai_thua (n); k_gt = tinh_giai_thua (k); nk_gt = tinh_giai_thua (n-k); return n_gt / (k_gt * nk_gt); } 5.2.4. Truyền đối số cho hàm Có hai kiểu truyền đối số thực cho hàm: (a) tham trị: giá trị của đối số thực sẽ được gán cho đối số của hàm, (b) tham chiếu: tham chiếu của đối số thực được gán cho đối số của hàm (có thể đồng nhất đối số của hàm với đối số thực, thay đổi trên đối số của hàm đồng nghĩa với thay đổi trên đối số thực). Để quy định cách truyền tham chiếu cho đối

Các file đính kèm theo tài liệu này:

  • pdfbaigiangtinhocdaicuongkhoacntt_5262.pdf