BÀI TẬP ĐƯỢC LẤY TỪ QUYỂN SÁCH KỸ THUẬT LẬP TRÌNH C Show
CỦA THẦY DƯƠNG THIÊN TỨ Đề bài: Viết chương trình nhập vào tọa độ (xC,yC) là tâm của một đường tròn, và R là bán kính của đường tròn đó. Nhập vào tọa độ (xM,yM) của một điểm M. Xác định điểm M nằm trong, nằm trên hay nằm ngoài đường tròn. Mã lệnh: #include <stdio.h>Mã nguồn: dành cho các bạn không thích gõ mã lệnh, Click here Xét trường hợp chúng ta cần lưu trữ thông tin của nhiều cuốn sách trong thư viện, mỗi cuốn sách có nhiều loại thông tin như: Tiêu đề, tác giả, thể loại và ID. Trong các kiểu dữ liệu nguyên thủy ta đã học, không có kiểu nào có thể lưu trữ cùng lúc nhiều thông tin như thế. Khi đó, lập trình viên sẽ phải tìm cách tạo ra các kiểu dữ liệu mới để lưu trữ tất cả thông tin của một cuốn sách (là kiểu dữ liệu tự định nghĩa - đã đề cập các bài trước). Trong C++, Cấu trúc (struct) và Lớp (class) chính là hai loại dữ liệu hỗ trợ cho người dùng làm như vậy. Tuy nhiên, trong phạm vi của lập trình cơ bản, 6 sẽ được sử dụng chủ yếu trong việc tạo ra các kiểu dữ liệu tự định nghĩa, và mức độ sử dụng cũng rất đơn giản. Ta có thể hiểu 6 là một dạng bản ghi, dùng để lưu trữ những thông tin chung nhất của nhiều đối tượng dữ liệu, ví dụ như mọi bản ghi của các sinh viên đại học trong hệ thống của nhà trường đều phải có tên, mã số sinh viên, ngày tháng năm sinh và ngành học; hoặc như ví dụ về lưu trữ các cuốn sách ở trên,...II. Định nghĩa một cấu trúc1. Định nghĩa và khai báo các biến cấu trúcĐể định nghĩa một cấu trúc, ta sử dụng cú pháp như sau:
Trong đó, {Tên_cấu_trúc} là một định danh tùy ý người dùng đặt (thông thường tên cấu trúc sẽ viết hoa chữ cái đầu tiên). {Định_nghĩa_thành_viên} là một khai báo biến nào đó ở các kiểu dữ liệu khác nhau, còn {Danh_sách_các_biến_cấu_trúc} là các định danh tên biến. Ví dụ: Định nghĩa một cấu trúc Books\text{Books}Books lưu thông tin về tên, tác giả, thể loại và ID của một cuốn sách, sau đó khai báo ba biến cấu trúc thể hiện ba cuốn sách:
Ngoài cách khai báo liền các biến cấu trúc như trên, người dùng có thể khai báo biến cấu trúc ở bất kỳ đâu trong chương trình bằng cú pháp: 8 như ví dụ dưới đây:
2. Khai báo các biến cấu trúc với từ khóa typedef struct { {Định_nghĩa_các_thành_viên_của_cấu_trúc}; } {Tên_cấu_trúc}; 9Từ khóa 9 là một từ khóa rất hữu ích trong lập trình thi đấu, nó giúp người dùng đặt ra các tên mới cho những kiểu dữ liệu, bao gồm cả kiểu dữ liệu nguyên thủy lẫn kiểu dữ liệu người dùng tự định nghĩa. Bạn có thể định nghĩa một 6 với tên cố định bằng cú pháp:
Ví dụ, cấu trúc Books\text{Books}Books ở trên có thể viết lại như sau:
Kể từ khai báo này trở đi, các biến cấu trúc cũng có thể được khai báo bằng cú pháp giống như khai báo một biến kiểu nguyên thủy thông thường:
Tuy nhiên, cách khai báo này với 6 không quá phổ biến vì nó không giúp cho lập trình viên giảm được về công sức lập trình. Chỉ khi ta có những kiểu dữ liệu quá dài, ví dụ như 3 hay 4 mà không muốn viết dài như vậy, thì từ khóa 9 sẽ phát huy tác dụng, bằng cách đặt lại tên mới ngắn gọn hơn cho kiểu đó: III. Các thao tác với cấu trúc1. Truy cập các thành viên của một biến cấu trúcĐể truy cập tới các thành viên trong một cấu trúc, ta sử dụng cú pháp sau:
Khi truy cập theo cách này, người dùng có thể sử dụng thành viên được truy cập tới như một biến đơn thông thường, kết hợp vào các phép toán và câu lệnh khác nhau. Ví dụ, ta có thể nhập xuất tên sách của biến cấu trúc book_1\text{book\_1}book_1 có kiểu là Books\text{Books}Books bằng cú pháp:
2. Gán giá trị cho một biến cấu trúcBiến cấu trúc cung cấp một phép toán gán rất hữu ích. Khi muốn gán giá trị cho các thành viên của một biến cấu trúc gồm nnn thành viên, ta có thể sử dụng cú pháp sau:
Khi đó, các {Giá_trị_1}, {Giá_trị_2},..., {Giá_trị_n} sẽ lần lượt được gán cho các {Thành_viên_1}, {Thành_viên_2},..., {Thành_viên_n} của biến 6. Lấy ví dụ: 0Biên dịch và chạy đoạn chương trình trên, ta có kết quả là: 13. Truyền cấu trúc vào hàm như một tham sốTa có thể truyền cấu trúc vào hàm dưới dạng một tham số giống như những biến thông thường, và cũng sẽ có truyền tham chiếu hoặc truyền tham trị. Cú pháp truyền không có gì khác biệt: 2Nếu như muốn truyền tham chiếu, chỉ cần thêm toán tử 7 phía trước tên biến tham số. Còn các đối tượng trong cấu trúc thì chỉ giống như biến thông thường nên có thể kết hợp với các câu lệnh như các biến.Ví dụ: Dưới đây là một đoạn chương trình cho phép nhập vào chiều dài và chiều rộng của NNN hình chữ nhật khác nhau và sử dụng một hàm để tính diện tích của các hình chữ nhật đó: 3Hãy thử biên dịch và chạy chương trình trên với Input dưới đây: 4Chúng ta sẽ thu được output như sau: 5IV. Bài tập minh họa1. Quản lý sinh viênĐề bàiĐịnh nghĩa một cấu trúc Student để quản lý sinh viên của một lớp học gồm NNN sinh viên khác nhau. Các thông tin cần quản lý bao gồm: Mã số sinh viên, Năm sinh, Điểm thi giữa kỳ, Điểm thi cuối kỳ, Điểm trung bình, Xếp hạng. Cho trước các thông tin: Mã số sinh viên, Năm sinh, Điểm thi giữa kỳ, Điểm thi cuối kỳ của NNN sinh viên theo thứ tự từ 111 tới NNN. Hãy viết các hàm thực hiện các công việc sau:
Điểm trung bıˋnh=0.3×(Điểm giữa kyˋ)+0.7×(Điểm cuoˆˊi kyˋ)\text{Điểm trung bình} = 0.3 \times \text{(Điểm giữa kỳ)} + 0.7 \times \text{(Điểm cuối kỳ)}Điểm trung bıˋnh=0.3×(Điểm giữa kyˋ)+0.7×(Điểm cuoˆˊi kyˋ) Sau đó tính xếp hạng của từng sinh viên theo quy tắc:
Ý tưởngĐây là một bài tập khá quen thuộc với các bạn mới học lập trình. Ý tưởng rất đơn giản, chỉ cần tạo một 6 lưu các thông tin như đề bài yêu cầu, sau đó viết ra các hàm:
Hai yêu cầu còn lại có thể làm trong quá trình nhập và xử lý thông tin của các sinh viên. Cài đặt 62. Tam GiácĐề bàiKhai báo một cấu trúc lưu thông tin về một tam giác (tọa độ ba đỉnh) trong mặt phẳng OxyOxyOxy. Hãy viết các hàm sau:
Ý tưởngTrước tiên tạo ra một cấu trúc để biểu diễn điểm trên mặt phẳng tọa độ Oxy,Oxy,Oxy, gồm hoành độ và tung độ. Sau đó tạo thêm một cấu trúc nữa để biểu diễn một tam giác, gồm ba trường lưu ba điểm của tam giác. Công việc còn lại rất đơn giản, chỉ cần viết ra các hàm theo đúng yêu cầu của đề bài là xong. Các bạn chỉ cần ghi nhớ hai công thức quan trọng cần sử dụng trong bài:
|