giao trinh tin hoc dai cuong

100 7 0
giao trinh tin hoc dai cuong

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

- Các từ khóa: Tin học Đại cương, Tin Đại cương, Lập trình cấu trúc, Ngôn. ngữ lập trình, Ngôn ngữ lập trình C, Kỹ thuật lập trình, Thuật toán, Lập trình C, Sơ đồ khối, Ngôn ngữ C[r]

(1)

1

Nguyn Hiếu Cường – Nguyn ðức Dư – Hồng Văn Thơng

GIÁO TRÌNH

TIN HC ðẠI CƯƠNG

(2)

2

MC LC

LỜI NÓI ðẦU

PHẦN

ðẠI CƯƠNG VỀ TIN HỌC

CHƯƠNG – NHỮNG KHÁI NIỆM CƠ BẢN VỀ TIN HỌC

1.1 ðối tượng nghiên cứu Tin học

1.2 Thông tin xử lý thông tin

1.3 Hệđếm biểu diễn thơng tin máy tính

1.4 Nguyên lý hệ xử lý thơng tin tựđộng

1.5 Cấu trúc máy tính 10

1.6 Một sốứng dụng Tin học 12

CHƯƠNG – HỆðIỀU HÀNH 14

2.1 Hệñiều hành MS-DOS 14

2.2 Hệñiều hành Windows 16

CHƯƠNG – THUẬT TOÁN 21

3.1 Khái niệm 21

3.2 Một số phương pháp biểu diễn thuật toán 21

3.3 Các cấu trúc thuật toán 23

3.4 Một số thuật tốn giải số tốn đơn giản 27

PHẦN 32

NGƠN NGỮ LẬP TRÌNH C 32

CHƯƠNG - MỘT SỐ KHÁI NIỆM MỞðẦU 34

1.1 Tập ký tự 34

1.2 Từ khóa 34

1.3 Tên 35

1.4 Một số khái niệm 35

1.5 Một số chương trình đơn giản 38

1.6 Một số quy tắc cần nhớ viết chương trình 39

1.7 Cách thực chương trình máy tính 40

BÀI TẬP CHƯƠNG 41

CHƯƠNG - CÁC KIỂU DỮ LIỆU 42

2.1 Các kiểu liệu 42

2.2 Hằng 43

2.3 Biến 45

2.4 Mảng 46

2.5 Các phép toán kiểu 48

2.6 Nhập xuất liệu 52

2.7 Một số hàm thường dùng 56

BÀI TẬP CHƯƠNG 57

CHƯƠNG - CÁC LỆNH ðIỀU KHIỂN 58

3.1 Nhắc lại khái niệm câu lệnh khối lệnh 58

3.2 Lệnh if 58

3.3 Lệnh for 61

3.4 Lệnh while 63

3.5 Lệnh - while 65

3.6 Lệnh break 66

3.7 Lệnh continue 66

BÀI TẬP CHƯƠNG 68

CHƯƠNG - HÀM VÀ TỔ CHỨC CHƯƠNG TRÌNH 70

4.1 Tổ chức chương trình thành hàm 70

(3)

3

4.3 ðệ quy 79

BÀI TẬP CHƯƠNG 83

CHƯƠNG - CẤU TRÚC 84

5.1 ðịnh nghĩa cấu trúc khai báo biến cấu trúc 84

5.2 Kết hợp ñịnh nghĩa cấu trúc khai báo biến cấu trúc 84

5.3 Sử dụng typedef ñểñịnh nghĩa kiểu liệu cấu trúc 85

5.4 Truy cập thành phần cấu trúc 86

5.5 Ví dụ minh hoạ 86

BÀI TẬP CHƯƠNG 89

PHỤ LỤC - BẢNG MÃ ASCII 91

PHỤ LỤC 93

(4)

3

LỜI NÓI ðẦU

Tin hc đại cương một mơn học quan trọng chương trình giáo dục đại cương ở bậc đại học Tại hầu hết trường ñại học cao đẳng nước ta hiện nay, mơn học bắt buộc ñối với mọi sinh viên Về mặt nội dung, mức độ ở trường có thể khác nhau, song yêu cầu ngày nâng cao cả về lý thuyết lẫn thực hành

Cuốn Giáo trình Tin hc đại cương được biên soạn theo khung chương trình của Bộ Giáo dục ðào tạo dành cho sinh viên ngành kỹ thuật Cấu trúc của giáo trình gồm phần: phần gồm chương trình bày những kiến thức tổng quan về

Tin học, phần trình bày kỹ thuật lập trình căn bản bằng ngơn ngữ C, phần có nhiều ví dụ mẫu tập để sinh viên rèn luyện kỹ năng lập trình máy

Khi biên soạn, chúng tơi đã tham khảo giáo trình tài liệu giảng dạy mơn học của một số trường ñại học ñể cuốn sách vừa ñạt yêu cầu cao về nội dung vừa thích hợp với đơng đảo sinh viên ngành kỹ thuật Chúng tơi cũng thừa hưởng được những kinh nghiệm q có được q trình giảng dạy mơn học của đồng nghiệp tại Trường ðại học Giao thông vận tải

Rất mong nhận được ý kiến đóng góp của độc giả để chất lượng giáo trình ngày tốt hơn

Mọi ý kiến đóng góp xin gửi về: Bộ môn Công nghệ phần mềm, Khoa Công nghệ thông tin, Trường ðại học Giao thông vận tải, Láng Thượng, ðống ða, Hà Nội

(5)

4

PHẦN

(6)

5

CHƯƠNG – NHỮNG KHÁI NIỆM CƠ BẢN VỀ TIN HỌC

1.1 ðối tượng nghiên cu ca Tin hc

Tin học ngành khoa học nghiên cứu cấu trúc, tính chất q trình xử lý thơng tin cách tự ñộng dựa phương tiện kỹ thuật Tin học ngành khoa học trẻ, hình thành phát triển thập kỷ qua ðặc biệt từñầu năm 80 kỷ

trước, với phát triển máy vi tính, mạng máy tính gần mạng Internet, tin học phát triển mạnh trở nên thiếu lĩnh vực ñời sống xã hội

Tin học ñược sinh miền giáp danh nhiều lĩnh vực khoa học Hai ngành khoa học trực tiếp làm móng cho tin học toán học vật lý ðặc trưng quan trọng tin học truyền xử lý thông tin cách tựđộng Việc xử lý thơng tin trước chưa đặt vấn đề tựđộng hóa người ln gắn liền với thao tác q trình xử lý thơng tin ðểđạt phương thức tự động hóa phải có phương tiện kỹ thuật, mà quan trọng máy tính điện tử (MTðT) Phương tiện kỹ thuật vừa cơng cụ vừa đối tượng nghiên cứu tin học

Ngay từ ñời, tin học ñã phát triển theo hai phận hợp thành chủ yếu là: bảo đảm tốn học, thuật tốn, chương trình (gọi phần mềm) thiết bị tính tốn, lưu trữ, truyền dẫn thơng tin (gọi phần cứng) Trong thân phần mềm phần cứng lại có lĩnh vực nghiên cứu chuyên sâu lý thuyết ứng dụng Mặc dù khó phân định xác lĩnh vực nghiên cứu, ứng dụng tin học, nói ñến tin học, người ta thường ñề cập ñến:

- Kỹ thuật chế tạo máy tính - Mạng máy tính

- Kỹ thuật lập trình

- ðảm bảo tốn học cho máy tính hệ thống tính tốn - Thuật tốn độ phức tạp thuật tốn

- Cơ sở liệu - Trí tuệ nhân tạo -

1.2 Thông tin x lý thông tin

Thông tin theo nghĩa thơng thường đời sống hàng ngày hiểu thông báo, cắt nghĩa, Thông tin tồn nhiều dạng ñược lưu trữ nhờ vật mang tin tờ

báo, sách, băng ghi âm, đĩa từ,

Thơng tin ñối tượng kiện ñối tượng Thơng tin có khả làm thay đổi hiểu biết người, nguồn gốc nhận thức Trước thời điểm nhận thơng tin, có ta chưa biết, chưa xác định (bất định) Chẳng hạn ta biết sinh viên A học

ởðH Giao thông vận tải khoa nào, lớp việc tìm đến sinh viên A có độ bất định Bây giờ, giả sử biết thêm sinh viên A học khoa Công nghệ thơng tin trường, điều làm giảm ñộ bất ñịnh Như tính bất ñịnh ñã thay ñổi nhận thêm thông tin

(7)

6

biết thêm A ñạt ñiểm lượng thơng tin bổ sung làm giảm độ bất định Tính bất định kiện lúc ñầu thể (điểm 5, 6, 7, 8, 9, 10) lúc sau (điểm 8) Tính bất định gắn liền với khái niệm xác suất Xác suất nhỏ ñộ bất ñịnh lớn, hay nói cách khác, lượng thông tin tỷ lệ nghịch với xác suất kiện

Thơng tin thường biểu diễn qua ký hiệu Ví dụ, ta có tập đối tượng X cần biểu diễn (tập thí sinh chẳng hạn) Chọn tập hữu hạn Y chữ số làm bảng chữ

cái, ta gọi dãy hữu hạn chữ từ Y (ởñây số báo danh) Với phần tử x ∈ X ta gán từ y ∈Y gọi mã x (Y gọi bảng mã) Phép tạo mã tương

ứng cần ñảm bảo tính chất với x1≠x2 (x1 , x2 ∈X) có y1≠y2 (y1 , y2 ∈ Y) mã tương

ứng chúng Khi biết mã số (số báo danh), phép giải mã ta tìm đối tượng tương ứng (thí sinh)

Thơng tin đưa vào MTðT (để lưu trữ, tính tốn, ) thực chất dãy tín hiệu nhị phân hay cịn gọi bit (binary digit), tương ứng với trạng thái mạch điện tử bên máy tính Vì vậy, xử lý thơng tin tự động, dạng mã quan trọng dùng mã nhị phân Thơng tin ñược mã hóa bảng chữ gồm ký hiệu chữ số chữ số

Ví dụ, với bảng mã ASCII, mã tiêu chuẩn Mỹ, ký tự (chữ cái, chữ số, ký tự ñặc biệt) tương ứng với mã bit Như bảng mã với bit có trạng thái cho phép mã hóa 27=128 ký tự Với bảng mã ANSI, hay gọi ASCII mở rộng, ký tựđược mã hóa bit, lượng ký tự mã hóa 28=256 ký tự Cuối năm 80 kỷ trước, bảng mã UNICODE ñược giới thiệu Bảng mã sử dụng 16 bit

để mã hóa ký tự, nên lượng ký tự mã hóa 216=65536 ký tự Hiện UNICODE trở thành tiêu chuẩn ñược chấp nhận rộng rãi mã hóa ký tự tất ngôn ngữ giới

1.3 Hệđếm biu din thơng tin máy tính

Hệ ñếm ñược hiểu tập ký hiệu tập qui tắc xác ñịnh dùng ñể biểu diễn tính giá trị số Trước hết xét hệ ñếm quen thuộc, ñại diện cho hai cách đếm là: hệđếm La Mã (đếm khơng theo vị trí) hệđếm thập phân (đếm theo vị trí)

Hệ ñếm La Mã: Mỗi ký hiệu biểu thị giá trị (I=1, V=5, X=10, D=500, M=1000) Nó có qui tắc, chẳng hạn: n ký hiệu ñứng cạnh cho biết ký hiệu lặp lại n lần, ví dụ: II=2, III=3, XXX=30; hai ký hiệu ñó ký hiệu lớn ñứng trước biểu thị tổng hai ký hiệu đó, ví dụ: VI=6, XI=11, Như hệ ñếm La Mã, ký hiệu chỉñại diện cho giá trị, không phụ thuộc vào vị trí biểu diễn

Hệ đếm thập phân: Sử dụng 10 ký hiệu (là chữ số: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9) Qui tắc tính giá trị: giá trị ký hiệu phụ thuộc vào thân ký hiệu vị trí biểu diễn Ví dụ: số 555, chữ số hàng ñơn vị ñơn vị, chữ số hàng chục 50

ñơn vị (5*101), chữ số hàng trăm 500 ñơn vị (5*102) Số lượng chữ số dùng hệ

thập phân (10 chữ số) gọi số hệñếm Số mũ số 10 xác ñịnh giá trịñịnh lượng ñơn vị

Hệ ñếm thập phân trường hợp riêng chọn số 10 Tổng quát,

một số nguyên b > ñều chọn làm số Lúc ký hiệu hệñếm 0, 1, 2, , b-1

Trong tin học, hệ ñếm thường ñược sử dụng là: hệ số (hệ nhị phân) dùng ký hiệu {0, 1} hệ số dùng ký hiệu {0, 1, 2, 3, 4, 5, 6, 7} hệ số 16 dùng ký hiệu {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} Khi cần phân biệt số hệđếm nào, ta sử

(8)

7

MTðT tác động trực tiếp với số nhị phân, người lại thường làm việc hệ thập phân Vì cần phải có thuật tốn để chuyển đổi số từ hệñếm sang hệ ñếm khác ðể chuyển ñổi số từ hệ ñếm số b1 sang hệ ñếm số b2 , người ta

thường dùng hệ thập phân làm trung gian: chuyển số từ hệ ñếm số b1 sang hệ thập phân,

sau ñó chuyển tiếp số từ hệ thập phân sang hệñếm số b2

1.3.1 Biến ñổi sốở hệñếm bt k sang h thp phân:

Cho số N= (dn-1dn-2 d1d0d-1d-2 d-m) hệ ñếm số b ðể tìm biểu diễn N hệ

thập phân, ta tiến hành theo bước: - Viết N dạng ña thức:

N = dn-1 bn-1 + dn-2 bn-2 + + d1 b1 + d0 b0+d-1 b-1 + d-2 b-2 + + d-mb-m

- Sử dụng phép tốn hệ thập phân để tính giá trịđa thức Ví dụ:

1110,12 = 1.23 + 1.22 + 1.21 + 0.20 + 1.2-1 = 14,5

D3F,416 = D.162 + 3.161 + F.160 + 4.16-1

= 13.162 + 3.161 + 15.160 + 4.16-1= 3391,25 1.3.2 Biến ñổi sốở h thp phân sang hệñếm cơ s bt k:

Trước hết cần tách phần nguyên phần thập phân (nếu có), tiến hành biến ñổi chúng riêng biệt sang hệñếm số b Sau cách ghép nối kết ta thu giá trị cần tìm

ðể biến đổi phần ngun N, ta chia ngun cho b thương số N1 số dư d1

Sau ñó lại lấy N1 chia nguyên cho b, ñược thương số N2 vào số dư d2, Lặp lại q trình đến thương số Nk=0, ta có kết cần tìm (dk d2d1)

Ví dụ: 5210 = ?2 Ta thực theo thuật toán sau:

Phép chia nguyên Thương số Số dư

52 : 26

26 : 13

13 :

6 :

3 : 1

1 :

Như 5210 = 1101002

Ví dụ: 5850610 = ?16 Ta thực theo thuật toán sau:

Phép chia nguyên Thương số Số dư

58506 : 16 3656 10

3656 : 16 228

228 : 16 14

14 : 16 14

Như 5850610 = E48A16

ðể biến ñổi phần thập phân 0,M ta nhân với b, phần ngun kết d1,

phần thập phân lại sau lấy kết trừđi d1 0,M1 Sau lấy 0,M1 nhân với b, ñược

(9)

8

Tiếp tục lặp lại q trình này, có kết thúc lặp vơ hạn, tùy theo u cầu mà định dừng Ta có kết cần tìm (0,d1d2d3 )

Ví dụ: 0,687510 = ?2

Phép nhân Kết Phần nguyên

0,6875 * 1,375

0,375 * 0,75

0,75 * 1,5

0,5 * 1,0

Như vậy: 0,687510 = 0,10112

Từđây suy ra: 52,687510 = 110100,010112

Ví dụ: 0,843510 = ?16

Phép nhân Kết Phần nguyên

0,8435 * 16 13,496 13

0,496 * 16 7,936

0,936 * 16 14,976 14

0,976 * 16 15,616 15

Như vậy: 0,843510 = 0,D7EF 16

Từñây suy ra: 58506,843510 = E48A,D7EF 16

1.3.3 Biu din thơng tin máy tính:

MTðT xử lý liệu số phi số, hai loại liệu ñưa vào máy ñều dãy tín hiệu nhị phân, thường thể chữ số 0, (gọi bit) Theo nghĩa MTðT xử lý liệu số, bit đơn vị thơng tin Sốđược biểu diễn dạng nhị phân dãy bit liên tiếp Các số, ký hiệu, lệnh máy biểu diễn máy tính thơng qua dãy nhị phân với ñộ dài xác ñịnh, gọi từ máy ðộ dài từ máy ñặc trưng họ máy Các độ dài từ máy thơng dụng 8, 16, 32, bit ðộ dài từ máy xác định, dải số biểu diễn ñược bên máy tính hữu hạn

1.4 Ngun lý ca h x lý thơng tin tựđộng

1.4.1 Nguyên lý làm vic ca máy tính

Von Neumann người ñề xuất nguyên lý làm việc máy tính số, nguyên lý ñược dùng làm sở cho hầu hết MTðT Theo MTðT làm việc theo chương trình có nhớ ðểđảm bảo nguyên tắc này, MTðT cần phải gồm ñủ thành phần bản: nhớđể ghi thơng tin, số học logic để thực tính tốn, bộđiều khiển, thiết bị nhập thiết bị xuất liệu

Máy tính phải thi hành lệnh người dùng đưa vào Một chương trình thực chất chuỗi lệnh, nhằm thực công việc Một tập hợp qui ước

để viết nên dịng lệnh đưa vào máy, cho máy nhận diện thi hành gọi ngôn ngữ Ngôn ngữñược thực trực tiếp dựa qui ước mạch điện tử máy gọi ngơn ngữ

máy Mỗi loại máy có ngơn ngữ riêng Ngơn ngữ máy có ưu điểm máy hiểu ngay, q khác biệt so với ngơn ngữ người, nên việc xây dựng, kiểm thử

(10)

9

Từ ñầu năm 60 kỷ trước ñã bắt ñầu xuất ngơn ngữ lập trình (NNLT) bậc cao Gọi ngơn ng bc cao ngơn ngữ thường sử dụng từ

khóa dựa tiếng Anh, có cấu trúc gần gũi với ngôn ngữ người Các NNLT không ngừng phát triển, NNLT ln xuất hiện, ngày hồn thiện đểđáp

ứng nhu cầu ngày cao qui mơ, chất lượng, độ tin cậy, phần mềm Trên thực tế, phát triển ngôn ngữ lập trình gắn liền với phát triển cơng nghệ phần mềm tin học Một chương trình viết NNLT gọi chương trình nguồn Chúng ta cần phải có chương trình dịch cho NNLT để dịch chương trình nguồn NNLT ngơn ngữ máy, MTðT hiểu thực

ðể tựđộng hóa số công việc người vận hành máy, quản lý, khai thác thiết bị phần cứng hiệu hơn, từ năm 1960 người ta ñã xây dựng hệ điều hành cho máy tính Ngày nói đến hệ thống máy tính, ta phải hiểu thiết bị phần cứng hệ điều hành cài đặt Các hệđiều hành ngày phát triển đểđáp ứng nhu cầu khơng có giới hạn người dùng thay ñổi, tiến liên tục phần cứng Một số

hệñiều hành tiêu biểu là: MS-DOS, Windows, Linux, 1.4.2 Lch s phát trin ca máy tính

Lịch sử kỹ thuật tính tốn có từ lâu đời Cơng cụ tính tốn người

những thứ thơ sơ ngón tay, hịn sỏi, đến bàn tính gảy, máy tính cơ, máy tính điện ðến năm 1946, việc chế tạo thành cơng máy tính ENIAC Mỹđược coi mốc đánh dấu ñời MTðT ñầu tiên giới Từ có MTðT, kỹ thuật tính tốn chuyển sang giai ñoạn

Năm Sự kiện

Trước CN Bàn tính gảy Trung Quốc

1642 Máy tính cơ, làm phép cộng (Blaise Pascal)

1670 Máy tính cơ, làm cộng,trừ,nhân,chia,căn bậc (Leibnitz) 1842 Máy tính lập trình để tính tựđộng (Charles Babbage)

1890 Herman Hollerith thiết kế hệ thống lưu thơng tin bìa đục lỗ, đọc tế bào quang điện, thành lập cơng ty IBM

1946 Máy ENIAC (Eckert, Mauchly), gồm 18000 bóng chân khơng, giá 500000$

1958 Máy tính dùng bóng bán dẫn transitor (IBM 7090) 1964 Máy tính ñầu tiên dùng mạch tích hợp IC (IBM 360) 1976 Hãng DEC giới thiệu máy vi tính VAX 11/780 1981 Hãng IBM đưa máy vi tính IBM PC

Bng 1.1: Mt s mc lch s phát trin máy tính

(11)

10

Sự phát triển MTðT từ năm 1946 ñến ñã trải qua nhiều hệ Mỗi hệ bước phát triển lớn ñược xác ñịnh vào tiêu chuẩn kỹ thuật mức ñộ phong phú phần mềm

Thế hệ thứ (khoảng 1946-1955): Dùng bóng đèn điện tử, độ tin cậy thấp, tiêu hao nhiều lượng, tốc độ tính tốn từ vài nghìn đến vài chục nghìn phép tính giây Phần mềm chưa phát triển, chủ yếu dùng ngôn ngữ máy để lập trình Thế hệ MTðT thường dùng mục đích nghiên cứu khoa học

Thế hệ thứ hai (khoảng 1955-1965): Dùng bóng bán dẫn thay ựèn ựiện tử, tiêu thụ lượng hơn, nhớ có dung lượng lớn hơn, tốc ựộ khoảng vài chục nghìn phép tắnh giây bắt ựầu xuất số NNLT bậc cao FORTRAN, COBOL, Vềứng dụng,

ñã bắt ñầu dùng vào mục đích tính tốn quản lý kinh tế, thống kê,

Thế hệ thứ ba (khoảng 1965-1980): Dùng mạch tích hợp thay cho bóng bán dẫn, tốc độ

tính tốn lên đến hàng triệu phép tính giây Các tiến khác phải kểñến: xuất nhiều hệ điều hành tốt hơn, có khả sử dụng nhớ ảo, đa chương trình, thiết bị ngoại vi phát triển mạnh mẽ Phần mềm phát triển ña dạng, ứng dụng nhiều lĩnh vực

Thế hệ thứ tư (khoảng từ sau 1980): Dùng mạch tích hợp cỡ lớn VLSI, phát triển mạng máy tính, kiến trúc song song, tốc độ tính tốn lên đến nhiều triệu, chí hàng tỷ

phép tính giây Vềứng dụng, sử dụng tất lĩnh vực

Dựa kích thước, kiến trúc vật lý, tính năng, tốc độ quy mô xử lý, người ta phân chia MTðT thành loại: Máy tính lớn (mainfraim), máy tính mini (mini computer) máy vi tính (micro computer) Các máy tính lớn có giá thành đắt, thường sử dụng vào lĩnh vực quan trọng, địi hỏi nhiều tính tốn phức tạp Thuộc loại kể đến máy Cray, IBM 3090/300, Gen/Blue, Các máy tính mini có giá thành vừa phải, thích hợp cho mục ñích chuyên dùng Một số máy loại PDP, HP-300, IBM 360, Sun 4, Các máy vi tính xuất từ cuối năm 70 kỷ 20 Các máy vi tính có kích thước nhỏ, giá thành rẻ loại máy trên, nên ñã dần ñược sử dụng rộng rãi, kể công ty nhỏ, trường học, hộ gia đình hay cho cá nhân Chính phiên máy vi tính ñầu tiên hãng IBM ñược gọi máy tính cá nhân (Personal Computer, viết tắt PC) Máy vi tính IBM chiếm thị phần lớn vào đầu năm 1980, nên người ta gần nhưñồng nghĩa từ PC với từ máy vi tính

Cần lưu ý cách phân loại tương ñối, cần quan tâm ñến yếu tố thời gian Nhiều máy vi tính ngày có tính sử dụng vượt xa máy tính lớn vào năm 1970

1.5 Cu trúc máy tính

Về cấu trúc logic, MTðT gồm phận là: nhớ, số học-logic, bộđiều khiển, thiết bị nhập/xuất liệu ñường truyền dẫn Về tổ chức vật lý, phận đóng gói thành thiết bị sau:

- Bo mạch chủ (Mainboard Motherboard)

- Bộ xử lý trung tâm (Center Processing Unit, viết tắt CPU)

- Bộ nhớ: gồm nhớ (ROM, RAM) nhớ ngồi hay cịn gọi thiết bị lưu trữ (ñĩa từ, ñĩa CD, )

- ðường truyền (Bus) cổng giao tiếp - Bộ nguồn

(12)

11

Hình 1.2 Máy vi tính Hình 1.3: Máy tính xách tay (laptop)

Thùng máy (case):

Hầu hết thiết bị MTðT kể ñều ñược ñặt bên thùng máy, trừ số

thiết bị ngoại vi Về hình thức, thường có kiểu thùng máy: ñặt ñứng ñặt nằm ngang Chú ý nhiều người quen gọi thùng máy CPU, gọi sai CPU xử lý trung tâm gắn bo mạch chủ, ñặt bên thùng máy

Bo mch ch:

Là thành phần quan trọng MTðT, kết nối phận máy tính với Tất thành phần MTðT ñều ñược cắm trực tiếp, gián tiếp (thông qua cáp) vào bo mạch chủ Bo mạch chủ gồm thành phần chính: ổ cắm xử lý trung tâm (ñể cắm CPU), rãnh cắm nhớ (ñể cắm RAM), BIOS, rãnh cắm cho thiết bị

ngoại vi (ñể cắm cạc hình, cạc mạng, ), cổng giao tiếp với thiết bị ngoại vi,

Hình 1.4: Bên máy vi tính

B x lý trung tâm (CPU):

Là não MTðT, nói sức mạnh máy tính phụ thuộc chủ yếu vào khả

năng tính tốn CPU Bộ xử lý trung tâm bao gồm số học – logic, bộñiều khiển ghi Bộ số học – logic có chức thực phép tính số học phép tính logic Bộđiều khiển có chức tìm nạp lệnh từ nhớ, ñiều khiển bước thực chương trình Cịn ghi thực chất nhớ tốc độ cao, ghi có chức riêng

CPU có phận tạo xung nhịp đểđiều khiển hoạt động đồng hoạt

ñộng phận khác tồn hệ thống máy tính Tốc độ CPU thể nhịp

(13)

12

Hầu hết CPU sử dụng ñược sản xuất hãng tiếng như: Intel, AMD, Motorola

Hình 1.5: B x lý trung tâm (CPU)

B nh

Bộ nhớ dùng để lưu trữ thơng tin ðơn vị đểđo lượng thơng tin byte (viết tắt B) Một byte thực chất dãy bit liên tiếp (8 bit) ðể lưu trữ ký tự nhớ, ta cần byte Trong thực tế, thường sử dụng số ñơn vị bội số byte là: kylobyte (viết tắt KB, KB = 210 B), megabyte (viết tắt MB, MB = 210 KB), gigabyte (viết tắt GB, GB = 210 MB), tetrabyte (viết tắt TB, TB = 210 GB)

Bộ nhớ gồm nhớ chỉñọc (Read Only Memory, viết tắt ROM) nhớ truy nhập ngẫu nhiên (Random Access Memory, viết tắt RAM) ROM chứa số liệu chương trình để máy tính khởi ñộng làm việc ROM ñược hãng sản xuất máy tính ghi sẵn, khơng bị tắt máy ta khơng thể thay đổi liệu ROM

Trên thực tế, nói đến nhớ máy tính người ta thường ngầm hiểu RAM RAM dùng để lưu trữ chương trình tạm thời máy ñang làm việc Chúng ta đọc, ghi, sửa xóa liệu RAM, ñọc ghi ñiện nên tắt máy

điện thơng tin lưu ñó bị hết Bộ nhớ RAM thường ñược tổ chức thành băng (còn gọi RAM), có dung lượng 16 MB, 32 MB, 64 MB, Các RAM ñược cắm bo mạch chủ Trên bo mạch chủ cắm nhiều RAM

Bộ nhớ RAM có tốc độ truy cập cao, khơng lưu liệu sau tắt máy, liệu muốn lưu trữ lâu dài cần phải ghi vào thiết bị lưu trữ Các thiết bị lưu trữ ña dạng, gồm: băng từ, loại ñĩa từ (ñĩa mềm, ñĩa cứng), loại ñĩa quang (ñĩa CD, ñĩa DVD), ñĩa USB (USB Flash Disk),

Hình 1.6: B nh RAM

B ngun

Bộ nguồn chuyển ñổi ñiện lưới xoay chiều thành dòng ñiện chiều ñiện áp thấp (thường khoảng 3v ñến 12v) ñể cung cấp cho phận máy tính

(14)

13

Tin học ngày ñã trở thành ñộng lực sản xuất xã hội MTðT khác máy móc khác chỗ gia cơng thơng tin không gia công nguyên vật liệu Sản phẩm MTðT thơng tin hướng dẫn hoạt động thực tiễn Ban ñầu tin học chủ yếu phục vụ vấn ñề khoa học kỹ thuật, người sử dụng chủ yếu nhà chun mơn lĩnh vực Sự phát triển nhanh chóng MTðT mạng Internet cho phép tin học xâm nhập vào lĩnh vực Do phát triển nhanh, mạnh rộng khắp tin học nên khó

để nói hết ứng dụng nó, tóm lược số phần mềm ứng dụng bản, phổ biến

Phm mm toán hc:

- Mathematica: phần mềm cho phép tính tốn từ đơn giản tính tốn số

học đến phức tạp hơn, như: tốn đa thức, đại số tuyến tính, tìm giới hạn, tìm đạo hàm, tính tích phân, giải phương trình vi phân, khai triển Taylor, Ngồi phần mềm cịn cho phép vẽ biểu đồ đồ thị

- Matlab: phần mềm thực tính tốn tương tự

Mathematica Ngồi Matlab cịn dùng kỹ thuật đồ họa chiều để thiết kế mơ hình khoa học kỹ thuật làm đoạn phim hoạt hình đơn giản

Phn mm văn phòng:

Bộ phần mềm văn phịng tiếng nhất, có mặt hầu hết máy tính Microsoft Office Trong phần mềm có chương trình:

- Word: ñể soạn thảo, lưu trữ, sửa chữa, in ấn văn

- Excel: ñể tạo lập, lưu trữ, sửa chữa, in ấn bảng tính, ví dụ: bảng lương, bảng thống kê bán hàng,

- PowerPoint: ñể tạo lập báo cáo (slide) trình bày báo cáo - Access: hệ quản trị sở liệu

- FrontPage: ñể xây dựng trang Web

- Outlook: ñể trao ñổi, quản lý thưñiện tử, lập lịch làm việc, Phn mm thiết kế:

- AutoCAD: ñể tạo lập quản lý vẽ kỹ thuật - Soap: để tính tốn kế cấu ổn định lực học

- 3D Max: công cụ mạnh, có hỗ trợ multimedia để phục vụ cho công tác thiết kế

CÂU HI CHƯƠNG

Câu 1: Kể tên lĩnh vực nghiên cứu Tin học? Thơng tin máy tính lưu trữ, tính tốn theo hệđếm nào?

Câu 2: Chuyển giá trị A =1001001 từ hệñếm sang hệñếm 10? Chuyển giá trị B

=32456,4235 từ hệñếm 10 sang hệñếm 2? Chuyển giá trị C=100100010 từ hệñếm sang hệñếm 8?

(15)

14

CHƯƠNG – HỆ ðIỀU HÀNH

Hệ ñiều hành (HðH) tập hợp chương trình đặc biệt dùng để tổ chức, phối hợp hoạt

ñộng thiết bị phần cứng, tạo môi trường làm việc cho chương trình ứng dụng giao tiếp với người dùng HðH phần mềm thiếu máy tính HðH tựđộng tải vào nhớ sau khởi động máy tính

Hiện có nhiều HðH cho hệ máy khác Số lượng HðH cho máy vi tính khơng ít, giới Việt Nam từ trước tới sử dụng phổ

biến HðH hãng Microsoft MS-DOS Windows

2.1 Hệñiu hành MS-DOS

Một HðH cho máy vi tính MS-DOS (Microsoft Disk Operating System), thường gọi tắt DOS MS-DOS ñã phát triển qua nhiều phiên từ 1.0

ñến 6.0 dần ñược thay HðH Windows Tuy nhiên, nhiều tư tưởng qui ñịnh DOS áp dụng Windows Ngồi ra, có nhiều phần mềm ñược viết từ HðH Windows chưa phổ biến, chúng chạy ñược DOS, nên Windows cho phép tạo mơi trường DOS ảo, giống dùng MS-DOS để chạy ñược phần mềm cũ

2.1.1 Mt s khái nim

Tệp tin (file): tập hợp thơng tin tổ chức lưu trữ thành đơn vịđộc lập Có hai loại tệp tin là: tệp tin liệu tệp tin chương trình Mỗi tệp tin có tên, gồm phần,

được phân cách dấu chấm (.) là: phần tên phần mở rộng ðặt tên tệp tin DOS phải tuân theo số qui tắc: phần tên không ký tự, phần mở rộng không ký tự

và không chứa dấu cách ký tựñặc biệt

Thư mục (directory): ðể tạo dễ dàng thuận lợi việc quản lý truy xuất ñến tệp tin, DOS cho phép tổ chức tệp tin thành nhóm, gọi thư mục Có thể ví thư

mục tủ hồ sơñể chứa hồ sơ tệp tin Trong thư mục tạo thư

mục Thư mục mà bên khơng có thư mục khơng có tệp tin gọi thư mục rỗng Thư mục hành thư mục mà ta làm việc, thể dấu nhắc DOS Tên thư mục khơng ñặt ký tự

Dựa khái niệm thư mục, DOS tổ chức liệu ñĩa cách logic dạng hình cây, với “gốc” ổ ñĩa, phân chia tiếp thư mục, từ thư mục đến thư

mục nó, cuối “lá” tệp tin Cách tổ chức liệu ñĩa HðH Windows tương tự vậy, có điều Windows đặt tên tệp tin tên thư

mục với ñộ dài lớn hơn, bao gồm dấu cách

ðường dẫn: ðể truy cập ñến thư mục hay tệp tin ta phải nằm ởđâu tính từ thư mục hành Các thơng tin trình bày cách liệt kê tên thư mục tệp tin, hai thư mục tệp tin sử dụng dấu sổ chéo (\) Dãy thư mục tệp tin gọi

đường dẫn Nếu phải xác ñịnh thư mục tệp tin ởổ ñĩa khác với ổ đĩa hành cần tên ổđĩa, kèm theo dấu hai chấm (:) Tên ổñĩa thường ký hiệu A cho ổñĩa mềm, C, D cho ổñĩa cứng,

Ví dụ đường dẫn: C:\GIAOTRINH\THDC\CHUONG1.DOC

(16)

15 2.1.2 Mt s qui ước

Một lệnh DOS ñược viết bắt ñầu từ dấu nhắc DOS hình Giữa phần lệnh phần thơng tin phía sau phải có dấu cách Trong lệnh DOS không phân biệt chữ hoa chữ thường Sau viết xong lệnh, gõ phím Enter để thực lệnh

Trong cách viết lệnh sau ñây, phần ñặt dấu < dấu > bắt buộc phải có, khơng lệnh sai cú pháp, cịn phần đặt dấu [ ] phần lựa chọn, tùy theo yêu cầu mà có cần sử dụng hay khơng

2.1.3 Mt s lnh làm vic vi thư mc: 1) Tạo thư mục mới:

MD [ñường dẫn] <tên thư mục> <ENTER>

Trong đó: [đường dẫn] tên ổ ñĩa, tên thư mục ñể xác ñịnh thư mục cần làm việc, tức thư mục mà ta tạo thư mục nó, <tên thư mục> tên thư mục cần tạo, <ENTER> gõ phím Enter bàn phím

Ví dụ ổđĩa C hành có thư mục GIAOTRINH, cần tạo thư mục có tên VANPHONG:

MD GIAOTRINH\VANPHONG <ENTER> 2) Xóa thư mục rỗng:

RD [đường dẫn] <tên thư mục> <ENTER> 3) Chuyển ñến thư mục:

CD [ñường dẫn] <tên thư mục> <ENTER>

Thư mục sau ñược chuyển ñến trở thành thư mục hành Chuyển ñến thư mục cha:

CD <ENTER>

Chuyển ñến thư mục gốc: CD\ <ENTER> 4) Xem nội dung thư mục:

DIR [ñường dẫn] [tên thư mục] [/p] <ENTER>

Nếu dùng DIR ta xem nội dung thư mục hành: có thư

mục nào, tệp tin nào, kích thước tệp tin byte Tham số /p ñể xem trang hình, dùng số lượng tệp tin thư mục cần xem lớn

2.1.4 Mt s lnh làm vic vi tp tin 1) Xóa tệp tin:

DEL [ñường dẫn] <tên tệp tin> <ENTER>

ðể xác ñịnh tên tệp tin cần rõ tên phần mở rộng Có thể sử dụng ký tựđại diện

để xóa lúc nhiều tệp tin có chung tính chất

Ví dụ: xóa tất tệp tin có phần mở rộng TMP thư mục THDC DEL GIAOTRINH\THDC\*.TMP <ENTER>

(17)

16

REN [ñường dẫn] <tên tệp tin> <tên mới> <ENTER> 3) Sao chép tệp tin:

COPY <Nguồn> <đắch> <ENTER>

Trong ựó phần <Nguồn> cần tệp tin cần chép phần <đắch> ổựĩa thư mục chép tệp tin vào

2.2 Hệñiu hành Windows

2.2.1 Mt sốñặc ñim

HðH Windows bước phát triển MS-DOS Khác biệt dễ nhận thấy Windows so với DOS có giao diện đồ họa, với thực đơn (menu), cửa sổ biểu tượng Các thao tác Windows trực quan dễ dàng, người sử dụng không cần phải nhớ gõ dòng lệnh DOS Windows có q trình phát triển dài, từ

giữa năm 80 kỷ 20, thay DOS trở thành HðH ñược sử dụng nhiều giới

Những phiên ñược sử dụng rộng rãi ñầu tiên Windows 3.0 Windows 3.1 Các phiên ñược sử dụng phổ biến Windows 98, Windows 2000, Windows XP Nếu máy tính cài đặt HðH Windows, sau khởi ñộng máy, Windows tựñộng nạp chạy

Sau ñăng nhập, xuất hình (desktop) Windows (các ví dụởđây phiên Windows XP) Mỗi biểu tượng hình thường đại diện cho chương trình Muốn thực chương trình ta nháy đúp chuột vào biểu tượng Chúng ta tạo biểu tượng (shortcut) hình cho tệp tin hay thư mục cần thường xuyên dùng tới Thanh tác vụ (taskbar) phía hình cho biết ứng dụng

ñang thực

(18)

17

Hình 2.1: Màn hình desktop ca Windows XP

(19)

18

Hình 2.4: Sau chn Log Off Hình 2.5: Sau chn Turn Off Computer Con chuột thiết bị giao tiếp chủ yếu dùng giao diện đồ họa Con chuột thường có hai phím: phím trái phím phải Một số thao tác với chuột là:

- Bấm chuột (hoặc gọi nháy chuột, kích đơn, ) thao tác ấn vào nút trái chuột, dùng ñể chọn ñối tượng

- Bấm chuột phải thao tác ấn vào nút phải chuột, thường dùng để kích hoạt bảng chọn tức thời (bảng chọn gồm chức phụ thuộc vào ngữ

cảnh)

- Bấm đúp chuột (hoặc cịn gọi nháy kép, kích ñúp, ) thao tác bấm nhanh lần liên tiếp phím trái chuột, thường dùng để kích hoạt ñối tượng ñó - Thao tác kéo-thả: bấm giữ phím trái chuột, kéo chuột tới vị trí dự ñịnh, nhả

phím bấm Thao tác dùng ñể di chuyển vị trí hay thay ñổi kích thước

đối tượng

Hình 2.6: Bng chn tc thi

(20)

19

Hình 2.7: Windows Explorer

2.2.2 Các thao tác Windows Explorer Hin th ni dung:

Phía bên trái hình Windows Explorer tổ chức thư mục, cách tổ chức giống nhưở DOS Khi chọn thư mục (bằng cách bấm chuột vào nó) danh sách tệp tin thư mục xuất bên phải hình Ta xếp xem tệp tin theo nhiều cách khác (theo tên, theo kiểu, ) cách bấm chuột phải

màn hình bên phải, chọn Arrange Icons By, sau chọn cách xếp tương ứng

Hình 2.8: Chn cách sp xếp biu tượng tp tin ðóng m thư mc:

ðể mở thư mục: bấm chọn biểu tượng dấu cộng , đểđóng thư mục: bấm chọn biểu tượng dấu trừ

Chn ñối tượng (tp tin thư mc):

(21)

20

Sao chép ựối tượng (các tp tin thư mc t thư mc ngun sang thư mc ắch): Tìm ựến thư mục nguồn, nơi chứa ựối tượng đánh dấu chọn ựối tượng cần chép Bấm chuột phải ựể mở bảng chọn tức thời, chọn Copy Cuối tìm ựến thư mục ựắch, bấm chuột phải, chọn Paste bảng chọn tức thời Nếu muốn thay chép, ta chuyển ựối tượng từ thư mục nguồn sang thư mục ựắch (ựối tượng ựó khơng cịn thư mục nguồn), việc thay Copy Cut

Hình 2.9: Bng chn Copy Hình 2.10: Bng chn Paste ðổi tên tp tin, thư mc:

Chọn ñối tượng (tệp tin thư mục), bấm chuột phải vào ñối tượng, chọn chức Rename bảng chọn, cuối gõ tên

Xóa tp tin, thư mc:

Chọn ñối tượng (tệp tin thư mục), bấm chuột phải vào ñối tượng, chọn chức Delete bảng chọn hoặc gõ phím Delete bàn phím Chú ý: tệp tin, thư mục sau thực thao tác khơng bị xóa hẳn, mà bịđưa vào thùng rác Nếu muốn phục hồi ta cần vào thùng rác, chọn tệp tin, thư mục cần phục hồi, bấm chuột phải, chọn Restore Nếu muốn xóa hẳn tệp tin, thư mục nào, ta cần giữ phím Shift chọn chức Delete

Hình 2.11: Biu tượng thùng rác

Thao tác Windows Explorer chủ yếu sử dụng chuột, thao tác ñơn giản, nên tận dụng thêm khả kéo-thả Chẳng hạn ñể chép tệp tin vào thư mục

đó, ta có thểđánh dấu chọn tệp tin kéo thả vào thư mục đích ðể xóa tệp tin, ta bấm chọn tệp tin đó, kéo thả vào biểu tượng thùng rác

Chúng giới thiệu ởđây số kiến thức nhất, khả HðH Windows phong phú, ñề cập hết giáo trình Tuy nhiên với giao diện

ñồ họa, trực quan, việc tự học làm chủ thao tác, khai thác chức khác Windows sau ñã nắm ñược kiến thức hồn tồn khơng khó

CÂU HI CHƯƠNG Câu 1: Nêu khái niệm HðH? Kể tên số HðH?

Câu 2: Quy tắc ñặt tên File hệñiều hành DOS? Nêu lệnh làm việc với thư mục, lệnh làm việc với tệp tin?

(22)

21

CHƯƠNG – THUẬT TOÁN

3.1 Khái nim

Thuât toán một dãy quy tắc, nhằm xác ñịnh dãy thao tác ñối tượng (dữ liệu ñầu vào) cho sau số hữu hạn bước thực thao tác ta đạt

được mục tiêu cần làm (dữ liệu kết tốn)

Ví dụ: Thuật tốn tìm ước số chung lớn (USCLN) hai số nguyên dương a,b - Input: a,b hai số nguyên dương

- Output: ƯSCLN a, b Có thể mơ tả thuật tốn sau: Bước 1: Tìm số dư r phép chia a cho b Bước 2: Kiểm tra:

- Nếu r = thơng báo b USCLN kết thúc

- Nếu r<>0 thực đặt a=b, b=r quay lại làm lại Bước

Thuật toán gồm thao tác tính số dư r, kiểm tra r<>0?, r<>0 ñặt a=b, b=r Các ñặc trưng thuật toán

- Thut toán phi có tính dng: Thuật tốn phải kết thúc sau số hữu hạn bước - Tính xác định: Ở bước thao tác phải rõ ràng, không gây nhập nhằng, tùy

chọn

- ðại lượng vào: Mỗi thuật tốn phải có nhiều liệu đầu vào

- ðại lượng ra: Sau kết thúc thuật tốn ta thu sốđại lượng kết tốn

- Tính hiu qu: Mỗi tốn có nhiều thuật tốn khác để giải Một thuật tốn tốt phải đơn giản, tiết kiệm nhớ thời gian thực - Tính ph dng: Thuật tốn giải số tốn lớp

tốn

- Tính hình thc hóa: Thuật tốn phải hình thức cài ñặt ñược máy tính

3.2 Mt s phương pháp biu din thut tốn

Máy tính sử dụng cơng cụ để hỗ trợ người giải toán thực tế Bản thân máy tính vật vơ chi vơ giác, khơng có tư Do đó, thân khơng thể tự giải tốn thực tếđược, mà thực lệnh, người bảo làm thơng qua ngơn ngữ lập trình Vì để máy giúp giải tốn ta cần phải cài đặt thuật tốn giải tốn ñó cho máy, theo ñó máy thực giải tốn ðể cài đặt thuật tốn cho máy người cài đặt phải có thuật tốn giải tốn

Có nhiều cách biểu diễn thuật tốn nhưđặc tả tự nhiên (liệt kê bước), sơñồ khối, giả

(23)

22

Sử dụng ngôn ngữ tự nhiên để biểu diễn thuật tốn cách bước cần thực thuật tốn

Ví dụ: Thuật tốn giải phương trình bậc 2: ax2+bxc=0 với hệ số a, b, c số thực, a≠ Bước 1: Xác ñịnh hệ số a=?, b=?, c=? phương trình

Bước 2: Tính ∆ = b2 - 4ac Bước 3: Kiểm tra ∆:

- Nếu ∆ < kết luận phương trình vơ nghiệm

- Nếu ∆ = kết luận phương trình có nghiệp kép x1=x2=-b/(2a)

- Nếu ∆>0 kết luận phương trình có nghiệm x1=(-b + ∆ )/(2a); x2=(-b- ∆ )/(2a)

3.2.2 S dng sơđồ khi

Sử dụng hệ thống kí hiệu để biểu diễn thuật tốn Một số ký hiệu sử dụng biểu diễn thuật toán:

STT Ký hiệu Ý nghĩa ký hiệu

1 Ký hiệu bắt ñầu thuật toán

2 Ký hiệu kết thúc thuật toán

3 Ký hiệu nhập liệu vào

4 Ký hiệu xuất liệu

5

Ký hiệu rẽ nhánh

Nếu Bt Lơgíc có giá trị ðúng thực theo nhánh ð Nếu Bt Lơgíc có giá trị Sai thực

hiện theo nhánh S

6

Ký hiệu vòng lặp với số lần xác

ñịnh trước

Thực cơng việc A n lần, ban

đầu Biến ñược gán 1, sau lần lặp biến tăng lên đơn vị

7 Kí hiệu khối thao tác

thực công việc A

8 Kí hiệu gọi chương trình A

thực

A Biến=1, 2, ,n Bt Lơgíc

S

ð

A A

Input:

Output: begin

(24)

23

Kí hiệu hướng thực thuật toán

Bng 3.1: Mt s ký hiu dùng v sơđồ khi Ví dụ: Biểu diễn thuật tốn giải phương trình bậc sơñồ khối

Sơñồ khi biu din thut gii phương trình bc hai ax2+bx+c=0, a0, a, b, c, x ∈ R

Nhn xét: Sử dụng sơñồ khối ñể biểu diễn thuật tốn có ưu điểm trực quan, dễ hiểu, dễ kiểm tra, có số nhược ñiểm phải vẽ nhiều, cồng kềnh, không thuận lợi cho toán phức tạp Phương pháp chủ yếu sử dụng cho người lập trình để biểu diễn thuật tốn đơn giản (ít thao tác)

3.3 Các cu trúc cơ bn ca thut toán

Khi mơ tả thuật tốn ta sử dụng cấu trúc sau để mơ tả - Cấu trúc

- Cấu trúc rẽ nhánh - Cấu trúc lặp 3.3.1 Cu trúc tun t

Khái nim: Cấu trúc cấu trúc bao gồm nhiều bước Các bước ñược xếp theo trật tự định Khi máy thực thực theo thứ tự bước ñã

ñược xếp

Trong biểu diễn thuật toán phương pháp đặc tả tự nhiên bước xếp Trong đặc tảđó bước thực trước bước thực sau

S

Begin

Input: a, b, c

Delta = b2 – 4ac

Output: Pt có nghiệm x1, x2 Delta <

Output: Pt vô nghiệm

Delta =

x = -b/2a

Output: Pt Có nghiệm kép x

1 ( ) /(2 )

2 ( ) /(2 )

x b Delta a

x b Delta a

= − + = − −

ð

End

S

(25)

24

Ví du: ðặc tả thuật tốn giải phương trình bậc hai ví dụ mục 3.2.1 thứ tự thực bước là: thực bước 1, sau thực xong bước thực bước sau thực xong bước thực bước

Trong biểu diễn thuật tốn sơđồ khối trình tự thực thuật tốn thực theo chiều mũi tên

Ví du: Tính diện tích, chu vi hình trịn bán kính r Sơđồ khối mơ tả thuật tốn giải tốn trên:

3.3.2 Cu trúc r nhánh

Khái nim: Cấu trúc rẽ nhánh cấu trúc báo cho máy cần kiểm tra điều kiện tốn Ở ñây kết ñiều kiện kiểm tra nhận hai giá trịñúng (ð) sai (S) Nếu kết kiểm tra có giá trịđúng thực theo nhánh ñúng, sai

thực theo nhánh sai

Biểu thức điều kiện biểu thức lơgíc Sơđồ khi th hin cu trúc r nhánh

Ví dụ: Giải phương trình bậc ax + b = Sơñồ khối thể thuật toán:

Input: r

S = πr2 C = 2πr

Output: S, C begin

End

Biểu thức Lơgíc

ð

(26)

25 3.3.3 Cu trúc lp

Trong lập trình có hai dạng cấu trúc lặp: cấu trúc lặp xác định trước cấu trúc lặp khơng xác ñịnh trước

Cu trúc lp xác ñịnh:

Khái nim: Cấu trúc lặp xác ñinh trước cấu trúc báo cho máy lặp ñi lặp lại miền tác động với số lần lặp xác ñịnh trước

Trong miền tác ñộng bao gồm tập cấu trúc Sơñồ khối thể cấu trúc

Cu trúc lp khơng xác định:

Khái nim: Cấu trúc lặp khơng xác định cấu trúc báo cho máy lặp ñi lặp lại miền tác động với số lần lặp khơng xác định trước ðiều kiện kết thúc vịng lặp biểu thức lơgíc

Input :a, b

a =

b =

Output: Pt vô số nghiệm

ð

Ouput: Pt vô nghiệm

x = -b/a

Output: x

S

S

ð

begin

end

Biến = 1, 2, n

(27)

26

Trong miền tác động bao gồm tập cấu trúc Sơñồ khối thể cấu trúc

Ví dụ: Tìm số tự nhiên n nhỏ để tổng s = 2.5

1

1+ + + + ≥

n

Giải: Theo u cầu tốn cần tìm n nhỏ để s ≥ 2.5 ðể tìm n ta thực theo thuật toán sau:

S dng phương pháp đặc t t nhiên mơ t thut tốn: Bước Khởi tạo giá trị ban ñầu n = 0, s =

Bước Tăng giá trị n lên ñơn vị (n = n + 1), tính s = s +1 n

Bước Kiểm tra: Nếu s >= 2.5 dừng lại ta có n giá trị cần tìm Nếu s < 2.5 quay lại thực lại bước S dng sơđồ khi mơ t thut tốn

s = 0, n =

s < 2.5

s = s + 1/n n = n +1

ð

S

s, n begin

end Miền tác ñộng

Miền tác ñộng Biểu thức lơgíc

Biểu thức lơgíc

ð

S

ð

S

(28)

27

3.4 Mt s thut toán gii mt s toán đơn gin

3.4.1 Bài tốn đếm

Bài toán: Cho một dãy n phần tử a1, a2,…, an Hãy đếm xem dãy có

phần tử thoả mãn điều kiện

Một cách tự nhiên để giải tốn trên, ta thực duyệt qua phần tử Với phần tử thoả mãn điều kiện tăng biến đếm lên đơn vị

Thut tốn

Bước Xác ñịnh n phần tử a1, a2, an

Bước Khởi tạo biến ñếm với giá trị

Bước Thực duyệt qua phần tử Với phần tửñược duyệt, thực kiểm tra xem có thoả mãn điều kiện tốn khơng? Nếu thoả mãn tăng biến ñếm lên

ñơn vị Nếu không thoả mãn duyệt phần tử Mơ t thut tốn bng sơđồ khi

Ví dụ 1: Cho dãy n số nguyên ðếm xem dãy có số chẵn Thut toán

S dng phương pháp đặc t t nhiên mơ t thut tốn

n

i = 1, 2, , n

ai

Dem =

i = 1, 2, , n

Bt Lơgíc

Dem

S

ð

Dem = Dem +1 Begin

(29)

28 Bước Xác ñịnh n phần tử a1, a2, an

Bước Khởi tạo biến ñếm với giá trị

Bước Thực duyệt qua phần tử Với phần tửñược duyệt, thực kiểm tra: Nếu chia hết cho tăng biến đếm lên ñơn vị Ngược lại, duyệt phần tử tiếp

theo

S dng sơđồ khi mơ t thut tốn

Mơ t thut tốn đếm s chn mt dãy s

3.4.2 Bài tốn tìm giá tr ln nht, giá tr nh nht

Trong sống thực tế, hàng ngày phải tìm giá trị lớn nhất, nhỏ tập phần tử Ví dụ tìm người có chiều cao cao (thấp nhất) lớp; tìm sinh viên có điểm tổng kết cao (thấp nhất) lớp, khoa, trường,… Như

vậy có thuật tốn giải tốn cài đặt máy tính để máy giải giúp thực ứng dụng có ích Bài tốn cụ thểđược phát biểu sau:

Bài tốn: Cho một dãy n số Hãy tìm giá trị lớn (nhỏ nhất) dãy sốđó

ðể tìm giá trị lớn (nhỏ nhất) phần tử dãy Ta thực so sánh phần tử dãy với tìm giá trị mong muốn Q trình tìm thể thuật tốn sau

Thut tốn

S dng phương pháp đặc t t nhiên mơt t thut tốn Bước Xác định n số a1, a2, …, an

Bươc Sử dụng Max lưu giá trị lớn Giả sử giá trị lớn a1 (tức Max = a1)

Bước Duyệt qua phần tử a2, a3, …, an So sánh giá trị phần tử với

Max Nếu > Max (i=2 n) gán giá trị cho Max (Max = ai) Nếu < Max chuyển

xét phần tử

Giá trị cuối lưu Max giá trị lớn dãy số

Input: n

i = 1, 2, , n

Input:

Dem =

i = 1, 2, , n

aiM

Dem = Dem +1

Output: Dem

S

ð

Begin

(30)

29 S dng sơđồ khi mơ t thut tốn

Thut tốn tìm giá tr ln nht ca mt dãy s

ðối với tốn tìm giá trị nhỏ tương tự, phép so sánh ta phải thay dấu “<” dấu “>” thay tên Max thành Min ñể phù hợp với ý nghĩa kết lưu

Mt s tốn qui v tốn tìm max, Bài Cho tọa ñộ dãy n ñiểm { }

1

, n

i i i

x y = mặt phẳng Tìm diện tích đường trịn tâm O(0,0) có bán kính nhỏ chứa n điểm

Gi ý: Bài toán qui v tốn tìm Max Bài Cho tọa độ dãy n ñiểm { }

1

, n

i i i

x y = mặt phẳng Tìm hình chữ nhật có diện tích nhỏ cạnh song song với trục toạñộ chứa n điểm

Gi ý: Bài tốn qui v tốn tìm c Min Max

3.4.3 Bài tốn tính tng mt dãy s

Bài tốn: Cho dãy n số Tính tổng tất phần tử dãy Thut toán

S dng phương pháp đặc t t nhiên mơ t thut tốn Bước Xác định n, a1, a2, …, an

Bước Khởi tạo S =

Bước Duyệt qua phần tử dãy số Với phần tử dãy thực S = S +

Sau duyệt qua hết phần tử ta ñược tổng dãy lưu S S dng sơđồ khi mơ t thut tốn

i = 2, 3, , n Input: n

i = 1, 2, , n

Input:

Max = a1

Max<ai

Output: Max

S

ð

Max =

Begin

(31)

30 Mt s toán qui v tốn tính tng

Bài Tính giá trị đa thực Pn(x) = a0 + a1x + a2x2 + … +anxn

Bài Tính tổng theo công thức (công thức tổng quát dạng S = f(x) + ∑ = n i i x g ) , ( )

Ví dụ 1: Cho x số thực, n số nguyên dương Tính

S = ex + x + + x +

+ … + 1 n x n + +

Ví dụ 2: Cho x số thực, n số nguyên dương Tính S = | x+ (1+x)3 + (2+x)3 + … +(n+x)3| Ví dụ 3: Cho x số thực, n số nguyên dương Tính

1

2006 ( 1)

1! 2! !

n

x x x n

s

n

+ + +

= − + − + − Ví dụ 4: Cho x số thực, n số nguyên dương Tính

2 2006 2! ! n x x S x n = + + + +

Ví dụ 5: Cho n điểm mặt phẳng tọa ñộ ðề xOy: M1, M2, Mn Tính độ dài đường gấp khúc qua ñiểm theo thứ tự từ M1ñến Mn ?

Input: n

i = 1, 2, , n

Input:

S =

i = 1, 2, , n

S = S +

Output: S Begin

(32)

31 3.4.4 Bài tốn tính tích mt dãy s

Bài tốn: Cho dãy n số Tính tích tất phần tử dãy

Thuật tốn tính tích dãy số tương tự thuật tốn tính tổng Tuy nhiên khác với thuật tốn tính tổng khởi gán cho đại lượng lưu trữ tích thay khởi gán thay phép + phép * (nhân)

Các tốn qui v thut tốn tính tích Bài Cho số tự nhiên n Tính S = n!

Bài Cho số thực x, số tự nhiên n Tính S = xn

CÂU HI CHƯƠNG

Vẽ sơđồ khối thể thuật tốn giải toán sau:

Bài 1: Cho số nguyên dương n Hãy kiểm tra xem n có số nguyên tố không? Bài 2: Cho số nguyên dương m n Tìm ước chung lớn số?

Bài 3: Cho dãy số nguyên a1, a2, an Hãy đếm xem có phần tử liên tiếp

dãy theo thứ tự tạo thành cấp số cộng?

Bài 4: Cho dãy số thực x1, x2, xn Hãy tính trung bình cộng phần tử dãy có giá trị

thuộc ñoạn [-6,9]?

(33)

32

PHẦN

(34)

33

Mt s gii thiu mởđầu v Ngơn ng lp trình C

Vào năm 1970 từ ngôn ngữ cũ gọi BCPL, Dennis Ritchie Brian Kernighan ñã đưa ngơn ngữ C với mục đích ban đầu viết Hệñiều hành Unix máy mini DEC PDP-11 Sau C nhanh chóng sử dụng máy tính PC Năm 1987 hãng Borland cung cấp phần mềm Turbo C - chương trình dịch hiệu quả, tiện lợi, nhờđó việc dùng ngơn ngữ C trở nên dễ dàng Trong trình phát triển ñã xuất nhiều phiên C khác ðể tiến tới thống nhất, năm 1990 ANSI [1] ñã xây dựng ngôn ngữ C chuẩn (ANSI C) C ngơn ngữ lập trình cấu trúc tiêu biểu có tốc

ựộ xử lý nhanh, có công cụ mạnh ựể quản lý nhớ thiết bị ngoại vi có nhiều sản phẩm phầm mềm lĩnh vực viết C hệựiều hành, ứng dụng xử lý

ñồ hoạ, ña phương tiện, xử lý văn bản, sở liệu, mạng, C khơng ngừng phát triển, từ C nghiên cứu ngơn ngữ tân tiến khác C++, C Windows, Visual C++, Java Chính C đưa vào giảng dạy cho tất khoa công nghệ

thông tin nhiều khoa chuyên ngành kỹ thuật khác Trong vài năm gần Trường ðại học Giao thơng Vận tải đưa ngơn ngữ C vào giảng dạy chương trình Tin học ðại cương

Trong phần II này, cung cấp kiến thức sở Turbo C Các vấn

ñề lý thuyết ñược giải thích tỉ mỉ minh hoạ nhiều ví dụ Các câu lệnh phức tạp

được giới thiệu từ dễ đến khó Thường lệnh điều khiển viết theo nhiều dạng Các ví dụ tập giúp người ñọc luyện tập cách vận dụng câu lệnh để viết chương trình

Phần II gồm chương 02 phụ lục

Chương 1: việc giới thiệu khái niệm cịn đưa số chương trình C

ñơn giản cách thực chúng máy ñể giúp người ñọc mau chóng tiếp cận với máy tính Chương 2: trình bày kiểu liệu, cách biểu diễn giá trị liệu cách tổ

chức (lưu trữ) liệu biến mảng

Chương 3: nói lớp tốn tử quan trọng dùng để thể thuật tốn , tốn tử rẽ nhánh if, tốn tử tạo lập chu trình (vịng lặp) for, while, - while

Chương 4: trình bày cách tổ chức chương trình thành hàm, quy tắc xây dựng sử dụng hàm Các vấn đề hay khó ởñây trỏ kỹ thuật ñệ quy

Chương 5: nói kiểu liệu quan trọng cấu trúc (tương tự ghi Foxpro Pascal) dùng ñể biểu diễn ñối tượng thường gặp thí sinh, học sinh, giáo viên, hố đơn bán hàng, phiếu xuất nhập vật tư, cơng văn ñến,

Phụ lục 1: trình bày bảng mã ASCII

(35)

34

CHƯƠNG - MỘT SỐ KHÁI NIỆM MỞ ðẦU

Chương giới thiệu thành phần ngôn ngữ lập trình C, là: tập ký tự, từ khóa tên ðể lập chương trình đầy đủ, chúng tơi trình bày đơi

ñiều câu lệnh gán, câu lệnh vào ra, thị #include qui tắc cần lưu ý viết chương trình Ngồi để giúp bạn đọc mau chóng tiếp cận với máy, chúng tơi giới thiệu vài chương trình đơn giản hồn chỉnh cách vận hành chúng máy ñể nhận ñược kết cuối Tất điều nói bổ ích đáng ghi nhớ chúng thường xuyên sử dụng sau ðọc xong chương bạn lập số chương trình

đơn giản, biết cách thực chương trình mơi trường Turbo C 2.0 Turbo C++ 3.0

1.1 Tp ký t

Mọi ngơn ngữ lập trình ñều ñược xây dựng từ ký tự ñó Các ký tựñược nhóm lại theo nhiều cách khác để lập lên từ ðến lượt mình, từ lại ñược liên kết theo qui tắc để tạo thành câu lệnh Một chương trình bao gồm nhiều câu lệnh diễn ñạt thuật tốn để giải tốn Ngơn ngữ C ñược xây dựng ký tự

sau:

26 chữ hoa: A B C Z 26 chữ thường: a b c z 10 chữ số:

Các ký hiệu toán học như: + - * / = ( )

Ký tự gạch nối: _ ( chú ý: phân biệt với dấu - )

Các ký hiệu ñặc biệt khác như: ,;: [] {} ?! \ & | % # $ ,

Dấu cách (space) thực khoảng trống dùng ñể tách từ Ví dụ HA NOI gồm ký tự, HANOI gồm ký tự

Chú ý: Khi viết chương trình ta khơng sử dụng ký hiệu khác tập ký tự nói

Chẳng hạn giải phương trình bậc hai: ax2 + bx + c =

ta cần tính biểu thức:

∆ = b2 - 4ac

Ký tự ∆ không cho phép dùng ngôn ngữ C, ta phải dùng cách ký hiệu khác d hay delta

1.2 T khóa

Từ khóa từđược định nghĩa trước có ý nghĩa hồn tồn xác định Chúng thường ñược sử dụng ñể khai báo kiểu liệu, để viết tốn tử câu lệnh Sau

đây từ khóa TURBO C:

asm break case cdecl char const continue default

(36)

35

extern far float for

goto huge if int

interrupt long near pascal register return short signed sizeof static struct switch typedef union unsigned void volatile while

Ý nghĩa cách sử dụng chúng ñược giới thiệu mục sau Ởñây

cần nhớ hai điều:

- Khơng dùng từ khóa đểđặt tên cho hằng, biến, mảng, hàm,

- Từ khóa phải viết chữ thường Chẳng hạn khơng viết iNT mà phải viết int

1.3 Tên

Tên khái niệm quan trọng, dùng để xác định đối tượng khác chương trình Chúng ta có tên hằng, tên biến, tên mảng, tên hàm, tên trỏ, tên cấu trúc, tên nhãn,

Việc ñặt tên phải tuân theo số quy tắc: tên dãy ký tự gồm chữ, số dấu gạch nối Ký tự đầu tên khơng số Tên khơng trùng với từ khóa (xem 1.2) ðộ dài cực ñại tên ñối với mơi trường Turbo C mặc định 32 ký tự

Các ví dụđúng tên:

a_1 BETA x1 delta_7 _x1 Các ví dụ sai tên:

3XYZ_7 (Ký tựñầu tiên số) r#3 (sử dụng ký tự # )

f(x) (sử dụng dấu ngoặc tròn) case (trùng với từ khóa )

be ta (sử dụng khoảng trống) X-1 (sử dụng dấu gạch ngang)

Chú ý: Trong tên, chữ hoa chữ thường ñược xem khác nhau, tên AB khác tên ab

1.4 Mt s khái nim

1.4.1 Biến

Biến ñại lượng dùng ñể chứa (lưu trữ) giá trị trình tính tốn Có thể hiểu khái niệm biến ởđây giống khái niệm biến toán học

(37)

36

int a,b,c; /* khai báo biến a, b, c kiểu int */ float x,y,z; /* khai báo biến x,y,z kiểu float */

Sự khác biến kiểu int biến kiểu float chỗ: biến kiểu int luôn nhận giá trị ngun q trình tính tốn cịn biến kiểu float nhận giá trị số

thực 1.4.2 Hng

Hằng ñại lựong có giá trị khơng đổi chương trình Khái niệm sẽñược ñề

cập chi tiết 2.2 1.4.3 Toán t gán

Câu lệnh gán nói kỹ chương Ởđây ta hiểu tốn tử gán có dạng: b = bt;

Trong b biến, cịn bt biểu thức tốn học Tác dụng câu lệnh là: trước tiên tính biểu thức bt sau gán giá trị tính cho biến b

Ví d: Sau thực đoạn chương trình: float x;

x = 10.5; x = 2*x - 2.5;

biến x nhận giá trị 18.5

Chú ý: khái niệm gán không giống khái niệm ñẳng thức toán học 1.4.4 Câu lnh khi lnh

Mỗi câu lệnh thực chức (cơng việc) đó, viết nhiều dòng phải kết thúc dấu;

Ví dụ:

clsrcr();

printf("Hello");

Khối lệnh dãy câu lệnh ñược bao cặp dấu { } Ví dụ:

{

int a,b; a=2; b=3;

printf ("\n%6d%6d",a,b); }

Chú ý: Về mặt cú pháp, C xem khối lệnh câu lệnh riêng lẻ Nói cách khác chỗ viết câu lệnh ởđó có quyền đặt khối lệnh

Khai báo ởđầu khi lnh

Các khai báo biến, mảng(1) đặt đầu hàm, viết đầu khối lệnh, ví dụ:

{

int a,b,c[50];

(1)

(38)

37 float x,y,z,t[20][30];

a = 3; b = 5; x = 5.7; y=a*x; z=b*x;

printf ("\ny=%8.2f\nz=%8.2f",y,z); }

S lng ca khi lnh

Bên khối lệnh lại viết khối lệnh khác Số khối lệnh lồng không hạn chế

Phm vi hot ñộng ca biến mng

Khi gặp khai báo biến mảng, máy cấp phát nhớ cho biến mảng Các biến tồn khối lệnh mà biến ñược khai báo, ñi kết thúc khối lệnh

Từđó rút số kết luận sau:

- Giá trị biến hay mảng khai báo bên khối lệnh khơng thể đưa để sử dụng chỗ bên ngồi khối lệnh

- Từ bên ngồi khối lệnh, khơng thể can thiệp ñến biến mảng ñược khai báo bên khối lệnh

V khi lnh lng

Ta khai báo hai biến hàm tên, khối lệnh bên trong, hai biến hai biến độc lập tên

Ví dụ xét ñoạn chương trình: {

int a=5; {

int a=4;

printf ("a = %d\n", a); }

printf("a = %d\n", a); }

ðoạn chương trình có hai lệnh printf giống nhau, in giá trị a, hai biến a khác nhau, kết quảñưa là:

a = a =

Biến a bên trùng tên với biến a bên ngồi, lệnh printf bên in giá trị

của biến a khối lệnh bên trong, hay nói cách khác, khối lệnh bên trong, biến a bên

đã “che”2 biến a bên ngồi 1.4.5 Chú thích

Trong chương trình, ngồi câu lệnh, ta đưa thêm vào lời thích Các thích khơng ảnh hưởng đến kết họat động chương trình, có tác dụng người đọc chương trình

Các lời giải thích cần đặt dấu /* dấu */ có thểđược viết: - Trên dịng

- Trên nhiều dòng

2

(39)

38 - Trên phần lại dịng

Trong TC 3.0 ta dùng dấu // để thích Phần thích dấu // đến cuối dịng

Ví dụ:

clrscr(); // xố hình

printf(“Hello”); // in hình dịng chữ Hello

1.5 Mt s chương trình đơn gin

Dưới ví dụ nhằm minh hoạ cấu trúc chương trình C ðộc giả dễ dàng hiểu câu lệnh qua giải thích viết dấu /* */

Ví d Viết chương trình cho lên hình hai dịng chữ: TURBO C HAN HANH

LAM QUEN VOI BAN

Dưới ñây hai chương trình thực u cầu đề /* Chương trình in hai dịng chữ - Bản */

#include <stdio.h> /* sử dụng thư viện vào chuẩn */ #include <conio.h>

void main () /* hàm */ {

/* Xuống dịng (\n) in: TURBO C HAN HANH */ printf("\nTURBO C HAN HANH");

/* Xuống dòng in: LAM QUEN VOI BAN */ printf("\nLAM QUEN VOI BAN");

getch(); /* Tạm dừng máy ñể xem kết */ }

Phiên sau ghép hai câu lệnh printf thành câu lệnh /* Chương trình in dòng chữ - Bản */

#include "stdio.h" /* sử dụng thư viện vào chuẩn */ #include "conio.h"

void main () /* hàm */ {

/*

Xuống dòng, in: TURBO C HAN HANH,

tiếp tục xuống dòng in: LAM QUEN VOI BAN */

printf("\nTURBO C HAN HANH\nLAM QUEN VOI BAN"); getch(); /* Tạm dừng máy ñể xem kết */ }

Nhn xét: Mỗi cậu lệnh printf in dịng Câu lệnh printf in hai dịng

Ví d Chương trình tính chu vi diện tích hình trịn theo giá trị bán kính r nhập từ bàn phím

#include "stdio.h" #include "conio.h"

#include "math.h" /*Sử dụng thêm thư viện hàm toán học*/ void main()

{

float r,cv,dt; /* Khai báo biến thực */

/* ðưa man hình thơng báo yêu cầu nhập số liệu */ printf("\nBan kinh r= ");

/* Nhập giá trị thực ñưa vào biến r */ scanf("%f",&r);

(40)

39

Dùng M_PI (PI) ñã ñịnh nghĩa math.h */

cv = 2*M_PI*r; dt = M_PI*r*r; /* In kết */

printf("\nChu vi=%10.2f\nDien tich=%10.2f",cv,dt); getch(); /* Tạm dừng máy ñể xem kết */

}

Ví d 3: Tính x luỹ thừa y

/* chuong trinh tinh x luy thua y */ #include "stdio.h"

#include "math.h" void main () {

float x,y,z; // khai bao ba bien kieu float printf("\n vao x va y ");

scanf("%f%f",&x,&y); // vao x, y tu ban phim z=pow(x,y); // tinh z = x ^ y

/* in ket qua tren dong */

printf("\nx = %f\ny = %f\nz = %f", x, y, z); }

Ví d 4: Minh hoạ khả đưa

/* chuong trinh minh hoa cac kha nang dua */ #include "stdio.h"

void main() {

int a,c,t; float b,d;

a = 123; c = -4685; t = 12; b = -45.855; d = 123.425;

printf("\nChuc cac ban may man \n");

printf("Tong san luong hang nam tang %d %",t); /* giua cac so dua khong co khoang cach */ printf("\n%d%f%d%f",a,b,c,d);

/* giua cac so dua co nhung khoang */ printf("\n%d %f %d %f",a,b,c,d);

/* giua cac so co dat them cac ky tu khac */ printf("\na = %d, b = %f, c=%d, d=%f", a,b,c,d); }

Kết thực chương trình: Chuc cac ban may man

Tong san luong hang nam tang 12 % 123-45.855000-4685123.425000

123 -45.855000 -4685 123.425000 a = 123, b = -45.85, c = -4685, d = 123.43

1.6 Mt s quy tc cn nh viết chương trình

Bây vừa giải thích đơi điều ví dụ trên, vừa rút số ý viết chương trình

Quy tc đầu tiên cn nh là: Mỗi câu lệnh viết hay nhiều dịng phải

được kết thúc dấu;

Nhìn vào ví dụ 1.5 ta thấy: + Câu lệnh printf ñược viết dịng

(41)

40

Một điểm cần lưu ý ñây cách viết xâu ký tự (dãy ký tự ñặt hai dấu nháy kép) nhiều dòng ðể báo cho TURBO C biết chuỗi ký tự tiếp tục

dịng dưới, ta đặt thêm dấu \ trước xuống dịng Ví dụ: printf("\nTURBO C HAN HANH\

\nLAM QUEN VOI BAN");

Quy tc th hai quy tắc viết lời giải thích Các lời giải thích cần ñược ñặt dấu /* dấu */ có thểđược viết:

- Trên dịng - Trên nhiều dòng

- Trên phần lại dịng

Những lời giải thích khơng có tác dụng ñối với làm việc chương trình máy tính Chúng có tác dụng người đọc

Qui tc th ba qui tắc sử dụng hàm chuẩn Trong chương trình có dùng hàm chuẩn printf Hàm có tệp stdio.h (trong thư mục C), đầu chương trình cần viết:

#include "stdio.h"

Ta ý rằng: cuối dịng khơng có dấu ; cuối câu lệnh

Tóm lại trước sử dụng hàm cần biết nằm tệp phải dùng tốn tử

#include để gắn tệp vào tệp chương trình ta

Qui tc th tư nói cấu trúc chương trình Một chương trình có hàm (main) ví dụ trên, thêm vài hàm khác ðiều trình bày chi tiết chương Tại ta xem cấu trúc chương trình sau:

1.7 Cách thc hin chương trình máy tính

Phần việc cịn lại sau có chương trình thực chương trình máy tính để

nhận kết cuối ðây phần việc có tính chất tác nghiệp địi hỏi suy nghĩ sáng tạo so với cơng việc lập trình Q trình vận hành chương trình máy tính bao gồm bước sau:

- Tạo tệp chương trình gốc C soạn thảo chương trình - Dịch chạy chương trình

#include ……

khai báo biến, mng tồn cc nếu có khai báo xây dng hàm nếu có void main()

{

lnh… }

(42)

41

Dưới ñây trình bày cách sử dụng phần mềm TC2.0 (Turbo C 2.0) TC++3.0 (Turbo C++ 3.0) ñể thực chương trình Chúng ta thấy trình tự thao tác ñơn giản tượng tự (ñối với TC2.0 TC++3.0)

Thc hin chương trình TC2.0

Giả sử TC2.0 ñược cài ñặt thư mục C:\TC

Son tho chương trình: Vào mơi trường TC2.0 cách khởi ñộng tệp TC.EXE thư mục C:\TC Khi ñó nhận menu TC2.0 gồm menu: File, Edit, Run, Compile, Project, Option, Debug Break/Watch

Chọn menu File, mục New ñể nhận cửa sổ soạn thảo Dùng bàn phím để soạn thảo chương trình cửa sổ này, sau dùng phím F2 (hoặc chọn File - Save) để ghi chương trình lên tệp

Dch chy chương trình: Bấm đồng thời phím Ctrl F9, chọn menu Run, mục Run

Thc hin chương trình TC++3.0

Giả sử TC++3.0 ñã ñược cài ñặt thư mục C:\TC++

Son tho chương trình: Vào mơi trường TC++3.0 cách khởi động tệp TC.EXE thư mục C:\TC++\BIN Khi nhận menu TC++3.0 gồm menu: File, Edit, Search, Run, Compile, Debug, Project, Option, Window Help

Chọn menu File, mục New ñể nhận cửa sổ soạn thảo Dùng bàn phím để soạn thảo chương trình cửa sổ này, sau dùng phím F2 (hoặc chọn File - Save) để ghi chương trình lên tệp

Dch chy chương trình: Bấm đồng thời phím Ctrl F9, chọn menu Run, mục Run

BÀI TP CHƯƠNG

Bài Thực chương trình viết mục 1.5 máy ðối chiếu kết nêu sách với kết nhận

Bài Lập chương trình tính tích số thực nạp từ bàn phím, sau thực chương trình máy (dùng dấu * ñể biểu thị phép nhân)

Bài Cho biết lương kỳ hai cán tính theo cơng thức: lk2 = bl *nt

26 540 *

(43)

42

CHƯƠNG - CÁC KIỂU DỮ LIỆU

Kiểu liệu biến hay khái niệm dạng thông tin biến hay Ví dụ biến có kiểu ngun dùng ñể lưu giá trị nguyên, biến kiểu thực dùng ñể lưu giá trị thực

2.1 Các kiu d liu cơ bn

Trong chương này, tìm hiểu số kiểu liệu ñược ñịnh nghĩa Turbo C, bao gồm kiểu nguyên kiểu thực

2.1.1 Các kiu s nguyên

Tuỳ yêu cầu cụ thể mà sử dụng kiểu số nguyên có phạm vi biểu diễn khác Bảng sau kiểu số nguyên phạm vi biểu diễn tương ứng

Kiu Phm vi biu din Kích thước

char -128 → 127 byte

int -32768 → 32767 byte

long long int -2147483648→2147483647 byte

Tương ứng với kiểu số nguyên có dấu kiểu số nguyên không dấu Các kiểu số

nguyên không dấu ñược thành lập cách thêm từ khoá unsigned vào trước kiểu số nguyên có dấu tương ứng Bảng sau kiểu số nguyên không dấu:

Kiu Phm vi biu din Kích thước

unsigned char → 255 byte

unsigned int → 65535 byte

unsigned long → 4294967295 byte

2.1.2 Các kiu s thc

Kiểu số thực, hay kiểu dấu phẩy ñộng dùng ñể lưu giá trị thực Trong C cho phép sử

dụng ba kiểu dấu phẩy ñộng float, double long double Kích cỡ phạm vi biểu diễn chúng ñược bảng ñây:

Kiu Phm vi biu din S ch s có nghĩa Kích thước (byte)

float 3.4E-38 → 3.4E+38 7-8

double 1.7E-308 → 1.7E+308 15-16

long double 3.4E-4932 → 1.1E4932 17-18 10

Gii thích: Máy có thể lưu trữ số kiểu float có giá trị tuyệt đối từ 3.4E-38 đến 3.4E+38 Số có giá trị tuyệt đối nhỏ 3.4E-38 ñược xem Phạm vi biểu diễn số

double ñược hiểu theo nghĩa tương tự

(44)

43

ðể biểu diễn ký tự, người ta dùng số nguyên lưu mã ký tựđó bảng mã Với bảng mã ASCII3, ký tựñược biểu diễn số nguyên bit

Ví dụ:

Ký tMã ASCII

0 48

1 49

2 50

A 65

B 66

a 97

b 98

Bảng mã ASCII gồm 256 ký tự, phân thành nhóm:

- Nhóm ký tự điều khiển có mã từ đến 31 Chẳng hạn ký tự mã 13 dùng ñể

chuyển trỏ vềñầu dòng, ký tự 10 chuyển trỏ xuống dòng (trên cột) Các ký tự nhóm nói chung khơng hiển thị hình

- Nhóm ký tự văn có mã từ 32 đến 126 Các ký tự đưa hình máy in

- Nhóm ký tựđồ hoạ có mã số từ 127 đến 255 Các ký tự đưa hình khơng in ñược (bằng lệnh DOS)

Kiu ñúng sai

Trong TC quy định rằng, biểu thức có giá trị khác ñúng ngược lại biểu thức có giá trị sai

2.2 Hng

Hằng ñại lượng mà giá trị khơng thay đổi q trình tính tốn Dưới

đây trình bày cách biểu diễn C 2.2.1 Hng s thc (float double)

Hằng số thực (hằng có giá trị thực) hay gọi Hằng dấu phẩy ñộng Hằng dấu phẩy ñộng

ñược viết theo hai cách:

Cách (dạng thập phân): Số gồm phần nguyên, dấu chấm thập phân phần thập phân, ví dụ:

214.35 -4563.48 234.0

Chú ý: Phần nguyên phần thập phân vắng mặt dấu chấm khơng thể

thiếu, ví dụ cho phép viết: 34 15

Cách (dạng khoa học hay dạng mũ): Sốñược tách thành phần ñịnh trị phần bậc Phần ñịnh trị số nguyên số thực dạng thập phân, phần bậc số nguyên Hai phần cách ký tự e E Ví dụ:

123.456E-4 (biểu diễn giá trị 0.0123456) 0.12E3 (biểu diễn giá trị 120.0)

3

(45)

44 -49.5e-2 (biểu diễn giá trị -0.495) 1e8 (biểu diễn giá trị 100000000.0) 2.2.2 Hng s nguyên kiu int

Là số nguyên (hằng có giá trị nguyên) có giá trị khoảng từ -32768 đến 32767 Ví dụ:

-45 4007 635

Chú ý: phân biệt 125 125.0 Số 125 nguyên 125.0 thực (dấu phảy

ñộng)

2.2.3 Hng kiu long

Hằng kiểu long ñược biểu diễn cách thêm L l vào cuối giá trị nguyên Ví dụ:

-4893L -4893l

Một số ngun vượt ngồi miền xác định int ñược xem kiểu long Ví dụ:

4563946L 4563946 hai kiểu long có giá trị 2.2.4 Biu din hng nguyên h

Có thể biểu diễn số nguyên theo hệ số cách ñặt số ởđầu, chữ số phía sau phải nằm khoảng từ ñến Hằng nguyên hệ ln ln nhận giá trị

dương Ví dụ: 0345

là nguyên hệ Giá trị hệ 10 3*8*8 + 4*8 + = 229

2.2.5 Biu din hng nguyên h 16

Hệ số 16 cần 16 ký tựđể biểu diễn chữ số, ngồi giá trị từ đến 9, cịn dùng ký tự từ a (hoặc A) ñến f (hoặc F) ñể biểu diễn Hằng biểu diễn hệ 16 bắt ñầu 0x 0X

Ví dụ:

0xa9 , 0Xa9 , 0xA9, 0XA9

Các biểu diễn giá trị, hệ 10 là: 10*16 + = 169

2.2.6 Biu din hng nguyên dng ký t

Có thể biểu diễn giá trị nguyên khoảng từ ñến 255 ký tựđặt cặp dấu nháy đơn, giá trị mã ASCII ký tựđó

Ví dụ:

(46)

45 'a' tương ñương với 97

ðể biểu diễn số ñặc biệt, người ta dùng cách biểu diễn với dấu \ Bảng sau

ra cách biểu diễn số ñặc biệt:

Cách viết Ký t

'\'' '

'\"' "

'\\' \

'\n' \n (chuyn dòng) '\0' \0 (null)

'\t' Tab

'\b' Backspace

'\r' CR (vềđầu dịng) '\f' LF (sang trang)

2.2.7 Hng xâu ký t

Hằng xâu ký tự dùng ñể biểu diễn dãy ký tự, ký tựđược đặt hai dấu nháy kép, ví dụ:

"Ha noi" "Hai phong" "" /* xâu rỗng */

Xâu ký tựñược lưu trữ máy dạng mảng có phần tử ký tự riêng biệt Trình biên dịch tựđộng thêm ký tự \0 vào cuối xâu (ký tự \0 ñược xem dấu hiệu kết thúc xâu ký tự)

Chú ý: Cần phân biệt 'a' "a", 'a' nguyên ñược lưu trữ byte, cịn "a" xâu ký tựđược lưu trữ mảng hai phần tử: phần tử thứ chứa mã chữ a phần tử thứ hai chứa \0

2.2.8 ðặt tên cho hng

Một số có ý nghĩa định trước, ví dụ số pi Trong trường hợp này, có thểđặt cho tên, thay viết trực tiếp ta dùng tên biểu thức ðểñặt tên cho hằng, dùng thị #define

Ví dụ:

#define MAX 1000 #define PI 3.141593

Khi ñã ñặt tên cho hằng, sử dụng chúng biểu thức, ví dụ: float r, s;

r = 5.0f; s = PI*r*r;

2.3 Biến

2.3.1 Khai báo

(47)

46

<kiu d liu> <danh_sách_tên_biến>;

Tên biến ñược ñặt theo quy tắc ñặt tên TC ñược nêu 1.3, biến danh sách ñược phân biệt dấu phẩy “,” Kiểu liệu kiểu ñã nêu 2.1, kiểu người lập trình tạo trước khai báo biến

2.3.2 V trí ca khai báo biến

Các khai báo cần ñặt sau dấu { ñầu tiên thân hàm khối lệnh cần

ñứng trước câu lệnh khác Như vậy, sau câu lệnh gán chẳng hạn khơng khai báo Sau ví dụ sai vị trí khai báo

#include <stdio.h> void main ()

{

int a; a = 35;

int d; /* Vị trí khai báo sai */ d = a * 2;

printf(“%d”, d); }

2.3.3 Vic khi ñầu cho biến

Nếu khai báo, sau tên biến ta ñặt dấu = giá trị cách vừa khai báo vừa khởi ñầu cho biến

Ví dụ:

int a, b = 20, c ,d = 40;

float e = -35.1, x = 23.0, y, z, t = 36.1;

Tất nhiên ñiều đạt nhờ tốn tử gán, thực tế hai cách tương

ñương Vậy đểđạt ý định ví dụ ta dùng câu lệnh: int a, b, c, d;

float e, x, y, z ,t;

b = 20; d = 40; e = -35.1; x = 23.0; t = 36.1;

2.3.4 Cp phát b nh cho biến

Khi thực chương trình, máy gặp khai báo biến thực việc cấp phát nhớ cho biến gồm số byte liên tiếp tùy thuộc vào kiểu liệu biến Ví dụ

như biến kiểu int cấp phát hai byte nhớ, biến kiểu float ñược cấp phát byte

nhớ…

2.3.5 Ly ñịa ch ca biến

Mỗi biến ñược cấp phát vùng nhớ gồm số byte liên tiếp Số hiệu byte đầu địa biến ðịa biến dùng số hàm, hàm scanf ðể nhận ñịa biến ta dùng phép toán:

& tên_biến

2.4 Mng

2.4.1 Khái nim v mng, cách khai báo

(48)

47

Mảng hiểu tập hợp nhiều phần tử có kiểu giá trị có chung tên Mỗi phần tử mảng có vai trị biến chứa giá trị Có kiểu biến có nhiêu kiểu mảng Mảng cần ñược khai báo ñểñịnh rõ:

- Kiểu mảng (int, float double, ) - Tên mảng

- Số chiều kích thước chiều

Khái niệm kiểu mảng tên mảng giống khái niệm kiểu biến tên biến,

điều nói mục Ta giải thích khái niệm số chiều kích thước chiều thơng qua ví dụ sau Các khai báo:

int a[10], b[4][2]; float x[5], y[3][3];

sẽ xác ñịnh mảng: a, b, x y Ý nghĩa chúng sau:

- ðối với mảng thứ kiểu int, tên a, số chiều một, kích thước 10 Mảng có 10 phần tửñược ñánh số sau:

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]

Mỗi phần tử a[i] chứa ñược giá trị kiểu int mảng a biểu diễn dãy 10 số nguyên

- ðối với mảng thứ hai kiểu int, tên b, số chiều Kích thước chiều Mảng có phần tử, chúng đánh số ñược xếp sau:

b[0][0] b[0][1] b[1][0] b[1][1] b[2][0] b[2][1] b[3][0] b[3][1]

Mỗi phần tử b[i][j] chứa ñược giá trị kiểu int mảng b biểu diễn bảng số ngun dòng, cột

- ðối với mảng thứ ba kiểu float, tên x, số chiều một, kích thước Mảng có phần tửđược ñánh số sau:

x[0], x[1], x[2], x[3], x[4]

Mỗi phần tử x[i] chứa ñược giá trị kiểu float mảng x biểu diễn dãy số thực

- ðối với mảng thứ kiểu float, tên y, số chiều 2, kích thước chiều Mảng có phần tử, chúng đánh số ñược xếp sau:

y[0][0] y[0][1] y[0][2] y[1][0] y[1][1] y[1][2] y[2][0] y[2][1] y[2][2]

Mỗi phần tử y[i][j] chứa ñược giá trị kiểu float, mảng y biểu diễn

được bảng số thực dòng, cột Chú ý:

- Các phần tử mảng ñược cấp phát khoảng nhớ liên tiếp nhớ Nói cách khác, phần tử mảng có địa liên tiếp

(49)

48

Một phần tử cụ thể mảng ñược xác ñịnh nhờ số Chỉ số mảng phải có giá trị int khơng vượt q kích thước chiều tương ứng Số số phải số chiều mảng

Giả sử a, b, x, y ñã ñược khai báo giả sử i, j biến nguyên i=2, j=1 Khi đó:

a[j+i-1] a[2] b[j+i][2-i] b[3][0] x[j/i] x[0] y[i][j] y[2][1] Các cách viết sau sai:

y[j] y mảng hai chiều, cần hai số

b[i][j][1] b mảng hai chiều, cần hai số

2.4.3 Ly ñịa ch phn t mng

Dưới nói mảng ta hiểu mảng chiều Mảng có từ hai chiều trở lên ta nói mảng kèm số chiều (ví dụ mảng hai chiều, ) Có vài hạn chế mảng nhiều chiều Chẳng hạn lấy địa phần tử mảng chiều, nói chung khơng cho phép lấy

ñịa phần tử mảng nhiều chiều Như máy chấp nhận phép tính: &a[i]

nhưng khơng chấp nhận phép tính &y[i][j]

2.5 Các phép tốn kiu

2.5.1 Biu thc

Biểu thức kết hợp phép toán tốn hạng để diễn đạt cơng thức tốn học Khi viết biểu thức nên dùng dấu ngoặc trịn để thể

đúng trình tự tính tốn biểu thức Mỗi biểu thức có giá trị Hằng, biến, phần tử

mảng hàm ñược xem biểu thức Trong C ñưa nhiều quan niệm biểu thức biểu thức gán, biểu thức ñiều kiện

Biểu thức ñược phân loại theo kiểu giá trị: nguyên thực Trong mệnh ñề logic, biểu thức ñược phân thành ñúng (giá trị khác không) sai (giá trị 0)

2.5.2 Phép toán s hc

Các phép tốn hai ngơi số học là:

Phép tốn Ý nghĩa Ví d

+ Cộng a + b

- Trừ a - b

* Nhân a * b

/ Chia a / b

% Lấy phần dư a % b

Có phép tốn ngơi - ví dụ -(a+b) khơng có phép +

Phép chia hai số nguyên chặt cắt phần thập phân (kết phép chia số nguyên số ngun; số ngun phần ngun thương số), ví dụ:

(50)

49

Phép tốn % cho phần dư phép chia ngun, khơng áp dụng ñược cho giá trị

kiểu float double Ví dụ: 11%3 =

Các phép tốn + - có số ưu tiên, nhỏ số ưu tiên * / % Ba phép tốn lại có số thứ tựưu tiên nhỏ phép trừ Các phép tốn số học thực từ trái sang phải

Các phép tốn số học dùng để viết cơng thức tốn học, ví dụ: (a*a-b*b)/(x*x+y*y)

2.5.3 Các phép toán so sánh

Phép toán so sánh cho ta giá trị (ñúng) giá trị (sai) Nói cách khác, điều kiện nêu ta nhận giá trị 1, trường hợp trái lại, ta nhận ñược giá trị

Các phép toán so sánh cho bảng sau:

Phép tốn ý nghĩa Ví dụ > Có lớn khơng ? a>b

3>7 có giá trị >= Có lớn hay a>=b

bằng khơng ? 8>=8 có giá trị < Có nhỏ khơng? a<b

9<9 có giá trị <= Có nhỏ hay a<=b

bằng khơng ? 3<=10 có giá trị == Có khơng? a==b

3==9 có giá trị != Có khác khơng a!=b

3!=9 có giá trị

Bốn phép đầu có sốưu tiên, hai phép sau có số thứ tựưu tiên thấp số thứ tựưu tiên bốn phép đầu

Các phép so sánh có sốưu tiên thấp so với phép toán số học, biểu thức: i < n-1 ñược hiểu là: i < (n-1)

Nói chung, nên dùng dấu ngoặc để tránh lỗi độưu tiên phép tốn gây nên 2.5.4 Phép toán logic

Cũng giống phép toán so sánh, phép toán logic cho ta giá trị (ñúng) giá trị (sai).Trong C sử dụng ba phép toán logic:

- Phép Phủñịnh ! - Phép Và (AND) && - Phép Hoặc (OR) ||

Ý nghĩa chúng ñược cho bảng:

A !a

Khác không Bằng khơng

(51)

50 Trong a b ngun hay thực Ví dụ:

3>7 có giá trị 7>3 có giá trị && có giá trị ! 15.6 có giá trị

Các phép tốn so sánh logic ñược dùng ñể thiết lập ñiều kiện rẽ nhánh tốn tử if điều kiện kết thúc chu trình tốn tử for, while while Ở chương có nhiều ví dụ việc sử dụng phép toán

2.5.5 Chuyn kiu

Việc chuyển ñổi kiểu giá trị thường diễn cách tựñộng hai trường hợp sau: - Khi biểu thức gồm toán hạng khác kiểu

- Khi gán giá trị kiểu cho biến (hoặc phần tử mảng) kiểu ðiều xảy toán tử gán, việc truyền giá trị tham số thực cho ñối (chương 4), câu lệnh return (chương 4)

Ngoài ta chuyển từ kiểu giá trị sang kiểu mà ta muốn phép ép kiểu:

(<Kiểu liệu>) (<biểu thức>) Ví dụ:

(float)(a+b)

2.5.6 Các phép toán tăng gim

C đưa hai phép tốn ngơi để tăng giảm biến (nguyên thực) Toán tử tăng ++ cộng vào tốn hạng nó, tốn tử giảm trừđi Chẳng hạn n có giá trị thì:

Sau phép tính ++n, n có giá trị Sau phép tính n, n có giá trị

Dấu phép tốn ++ có thểđứng trước sau tốn hạng, viết: ++n n++ n n

Sự khác ++n n++ chỗ: Trong phép n++ n tăng sau giá trị

được sử dụng, cịn phép ++n n tăng trước sử dụng Sự khác n n

Ví d: Nếu n câu lệnh x = n++;

sẽ gán cho x, câu lệnh x = ++n;

sẽ gán cho x Trong hai trường hợp n ñều trở thành

(52)

51

Cuối cùng, điều cần lưu ý khơng nên sử dụng toán tử tăng giảm tùy tiện biểu thức, việc dẫn đến kết sai

2.5.7 Biu thc ñiu kin

Biểu thức điều kiện biểu thức có dạng:

<biểu thức kiểm tra> ? <biểu thức 1> : <biểu thức 2>

Giá trị biểu thức ñiều kiện giá trị biểu thức biểu thức kiểm tra (khác khơng) giá trị biểu thức biểu thức kiểm tra sai (bằng khơng)

Ví dụ:

printf("\n %8.2f", a < b ? a : b);

ñưa giá trị nhỏ hai biến thực a b 2.5.8 Câu lnh gán biu thc gán

Biểu thức gán biểu thức có dạng: <biến> = <biểu thức>

Vế trái biểu thức biến (hay phần tử mảng), vế phải biểu thức Giá trị

của biểu thức gán giá trị ñược gán Nếu ñặt dấu ; vào sau biểu thức gán ta lệnh gán:

<biến> = <biểu thức>;

Biểu thức gán sử dụng phép toán câu lệnh biểu thức khác Ví dụ, viết

a = b = 5;

thì điều có nghĩa gán giá trị biểu thức b = cho biến a Kết qủa b=5 a=5 Mt s dng khác ca toán t gán

Trong trường hợp biểu thức gán có dạng như: i = i+2;

trong vế trái lặp lại viết gọn sau: i += 2;

Các biểu thức gán có dạng:

<biến> <phép tốn> = <biểu thức>; Trong <phép tốn> phép tốn hai ngơi Ví dụ câu lệnh:

x = x*(y+3); viết thành:

x *= y+3;

2.5.9 Th tựưu tiên phép toán

(53)

52

STT Phép tốn Trình t kết hp

1 ( ) [] -> Trái qua phải

2 ! ~ & * - ++ (type) sizeof Phải qua trái

3 * / % Trái qua phải

4 + - Trái qua phải

5 < <= > >= Trái qua phải

6 == != Trái qua phải

7 && Trái qua phải

8 || Trái qua phải

9 ? : Phải qua trái

10 = += -= *= /= %= <<= >>= &= ^= |= Phải qua trái

11 , Trái qua phải

Gii thích:

- Các phép tốn dịng có thứ tựưu tiên, phép tốn hàng có sốưu tiên cao phép toán hàng

- ðối với phép tốn mức ưu tiên trình tự tính tốn từ trái qua phải hay ngược lại ðiều cột "Trình tự kết hợp"

- ðể viết biểu thức cách xác nên sử dụng dấu ngoặc trịn (ngoặc ñơn)

2.6 Nhp xut d liu

Nhập xuất liệu cách ñưa liệu vào chương trình đưa kết chương trình Thơng thường, liệu đưa vào thơng qua bàn phím kết quảđược đưa hình

2.6.1 ðưa kết qu hình

Có thểđưa hình dịng chữ, giá trị số lệnh printf Lệnh printf có dạng:

printf (<chuỗi ñiều khiển>, bt1, bt2, , btn);

Ởñây bt1, bt2, , btn biểu thức mà giá trị chúng cần đưa hình

Trong chuỗi điều khiển, chứa: - Ký tựñiều khiển

- Các ký tự hiển thị

- Các ký tự dùng để mơ tả kiểu cách ñưa biến, ta gọi chúng ñặc tả

Một số ký tựñiều khiển định nghĩa trước, thường có dấu \ phía trước, ví dụ ký tự điều khiển xuống dịng \n, ký tự tab \t

Các ký tự hiển thị ñược ñưa giống chúng xuất chuỗi ñiều khiển

Các ñặc tả cách mà giá trị biểu thức sẽñược ñưa Mỗi biểu thức cần phải có đặc tả tương ứng Khi in hình, giá trị biểu thức thay

tương ứng vào vị trí đặc tả

(54)

53

đôi muốn ựưa thông báo, câu hướng dẫn, ựó cần ựưa vào chuỗi ựiều khiển không chứa ựặc tả Nội dung xâu sẽựược ựưa hình

Ví dụ, đểđưa thông báo nhắc người dùng nhập vào hệ số đa thức, dùng lệnh:

printf(“\nNhap he so da thuc: ”); Khi hình xuất hiện:

Nhap he so da thuc: ðưa giá tr nguyên

Khi muốn ñưa kết giá trị nguyên, dùng ñặc tả %d Sau ñây xét số ví dụđể hiểu hoạt động đặc tả

Ví dụ, đoạn mã sau ñưa tổng hai số nguyên: int a, b;

a = 10; b = 25;

printf(“Tong cua %d va %d la %d”, a, b, a + b);

Câu lệnh printf thay ñặc tả %d giá trị biểu thức tương ứng theo thứ tự ñưa vào Trong ñoạn mã trên, giá trị a, b a + b ñược thay vào vị trí %d chuỗi ñiều khiển, kết quảñưa sau:

Tong cua 10 va 25 la 35

Trong ví dụ trên, giá trị biểu thức có chữ số nhiêu vị trí hình sử dụng để in giá trị, ví dụ giá trị 10 cần hai vị trí máy dành hai vị

trí để in giá trị 10

Tuy nhiên, số trường hợp, in giá trị ma trận, in giá trị theo dạng cột, cần dành số vị trí định cho giá trị, số vị trí cần thiết ñể in giá trịñó nhỏ

Ví dụ, đoạn chương trình sau in giá trị luỹ thừa theo dạng cột: #include <stdio.h>

void main() {

int i, a; a = 1;

for (i = 1; i <= 10; i++) {

a*= 2;

printf("2 ^ %2d = %4d\n", i, a); }

}

(55)

54

Trong ví dụ trên, ta dành vị trí cho việc in số mũ dành vị trí để in luỹ

thừa, giá trị Trường hợp giá trị cần in có số chữ số lớn vị trí, máy chuẩn bị số vị trị vừa đủ cho giá trịđó

ðưa giá tr thc

ðểñưa giá trị thực, dùng đặc tả %f Ví dụ sau tính diện tích hình trịn đưa kết hình

#include <stdio.h> void main()

{

float r; r = 2.34f;

printf("Dien tich hinh tron ban kinh %f la %f\n", r, 3.14*r*r); }

Kết in là:

Dien tich hinh tron ban kinh 2.340000 la 17.193383

Tuy nhiên, ñôi ta không cần kết gồm nhiều chữ số thập phân thế, mà cần lấy số lượng chữ số sau dấu phảy ñịnh

Câu lệnh printf sau thay cho câu lệnh printf ñoạn mã ñểñưa kết lấy hai chữ số sau dấu phảy, dành ký tự cho việc in giá trị

printf("Dien tich hinh tron ban kinh %6.2f la %6.2f\n", r, 3.14*r*r);

Kết là:

Dien tich hinh tron ban kinh 2.34 la 17.19

Một trường hợp muốn lấy số lượng chữ số sau dấu phẩy

định, khơng có ý định dành sẵn số vị trí xác định, đặc tả vắng mặt số phía trước dấu chấm

Sau câu lệnh printf thường dùng cho dạng trên: printf("Dien tich hinh tron ban kinh %.2f la %.2f\n",

r, 3.14*r*r); Kết là:

Dien tich hinh tron ban kinh 2.34 la 17.19 ðưa xâu ký t

Khi muốn ñưa giá trị xâu ký tự, ví dụ họ tên hay ñịa chỉ, dùng ñặc tả

%s

Ví dụ sau yêu cầu nhập vào tên in lời chào #include <stdio.h>

void main() {

char szHoTen[100];

printf("Nhap ten ban: "); fflush(stdin);

gets(szHoTen);

printf("Xin chao %s", szHoTen); }

Khi chạy, nhập vào tên máy in lời chào tương ứng Nhap ten ban: Minh Quang

(56)

55

Với đặc tả %s, ta dành sẵn ñộ rộng cho giá trị in ra, sử dụng trường hợp in họ tên theo cột Việc chỉñịnh ñộ rộng giống nhưñối với trường hợp số nguyên 2.6.2 Nhp d liu t bàn phím

Nhập liệu từ bàn phím cách thơng dụng ñể nạp giá trị cho biến mảng Trong phần này, tìm hiểu cách nhập liệu cho biến nguyên, biến thực xâu ký tự

Nhp s nguyên, s thc bng scanf

Câu lệnh scanf dùng để nhập liệu cho biến nguyên, thực Một cách tổng quát câu lệnh scanf có dạng:

scanf("t1t2 tk", &b1,&b2, ,&bk);

Trong b1, b2, , bk biến (kiểu int kiểu float) t1, t2, , tk ñặc tả

tương ứng Dùng ñặc tả %d ñối với biến nguyên %f ñối với biến thực Một vài ý:

- Trong câu lệnh scanf, không dùng tên biến câu lệnh printf mà dùng ñịa biến cách ñặt phép toán & trước tên biến

- Mỗi biến ứng với ñặc tả Như sốñặc tả số biến

- Trong chuỗi ñiều khiển nên chứa ñặc tả ñặc tả nên viết liền Ví dụ, để vào giá trị: 25, -137, 45.3 cho hai biến nguyên m, n biến thực f, dùng lệnh:

scanf(“%d%d%f”, &n, &m, &f);

Khi gặp câu lệnh này, máy dừng ñểñợi thao tác viên vào số liệu từ bàn phím Các giá trị cần ñược phân cách vài khoảng trắng (ởñây khoảng trắng ñược hiểu dấu cách dấu xuống dịng)

Thao tác viên sử dụng cách bấm phím sau:

Cách 1: Mỗi giá trị dòng, cách nhấn phím Enter sau số 25

-137 45.3

Cách 2: ðặt giá trị dòng, cách dấu cách 25 -137 45.3

Sau nhập xong, n nhận giá trị 25, m nhận giá trị -137 f nhận giá trị 45.3 Nhp xâu ký t bng gets

ðể nhập xâu ký tự, dùng lệnh gets Lệnh gets có dạng: gets(<xâu ký tự>)

Ởđây, xâu ký tự mảng kiểu char

(57)

56

2.7 Mt s hàm thường dùng

ðộc giả xem chi tiết danh mục hàm phụ lục giảng Tại ñây chúng tơi trích giới thiệu số hàm thường dùng

2.7.1 Hàm toán hc

Các hàm thuộc thư viện math.h stdlib.h 1 abs – Tính giá trị tuyệt đối số ngun x

int abs(int x);

2 labs-Tính giá trị tuyệt ñối số nguyên dài x long int labs(long int x)

3 cos – Tính cosine của x double cos(double x) 4 exp – Tính e mũ x

double exp(double x) 5 fabs-Tính giá trị tuyệt ñối x

double fabs(double x)

6 log – Tính logarit cơ số tự nhiên x double log(double x)

7.log10 - Tính logarit cơ số10 x double log10(double x) 8 pow – Tính x mũ y

double pow(double x, double y) 9 sin – Tính sine của x

double sin(double x) 10 sqrt – Tính căn bậc hai x

double sqrt(double x)

2.7.2 Hàm x lý chui ký t

Các hàm khai báo string.h

1 strcmp: so sánh chuỗi s1, s2 phân biệt chữ thường chữ hoa int strcmp(char * s1, char *s2)

hàm trả số nguyên ñộ lệch ký tựñầu tiên chuỗi Nếu hàm trả

giá trị chuỗi s1 s2 giống

2 strcmpi: so sánh chuỗi không phân biệt chữ thường chữ hoa int strcmpi(char *s1, char *s2)

hàm hoạt động giống hàm strcmp khơng phân biệt chữ thường chữ hoa 3 strcpy : chép chuỗi

int strcpy(char *dest, char *sour) 4 stricmp: giống hàm strcmpi

5 strlen: tính độ dài chuỗi int strlen(char *s)

hàm trả số nguyên số ký tự chuỗi s (ñộ dài s) 6 strrev: ñảo ngược chuỗi

char * strrev( char *s)

hàm trả chuỗi ñảo chuỗi s

(58)

57

BÀI TP CHƯƠNG

Bài Tìm chỗ sai chương trình sau #include "stdio.h"

void main() {

printf("\na=%10.0f, b=%10d, c=%10ld, d=%10d", -3456, 25e3, 4635, 456398461);

}

Sửa lại cho ñúng thực máy

Bài Viết chương trình in dịng với nội dung sau: N = 365

Bằng cách sử dụng loại khác (hằng số dấu phẩy ñộng, int, long, int hệ 8, int hệ 16, kí tự, xâu kí tự)

Bài Tìm chỗ sai đoạn chương trình float a[3], b = 2;

a[0] = 5;

a[10] = 4, a[b] = 7;

Bài Tìm chỗ sai đoạn chương trình {

int a = 6; float b=5.3; {

float x = a*b, y=a+b; }

printf("\na=%10.2f, b=%10.2f, x=%10.2f, y=%10.2f ", a, b, x, y);

}

(59)

58

CHƯƠNG - CÁC LỆNH ðIỀU KHIỂN

Một chương trình bao gồm nhiều câu lệnh Thơng thường câu lệnh ñược thực cách theo thứ tự mà chúng ñược viết Các lệnh ñiều khiển cho phép thay đổi trật tự nói trên, máy từ câu lệnh nhảy tới thực câu lệnh khác trước sau ðường máy trở nên linh hoạt nhờ ta viết chương trình cách hiệu Xét mặt công dụng chia lệnh điều khiển thành ba nhóm chính:

- Nhảy khơng điều kiện (goto) - Rẽ nhánh (if, switch )

- Tổ chức chu trình (for, while,do while)

Ngồi cịn có số lệnh khác có chức bổ trợ break, continue

Chương giới thiệu cách viết nguyên tắc hoạt ñộng số lệnh nêu Chúng ta thấy lệnh ñiều khiển C có khả làm việc linh hoạt, phong phú mạnh mẽ Tất ñiều ñược giải thích tỉ mỉ ñược minh họa rõ ràng nhiều chương trình hồn chỉnh thử nghiệm máy

3.1 Nhc li khái nim v câu lnh khi lnh

Trong C câu lệnh viết nhiều dịng ñược kết thúc dấu chấm phảy Khái niệm khối lệnh hay câu lệnh hợp thành trình bày mục 1.4.4, ởñây ta nhắc lại vài ñiều

- Khối lệnh dãy câu lệnh ñặt dấu { }

- Khơng đặt dấu chấm phảy sau dấu ngoặc nhọn kết thúc khối

- Khối lệnh tương ñương với câu lệnh riêng lẻ mặt cú pháp Nói cách khác, chỗ

nào đặt câu lệnh chỗđó ta có quyền viết khối lệnh - Khi khối lệnh gồm câu lệnh bỏ dấu ngoặc nhọn đầu cuối

Nói cách khác xem câu lệnh trường hợp riêng khối lệnh

Dưới ñây trình bày lệnh điều khiển if, for, while, , ta dùng thuật ngữ "khối lệnh", ñiều ta dùng "câu lệnh" (vì câu lệnh xem trường hợp riêng khối lệnh)

3.2 Lnh if

Lệnh if cho phép lựa chọn ñể thực hai nhánh tùy thuộc vào ñiều kiện ñúng (khác không) hay sai (bằng không) biểu thức, gọi biểu thức ñiều kiện Mỗi nhánh lệnh if khối lệnh khác

3.2.1 Cú pháp ca if Lệnh if có hai dạng sau: Dng

if (<biểu thức ñiều kiện>) <khối lệnh>

Dng

(60)

59 <khối lệnh 1>

else

<khối lệnh 2>

Trong cú pháp trên, biểu thức ñiều kiện biểu thức Các khối lệnh câu lệnh đơn, kết thúc câu lệnh phải có dấu chấm phẩy

Lệnh if dạng dùng cần kiểm tra điều kiện xem có hay khơng thực khối lệnh

Lệnh if dạng dùng muốn lựa chọn hai khối lệnh ñể thực 3.2.2 Hot ñộng ca if

S hot ñộng ca lnh if dng

Khi gặp câu lệnh này, máy tính giá trị biểu thức Nếu biểu thức máy thực khối lệnh sau thực lệnh Nếu biểu thức sai máy bỏ qua khối lệnh chuyển đến lệnh viết sau

S hot ñộng ca lnh if dng

Trước tiên máy xác ñịnh giá trị biểu thức Nếu biểu thức ñúng máy thực khối lệnh 1, sau nhảy tới lệnh viết sau khối lệnh Nếu biểu thức sai máy không thực khối lệnh mà thực khối lệnh sau thực lệnh viết sau

Ví dụ sau minh hoạ cho hoạt động câu lệnh if ðể tính giá trị lớn hai biến a b ta sử dụng hai chương trình ứng với hai dạng khác lệnh if

/* Chuong trinh tinh max cua hai so thuc, dung if dang */ #include <stdio.h>

void main() {

float a,b,max;

printf("\nVao hai so a va b: ");

scanf("%f%f", &a, &b);/*gia tri cua a va b nhan tu ban phim*/ max = a;

if (b > max) max = b;

printf("\na = %8.2f\nb = %8.2f\nmax = %8.2f", a, b, max ); }

/* Chuong trinh tinh max cua hai so thuc, dung if dang */ #include <stdio.h>

void main() {

float a,b,max;

printf("\nVao hai so a va b: ");

scanf("%f%f",&a,&b);/*gia tri cua a va b nhan tu ban phim */ if (a > b)

max = a; else max = b;

printf("\na = %8.2f\n b = %8.2f\n max = %8.2f", a, b, max); }

3.2.3 S lng ca lnh if

(61)

60

Trong trường hợp có nhiều if else, vấn đề quan trọng phải xác ñịnh

ñược mệnh ñề else thuộc if Có ngun tắc để xác định, là: mệnh ñề else ñược gắn với if gần trước

Tuy nhiên, để tránh nhầm lẫn, nên dùng cặp ngoặc {}

Sau ví dụ giải phương trình bậc ax + b = sử dụng if lồng #include <stdio.h>

void main() {

float a, b;

printf("Nhap a, b: "); scanf("%f%f", &a, &b);

if (a == 0) if (b == 0)

printf("Vo so nghiem."); else

printf("Vo nghiem."); else

printf("x = %f", -b/a); }

ðể lựa chọn nhiều trường hợp, ta dùng lệnh if lồng Ví dụ, với chương trình giải phương trình bậc 2, giá trị delta rơi vào trường hợp: lớn 0, nhỏ

Với trường hợp này, câu lệnh if – else viết có phần khác bình thường, cách

đặt câu lệnh if nằm hàng với else trước

Sau ví dụ giải phương trình bậc sử dụng if lồng #include <stdio.h>

#include <math.h> void main() {

float a, b, c, delta; printf("Nhap a, b, c: "); scanf("%f%f%f", &a, &b, &c); delta = b*b - 4*a*c;

if (delta < 0)

printf("Vo nghiem."); else if (delta == 0)

printf("x = %f", -b/(2*a)); else //if (delta > 0)

printf("x1 = %f\nx2 = %f", (-b - sqrt(delta))/(2*a), (-b + sqrt(delta))/(2*a)); }

Chú ý: đối với trường hợp cuối khơng cần if, nhưở ví dụ 3.2.4 Viết chương trình theo cu trúc

ðể chương trình rõ ràng, dễ kiểm tra tránh nhầm lẫn, ta nên viết chương trình theo quy tắc sau:

- Các câu lệnh khối lệnh nằm lệnh ñiều khiển viết lui vào bên phải - Các câu lệnh khối lệnh cấp viết cột (thẳng cột)

(62)

61

3.3 Lnh for

Lệnh for cho phép thực khối lệnh số lần xác ñịnh Lệnh for thường dùng để

giải tốn có tính chu trình, ví dụ tốn dãy số, ma trận 3.3.1 Cú pháp ca for

Lệnh for có dạng sau:

for (<biểu thức khởi tạo>; <biểu thức kiểm tra>; <biểu thức tăng>) <khối lệnh>

Trong cú pháp trên:

- for: từ khoá lệnh for

- biểu thức khởi tạo, biểu thức kiểm tra biểu thức tăng bắt buộc phải cặp ngoặc trịn cách dấu chấm phẩy Các biểu thức4 vắng mặt, phải ñủ dấu chấm phẩy

- Khối lệnh, cịn gọi phần thân lệnh for khối lệnh cần thực nhiều lần

Thơng thường, biểu thức khởi tạo thường dùng ñể khởi tạo giá trị cho biến ñiều khiển, biểu thức tăng dùng ñể thay ñổi giá trị biến ñiều khiển

3.3.2 Hot ñộng ca for

Lệnh for làm việc theo bước sau:

- Bước Tính giá trị biểu thức khởi tạo

- Bước Tính giá trị biểu thức kiểm tra Nếu đúng, tới bước 3, ngược lại khỏi lệnh for

- Bước Thực khối lệnh

- Bước Tính giá trị biểu thức tăng, sau quay trở lại bước Chú ý:

- Nếu biểu thức kiểm tra vắng mặt xem ðể tránh lặp vơ tận, phần thân for phải có lệnh nhảy khỏi for lệnh break, return goto

- Các biểu thức lệnh for biểu thức ghép, tức gồm nhiều biểu thức cách dấu phẩy Trong trường hợp đó, tính sai xác định theo biểu thức cuối biểu thức ghép

3.3.3 Ví d minh ho

Ví d 1: ðảo ngược dãy số cho trước /* Chuong trinh dao nguoc mot day so */ #include <stdio.h>

float x[] = { 63.2, -45.6, 70.1, 3.6, 14.5}; int n = 5;

void main() {

int i, j; float c;

4

(63)

62

for(i = 0, j = n - 1; i < j; i++, j ) {

c = x[i]; x[i] = x[j]; x[j] = c; }

printf("\nDay ket qua: \n"); for(i = 0; i < n; i++) printf(“%8.2f", x[i]); }

Ví d 2: Chương trình giải tốn tìm giá trị lớn nhỏ hàng ma trận Trong chương trình sử dụng chu trình lồng

#include <stdio.h> float a[3][4] = {

{15.0, 46.0, 3.5, 6.3}, {34.0, 0.0, -25.0, 35.0} , { 1.0, -13.0, 46.0, -38.0}};

void main() {

int i, j;

float max, min;

for (i = 0; i < 3; i++) {

max = a[i][0]; = a[i][0];

for (j = 0; j < 4; j++) {

if (max < a[i][j]) max = a[i][j]; if (min > a[i][j]) = a[i][j]; }

printf("Gia tri lon nhat va nho nhat cot %d la %.2f va %.2f\n", i + 1, max, min);

} }

Ví d 3: Chương trình nhập dãy số in hình dãy vừa nhập #include <stdio.h>

void main() {

float a[100]; int n, i ;

printf("\nSo phan tu cua day: "); scanf("%d", &n);

for (i = 0; i < n; i++) {

printf("Phan tu thu %d: ", i + 1); scanf("%f", &a[i]);

}

printf("Day so vua nhap:\n"); for (i = 0; i < n; i++)

printf("%8.2f", a[i]); }

(64)

63 #include <stdio.h>

#include <conio.h> void main()

{

float a[20][20], tc, tg; int m, n, i, j;

printf("\nNhap so hang va so cot cua ma tran: "); scanf("%d%d", &m, &n);

for (i = 1; i<= m; i++) for (j = 1; j <= n; j++) {

printf("a[%d][%d] = ", i, j); scanf("%f", &tg);

a[i][j] = tg ; }

/* Tinh tong cot */ for (j = 1; j <= n; j++) {

tc = 0;

for (i = 1; i <= m; ++i) tc += a[i][j] ;

printf ("\nTong cot %d = %.1f", j, tc);

} }

3.4 Lnh while

Lệnh while cho phép thực khối lệnh nhiều lần Thông thường while sử dụng trường hợp mà số lần lặp khơng xác định trước

3.4.1 Cú pháp ca while Cú pháp while có dạng:

while (<biểu thức kiểm tra5>)

<khối lệnh> Trong cú pháp trên:

- while: từ khoá lệnh while

- Biểu thức kiểm tra: bắt buộc phải đặt cặp ngoặc trịn

- Khối lệnh, gọi phần thân while, khối lệnh cần thực nhiều lần 3.4.2 Hot ñộng ca while

Lệnh while làm việc theo bước sau:

- Bước 1: Tính giá trị biểu thức kiểm tra Nếu biểu thức ñúng, sang bước 2, ngược lại thoát khỏi lệnh while

- Bước 2: Thực khối lệnh, sau quay trở lại bước

Nhn xét: Thân của while có thểñược thực lần nhiều lần

khơng thực lần từñầu biểu thức kiểm tra ñã sai

5

(65)

64 Chú ý:

- ðể tránh lặp vô tận, phần thân while cần có lệnh làm thay đổi giá trị

biểu thức kiểm tra cần ñảm bảo tới lúc biểu thức kiểm tra sai - Biểu thức kiểm tra biểu thức ghép, tức gồm dãy biểu thức cách dấu phẩy Tính sai xác ñịnh dựa vào biểu thức cuối dãy

3.4.3 Ví d minh ho

Ví d 1: Tính tích vơ hướng hai véc tơ x y /* Chương trinh tinh tich vo huong */ #include <stdio.h>

float x[] = {4.0, 6.0, 8.0, 3.5}; float y[] = {2.6, 3.2, 4.0, 7.0}; void main()

{

float s; int i; s = 0; i = 0;

while (i < 4) {

s += x[i]*y[i]; i += 1;

}

printf("\nTich vo huong = %.2f", s); }

Ví d 2: Chương trình tìm số nguyên dương n nhỏ cho: + + + n > 1000

#include <stdio.h> void main()

{

float s; int n; s = 0; n = 0;

while (s <= 1000) s += ++n;

printf("\nN = %d", n); }

Ví d 3: Tìm phần tử âm ñầu tiên dãy số nguyên #include <stdio.h>

int a[] = {2, 34, 16, -5, 43, 27};

void main() {

int i, n; i = 0; n = 6;

while ((i < n) && (a[i] >= 0)) i++;

if (i < n)

(66)

65 else

printf("Khong co phan tu am."); }

3.5 Lnh - while

Trong lệnh while for, việc kiểm tra ñiều kiện kết thúc ñặt ñầu chu trình Khác với hai lệnh trên, chu trình while việc kiểm tra điều kiện kết thúc đặt cuối chu trình Như thân chu trình thực lần

3.5.1 Cú pháp ca – while Lệnh - while có dạng sau:

<khối lệnh>

while (<biểu thức kiểm tra>); Trong cú pháp trên:

- do, while từ khoá lệnh – while

- Khối lệnh, gọi phần thân – while khối lệnh cần thực nhiều lần

- Biểu thức kiểm tra phải ñặt cặp ngoặc trịn (ngoặc đơn) 3.5.2 Hot động ca while

Lệnh – while thực sau: - Bước 1: Thực khối lệnh

- Bước 2: Tính giá trị biểu thức kiểm tra Nếu đúng, quay trở lại bước 1, ngược lại, khỏi lệnh – while

3.5.3 Ví d minh ho

Ví d : Tính căn bậc hai số nguyên a, thuật toán sau: x(0) = a

x(n+1) = ( x(n)*x(n) + a ) / ( 2*x(n) ) , với n>=0 Quá trình lặp kết thúc

| (x(n+1) - x(n)) / x(n)| < 0.00001

Khi x(n+1) xem giá trị gần a Thuật tốn chương trình hố sau /* Chuong trinh tinh can bac hai */ #include <stdio.h>

#include <math.h> void main()

{

double a, x, c; printf("\na = "); scanf("%f", &a);

x = a; {

c = x;

(67)

66 }

while (fabs((x-c)/c) >= 1e-5);

printf("Can bac hai cua %.4f la %.4f", a, x); }

3.6 Lnh break

Khi sử dụng lệnh lặp for, while hay – while ví dụ trên, điều kiện khỏi vòng lặp biểu thức kiểm tra sai Tuy nhiên, vài trường hợp, ta muốn thoát khỏi vịng lặp tức thời, sử dụng lệnh break

3.6.1 Cú pháp ca break Lệnh break có dạng sau: break;

Ghi chú:

- Lệnh break có thểđược đặt bất cứñâu thân lệnh lặp

- Khi có nhiều lệnh lặp lồng nhau, lệnh break khỏi lệnh lặp chứa

3.6.2 Hot ñộng ca break

Khi gặp break, máy bỏ qua lệnh lại phần thân lệnh lặp, dừng lặp thoát khỏi lệnh lặp

3.6.3 Ví d minh ho

Chương trình tìm phần tử âm ma trận ñây minh họa cách sử

dụng chu trình lồng cách dùng break ñể khỏi chu trình

/* Chuong trinh tim phan tu am dau tien cua ma tran dùng break */ #include <stdio.h>

float a[3][4] = {

{15.0, 46.0, 3.5, 6.3}, {34.0, 0.0, -25.0, 35.0} , { 1.0, -13.0, 46.0, -38.0}};

void main() {

int i, j;

for (i = 0; i < 3; i++) {

for (j = 0; j < 4; j++) if (a[i][j] < 0)

break; /* khoi for j */ if ( j < 4)

break; /* khoi for i */ }

if ((i < 3)&&(j < 4))

printf("\nPhan tu am dau tien la a(%d,%d) = %.2f", i + 1, j + 1, a[i][j]);

else

printf("\nMa tran khong co phan tu am."); }

3.7 Lnh continue

(68)

67 3.7.1 Cú pháp ca continue

Lệnh continue có dạng: continue;

Ghi chú:

- Lệnh continue sử dụng lệnh lặp

- Lệnh continue có thểđặt bất cứđâu phần thân lệnh lặp

- Khi có nhiều lệnh lặp lồng nhau, lệnh continue có tác dụng ñối với lệnh lặp

3.7.2 Hot ñộng ca continue

Khi gặp continue, máy bỏ qua lệnh lại phần thân lệnh lặp quay lại bắt đầu vịng lặp

ðối với while – while, vòng lặp bước tính biểu thức kiểm tra

ðối với for, vịng lặp bước tính biểu thức tăng 3.7.3 Ví d minh ho

Cho ma trận a, viết chương trình để từ ma trận a cho trước: - Tính tổng phần tử dương a

- Xác ñịnh số phần tử dương a

- Tìm giá trị lớn phần tử dương A #include <stdio.h>

float a[][4] = {

{ 25.0, 0.0, -3.0, 5.0}, { -6.0, 4.0, 0.0, -2.0}, { 30.0, -4.0, 7.0, -3.0}};

void main() {

int i, j, demD; float tongD, maxD; demD = 0;

tongD = 0; maxD = 0;

for (i = 0; i < 3; i++) for(j = 0; j < 4; j++) {

if(a[i][j] <= 0) continue;

++demD;

tongD += a[i][j]; if (maxD < a[i][j]) maxD = a[i][j]; }

printf("\nSo phan tu duong la: %d", demD);

(69)

68

BÀI TP CHƯƠNG

Bài Lập chương trình giải hệ phương trình: ax + by = c

dx + ey = f

các hệ số a, b, c, d, e, f nhận từ bàn phím Yêu cầu xét tất trường hợp Bài Lập chương trình:

- Nhập dãy số từ bàn phím

- Tính trung bình cộng số dương trung bình cộng số âm dãy số

Bài Lập chương trình tính ex theo công thức xấp xỉ

e x x x

n

x

n

= + +1 + +

1

2

! !

với độ xác 0.00001 Tức n cần chọn cho x

n

n

! <0 00001

Bài Lập chương trình tính sin(x) với độ xác 0.0001 theo cơng thức: sin( )

! ! ( ) ( )!

x x x x x

n n n = − + + + − − −

3

3

Bài Lập chương trình vào bốn dãy số a1, , an, b1, , bn, c1, , cn, d1, , dn In kết

n dòng , dòng giá trị theo mẫu sau:

ai bi ci di min(ai,bi,ci,di) max(ai,bi,ci,di)

Bài Lập chương trình tính tổ hợp chập m n

C m n n n n m

m

( , ) ( ) ( )

!

= −1 − +1

Bài Lập chương trình in dãy n số thực x1, , xn nhiều dòng, dịng gồm m số

(dịng cuối hơn) Các giá trị m, n x1, , xn nhận từ bàn phím

Bài Nhập hệ số a1 , , an từ bàn phím sau in hàm f(x) dịng theo mẫu sau:

f(x) = a1x1 + + anxn

Bài Lập chương trình tính

5 2 2

1 )

(a a an

S= + + +

trong n a1, ,an nhận từ bàn phím

Bài 10 Cần có tổng số 200000đ từ loại giấy bạc 1000đ, 2000đ 5000đ Lập chương trình tìm tất phương án

Bài 11 Lập chương trình tìm phần tử âm cuối dãy a1, ,an

Bài 12 Cho hai dãy số: a1, ,an b1, ,bm, hai ñều xếp theo thứ tự tăng Lập chương trình

trộn hai dãy thành dãy theo thứ tự tăng

(70)

69 Bài 14 Sắp xếp dãy số theo thứ tự tăng dần

Bài 15 Cho dãy số a1, ,an Lập chương trình in số âm dòng, số dương

dòng

Bài 16 Cho hiện lên hình kí tự có mã ASCII từ 33 đến 255 Bài 17 Viết chương trình tính giá trị đa thức đạo hàm Bài 18 Viết chương trình tính định thức ma trận vng cấp n

(71)

70

CHƯƠNG - HÀM VÀ TỔ CHỨC CHƯƠNG TRÌNH

Một chương trình viết theo ngôn ngữ C dãy hàm có hàm (hàm main) Thứ tự hàm chương trình chương trình

cũng thực từ hàm main Mỗi hàm thực phần việc chương trình giải tốn trọn vẹn Một ưu điểm C cho phép tổ chức sử dụng hàm cách ñơn giản hiệu Chương giới thiệu qui tắc xây dựng sử dụng hàm

4.1 T chc chương trình thành hàm

4.1.1 Khái nim chung v hàm

Xét tốn đơn giản sau: Tìm giá trị lớn ba số mà giá trị chúng đưa vào từ bàn phím Ta tổ chức chương trình thành hai hàm: hàm main hàm mà ta ñặt tên max3s Nhiệm vụ hàm max3s tính giá trị lớn ba số giảñịnh mà ta gọi a, b, c Nhiệm vụ hàm main ñọc ba giá trị từ bàn phím, dùng hàm max3s để tính max ba giá trị vừa đọc được, đưa kết qủa hình Chương trình viết sau

#include <stdio.h>

/* Nguyen mau ham max3s */

float max3s(float a,float b,float c);

void main() {

float x, y, z;

printf("\nNhap ba so thuc: "); scanf("%f%f%f", &x, &y, &z);

printf("\nx = %0.2f\ny = %0.2f\nz= %0.2f\nmax = %0.2f", x, y, z, max3s(x, y, z));

}

/* Dinh nghia ham max3s */

float max3s(float a, float b, float c) {

float max; max = a>b?a:b;

return (max>c?max:c); /* Gia tri tra ve */ }

Ghi chú:

- Nên khai báo nguyên mẫu hàm trước sử dụng hàm

- Nguyên mẫu hàm thực chất dịng đầu hàm thêm vào dấu chấm phẩy Tuy nhiên nguyên mẫu bỏ tên đối

Qua chương trình rút nhiều khái niệm qui tắc quan trọng liên quan ñến việc xây dựng sử dụng hàm:

- Mỗi hàm phải có tên Ta có thểđặt cho hàm tên theo qui tắc nêu chương

- Trong chương trình, hàm phải có tên khác tên tùy ý ta nên ñặt cho hàm tên phù hợp với chức hàm - Hàm thường có vài đối Ví dụ hàm max3s có ba đối a, b, c Cả ba ñối

ñều có kiểu giá trị float Cũng có hàm khơng đối hàm main ví dụ

(72)

71

- Hàm thường cho ta giá trị Ví dụ, hàm max3s cho giá trị lớn ba đối Giá trị hàm có kiểu int, float, double, Hàm max3s có giá trị kiểu float Ngồi cịn có hàm khơng có giá trị trả về, ñó khai báo kiểu trả hàm void

4.1.2 Quy tc xây dng mt hàm

Hàm xem đơn vịđộc lập chương trình Trong C khơng cho phép xây dựng hàm bên hàm khác Hàm ñược viết theo thứ tự sau:

Nguyên mu hàm

Nguyên mẫu hàm cho biết tên hàm, ñối hàm kiểu giá trị trả Việc khai báo nguyên mẫu hàm cho phép sử dụng hàm trước ñịnh nghĩa hàm

Nguyên mẫu hàm khai báo theo mẫu sau: <kiểu> <tên_hàm>(

<kiểu 1> [<ñối1>, <kiểu 2> [<ñối 2>], …,

<kiểu n> [<ñối n>] );

Như vậy, nguyên mẫu hàm khai báo thông tin tối thiểu hàm để

sử dụng hàm

Trong trường hợp hàm định nghĩa trước sử dụng, khơng cần thiết phải khai báo nguyên mẫu

ðịnh nghĩa hàm

ðịnh nghĩa hàm gồm hai phần: tiêu ñề thân hàm Xét ví dụ hàm max3s: /* Dinh nghia ham max3s */

float max3s(float a, float b, float c) {

float max; max = a>b?a:b;

return (max>c?max:c); /* Gia tri tra ve */ }

Trong ví dụ trên, tiêu đề hàm là:

float max3s(float a, float b, float c)

Thân hàm bắt ñầu dấu { kết thúc dấu } Trong thân hàm chứa câu lệnh cần thiết để thực u cầu ñã ñề cho hàm Thân hàm max3s đoạn chương trình tính giá trị lớn ba ñối a, b, c

Trong thân hàm ta dùng thêm biến max Cần phân biệt khác biến max

ñối a, b, c Biến max biến cục có tác dụng thân hàm khơng có liên hệ đến biến hàm khác chương trình Trái lại đối a, b, c lại dùng ñể trao ñổi liệu hàm

Trong thân hàm sử dụng câu lệnh return, dùng nhiều câu lệnh return

những chỗ khác khơng sử dụng câu lệnh hàm khơng có giá trị trả

về Dạng tổng quát là: return [<biểu thức>];

(73)

72 4.1.3 S dng hàm

Hàm ñược sử dụng cách gọi hàm Lời gọi hàm có dạng sau: <tên hàm> ([<danh sách tham số thực>])

Khi gọi hàm, cần phải truyền cho tham số giá trị Các giá trị gọi tham số thực ñể phân biệt với tham sốñược khai báo ñịnh nghĩa hàm (tham số hình thức)

Như ta có khái niệm sau:

+ Biến toàn hay biến tồn cục: biến khai báo ởđầu chương trình, sử dụng vị trí chương trình

+ Biến cục bộ, biến ñịa phương: biến ñược khai báo hàm, ñầu khối lệnh Phạm vi họat ñộng biến thân hàm hay khối lệnh chứa

+ ðối số hay tham số hình thức: biến khai báo sau tên hàm dấu ngoặc tròn

+ ðối số thực hay tham số thực sự: Khi sử dụng hàm, ta viết tên hàm, cặp dấu ngoặc tròn giá trị dấu ngoặc tròn có Các giá trịđó gọi tham số

thực

Nguyên tắc hoạt ñộng chương trình gặp lời gọi hàm:

Khi gặp lời gọi hàm hàm bắt đầu thực Nói cách khác, máy gặp lời gọi hàm chỗ chương trình, máy tạm rời chỗđó chuyển đến hàm tương ứng Q trình diễn theo trình tự bước sau:

a/ Cấp phát nhớ cho ñối biến cục

b/ Gán giá trị tham số thực cho ñối tương ứng c/ Thực câu lệnh thân hàm

d/ Khi gặp câu lệnh return dấu } cuối thân hàm máy xố đối, biến cục (giải phóng nhớ đối, biến cục bộ) khỏi hàm

Nếu trở từ câu lệnh return có chứa biểu thức giá trị biểu thức gán cho hàm Giá trị hàm sẽñược sử dụng biểu thức chứa

Trong ví dụ trên, giá trị hàm max3s(x,y,z) sẽñược sử dụng câu lệnh printf Nói cách khác, giá trị lớn ba số x, y, z sẽñược ñưa hình

4.1.4 Cu trúc tng quát ca chương trình

Chương trình gồm nhiều hàm viết theo trình tự sau: - Các #include

- Các #define

- Khai báo đối tượng liệu ngồi (biến, mảng, cấu trúc, ) - Khai báo nguyên mẫu hàm

- Hàm main

- Xây dựng (ñịnh nghĩa) hàm

(74)

73

4.2 Tham s kiu tr

Trong phần này, giới thiệu sơ lược trỏ C ứng dụng truyền tham số cho hàm

4.2.1 ðịa ch

Liên quan ñến biến ta có khái niệm: - Tên biến

- Kiểu biến - Giá trị biến Ví dụ câu lệnh

float alpha = 30.5;

xác ñịnh biến có tên alpha có kiểu float có giá trị 30.5 Ta biết, theo khai báo trên, máy cấp phát cho biến alpha khoảng nhớ gồm byte liên tiếp

ðịa biến số thứ tự byte ñầu tiên vùng nhớ biến nhớ Một ñiều cần lưu ý ñịa biến số ngun khơng đánh

đồng với số ngun thơng thường dùng phép tính

ðể lấy địa biến, dùng phép tốn & Ví dụđể lấy địa biến alpha &alpha

4.2.2 Con tr

Con trỏ biến dùng để chứa địa chỉ, có nghĩa giá trị trỏ ñịa biến

Vì có nhiều loại địa nên có nhiều kiểu trỏ tương ứng Con trỏ kiểu int dùng

ñể chứa ñịa biến kiểu int Tương tự, ta có trỏ kiểu float, kiểu double, Cũng ñối với biến khác, trỏ cần khai báo trước sử dụng

Việc khai báo biến trỏñược thực theo mẫu sau: <kiểu> *<tên trỏ>;

Ví dụ câu lệnh sau khai báo hai biến kiểu int x, y hai trỏ kiểu int px py int x, y, *px, *py;

Tương tự câu lệnh sau khai báo trỏ kiểu float float f, *pf;

Khi có khai báo câu lệnh sau hồn tồn xác định px = &x;

py = &y;

Câu lệnh thứ gán ñịa x cho trỏ px câu lệnh thứ hai gán ñịa

của biến y cho trỏ py

Khi trỏ px chứa địa biến x ta nói px trỏ tới x

Chúng ta khơng gán địa biến nguyên cho trỏ kiểu thực Ví dụ

(75)

74 4.2.3 Qui tc s dng tr biu thc

Với biến, có hai đại lượng liên quan, ñó giá trị biến ñịa biến Khi trỏ trỏ tới biến, ñó có hai ñại lượng liên quan, ñó giá trị trỏ

(chính địa biến) giá trị biến mà trỏñang trỏ tới

Trong biểu thức, tên trỏñại diện cho giá trị trỏ dạng khai báo ñại diện cho giá trị biến mà trỏñang trỏ tới

S dng tên tr

Con trỏ biến nên tên xuất trọng biểu thức giá trị ñược sử dụng biểu thức Khi tên trỏ đứng bên trái tốn tử gán giá trị biểu thức bên phải (giá trị phải ñịa chỉ) ñược gán cho trỏ

Ta xem câu lệnh sau làm ? float a, *p, *q;

p = &a; q = p;

Câu lệnh thứ khai báo biến kiểu float (biến a) hai trỏ p q kiểu float Câu lệnh thứ hai gán ñịa biến a cho trỏ p câu lệnh thứ ba gán giá trị p cho q Kết trỏ q chứa ñịa biến a

S dng dng khai báo ca trỏ Xét ñoạn lệnh sau:

float x, y, *px, *py; x = 100.0;

y = 215.3; px = &x; py = &y;

Sau lệnh gán px trỏ tới x, py trỏ tới y Khi biến mà px trỏ tới (biến x) biểu diễn dạng *px

Nói cách khác, trỏ px trỏ tới biến x cách viết x *px

là tương ñương ngữ cảnh

Theo nguyên lý ba câu lệnh sau có hiệu lực y = 3*x + 1;

*py = 3*x + 1; *py = 3*(*px) + 1;

Từđây rút kết luận quan là: Khi biết ñược ñịa biến sử dụng giá trị mà cịn gán cho giá trị (làm thay đổi nội dung nó) ðiều ñược áp dụng phương pháp chủ yếu ñể

nhận kết hàm thơng qua đối 4.2.4 Mng tr

Khi khai báo mảng, máy cấp phát vùng nhớ dùng ñể lưu giá trị phần tử mảng

(76)

75

Khi máy cấp phát 100 nhớ, nhớ có kích thước số nguyên tương

ứng với phần tử, phần tử xếp liên tiếp nhớ, từ phần tử ñầu tiên

Trong C, tên mảng địa phần tửđầu tiên mảng, điều có nghĩa là: a &a[0]

Vì tên mảng địa chỉ, nên ta gán cho trỏ Ví dụ: int *p;

p = a;

Như mảng trỏ có tương đồng Do đó, C cho phép sử dụng thay

giữa mảng trỏ số trường hợp Ví dụ, sau ñã gán p a thì:

a[4] p[4] ñều biểu diễn phần tử thứ mảng a[0], *a *p biểu diễn phần tửñầu tiên mảng

Tuy nhiên mảng trỏ có khác Con trỏ biến, giá trị thay đổi ta gán giá trị cho trỏ Trong tên mảng địa chỉ, mảng cấp phát địa phần tử xác định Vì khơng thể thay ñổi ñược giá trị tên mảng

4.2.5 Hàm có đối tr

ðối trỏ thường ñược sử dụng trường hợp sau ñây: - Sử dụng hàm ñể thay ñổi giá trị biến

- Truyền mảng vào cho hàm - Trả nhiều kết

S dng hàm ñể thay ñổi giá tr ca mt biến

Như ñã biết, truyền tham số thực cho hàm, có giá trị biểu thức ñược sử dụng Nếu thay ñổi giá trị đối số bên hàm, thay đổi

đó khơng ảnh hưởng đến giá trị biến truyền vào cho hàm

Vì vậy, muốn dùng hàm ñể thay ñổi giá trị biến, phải truyền địa biến thay giá trị biến

ðể khai báo tham số ñịa biến, ta khai báo tham sốđó trỏ có kiểu tương ứng Ví dụ sau định nghĩa hàm cho phép đảo giá trị hai biến

#include <stdio.h>

void hoan_vi(float *px, float *py) {

float z; z = *px; *px = *py; *py = z; }

void main() {

float a = 7.6, b = 13.5; hoan_vi(&a, &b);

(77)

76 Kết thực chương trình

a = 13.50 b = 7.60

Ta xem hàm hoán_vị làm việc Nhưđã biết, chương trình câu lệnh

ñầu tiên hàm main() Kết qủa biến a nhận giá trị 7.6 biến b nhận giá trị 13.5 Tiếp

đó lời gọi hàm hoan_vi Máy gán giá trị tham số thực cho ñối tương ứng Như

vậy ñịa a ñược gán cho trỏ px , ñịa b ñược gán cho trỏ py Sau ñó máy xét ñến câu lệnh thân hàm Câu lệnh thứ cấp phát cho biến cục z khoảng nhớ byte Theo qui tắc sử dụng trỏ nêu mục 4.2.3 ba câu lệnh tương đương với câu lệnh:

z = a; a = b; b = z;

Như a nhận giá trị b ngược lại Tiếp đó, máy trở hàm main() in dòng kết qủa nhưñã

Truyn mt mng mt chiu vào cho hàm

Khi muốn truyền mảng vào cho hàm, ví dụ hàm in số hạng dãy số, ta dùng ñối trỏ

Do mảng ñịa phần tử ñầu nên kiểu ñối kiểu trỏ kiểu phần tử

mảng Ví dụ, với mảng phần tử int kiểu đối trỏ kiểu int

Khi truyền mảng vào cho hàm, bên hàm không rõ số lượng phần tử mảng,

đó cần thêm đối số lượng phần tử mảng

Ví dụ sau ñịnh nghĩa hai hàm, hàm nhập liệu cho dãy số hàm in dãy sốđó hình

#include <stdio.h>

// Nguyen mau ham

void NhapDaySo(int *a, int n); void InDaySo(int *a, int n);

void main() { int a[100]; int n;

printf("Nhap so phan tu: "); scanf("%d", &n);

// Nhap day so NhapDaySo(a, n);

printf("Day so vua nhap:\n"); // In day so

InDaySo(a, n); }

void NhapDaySo(int *a, int n) {

int i;

for (i = 0; i < n; i++) {

printf("a[%d] = ", i + 1); scanf("%d", &a[i]);

(78)

77 void InDaySo(int *a, int n) {

int i;

for (i = 0; i < n; i++) printf("%8d", a[i]); }

Trong ví dụ trên, tham số hai hàm NhapDaySo InDaySo ñược khai báo giống nhau, bao gồm tham số kiểu trỏ nguyên tham số nguyên

Tuy nhiên, hai trường hợp ý nghĩa tham số khác - Tham số a hàm NhapDaySo kết quảñưa - Tham số a hàm InDaySo liệu ñầu vào

Về mặt cú pháp, khơng phân biệt khác trên, mà phân biệt

được theo mục đích sử dụng

Vì vậy, truyền mảng vào cho hàm mà hàm khơng có nhu cầu thay đổi giá trị phần tử mảng, thêm từ khố const khai báo tham số Ví dụ, hàm InDaySo có thểđược định nghĩa sau:

void InDaySo(const int *a, int n) {

int i;

for (i = 0; i < n; i++) printf("%8d", a[i]); }

Khi xác ñịnh tham số a liệu vào cho hàm Truyn mt mng nhiu chiu vào cho hàm

Trong số trường hợp, phải truyền mảng nhiều chiều vào cho hàm, ví dụ

như truyền ma trận vào hàm in ma trận

Khi khai báo tham số mảng nhiều chiều, cần phải số phần tử tương ứng chiều, trừ chiều ñầu tiên khơng cần thiết phải

Ví dụ sau nhập in ma trận thực theo dạng bảng, sử dụng hai cú pháp khai báo mảng trỏ

#include <stdio.h>

// Nguyen mau ham

void NhapMaTran(float a[20][20], int, int); // Su dung dang khai bao mang

void InMaTran(float a[20][20], int, int);

void main() {

float a[20][20]; int m, n;

printf("Nhap so hang, so cot: "); scanf("%d%d", &m, &n);

// Nhap ma tran NhapMaTran(a, m, n);

(79)

78

void NhapMaTran(float a[20][20], int m, int n) {

int i, j; float f;

for (i = 0; i < m; i++) for (j = 0; j < n; j++) {

printf("a[%d][%d] = ", i + 1, j + 1); scanf("%f", &f);

a[i][j] = f; }

}

void InMaTran(float a[20][20], int m, int n) {

int i, j;

for (i = 0; i < m; i++) {

for (j = 0; j < n; j++) printf("%8.2f", a[i][j]); printf("\n");

} }

Chú ý: một số trình dịch khơng cho phép lấy địa phần tử mảng nhiều chiều, phải dùng biến trung gian nhập giá trị phần tử mảng, hàm NhapMaTran

Tr v nhiu kết qu

Một trường hợp mà ñối trỏ thường ñược sử dụng ñó muốn hàm trả

về nhiều giá trị Như biết, hàm trả giá trị dạng tên hàm,

đó để trả nhiều giá trị phải sử dụng tham số trỏ

Ví dụ: viết hàm giải phương trình bậc hai, cần phải trả đại lượng:

- Hàm có nghiệm (0, 1, 2)

- Nếu có nghiệm, giá trị nghiệm

Như ởñây phải trả ba ñại lượng: số nghiệm, hai nghiệm (trong trường hợp có nghiệm)

Ví dụ sau thể cách trả nhiều kết /* Chuong trinh giai phuong trinh bac hai */

#include <stdio.h> #include <math.h>

// Nguyen mau ham

int GiaiPTBac2(float, float, float, float*, float*);

void main() {

float a, b, c, x1, x2; int songhiem;

printf("Nhap a, b, c: "); scanf("%f%f%f", &a, &b, &c);

(80)

79

songhiem = GiaiPTBac2(a, b, c, &x1, &x2); if (songhiem == 0)

printf("Phuong trinh vo nghiem."); else if (songhiem == 1)

printf("Nghiem kep: %.3f", x1); else

printf("x1: %.3f\nx2: %.3f", x1, x2); }

int GiaiPTBac2(float a, float b, float c, float *px1, float *px2) {

float delta;

delta = b*b - 4*a*c; if (delta < 0)

return 0;

else if (delta == 0) {

*px1 = -b/(2*a); return 1;

} else {

*px1 = (-b - sqrt(delta))/(2*a); *px2 = (-b + sqrt(delta))/(2*a); return 2;

} }

4.3 ðệ quy

4.3.1 Khái niêm chung vềñệ quy

C cho phép từ hàm gọi tới hàm khác, mà cịn cho phép từ vị trí thân hàm gọi tới hàm Hàm gọi hàm ñệ quy Trong số

trường hợp, sử dụng ñệ quy làm chương trình ngắn gọn, dễ hiểu

Khi hàm gọi đệ quy đến lần gọi, máy tạo tập biến cục

mới hồn tồn độc lập với tập biến (cục bộ) ñã ñược tạo lần gọi trước

Ta ý rằng: Có lần gọi tới hàm có nhiêu lần khỏi hàm lần khỏi hàm tập biến cục bị xóa Sự tương ứng lần gọi tới hàm lần khỏi hàm ñược thực theo thứ tự ngược, nghĩa là: Lần ñầu tiên

ứng với lần vào cuối lần khỏi hàm cuối ứng với lần ñầu tiên gọi tới hàm

ðể minh họa điều nói trên, ta đưa ví dụ đơn giản Giả sử ta cần viết hàm tính n giai thừa Thông thường ta viết sau:

long giai_thua(int n) {

long s; int i;

for (s = 1, i = 1; i <= n; i++) s*= i;

return s; }

Một cách khác, ta thấy n! tính theo cơng thức truy hồi sau: n!= n =

n!= n*(n-1)! n >

(81)

80 #include <stdio.h>

long giai_thua(int n) {

return (n > 0)?n*giai_thua(n - 1) : 1; }

void main() {

printf("%d", giai_thua(5)); }

Cơ chế hoạt ñộng hàm giai_thua chương trình giải thích sau: - Trong hàm main, có lời gọi hàm giai_thua(5) để tính giai thừa Khi

hàm giai_thua sẽñược gọi ñể thực với tham số n

- Trong hàm giai_thua, n lớn nên giá trị trả n*giai_thua(n -1), tức 5*giai_thua(4) Tuy nhiên lúc giá trị giai_thua(4) chưa xác ñịnh, nên máy lại tiếp tục gọi hàm giai_thua để tính giai thừa

- Trong lần gọi thứ hai này, n lớn 0, nên tiếp tục cần tính giai_thua(3) - Cứ vậy, n 0, giá trị trả lần gọi giai_thua(0)

và sử dụng để tính biểu thức trả cho lần gọi giai_thua(1) 1*giai_thua(0), 1*1

- Giá trị giai_thua(1) 1, lại ñược sử dụng để tính biểu thức trả cho lần gọi giai_thua(2), 2*1

- Cứ vậy, cuối giá trị trả lời gọi giai_thua(5) main có giá trị

bằng 5*4*3*2*1*1 4.3.2 Cách dùng đệ quy

Bài tốn có th dùng ñệ quy

Phương pháp ñệ quy thường áp dụng cho tốn phụ thuộc tham số có hai đặc điểm sau:

- Bài tốn dễ dàng giải số trường hợp riêng ứng với giá trịñặc biệt tham số Ta gọi ñây trường hợp suy biến

- Trong trường hợp tổng qt, tốn quy tốn dạng giá trị tham số thay đổi Và sau số hữu hạn bước biến ñổi ñệ quy, dẫn tới trường hợp suy biến

Ta nhận thấy tốn tính n! nêu thể hiên rõ ñặc ñiểm Cách xây dng hàm ñệ quy

Hàm ñệ quy thường ñược viết theo thuật toán sau: if (trường hợp suy biến)

{

trình bày cách giải tốn (giả định ñã có cách giải) }

else /* trường hợp tổng quát */ {

gọi ñệ quy tới hàm (ñang lập) với giá trị khác tham số

(82)

81 4.3.3 Các ví d

Mục trình bày số ví dụ nhằm minh hoạ cách xây dựng hàm đệ quy Ví d 1: Xét tốn tìm ước số chung lớn hai số nguyên dương x y

- Trường hợp suy biến trường hợp x = y Khi ñó: uscln(x,y) = x

- Trường hợp x khác y tính ƯSCLN cách đệ quy sau: uscln(x,y) = uscln(x-y,y) x > y

uscln(x,y) = uscln(x,y-x) x < y

Chương trình sau ñịnh nghĩa hàm tính ước số chung lớn sử dụng hàm để tính

ước số chung lớn hai số nhập vào: #include <stdio.h>

// Nguyen mau ham int uscln(int, int);

void main() {

int a, b;

printf("Nhap hai so nguyen: "); scanf("%d%d", &a, &b);

printf("USCLN cua %d va %d la %d.", a, b, uscln(a, b)); }

int uscln(int a, int b) {

if (a > b)

return uscln(a - b, b); else if (a < b)

return uscln(a, b - a); else

return a; }

Ví d 2: Bài toán tháp Hà Nội

Bài toán tháp Hà Nội đặt sau: Có tháp gồm n tầng, tầng nhỏ tầng Nhiệm vụ phải chuyển tháp từ vị trí A đến vị trí B ðiều kiện chuyển là:

- Mỗi lần chỉñược phép chuyển tầng

- Cho phép sử dụng thêm vị trí trung gian C đểđặt tầng

- Ln ñảm bảo tầng nhỏ tầng vị trí thời điểm Thuật tốn chuyển tháp diễn đạt sau:

Trường hợp suy biến: n = 1, cần chuyển tầng từ A ñến B Trường hợp tổng qt n > giải đệ quy sau:

- Chuyển tháp n -1 tầng từ A đến C, dùng B làm vị trí trung gian - Chuyển tầng n từ A ñến B

(83)

82 Chương trình sau cài đặt thuật tốn

/* Thap Ha noi */ #include <stdio.h>

// Nguyen mau ham

void Chuyen(int, int, int, int);

void main() {

int n;

printf("Nhap so tang: "); scanf("%d", &n);

Chuyen(n, 'A', 'B', 'C'); }

void Chuyen(int n, int A, int B, int C) {

if (n == 1)

printf("Chuyen tang tu %c sang %c\n", A, B); else

{

Chuyen(n - 1, A, C, B);

printf("Chuyen tang %d tu %c sang %c\n", n, A, B); Chuyen(n - 1, C, B, A);

(84)

83

BÀI TP CHƯƠNG

Viết hàm thực tốn Bài Giải hệ phương trình bậc

ax + by = c dx + ey = f

Hàm có sáu đối vào a, b, c, d, e, f hai ñối x, y Bài Tính đa thức cấp n

f(x) = a0 + a1x + + an-1 xn-1 + anxn

Hàm có hai đối biến ngun n mảng thực a Bài Tính cực đại cực tiểu dãy số

Bài Tính giá trị trung bình độ lệch tiêu chuẩn đại lượng ngẫu nhiên theo cơng thức

s x x

n

n

= + +1

n

s x s

x

d n

2

1

2=( − ) + +( − )

Trong x1, , xn dãy quan sát nhận ñược

Bài Nhân ma trận A cấp mxn với véc tơ X cấp n Bài Chuyển vị ma trận chữ nhật A cho trước

Bài Tìm tọa ñộ giao ñiểm hai ñường thẳng AB CD biết tọa ñộ ñiểm A, B, C, D

Bài Xây dựng hàm số sau ñây phương pháp ñệ qui f(x,n) = xn

s(n) = (2n)!!

(85)

84

CHƯƠNG - CẤU TRÚC

ðể lưu trữ xử lý thơng tin máy tính ta có biến mảng Mỗi biến chứa

ñược giá trị Mảng xem tập hợp nhiều biến có kiểu giá trị biểu thị tên Cấu trúc xem mở rộng khái niệm biến mảng, cho phép lưu trữ xử lý dạng thông tin phức tạp Cấu trúc tập hợp biến, mảng ñược biểu thị tên

Một ví dụ truyền thống cấu trúc phiếu ghi lương: Mỗi cơng nhân miêu tả tập hợp thuộc tính tên, địa chỉ, ngày sinh, bậc lương, Một vài thuộc tính lại cấu trúc: Tên có nhiều thành phần, địa chí ngày sinh

5.1 ðịnh nghĩa cu trúc khai báo biến cu trúc

Cấu trúc kiểu liệu người dùng tự ñịnh nghĩa Khi ñịnh nghĩa cấu trúc, cần tên kiểu cấu trúc thành phần cấu trúc

ðểñịnh nghĩa cấu trúc, dùng mẫu sau: struct <Tên cấu trúc>

{

<Kiểu 1> <Tên thành phần 1>; <Kiểu 2> <Tên thành phần 2>;

};

ðể khai báo biến cấu trúc sau ñã ñịnh nghĩa kiểu cấu trúc, ta viết: struct <Tên cấu trúc> danh_sách_tên_biến_cấu_trúc;

Ví dụ, định nghĩa cấu trúc mô tả ngày tháng, sau: struct Ngay

{

int ngay; int thang; int nam; };

Sau định nghĩa trên, có kiểu liệu mô tả ngày tháng struct Ngay Kiểu liệu dùng để khai báo biến cấu trúc Ví dụ, biến ngay_sinh kiểu ngày tháng khai báo sau:

struct Ngay ngay_sinh;

Ta thấy việc khai báo biến cấu trúc giống khai báo biến kiểu liệu chuẩn Trong dòng khai báo trên, kiểu liệu struct Ngay tên biến ngay_sinh

5.2 Kết hp ñịnh nghĩa cu trúc khai báo biến cu trúc

Trong phần 5.1, ñã biết ñịnh nghĩa cấu trúc sử dụng kiểu liệu ñể

khai báo biến Có thể kết hợp cảñịnh nghĩa cấu trúc khai báo biến vào lệnh theo mẫu sau:

struct [Tên cấu trúc] {

<Kiểu 1> <Tên thành phần 1>; <Kiểu 2> <Tên thành phần 2>;

(86)

85

Với cách này, biến có kiểu cấu trúc có thành phần nhưđược khai báo cặp ngoặc nhọn {} Tên cấu trúc trường hợp có, khơng

Ví dụ, định nghĩa cấu trúc mơ tả ngày tháng đồng thời khai báo biến tu_ngay, den_ngay, ta dùng hai cách sau:

Cách 1: có tên cấu trúc: struct Ngay {

int ngay; int thang; int nam;

} tu_ngay, den_ngay;

Cách 2: tên cấu trúc: struct

{

int ngay; int thang; int nam;

} tu_ngay, den_ngay;

Sự khác hai cách là, cách vừa ñịnh nghĩa cấu trúc tên Ngay biến cấu trúc tu_ngay, den_ngay Sau ñịnh nghĩa này, ta dùng kiểu struct Ngay để khai báo biến khác

Cách ñịnh nghĩa biến tu_ngay, den_ngay có kiểu cấu trúc gồm ba trường: ngay, thang nam Vì khơng đặt tên cho cấu trúc, nên sau định nghĩa ngày khơng thể sử dụng kiểu liệu nữa, khơng thểđịnh nghĩa biến kiểu với biến tu_ngay, den_ngay

5.3 S dng typedef ñểñịnh nghĩa kiu d liu cu trúc

5.3.1 ðịnh nghĩa kiu bng typedef

Sử dụng từ khoá typedef, định nghĩa kiểu liệu dựa kiểu liệu có Mẫu chung cho việc ñịnh nghĩa kiểu liệu typedef nhau:

typedef <kiểu> <danh sách tên>;

Ví dụ, biết C khơng định nghĩa kiểu liệu logic, mà kiểu liệu ñược biểu diễn thông qua kiểu liệu Trong ví dụ này, sử dụng kiểu số nguyên ñể biểu diễn kiểu logic, ñịnh nghĩa sau:

typedef int BOOL, BIT;

Sau ñịnh nghĩa này, có kiểu liệu BOOL, BIT, mà thực chất kiểu int Kiểu BOOL, BIT dùng để khai báo biến sau:

BOOL tiep_tuc; BIT ket_qua;

ðoạn lệnh khai báo biến tiep_tuc kiểu BOOL ket_qua kiểu BIT Về mặt chất, biến có kiểu ngun, nhiên ta coi biến có kiểu logic nên biến nên nhận hai giá trị (biểu diễn giá trị sai) (biểu diễn giá trịñúng)

5.3.2 S dng typedef ñểñịnh nghĩa kiu cu trúc

(87)

86

Giả sử ñã ñịnh nghĩa kiểu struct Ngay, ñịnh nghĩa kiểu liệu tương ñương kiểu liệu sau:

typdef struct Ngay KieuNgay;

Sau định nghĩa kiểu KieuNgay, dùng kiểu liệu ñể khai báo biến cách ngắn gọn sau:

KieuNgay ngay_batdau, ngay_kethuc;

Chúng ta kết hợp định nghĩa cấu trúc với từ khố typedef đểđịnh nghĩa kiểu

liệu cấu trúc theo mẫu sau: typdef struct [Tên] {

<Kiểu 1> <Tên thành phần 1>; <Kiểu 2> <Tên thành phần 2>;

} <danh sách tên kiểu>;

Với cách này, tên cấu trúc có, khơng Ví dụ sau định nghĩa kiểu KieuNgay kết hợp với ñịnh nghĩa cấu trúc theo hai cách:

Cách 1: có tên cấu trúc: typedef struct Ngay {

int ngay; int thang; int nam; } KieuNgay;

Cách 2: khơng có tên cấu trúc: typedef struct

{

int ngay; int thang; int nam; } KieuNgay;

Khác biệt hai cách chỗ: với cách 1, sử dụng kiểu liệu struct Ngay KieuNgay, cịn với cách có kiểu liêu KieuNgay

5.4 Truy cp thành phn ca cu trúc

Với biến kiểu nguyên hay kiểu thực, nội dung biến mang giá trị

kiểu tương ứng Một biến cấu trúc mang nhiều thành phần khác làm việc với thành phần

Việc truy cập thành phần biến cấu trúc thực toán tử chấm (.) Toán tử cho phép truy cập ñến thành phần cấu trúc biết tên biến cấu trúc tên thành phần Cú pháp sau:

<biến cấu trúc>.<tên thành phần>

Trong trường hợp thành phần cấu trúc cấu trúc, áp dụng tốn tử

này cho thành phần để truy cập vào thành phần sâu

Nếu làm việc với biến cấu trúc thông qua trỏ, tốn tửđể truy cập đến thành phần cấu trúc toán tử ->

(88)

87 5.5.1 Ví d

Nhập toạ ñộ N ñiểm mặt phẳng Tính tổng ñộ dài ñường gấp khúc ñi qua

ñiểm theo thứ tự nhập vào

Với ví dụ này, dùng mảng số thực để lưu toạ ñộ x y

điểm Một cách khác dùng cấu trúc mơ tảđiểm, x y thành phần cấu trúc Mảng ñiểm mảng cấu trúc

#include <stdio.h> #include <math.h> typedef struct {

float x; float y; } DIEM, *PDIEM;

// Khai bao cac nguyen mau ham void NhapDiem(PDIEM, int); float TinhDoDai(PDIEM, int);

void main() {

DIEM day[100]; int n;

printf("Nhap so diem: "); scanf("%d", &n);

NhapDiem(day, n);

printf("Do dai duong gap khuc la: %.3f", TinhDoDai(day, n)); }

void NhapDiem(PDIEM pDiem, int n) {

DIEM diem; int i;

for (i = 0; i < n; i++) {

printf("x[%d] = ", i + 1); scanf("%f", &diem.x); printf("y[%d] = ", i + 1); scanf("%f", &diem.y); pDiem[i] = diem; }

}

float TinhDoDai(PDIEM pDiem, int n) {

float do_dai, dx, dy; int i;

do_dai = 0;

for (i = 0; i < n - 1; i++) {

dx = (pDiem[i + 1].x - pDiem[i].x); dy = (pDiem[i + 1].y - pDiem[i].y); do_dai+= sqrt(dx*dx + dy*dy); }

return do_dai; }

(89)

88

Nhập danh sách gồm n thí sinh dự thi đại học, thí sinh cấu trúc gồm trường: Họ tên, Quê, ðiểm toán, ðiểm lý, ðiểm hoá

Yêu cầu:

- Nhập điểm chuẩn sau tìm in hình danh sách thí sinh đỗđại học có q “Ha Noi” (Thí sinh đỗ đại học có tổng điểm khơng điểm chuẩn)

- Tìm in hình danh sách thí sinh có điểm tốn cao - In hình tồn thơng tin n thí sinh

ðể giải tốn ta có chương trình sau: #include <stdio.h>

#include <string.h>

// Dinh nghia kieu Ho so sinh vien typedef struct {

char HoTen[30]; char Que[50]; float DiemToan; float DiemLy; float DiemHoa; } HSSV, *PHSSV;

void NhapHSSV(PHSSV pSv, int n) {

HSSV sv; int i;

for (i = 0; i < n; i++) {

printf("Ten sinh vien %d: ", i + 1); fflush(stdin);

gets(sv.HoTen);

printf("Que sinh vien %d: ", i + 1); fflush(stdin);

gets(sv.Que);

printf("Diem toan, ly, hoa sinh vien %d: ", i + 1); scanf("%f%f%f", &sv.DiemToan, &sv.DiemLy, &sv.DiemHoa); pSv[i] = sv;

} }

void InHSSV(PHSSV pSv, int n) {

int i;

printf("%4s %20s %20s %6s %6s %6s\n",

"STT", "Ho ten", "Que quan", "Toan", "Ly", "Hoa"); for (i = 0; i < n; i++)

printf("%4d %20s %20s %6.1f %6.1f %6.1f\n", i + 1, pSv[i].HoTen, pSv[i].Que, pSv[i].DiemToan, pSv[i].DiemLy, pSv[i].DiemHoa); }

void main() {

HSSV day[50]; int n, i;

float chuan, max;

printf("Nhap so sinh vien: "); scanf("%d", &n);

(90)

89 NhapHSSV(day, n);

// In ds sinh vien vua nhap InHSSV(day, n);

// Tim kiem cac sinh vien que o Ha Noi printf("Nhap diem chuan: ");

scanf("%f", &chuan);

printf("\nDanh sach sinh vien do, que o Ha Noi:\n");

printf("%4s %20s %20s %6s %6s %6s\n",

"STT", "Ho ten", "Que quan", "Toan", "Ly", "Hoa");

for (i = 0; i < n; i++)

if ((day[i].DiemToan + day[i].DiemLy + day[i].DiemHoa >= chuan)&& (strcmpi(day[i].Que, "Ha Noi") == 0))

printf("%4d %20s %20s %6.1f %6.1f %6.1f\n", i + 1, day[i].HoTen, day[i].Que, day[i].DiemToan, day[i].DiemLy, day[i].DiemHoa);

// Tim diem toan cao nhat max = day[0].DiemToan; for (i = 1; i < n; i++) if (max < day[i].DiemToan) max = day[i].DiemToan;

// In danh sach sinh vien diem toan cao nhat

printf("\nDanh sach sinh vien diem toan cao nhat:\n");

printf("%4s %20s %20s %6s %6s %6s\n",

"STT", "Ho ten", "Que quan", "Toan", "Ly", "Hoa");

for (i = 0; i < n; i++)

if (day[i].DiemToan == max)

printf("%4d %20s %20s %6.1f %6.1f %6.1f\n", i + 1, day[i].HoTen, day[i].Que, day[i].DiemToan, day[i].DiemLy, day[i].DiemHoa);

}

Trong chương trình trên, ta xây dựng hàm nhập (NhapHSSV) in (InHSSV) danh sách sinh viên Sau sử dụng chúng hàm main ðộc giả viết lại chương trình mà không sử dụng hàm cách viết trực tiếp đoạn chương trình nhập in vào hàm main

BÀI TP CHƯƠNG

Bài Xây dựng cấu trúc (ứng với phiếu ñiểm thí sinh) gồm thành phần: - Họ tên

- Quê quán - Trường - Tuổi

- Số báo danh - ðiểm thi

(91)

90

ðọc số liệu từ phiếu ñiểm cụ thể lưu trữ vào thành phần cấu trúc nói trên, sau

đó in số liệu hình

Bài Sử dụng định nghĩa cấu trúc :

Nhập số liệu 20 phiếu ñiểm lưu trữ vào mảng cấu trúc nói Tìm kiếm in thí sinh có tổng sốđiểm ba mơn lớn 15

Bài Giả sửñã nhập số liệu 20 phiếu ñiểm theo yêu cầu Hãy lập chương trình xếp lại phần tử mảng cấu trúc theo thứ tự giảm dần tổng sốđiểm, sau in danh sách thí sinh (theo thứ tự nói trên) Mỗi thí sinh in dịng gồm thơng tin:

- Họ tên - Quê quán - Số báo danh - ðiểm toán, lý, hóa

Bài Nhập danh sách n học sinh với thuộc tính: họ tên, năm sinh tổng ñiểm Sắp xếp danh sách theo thứ tự giảm tổng điểm Khi tổng điểm học sinh có năm sinh nhỏ xếp trước In danh sách học sinh ñã xếp cho tất chữ họ

tên chuyển thành chữ hoa

Bài ðịnh nghĩa kiểu cấu trúc mô tả đa thức, sau viết hàm vào đa thức, in ña thức, cộng ña thức nhân ña thức áp dụng hàm main() ñể thực việc:

Vào từ bàn phím ba đa thức P1, P2 P3 Tính đa thức P theo cơng thức: P = (P1 + P2)2 + P3

In P1, P2, P3 P

(92)

91

PHỤ LỤC - BẢNG MÃ ASCII

Bộ ký tự ASCII (American Standard Code for Interchange Information) gồm 256 ký

ñược phân bố sau:

- 32 ký tựđầu tiên ký tựđiều khiển khơng in ñược ký tự Enter (mã 13), ký tự ESC (mã 27)

- Các mã ASCII 32-47,58-64,91-96 123-127 ký tựñặc biệt dấu chấm, dấu phẩy, dấu cách, dấu ngoặc, dấu móc, dấu hỏi,

- Các mã ASCII 48-57 10 chữ số

- Các mã ASCII 65-90 chữ hoa từ A ñến Z - Các mã ASCII 97-122 chữ thường từ a ñến z - Các mã ASCII 128-255 ký tựñồ hoạ

MÃ KÝ TỰ MÃ KÝ TỰ MÃ KÝ TỰ

0 NUL 43 + 86 V

1 SOH 44 , 87 W

2 STX 45 - 88 X

3 ETX 46 89 Y

4 EOT 47 / 90 Z

5 ENQ 48 91 [

6 ACK 49 92 \

7 BEL 50 93 ]

8 BS 51 94 ^

9 HT 52 95 _

10 LF 53 96 `

11 VT 54 97 a

12 FF 55 98 b

13 CR 56 99 c

14 SO 57 100 d

15 SI 58 : 101 e

16 DLE 59 ; 102 f

17 DC1 60 < 103 g

18 DC2 61 = 104 h

19 DC3 62 > 105 i

20 DC4 63 ? 106 j

21 NAK 64 @ 107 k

22 SYN 65 A 108 l

(93)

92

24 CAN 67 C 110 n

25 EM 68 D 111 o

26 SUB 69 E 112 p

27 ESC 70 F 113 q

28 FS 71 G 114 r

29 GS 72 H 115 s

30 RS 73 I 116 t

31 US 74 J 117 u

32 Space 75 K 118 v

33 ! 76 L 119 w

34 ” 77 M 120 x

35 # 78 N 121 y

36 $ 79 O 122 z

37 % 80 P 123 {

38 & 81 Q 124 |

39 ’ 82 R 125 }

40 ( 83 S 126 ~

41 ) 84 T 127 DEL

42 * 85 U

(94)

93

PHỤ LỤC

DANH SÁCH MT S HÀM CA TURBO C

(theo th t ABC)

ðể biết chi tiết, ñề nghịñộc giả sử dụng help mơi trường TC cách đánh tên hàm mơi trường TC sau để trỏ tên hàm rối nhấn Ctrl + F1

Hàm Tp tiêu ñề Hàm Tp tiêu ñề

(95)

94

(96)

95

121 labs <stdlib.h> 147 perror <stdio.h> 122 line <graphics.h> 148 pieslice <graphics.h> 123 linerel <graphics.h> 149 poke <dos.h> 124 lineto <graphics.h> 150 pokeb <dos.h> 125 log <math.h> 151 pow <math.h> 126 log10 <math.h> 152 printf <stdio.h> 127 lseek <io.h> 153 putc <stdio.h> 128 Ltoa <ctype.h> 154 putch <conio.h> 129 malloc <alloc.h> 155 putchar <stdio.h> 130 memccpy <memory.h>

<string.h>

156 putimage <graphics.h>

131 memchr <memory.h> <string.h>

157 putpixel <graphics.h>

132 memcmp <memory.h> <string.h>

158 puts <stdio.h>

133 memcpy <memory.h> <string.h>

159 putw <stdio.h>

134 memicmp <memory.h> <string.h>

160 rand <stdlib.h>

135 memset <memory.h> <string.h>

161 random <stdlib.h>

136 MK_FP <dos.h> 162 randomize <stdlib.h> <time.h> 137 mkdir <dir.h> 163 read <io.h> 138 movedata <mem.h> 164 realloc <alloc.h> 139 movedata <memory.h>

<string.h>

165 rectangle <graphics.h>

(97)

96

(98)

- Đối tượng sử dụng: sinh viên ngành kỹ thuật

- Các từ khóa: Tin học Đại cương, Tin Đại cương, Lập trình cấu trúc, Ngơn

ngữ lập trình, Ngơn ngữ lập trình C, Kỹ thuật lập trình, Thuật tốn, Lập trình C, Sơ đồ khối, Ngôn ngữ C

- Kiến thức u cầu mơn học trước: tốn học sở

(99)

Directory: C:\Documents and

Settings\Administrator\Desktop\GT80\TinDC_Ebook

Template: C:\Documents and Settings\Administrator\Application

Data\Microsoft\Templates\Normal.dot

Title: Thông tin về tác giả:

Subject:

Author: Nguyen Duc Du

Keywords: Comments:

Creation Date: 12/12/2008 9:15 PM

Change Number: 4

Last Saved On: 12/15/2008 9:50 AM

Last Saved By: Nguyen Duc Du

Total Editing Time: 25 Minutes

Last Printed On: 1/14/2004 9:54 AM

As of Last Complete Printing Number of Pages:

Number of Words: 53 (approx.)

(100)

[1] PGS.TS Phạm Văn Ất

K thut lp trình C, cơ s nâng cao

Nhà xuất bản Khoa học Kỹ thuật

[2] Robert Sedgewick

Cm nang thut toán (bn dch), tp

Nhà xuất bản Khoa học kỹ thuật

Ngày đăng: 24/05/2021, 16:39

Tài liệu cùng người dùng

Tài liệu liên quan