Bài giảng Tin học đại cương của trường ĐH Bách khoa Hà Nội trình bày một số vấn đề như khái niệm thông tin, biểu diễn thông tin trong máy tính, hệ thống máy tính (phần cứng, phần mềm, hệ điều hành, mạng máy tính), giải quyết bài toán bằng máy tính, các cấu trúc lập trình cơ bản... Mời bạn đọc tham khảo.
2010 TRƢỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG [BÀI GIẢNG TIN HỌC ĐẠI CƢƠNG - IT1110] [Type the abstract of the document here The abstract is typically a short summary of the contents of the document Type the abstract of the document here The abstract is typically a short summary of the contents of the document.] THƠNG TIN MƠN HỌC Trình độ: Sinh viên đại học ngành Khối lƣợng: 4(3-1-1-8) Lý thuyết: 45 tiết Bài tập/BTL: 15 tiết (bài tập, thảo luận) Thí nghiệm: (x tiết) (thực hành) Mô tả vắn tắt nội dung: Khái niệm thơng tin, biểu diễn thơng tin máy tính Hệ thống máy tính: phần cứng, phần mềm, hệ điều hành, mạng máy tính Giải tốn máy tính Các cấu trúc lập trình MỤC LỤC PHẦN TIN HỌC CĂN BẢN I.1 Thông tin biểu diễn thông tin (5T lý thuyết) I.1.1 Các khái niệm thông tin tin học (1T lý thuyết) I.1.1.1 Thông tin xử lý thông tin .8 a Thông tin - Dữ liệu – Tri thức .8 b Qui trình xử lý thông tin .9 I.1.1.2 Máy tính điện tử phân loại a Lịch sử phát triển máy tính điện tử b Phân loại máy tính điện tử 10 I.1.1.3 Tin học ngành công nghệ liên quan 10 a Tin học 10 b Công nghệ thông tin (Information Technology - IT) 11 c Công nghệ thông tin truyền thông 11 I.1.2 Biểu diễn liệu máy tính (4T lý thuyết) .11 I.1.2.1 Biểu diễn số hệ đếm 11 a Hệ đếm số b 11 b Hệ đếm thập phân (Decimal system, b=10) 12 c Hệ đếm nhị phân (Binary system, b=2) 13 d Hệ đếm bát phân (Octal system, b=8) 13 e Hệ đếm thập lục phân (Hexa-decimal system, b=16) 13 f Chuyển đổi số từ hệ thập phân sang hệ đếm số b 14 I.1.2.2 Biểu diễn liệu máy tính đơn vị thông tin 14 a Nguyên tắc chung .14 b Đơn vị thông tin 15 I.1.2.3 Biểu diễn số nguyên 16 a Số nguyên không dấu 16 b Số nguyên có dấu 16 c Tính tốn số học với số ngun 17 Cộng/ trừ số nguyên 17 Nhân/ chia số nguyên 17 I.1.2.4 Biểu diễn số thực 18 a Nguyễn tắc chung .18 b Chuẩn IEEE754/85 .19 I.1.2.5 Biểu diễn ký tự 20 a Nguyên tắc chung .20 b Bộ mã ASCII 20 c Bộ mã Unicode 22 I.2 HỆ THỐNG MÁY TÍNH (7 tiết) 23 I.2.1 Hệ thống máy tính (3T lý thuyết) 23 a Mơ hình máy tính 23 b Bộ xử lý trung tâm – CPU 25 c Bộ nhớ 26 d Hệ thống vào-ra 27 e Liên kết hệ thống (buses) 29 I.2.1.2 Phần mềm máy tính 30 a Dữ liệu giải thuật 30 b Chương trình ngơn ngữ lập trình 35 c Phân loại phần mềm máy tính .37 I.2.2 Mạng máy tính (2T lý thuyết) .37 I.2.2.1 Lịch sử phát triển mạng máy tính 37 I.2.2.2 Phân loại mạng máy tính 38 I.2.2.3 Các thành phần mạng máy tính 38 I.2.2.4 Mạng Internet 40 I.2.3 Giới thiệu hệ điều hành (2T lý thuyết) 41 I.2.3.1 Các khái niệm .41 a Khái niệm hệ điều hành 41 b Tệp (File) 41 c Quản lý tệp hệ điều hành 42 I.2.3.2 Hệ lệnh hệ điều hành 43 I.2.3.3 Hệ điều hành Windows 44 a Sự đời phát triển 44 b Khởi động thoát khỏi Windows XP .44 c Một số thuật ngữ thao tác thường sử dụng .45 d Cấu hình Windows (Control Panel) 47 e Windows Explorer 52 I.3 Các hệ thống ứng dụng (4T lý thuyết) 56 I.3.1 Các hệ thống quản lý thông tin 56 I.3.1.1 Các khái niệm thông tin Hệ thống quản lý thông tin 56 I.3.1.2 Phân loại 56 a Phân loại theo cấp bậc quản lý 56 b Phân loại theo chức nghiệp vụ 59 c Phân loại theo quy mơ tích hợp 60 I.3.2 Hệ thông tin bảng tính .62 I.3.3 Hệ quản trị sở liệu 67 I.3.3.1 Cơ sở liệu 67 a Khái niệm Cơ Sở Dữ Liệu 67 b Hệ quản trị sở liệu 72 I.3.4 Các hệ thống thông minh 76 PHẦN II GIẢI QUYẾT BÀI TOÁN 77 II.1 Thuật toán(4 tiết LT) 77 II.1.1 Định nghĩa thuật toán .77 II.1.2 Biểu diễn thuật toán .78 II.1.2.1 Ngôn ngữ lưu đồ .79 II.1.2.2 Mã giả .83 II.1.3 Thuật toán đệ qui 84 II.1.4 Một số thuật tốn thơng dụng 85 II.1.4.1 Thuật toán số học 85 II.1.4.2 Thuật toán dãy 86 II.1.5 Thuật giải heuristic 87 II.1.5.1 Thuật giải – Sự mở rộng khái niệm thuật toán 87 II.1.5.2 Thuật giải heuristic 87 II.2 Giải toán (4 tiết LT, tiết BT) 88 II.2.1 Khái niệm toán 88 II.2.2 Các bước giải toán máy tính 89 Bài tập Thuật toán (2 tiết BT) 90 II.2.3 Các phương pháp giải toán máy tính .90 II.2.3.1 Giải toán theo hướng xác định trực tiếp lời giải: 90 II.2.3.2 Giải tốn theo hướng tìm kiếm lời giải 91 II.2.4 Phân loại toán 91 II.2.4.1 Độ phức tạp thuật toán 91 II.2.4.2 Phân loại toán 93 PHẦN LẬP TRÌNH 95 III.1 Tổng quan ngôn ngữ C (3 tiết LT) 95 III.1.1 Lịch sử phát triển 95 III.1.2 Các phần tử ngôn ngữ C .96 1.2.1 Tập kí tự 96 1.2.2 Từ khóa 96 1.2.3 Định danh 97 1.2.4 Các kiểu liệu 98 1.2.5 Hằng 99 1.2.6 Biến .100 1.2.7 Hàm 100 1.2.8 Biểu thức .101 1.2.9 Câu lệnh 101 1.2.10 Chú thích 102 III.1.3 Cấu trúc chương trình C 102 III.1.4 Biên dịch chương trình C 105 III.1.5 Trình biên dịch Turbo C++ .105 III.1.6 Cài đặt sử dụng Turbo C++ 3.0 .105 III.2 Kiểu liệu biểu thức C (4 tiết LT) 106 III.2.1 Các kiểu liệu chuẩn C (1 tiết LT) .107 III.2.2 Các biểu thức 109 III.2.3 Các phép toán .110 III.2.3.1 Phép toán số học 110 III.2.3.2 Phép toán quan hệ .111 III.2.3.3 Các phép toán logic .112 III.2.3.4 Phép toán gán 112 III.2.4 Thứ tự ưu tiên phép toán 114 III.2.5 Một số toán tử đặc trưng C 115 III.3 Cấu trúc lập trình C (6 tiết LT) 118 III.3.1 Vào/ra 118 III.3.1.1 Các lệnh vào liệu với biến (printf, scanf) 118 III.3.1.2 Các lệnh nhập xuất khác 123 III.3.2 Cấu trúc lệnh khối 124 III.3.3 Cấu trúc if 126 III.3.4 Cấu trúc lựa chọn switch 127 III.3.5 Vòng lặp for 130 III.3.6 Vòng lặp while – while .132 III.3.7 Các lệnh thay đổi cấu trúc lập trình 135 III.3.7.1 continue 136 III.3.7.2 break 137 III.4 Mảng xâu ký tự (5 tiết LT) 138 III.4.1 Mảng 138 III.4.1.1 Khái niệm mảng 138 III.4.1.2 Khai báo sử dụng mảng 138 III.4.1.3 Các thao tác mảng 139 a Nhập liệu cho mảng 139 b Xuất liệu chứa mảng .140 c Tìm phần tử có giá trị lớn nhất, phần tử có giá trị nhỏ 142 III.4.1.4 Tìm kiếm mảng 142 III.4.1.5 Sắp xếp mảng 144 III.4.2 Xâu ký tự (2 tiết LT) 146 III.4.2.1 Khái niệm xâu ký tự 146 III.4.2.2 Khai báo sử dụng xâu .147 a Khai báo xâu kí tự .147 b Truy nhập vào phần tử xâu 147 III.4.2.3 Các hàm xử lý ký tự 147 III.4.2.4 Các hàm xử lý xâu .149 a Vào liệu 149 b Một số hàm xử lí xâu kí tự khác 149 III.5 Cấu trúc (2 tiết LT) 151 III.5.1 Khái niệm cấu trúc 151 III.5.2 Khai báo sử dụng cấu trúc .152 III.5.2.1 Khai báo kiểu liệu cấu trúc 152 III.5.2.2 Khai báo biến cấu trúc: 152 III.5.2.3 Định nghĩa kiểu liệu cấu trúc với typedef 153 III.5.3 Xử lý liệu cấu trúc 154 III.5.3.1 Truy nhập trường liệu cấu trúc 154 III.5.3.2 Phép gán biến cấu trúc 156 III.6 Hàm (2 tiết LT) 157 III.6.1 Khái niệm hàm 157 III.6.1.1 Khái niệm chương trình 157 III.6.1.2 Phân loại chương trình con: 158 III.6.2 Khai báo sử dụng hàm 158 III.6.2.1 Khai báo hàm 158 III.6.2.2 Sử dụng hàm 161 III.6.3 Phạm vi biến .163 BUỔI PHẦN TIN HỌC CĂN BẢN (16 tiết Lý thuyết, tiết Bài tập, tiết Thực hành) I.1 Thông tin biểu diễn thông tin (5T lý thuyết) I.1.1 Các khái niệm thông tin tin học (1T lý thuyết) I.1.1.1 Thông tin xử lý thông tin a Thông tin - Dữ liệu – Tri thức Thông tin- Information Khái niệm thông tin (information) sử dụng thường ngày.Thông tin mang lại cho người hiểu biết, nhận thức tốt đối tượng đời sống xã hội, thiên nhiên, giúp cho họ thực hợp lý công việc cần làm để đạt tới mục đích cách tốt Người ta quan niệm rằng, thông tin kết xử lý, điều khiển tổ chức liệu theo cách mà bổ sung thêm tri thức cho người nhận Nói cách khác, thơng tin ngữ cảnh liệu xem xét Dữ liệu - Data Dữ liệu (data) biểu diễn thơng tin thể tín hiệu vật lý Thơng tin chứa đựng ý nghĩa cịn liệu kiện khơng có cấu trúc khơng có ý nghĩa chúng khơng tổ chức xử lý Dữ liệu thực tế là: Các số liệu thường mô tả số bảng biểu Các ký hiệu qui ước, ví dụ chữ viết Các tín hiệu vật lý ví dụ ánh sáng, âm thanh, nhiệt độ, áp suất,… Theo quan niệm chung người làm cơng nghệ thơng tin thơng tin hiểu biết lĩnh vực đấy, cịn liệu thơng tin biểu diễn xử lý máy tính Tri thức – Knowledge Tri thức theo nghĩa thường thông tin mức trừu tượng Tri thức đa dạng, kiện, thông tin cách mà người thu thập qua kinh nghiệm qua đào tạo Nó hiểu biết chung hay lĩnh vực cụ thể Thuật ngữ tri thức sử dụng theo nghĩa “hiểu” chủ thể với tiềm cho mục đích chun dụng Hệ thống thơng tin (information system) hệ thống ghi nhận liệu, xử lý chúng để tạo nên thơng tin có ý nghĩa liệu Dữ liệu Thông tin xử lý xử lý Tri thức b Qui trình xử lý thơng tin Mọi q trình xử lý thơng tin máy tính hay người thực theo qui trình sau: Dữ liệu (Data) nhập đầu vào (Input), qua trình xử lý để nhận thông tin đầu (Output) Dữ liệu trình nhập, xử lý xuất lưu trữ NHẬP DỮ LIỆU XỬ LÝ XUẤT DỮ LIỆU (INPUT) (PROCESSING) (OUTPUT) LƯU TRỮ (STORAGE) Xử lý thơng tin bằngHình máy tính điệnhình tử tổng qt q trình xử lý thơng tin 1.1 Mơ Thông tin thu thập lưu trữ, qua trình xử lý trở thành liệu để theo trình xử lý liệu khác tạo thông tin theo ý đồ người Con người có nhiều cách để có liệu thơng tin Người ta lưu trữ thơng tin qua tranh vẽ, giấy, sách báo, hình ảnh phim, băng từ Trong thời đại nay, lượng thông tin đến với lúc nhiều người dùng cơng cụ hỗ trợ cho việc lưu trữ, chọn lọc xử lý thơng tin gọi máy tính điện tử (Computer) Máy tính điện tử giúp người tiết kiệm nhiều thời gian, cơng sức tăng độ xác cao việc tự động hố phần hay tồn phần q trình xử lý thơng tin I.1.1.2 Máy tính điện tử phân loại a Lịch sử phát triển máy tính điện tử Do nhu cầu cần tăng độ xác tính tốn giảm thời gian tính tốn, người quan tâm chế tạo cơng cụ tính tốn từ xưa: bàn tính tay người Trung Quốc, máy cộng học nhà toán học Pháp Blaise Pascal (1623 - 1662), máy tính học cộng, trừ, nhân, chia nhà tốn học Đức Gottfried Wilhelmvon Leibniz (1646 - 1716), máy sai phân để tính đa thức tốn học Tuy nhiên, máy tính điện tử thực bắt đầu hình thành vào thập niên 1950 đến trải qua hệ dựa vào tiến công nghệ điện tử vi điện tử cải tiến nguyên lý, tính loại hình Thế hệ (1950 - 1958): máy tính sử dụng bóng đèn điện tử chân không, mạch riêng rẽ, vào số liệu phiếu đục lỗ, điều khiển tay Máy có kích thước lớn, tiêu thụ lượng nhiều, tốc độ tính chậm khoảng 300 - 3.000 phép tính/s Loại máy tính điển hình hệ EDVAC (Mỹ) hay BESEM (Liên Xô cũ), Thế hệ (1958 - 1964): máy tính dùng xử lý đèn bán dẫn, mạch in Máy tính có chương trình dịch Cobol, Fortran hệ điều hành đơn giản Kích thước máy cịn lớn, tốc độ tính khoảng 10.000 -100.000 phép tính/s Điển loại IBM-1070 (Mỹ) hay MINSK (Liên Xô cũ), Thế hệ (1965 - 1974): máy tính gắn vi xử lý vi mạch điện tử cỡ nhỏ có tốc độ tính khoảng 100.000 - triệu phép tính/s Máy có hệ điều hành đa chương trình, nhiều người đồng thời theo kiểu phân chia thời gian Kết từ máy tính in trực tiếp máy in Điển loại IBM-360 (Mỹ) hay EC (Liên Xô cũ), Thế hệ (1974 - nay): máy tính bắt đầu có vi mạch đa xử lý có tốc độ tính hàng chục triệu đến hàng tỷ phép tính/s Giai đoạn hình thành loại máy tính chính: máy tính cá nhân để bàn (Personal Computer - PC) xách tay (Laptop Notebook computer) loại máy tính chun nghiệp thực đa chương trình, đa xử lý, hình thành hệ thống mạng máy tính (Computer Networks), ứng dụng phong phú đa phương tiện Thế hệ (1990 - nay): bắt đầu nghiên cứu tạo máy tính mơ hoạt động não hành vi người, có trí khơn nhân tạo với khả tự suy diễn phát triển tình nhận hệ quản lý kiến thức để giải tốn đa dạng Máy tính lượng tử b Phân loại máy tính điện tử Trên thực tế tồn nhiều cách phân loại máy tính khác phân loại máy tính theo hiệu tính tốn sau: Máy Vi tính (Microcomputer or PC): Loại thường thiết kế cho người dùng, giá thành rẻ Hiện nay, máy vi tính phổ dụng xuất nhiều dạng: máy để bàn (Destop), máy trạm (Workstation), máy xách tay (Notebook) máy tính bỏ túi Máy tính tầm trung (Mini Computer): Là loại máy tính có tốc độ hiệu tính tốn mạnh máy vi tính Chúng thường thiết kế để sử dụng cho ứng dụng phức tạp Giá máy cỡ hàng vài chục nghìn USD Máy tính lớn (Mainframe Computer) Siêu máy tính (SuperComputer) máy tính có tổ chức bên phức tạp, có tốc độ siêu nhanh hiệu tính tốn cao, cỡ hàng tỷ phép tính/giây Các máy tính cho phép nhiều người dùng đồng thời sử dụng Trung tâm tính tốn/ Viện nghiên cứu để giải toán phức tạp, yêu cầu cao tốc độ Chúng có giá thành đắt, cỡ hàng trăm ngàn, chí hàng triệu USD I.1.1.3 Tin học ngành công nghệ liên quan a Tin học Thuật ngữ Tin học có nguồn gốc từ tiếng Đức vào năm 1957 Karl Steinbuch đề xướng báo Informatik: Automatische Informationsverarbeitung (i.e "Informatics: automatic information processing") Sau vào năm 1962, Philippe Dreyfus người Pháp gọi “informatique”, Walter F.Bauer sử dụng tên Phần lớn nước Tây Âu, trừ Anh chấp nhận Ở Anh người ta sử dụng thuật ngữ „computer science‟, hay „computing science‟ thuật ngữ dịch, Nga chấp nhận tên informatika (1966) 10 Bài giảng tin học đại cương III.5.2 Khai báo sử dụng cấu trúc III.5.2.1 Khai báo kiểu liệu cấu trúc Để khai báo kiểu liệu cấu trúc ta dùng cú pháp khai báo sau: struct tên_cấu_trúc { ; }; Ví dụ: sinh_vien ma_so_sinh_vien ho_va_ten diem_tinDC point_3D struct sinh_vien { char ma_so_sinh_vien[10]; char ho_va_ten[30]; float diem_TinDC; } struct point_3D { float x; float y; float z; } x y z Khai báo thứ khai báo kiểu liệu cấu trúc có tên sinh_vien gồm có trường liệu ma_so_sinh_vien kiểu xâu kí tự, ho_va_ten kiểu xâu kí tự diem_TinDC kiểu số thực float Ở khai báo thứ ta khai báo kiểu liệu cấu trúc có tên point_3D gồm có trường trường có kiểu liệu số thực float Vì trường kiểu liệu nên ta sử dụng mảng để thay cấu trúc, nhiên việc sử dụng cấu trúc để mô tả liệu điểm chiều giúp mô tả tự nhiên hơn, “thật” (nghĩa cấu trúc tọa độ độc lập với nhau, nhìn từ bên ngồi toạ độ lại thể thống cung cấp thông tin vị trí điểm Cịn sử dụng mảng tọa độ điểm độc lập rời rạc với nhau, không thấy mối liên hệ Khi ta phải tự ngầm quy ước phần tử mảng có số 3*k, 3*k+1 3*k+2 với k = 0, 1, 2, … tọa độ điểm) III.5.2.2 Khai báo biến cấu trúc: Để khai báo biến cấu trúc ta dùng cú pháp khai báo sau struct tên_cấu_trúc tên_biến_cấu_trúc; Ví dụ: struct sinh_vien a, b, c; Câu lệnh khai báo biến tên a, b, c có kiểu liệu cấu trúc sinh_vien 152 Bài giảng tin học đại cương Tuy nhiên ta kết hợp đồng thời vừa khai báo kiểu liệu cấu trúc vừa khai báo biến cấu trúc cách sử dụng cú pháp khai báo sau: struct [tên_cấu_trúc] { ; } tên_biến_cấu_trúc; Theo cú pháp khai báo ta thấy phần tên_cấu_trúc có khơng Nếu có tên_cấu_trúc sau ta khai báo bổ sung biến có kiểu liệu tên_cấu_trúc đó, cịn khơng có tên_cấu_trúc cấu trúc khai báo tương ứng không sử dụng sau Ví dụ: struct diem_thi { float diem_Toan; float diem_Ly; float diem_Hoa; } struct thi_sinh { char SBD[10]; // số báo danh char ho_va_ten[30]; struct diem_thi ket_qua; } thi_sinh_1, thi_sinh_2; Qua ví dụ ta thấy cấu trúc lồng nhau, nghĩa cấu trúc trường liệu cấu trúc khác, mức độ lồng không hạn chế Để tăng thêm tiện lợi, ngơn ngữ C cịn cho phép khai báo trực tiếp trường liệu cấu trúc bên cấu trúc chứa nó, ta viết lại ví dụ sau struct thi_sinh { char SBD[10]; char ho_va_ten[30]; struct diem_thi { float diem_Toan; float diem_Ly; float diem_Hoa; }ket_qua; } thi_sinh_1, thi_sinh_2; III.5.2.3 Định nghĩa kiểu liệu cấu trúc với typedef Trong ví dụ trước ta thấy khai báo biến cấu trúc khóa struct, sau đến tên cấu trúc đến tên biến Cách khai báo có phần "rắc rối" so với khai báo biến thơng thường có khơng trường hợp người lập trình qn đặt từ khóa struct đầu Để tránh 153 Bài giảng tin học đại cương điều đó, ngơn ngữ C cho phép ta đặt tên cho kiểu liệu cấu trúc câu lệnh typedef có cú pháp khai báo sau : typedef struct tên_cũ tên_mới; Hoặc ta đặt lại tên cho cấu trúc khai báo cú pháp typedef struct [tên_cũ] { ; }danh_sách_các_tên_mới; Sau câu lệnh ta sử dụng tên_mới thay cho tổ hợp struct tên_cũ khai báo biến Lưu ý: Được phép đặt tên_mới trùng với tên_cũ Ví dụ: struct point_3D { float x, y, z; } P; struct point_3D M; typedef struct point_3D point_3D; point_3D N; Trong ví dụ ta đặt lại tên cho cấu trúc struct point_3D thành point_3D dùng tên làm kiểu liệu cho khai báo biến N Các biến P, M khai báo theo cách biết Ví dụ: typedef struct point_2D { float x, y; }point_2D, diem_2_chieu, ten_bat_ki; point_2D X; diem_2_chieu Y; ten_bat_ki Z; Với ví dụ ta cần ý point_2D, diem_2_chieu ten_bat_ki tên biến mà tên cấu trúc struct point_2D Các biến X, Y, Z khai báo với kiểu liệu tên III.5.3 Xử lý liệu cấu trúc III.5.3.1 Truy nhập trƣờng liệu cấu trúc Dữ liệu biến cấu trúc bao gồm nhiều trường liệu, trường liệu độc lập với Do muốn thay đổi nội dung liệu bên biến cấu trúc ta cần truy nhập tới 154 Bài giảng tin học đại cương trường thực thao tác cần thiết trường Để truy nhập tới trường cấu trúc ta dùng cú pháp sau: tên_biến_cấu_trúc.tên_trường Dấu chấm “.” sử dụng cú pháp toán tử truy nhập thành phần cấu trúc, trường truy nhập lại cấu trúc ta tiếp tục áp dụng tốn tử để truy nhập tới trường thành phần nằm mức sâu Giờ ta “đối xử” tên_biến_cấu_trúc.tên_trường giống biến thơng thường có kiểu liệu kiểu liệu tên_trường, tức ta nhập giá trị, hiển thị giá trị biến cấu trúc, sử dụng giá trị biểu thức… Ví dụ: // cấu trúc mô tả điểm không gian chiều // trường liệu gồm: tên điểm tọa độ điểm // tọa độ cấu trúc gồm trường: hoành độ tung độ #include #include void main() { struct point_2D { char ten_diem; struct { float x, y; } toa_do; } p; float temp_float; char temp_char; printf(“\n Hay nhap thong tin ve mot diem”); printf(“\n Ten cua diem: “); fflush(stdin); scanf(“%c”,&temp_char); p.ten_diem = temp_char; printf(“\n nhap vao hoanh cua diem: “); scanf(“%f”,&temp_float); p.toa_do.x = temp_float; // giả sử điểm xét nằm đường thẳng y = 3x + 2; p.toa_do.y = 3*p.toa_do.x + 2; printf(“\n %c = (%5.2f,%5.2f)”,p.ten_diem, p.toa_do.x, p.toa_do.y); getch(); } Kết chạy chương trình: Hay nhap thong tin ve mot diem Ten cua diem: A 155 Bài giảng tin học đại cương nhap vao hoanh cua diem: A = ( 5.00,17.00) Lưu ý: Cũng việc nhập giá trị cho phần tử mảng, việc nhập giá trị cho trường cấu trúc (đặc biệt trường có kiểu liệu float) nên thực qua biến trung gian để tránh tình làm treo máy kết nhập không ý III.5.3.2 Phép gán biến cấu trúc Giả sử ta có biến cấu trúc a b có kiểu liệu cấu trúc đó, giả sử trường liệu a khởi tạo (tức giá trị trường liệu xác định) Giờ ta muốn giá trị trường liệu b có giá trị giống với trường liệu tương ứng a Ta thực điều cách gán giá trị trường a cho trường tương ứng b Cách “thủ công” bất tiện cấu trúc có nhiều trường liệu Do C cung cấp cho ta phương tiện để thực việc cách thứ 2, sử dung phép gán biến cấu trúc Phép gán cấu trúc có cú pháp tương tự phép gán thơng thường biến_cấu_trúc_1 = biến_cấu_trúc_2; Câu lệnh gán giá trị trường biến_cấu_trúc_2 cho trường tương ứng biến_cấu_trúc_1 Ví dụ: #include #include #include void main() { struct s { char ho_ten[20]; float diem; }a, b, c; float temp_f; printf("\na.ho_ten: ");fflush(stdin); gets(a.ho_ten); printf("\na.diem = ");scanf("%f",&temp_f); a.diem = temp_f; strcpy(c.ho_ten, a.ho_ten); c.diem = a.diem; b = a; printf("\na: %20s %5.2f", a.ho_ten, a.diem); printf("\nb: %20s %5.2f", b.ho_ten, b.diem); printf("\nc: %20s %5.2f\n", c.ho_ten, c.diem); } 156 Bài giảng tin học đại cương Kết thực a.ho_ten: nguyen van minh a.diem = 7.5 a: nguyen van minh 7.50 b: nguyen van minh 7.50 c: nguyen van minh 7.50 Trong chương trình ta nhập giá trị cho trường biến cấu trúc a từ bàn phím, sau copy liệu từ biến a sang biến c cách chép trường, copy liệu từ biến a sang biến b cách dùng lệnh gán Kết rõ ràng cách thứ ngắn gọn Lưu ý : Để copy liệu xâu kí tự ta phải dùng lệnh strcpy(), không dùng lệnh gán thông thường để copy nội dung xâu kí tự BUỔI 15 III.6 Hàm (2 tiết LT) III.6.1 Khái niệm hàm III.6.1.1 Khái niệm chƣơng trình Trong lập trình thường gặp đoạn chương trình lặp lặp lại nhiều lần chỗ khác Để tránh rườm rà tiết kiệm công sức, đoạn chương trình thay chương trình tương ứng cần ta việc gọi chương trình mà khơng phải viết lại đoạn chương trình Lấy ví dụ giải toán lượng giác ta thường xuyên cần phải tính giá trị sin đại lượng lượng giác x Như ta nên lập chương trình tên sin tham số x để tính giá trị sin(x) Mỗi cần tính tốn giá trị sin đại lượng y ta cần gọi chương trình sin lập sẵn truyền đại lượng y làm tham số cho chương trình sin ta thu kết mong muốn mà viết lại đoạn chương trình tính giá trị sin(y) Bên cạnh chương trình sin cịn có nhiều chương trình khác tạo sẵn cos, exp (dùng để tính lũy thừa số e), pow (tính lũy thừa), sqrt (tính bậc 2), giúp người lập trình tính tốn giá trị đại lượng thơng dụng Những chương trình nằm thư viện chương trình mẫu trình biên dịch C quản lý, chúng cịn gọi chương trình chuẩn Trình biên dịch Turbo C++ phân loại đặt chương trình chuẩn đơn vị chương trình khác dạng tệp tiêu đề stdio.h, conio.h, math.h, string.h Ngoài cịn có lý khác cần đến chương trình Khi ta giải tốn lớn chương trình ta lớn dài, điều làm cho việc sửa chữa, gỡ rối, hiệu chỉnh chương trình gặp nhiều khó khăn Nhưng ta chia toán lớn, phức tạp ban đầu thành toán nhỏ tương đối độc lập với nhau, lập chương trình giải 157 Bài giảng tin học đại cương toán con, cuối ghép chương trình lại thành chương trình giải tốn ban đầu tiện lợi cho việc phát triển, kiểm tra sửa chữa chương trình Việc tương tự dây chuyền sản xuất công nghiệp ta lắp ráp sản phẩm hoàn thiện từ bán thành phẩm, module chế tạo nơi khác Vì bán thành phẩm chế tạo độc lập nên phát lỗi module ta việc tìm đến nơi sản xuất để sửa chữa Việc chia nhỏ chương trình thành chương trình đảm nhận cơng việc nhỏ khác tư tưởng cho phương pháp lập trình có cấu trúc (structured programming) Cần lưu ý có chương trình sử dụng lần làm cho chương trình trở nên sáng sủa dễ đọc, dễ hiểu III.6.1.2 Phân loại chƣơng trình con: Có loại chương trình hàm (function) thủ tục (procedure) Sự khác hàm thủ tục chỗ hàm sau thực xong trả giá trị, cịn thủ tục khơng trả giá trị Mặc dù hàm thủ tục tương đương nhau, tức xây dựng thủ tục có chức tương đương với hàm xây dựng hàm có chức tương đương với thủ tục Vì có ngơn ngữ lập trình cho phép chương trình hàm thủ tục (Pascal) có ngơn ngữ cho phép chương trình hàm mà thơi (như C, Java) Lưu ý chương trình hàm ln có giá trị trả Nếu thực khơng có giá trị để trả (nghĩa hoạt động giống thủ tục) ta phải khai báo hàm có kiểu giá trị trả “không kiểu giá trị cả” (kiểu void C) III.6.2 Khai báo sử dụng hàm III.6.2.1 Khai báo hàm Cú pháp khai báo hàm C sau [] ([,…]) Thân hàm Khai báo hàm chia làm phần: - Dòng đầu hàm: [] ([,…]) - Thân hàm: tập hợp khai báo câu lệnh đặt cặp dấu ngoặc nhọn { … 158 Bài giảng tin học đại cương } Trong thân hàm có lệnh return Ví dụ sau khai báo định nghĩa hàm tính giai thừa số nguyên dương Ta quy ước giai thừa số âm –1, 0, số nguyên dương a a! = a (a-1) … int giai_thua(int a) { int ket_qua; int i; ket_qua = 1; for(i = 0;iy?x:y; max = max>z?max:z; 160 Bài giảng tin học đại cương return max; } void main() { int a,b,c; clrscr(); printf("\n Nhap gia tri cho so nguyen a, b, c: "); scanf("%d %d %d",&a,&b,&c); printf("\n Gia tri cac so vua nhap: "); printf(" a = %-5d b = %-5d c = %-5d"); printf("\n Gia tri lon nhat so la %d",max(a,b,c)); getch(); } III.6.2.2 Sử dụng hàm Một hàm sau khai báo sử dụng Để sử dụng hàm (hay cịn nói gọi hàm) ta sử dụng cú pháp sau: ([danh sách tham số]) Ví dụ: chương trình khai báo định nghĩa hàm có tên Uscln với tham số có kiểu unsigned int Hàm Uscln tìm ước số chung lớn tham số theo thuật toán Euclid trả ước số chung tìm Sau ta gọi hàm Uscln hàm main để tìm ước số chung lớn số nguyên nhập từ bàn phím #include #include unsigned int Uscln(unsigned int a, unsigned int b) { unsigned int u; if (a