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,.
92 trang |
Chia sẻ: Mr Hưng | Lượt xem: 887 | Lượt tải: 0
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:
- baigiangtinhocdaicuongkhoacntt_5262.pdf