ữ ậ

I THI U ả

c

GI Ngôn ng l p trình C là môn l p trình căn b n. Nó là môn h c b n l ẽ ọ

ọ ả ề ế ữ ậ cho các môn h c có ọ ngôn ứ ọ ượ ở

liên quan đ n l p trình c a sinh viên s h c sau này. Vì v y nh ng ki n th c h c đ ế ậ ng C là c n thi ế ầ H c xong môn này, sinh viên c n n m đ c v n đ sau: ủ t cho sinh viên. ầ ượ ấ ữ ọ ề

ệ ệ

ổ ữ

ế ế ượ ạ

ử ụ ể ả ọ ứ ọ

Đ h c t t môn L p trình C, sinh viên ph i có ki n th c n n t ng sau: ắ - Khái ni m v ngôn ng l p trình. ữ ậ ề - Khái ni m v ki u d li u. ề ể ữ ệ - T ng quan v ngôn ng C. ề - Các ki u d li u trong C. ể ữ ệ - Các l nh có c u trúc. ấ ệ t k và s d ng các hàm trong C. - Cách thi c dùng đ gi ng d y cho các sinh viên sau: Môn l p trình C đ ậ - Sinh viên năm th 1, h c kỳ 2 chuyên ngành Tin h c. ứ ề ả ế ả ể ọ ố

c c u trúc 2 ph n: ậ - Ki n th c toán h c. ứ - Ki n th c và k năng thao tác trên máy tính. ứ ng 120 ti ỹ t (30 lý thuy t +90 th c hành), giáo trình đ ự ế ượ ấ ầ ế

ế ế ờ ượ NG 1: CÁC KHÁI NI M C B N. ớ

ể ệ ề ệ Ệ Ơ Ả ữ ế

t ch ng trình ươ ế

Ề ƯƠ ng trình và các thao tác vi ổ NG 2: CÁC CÂU L NH ĐI U KHI N Ệ Ể

ề ố

ắ Ể Ữ Ệ Ở Ộ

Ầ ƯƠ Ấ

NG 4: KI U D LI U CÓ C U TRÚC ữ ệ ữ ệ

Trong th i l CH ƯƠ i thi u v ngôn ng C Bài 1: Gi Bài 2: Khái ni m v h ng, bi n, hàm, bi u th c ứ ề ằ Bài 3: T ng quát v ch ề ươ CH ẽ nhánh Bài 1: Câu l nh r ệ Bài 2: Câu l nh l p ặ ệ CH M NG 3: HÀ ƯƠ Bài 1: Hàm Bài 2: Các nguyên t c truy n tham s PH N B: CÁC KI U D LI U M R NG CH Ể Ữ Ệ Bài 1: D li u ki u m ng ả ể Bài 3: D li u ki u b n ghi struct ả ể Bài 4: Danh sách móc n i LIFO ố Bài 5: Danh sách móc n i FIFO ố Bài 6: D u li u ki u t p ể ệ ữ ệ

M C L C Ụ Ụ

6 Ổ Ề

i thi u v ngôn ng C 6 PH N A: T NG QUAN V NGÔN NG C Ầ Ữ NG 1: CÁC KHÁI NI M C B N. CH Ệ Ơ Ả ƯƠ Bài 1: Gi ữ ớ ệ ề

và nh ng quy đ nh c a C ủ ng dùng

ử ụ ị ườ ặ ữ khoá th ừ ị

9 ế

ằ ế

t ch ng trình 26 ươ ổ ế

ươ ổ ộ ố

ƯƠ ng trình Ể ng trình c t ch ế Ề ng trình và các thao tác vi ươ ớ NG 2: CÁC CÂU L NH ĐI U KHI N Ệ

29 30 ẽ

ệ ệ

39 ệ

M 55

64 ề ắ ố

ng)

ế ị ế

71

Ể Ữ Ệ Ở Ộ Ấ ƯƠ

: CÁC KI U D LI U M R NG Ể Ữ Ệ ả ể

1.1. B ký t ự ộ 1.2. Tìm hi u các t ể 1.3. Khái ni m và quy đ nh đ t tên s d ng ệ 1.4. L i chú thích ờ 1.5. Ki u d li u ể ữ ệ Bài 2: Khái ni m v h ng, bi n, hàm, bi u th c ể ứ ề ằ ệ 2.1. Khái ni m h ng và cách khai báo h ng ệ ằ 2.2. Khái ni m bi n và cách khai báo bi n ệ ế 2.3. Bi u th c, phép toán ứ 2.4 .Các hàm vào ra chu nẩ Bài 3: T ng quát v ch ề ươ 3.1. T ng quát c a m t ch ủ ộ 3.2. M t s qui t c c n nh khi vi ắ ầ CH Bài 1: Câu l nh r nhánh ệ 1.1. L nh if-else 1.2. L nh else-if 1.3. Câu l nh switch ệ Bài 2: Câu l nh l p ặ 2.1. Câu l nh goto, break, continue ệ 2.2. Vòng l p for ặ 2.3. Vòng l p while ặ 2.4. Vòng l p do …while ặ NG 3: HÀ CH ƯƠ Bài 1: Hàm 1.1. Khái ni m v hàm ệ 1.2. Cách khai báo hàm 1.3. G i hàmọ 1.4. Hàm không cho các giá trị 1.5. Hàm đ quyệ Bài 2: Các nguyên t c truy n tham s 2.1. Bi n toàn c c ụ ế 2.2. Bi n c c b (bi n đ a ph ế ụ ộ ươ 2.3. Bi n đ a ch , bi n con tr ỏ ỉ ị ế 2.4. Cách truy n tham s cho hàm ề H C TRÌNH 4,5 Ọ NG 4: KI U D LI U CÓ C U TRÚC CH Bài 1: D li u ki u m ng ữ ệ 1.1. M ng m t chi u ộ ề 1.2. M ng nhi u chi u ề ề ả ả

84 ự ỏ ể ữ ệ

88 ữ ệ

ị ể ấ

ầ ấ

ị ỉ ấ ỏ ấ

100

ị ạ ớ

c a danh sách t c các ph n t ấ ả

107 ố

ị ạ ớ

c a danh sách t c các ph n t ấ ả

ầ ử ủ ỏ ộ ấ

109

ng dùng khi thao tác trên t p 1.3. M ng con tr ả Bài 2: D li u ki u xâu ký t 2.1. Khái ni mệ 2.2. Khai báo 2.3. Các thao tác trên xâu ký tự Bài 3: D li u ki u b n ghi struct ả ể 3.1. Khai báo ki u d li u c u trúc (b n ghi) ể ữ ệ ấ 3.2. Khai báo theo m t ki u c u trúc đã đ nh nghĩa. ộ 3.3. Truy nh p đ n các thành ph n c u trúc ậ ế 3.4. M ng c u trúc ấ ả 3.5. Kh i đ u m t c u trúc ộ ấ ở ầ 3.6. Phép gán c u trúc 3.7. Con tr c u trúc và đ a ch c u trúc Bài 4: Danh sách móc n i ố LIFO 4.1 Đ nh nghĩa và khai báo bi n con tr . ỏ ế 4.2. T o danh sách m i 4.3. Duy t qua t ầ ử ủ ệ 4.4. Lo i m t c u trúc ra kh i danh sách ỏ ộ ấ ạ 4.5. B sung ho c chèn m t c u trúc vào danh sách ộ ấ ặ ổ Bài 5: Danh sách móc n i FIFO 4.1. Đ nh nghĩa và khai báo bi n con tr . ỏ ế 4.2. T o danh sách m i 4.3. Duy t qua t ệ 4.4. Lo i m t c u trúc ra kh i danh sách ộ ấ ạ 4.5. B sung ho c chèn m t c u trúc vào danh sách ặ ổ Bài 6: Dữ li u ki u t p ể ệ ệ 6.1. Khái ni m v t p tin ề ệ ệ 6.2. Khai báo s d ng t p - m t s hàm th ệ ộ ố ử ụ ườ ệ

Ch

ng 1

ươ

CÁC KHÁI NI M C B N Ơ Ả Ệ

Trong ch ng này s gi i thi u nh ng thành ph n c b n c a ngôn ng l p trình C đó là: ươ ẽ ớ ầ ơ ả ủ ữ ậ ữ ệ

ng trình đ y đ , s trình bày đôi đi u v b ký t ộ , t ự ừ khoá và tên. Đ có th l p đ ể ể ậ ượ c m t ch ộ ươ ầ ủ ẽ ề ề

câu l nh gán, các câu l nh vào ra, toán t #include và nh ng qui t c c n l u ý khi vi t ch ệ ệ ử ắ ầ ư ữ ế ươ ng

trình.

NG PHÁP L P TRÌNH BÀI 1: NGÔN NG L P TRÌNH VÀ PH Ữ Ậ ƯƠ Ậ

1.1. NGÔN NG Ữ LẬP TRÌNH (PROGRAMMING LANGUAGE)

Phần này chúng ta sẽ tìm hiểu một s khái n ố iệm căn b nả về thuật toán, chư ngơ trình,

ngôn ng l p trình. Thu rong ữ ậ ật ng "thữ uật giải" và "thuật toán" dĩ nhiên có s khác nhau song t ự

nhiều tr ngườ hợp chúng có cùng nghĩa.

1.1.1. Thuật giải (Algorithm)

Là một dãy các thao tác xác đ nhị trên một đối tượng, sao cho sau khi thực hiện một số

c thì hữu hạn các b ướ đ t ạ đư c ợ mục tiêu. Theo R.A.Kowalski thì b n cả hất của thuật giải: Thuật

giải = Logic + Điều khiển

* Logic: Đây là phần khá quan trọng, nó trả l iờ câu hỏi "Thuật giải làm gì, giải

quyết vấn đ ề gì?", nh ng ữ yếu t ố trong bài toán có quan h ệ v i ớ nhau nh ư thế

nào v.v… Ở đây bao gồm những kiến thức chuyên môn mà bạn ph iả biết để có thể

tiến hành giải bài toán.

Ví dụ : Để giải một bài toán tính diện tích hình cầu, mà bạn không còn nhớ công thức tính

hình cầu thì bạn không thể viết chương trình cho máy đ giể ải bài toán này đư c.ợ

* Điều khiển: Thành phần này trả l iờ câu hỏi: giải thuật phải làm như thế nào?. Chính là

cách thức ti n hế ành áp dụng thành phần logic đ giể ải quyết vấn đ .ề

1.1.2. Chương trình (Program)

Là một t pậ hợp các mô tả, các phát biểu, nằm trong một hệ thống qui cướ về ý nghĩa và

th t ứ ự thực hiện, nhằm điều khiển máy tính làm việc. Theo Niklaus Wirth thì:

Chương trình = Thuật toán + Cấu trúc d liữ ệu

đ u có c Các thuật toán và chư ng trình ơ ề ấu trúc dựa trên 3 c ấ u trúc đ i ề u kh iể n

n : cơ bả

* Tuần tự (Sequential): Các bước thực hiện tuần tự một cách chính xác từ trên xuống,

mỗi b cướ ch tỉ hực hiện đúng một lần.

* Chọn lọc (Selection): Chọn 1 trong 2 hay nhiều thao tác đ tể hực hiện.

* Lặp lại (Repetition): Một hay nhiều b cướ đư c tợ hực hiện lặp lại một s lố ần.

Muốn trở thành lập trình viên chuyên nghiệp bạn hãy làm đúng trình tự để có thói quen tốt

và thuận lợi sau này trên nhiều mặt của một người làm máy tính. Bạn hãy làm theo các bước sau:

i (trên g Tìm, xây dựng thuật gi ả iấy) fi viết chư ng trình trên máy ơ

fi d ch ch fi ị ư ng trình ơ chạy và th cử hương trình

1.1.3. Ngôn ng ữ lập trình (Programming language)

Ngôn ngữ lập trình là hệ thống các ký hiệu tuân theo các qui ư cớ về ngữ pháp và ngữ

nghĩa, dùng để xây dựng thành các chương trình cho máy tính.

Một chương trình được viết bằng một ngôn ngữ lập trình cụ thể (ví dụ Pascal, C…)

gọi là chư ng ơ trình nguồn, chư ng ơ trình d ch ị làm nhiệm v ụ d ch ị chư ng ơ trình nguồn

c trên máy tính. thành chương trình thực thi đ ượ

1.2. CÁC B

C L P TRÌNH

ƯỚ Ậ

đ nh các B cướ 1: Phân tích vấn đ và xác ề ị đ cặ điểm. (xác đ nh I-P-O) ị

B cướ 2: Lập ra giải pháp. (đưa ra thuật gi i)ả

B cướ 3: Cài đ t. (vi ặ ết chư ng trình) ơ

B cướ 4: Chạy th ử chư ng trình. ( ơ d ch ch ị ương trình)

B cướ 5: Kiểm ch nứ g và hoàn thiện chương trình. (thử nghiệm bằng nhiều số liệu

và đánh giá)

1.3. K THỸ UẬT L P TRÌNH Ậ

1.3.1. I-P-O Cycle (Input-Pprocess-Output Cycle) (Quy trình nhập-x lý-xu ử ất)

Quy trình x lý c ơ bản của máy tính gồm I-P-O. ử

Input Output

Ví d ụ 2 : Xác đ nh ị Input, Process, Output của việc làm 1 ly n cướ chanh nóng

chanh, nước nóng, muỗng. Inp Pro chanh, nước nóng

ly, đư ng,ờ - cho hỗn h pợ đư ng,ờ - dùng muỗng khuấy đ u.ề ly chanh nóng đã sẵn sàng đ dùng. ể

Out Ví 3 : Xác đ nh dụ ị Input, Process, Output của chương trình tính tiền lương

ng căn công nhân tháng 10/2002 biết r nằ g lương = l ươ b nả * ngày công

ng căn b n,ả ngày công

Inp Pro Out Ví Input, Process, Output của chương trình giải phư ngơ trình dụ l ươ nhân lư nơ g căn b nả với ngày lương 4 : Xác đ nhị

bậc nhất ax + b = 0

hệ s a,ố chia – b nghiệm nươ g trình tìm số lớn nhất của 2 Inp Pro Out Ví d ụ 5: Xác định Input, Process, Output của ch

số a và b.

Inp Pro a, b Nếu a > b thì Output = a l nớ

cess nhất Ng c l i ượ ạ Output = b l nớ

nhất

WCHART) 1.3.2. S Ử D NỤ G L U Ư Đ (FLO Ồ

Để dễ h nơ về quy trình xử lý, các nhà lập trình đ aư ra dạng lưu đồ để minh họa t ngừ

bư cớ quá trình x ử lý một vấn đ (bài toán). ề

 Bài tập

1. Xác đ nh Input, Process, Output c sau: ị ủa các chư ng trình ơ

a. Đổi t tiừ ền VND sang tiền USD.

b. Tính điểm trung bình của học sinh gồm các môn Toán, Lý, Hóa.

c. Giải phư ngơ trình bậc 2: ax2 + bx + c = 0

radian sang d. Đổi t ừ đ sang r ộ adian và đổi t ừ độ

/p (công thức a = a/180, v i ớ a : radian, a: độ)

e. Kiểm tra 2 s a, b g ố iống nhau hay khác nhau.

sau: 2. Vẽ l uư đ cho các c ồ hư ng trình ơ

a. Đổi t tiừ ền VND sang tiền USD.

b. Tính điểm trung bình của học sinh gồm các môn Toán, Lý, Hóa.

c. Giải phư ngơ trình bậc 2: ax2 + bx + c = 0

radian sang d. Đổi t ừ đ sang r ộ adian và đổi t ừ độ

/p (công thức a = a/180, v i ớ a : radian, a: độ)

BÀI 2: CÁC THÀNH PH N C B N TRONG NGÔN NG C Ầ Ơ Ả Ữ

1.1. B KÝ T VÀ NH NG QUY Đ NH C A C Ữ

c xây d ng t m t b ký t nào đó. Các ký t c nhóm M i ngôn ng l p trình đ u đ ữ ậ ề ượ ọ ự ừ ộ ộ ự đ ự ượ

i theo nhi u cách khác nhau đ t o nên các t . Các t l c liên k t v i nhau theo m t qui l ạ ể ạ ề ừ i đ ừ ạ ượ ế ớ ộ

t c nào đó đ t o nên các câu l nh. M t ch ắ ể ạ ệ ộ ươ ộ ng trình bao g m nhi u câu l nh và th hi n m t ể ệ ề ệ ồ

thu t toán đ gi i m t bài toán nào đó. Ngôn ng C đ c xây d ng trên b ký t sau: ể ả ậ ữ ộ ượ ự ộ ự

26 ch cái hoa: A B C .. Z ữ

ng 26 ch cái th ữ ườ : a b c .. z

10 ch sữ ố: 0 1 2 .. 9

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

Ký t g ch n i ự ạ ố : _

Các ký t khác : . , : ; [ ] {} ! \ & % # $ ... ự

D u cách (space) dùng đ tách các t . Ví d ch VIET NAM có 8 ký t , còn VIETNAM ể ấ ừ ụ ữ ự

ch có 7 ký t ỉ . ự

Chú ý : - Khi vi t ch ng trình, ta không đ c s d ng b t kỳ ký t nào khác ngoài các ký ế ươ ượ ử ụ ấ ự

2 +bx+c = 0, ta c n tính bi

ng trình gi i ph t ự trên. (Ví d nh khi l p ch ụ ư ậ ươ ả ươ ng trình b c hai ax ậ ầ ệ t

D th c Delta = b2 - 4ac, trong ngôn ng C không đ c phép dùng ký t , vì v y ta ph i dùng ký ứ ữ ượ ậ ả ự D

hi u có ý nghĩa khác đ thay th ). ế ể ệ

t ch hoa ch th ng. - Ngôn ng C phân bi ữ ệ ữ ườ ữ

1.2 TÌM HI U CÁC T KHOÁ TH

NG DÙNG

ƯỜ

T khoá là nh ng t c s d ng đ khai báo các ki u d li u, đ vi đ t các toán t ữ ừ ừ ượ ử ụ ể ữ ệ ể ế ể ử và

các câu l nh. ệ

khoá thông th ng B ngả 1.1. Các t ừ ườ

asm break case cdecl

char const continue defaul

t

do double else enum

extern far float for

goto huge if int

interrupt long near pascal

register return short signed

sizeof static struct switch

tipedef union unsigned void

volatile while

Chú ý :

- Không đ c dùng các t khoá đ đ t tên cho các h ng, bi n, m ng, hàm ... ượ ừ ể ặ ế ả ằ

- T khoá ph i đ c vi t b ng ch th ng (ví d : vi khoá khai báo ki u nguyên là ả ượ ừ ế ằ ữ ườ ụ t t ế ừ ể

int ch không ph i là INT). ứ ả

1.3. NGUYÊN T C Đ A CHÚ THÍCH

Ư

Các l

i gi i thích có th đ a vào ng trình ờ ả ể ư ở ấ b t kỳ ch nào c a ch ỗ ủ ươ ng trình đ cho ch ể ươ

ng trình. N i dung d hi u, d đ c h n mà không làm nh h ễ ể ễ ọ ơ ả ưở ng đ n các ph n khác trong ch ầ ế ươ ộ

i gi i thích đ c a l ủ ờ ả ượ ặ c đ t gi a hai d u /* N i dung */. ấ ữ ộ

Ví d :ụ

#include "stdio.h"

main()

{printf(“\n Chao ban da den voi ngon ngu lap trinh c”); /* \n xu ng dòng*/ ố

printf(“\n Ngon ngu lap trình C xin lam theo nhung gi ma chu nhan ra lenh”);

printf(“\n Chu nhan ma hieu nhieu ve Toi thi se ra lenh duoc toi lam viec day”);

printf(“\n Chuc cac ban thanh cong”);

getch(); /* T m d ng máy đ xem k t qu */ ừ ế ể ả ạ

}

1.4. KI U D LI U

Ữ Ệ

Trong C s d ng các các ki u d li u sau : ể ữ ệ ử ụ

1.4.1. Ki u ký t

(char)

M t giá tr ki u char chi m 1 byte (8 bit) và ị ể ế ộ

B ng 1.2. Bi u di n m t ký t ễ ể ả ộ ự thông qua b ng mã ASCII. ả

Mã ASCII Mã ASCII Ký tự Ký tự

B 066 0 048

a 097 1 049

b 098 2 050

A 065

Có hai ki u d li u char : ki u signed char và unsigned char. ể ữ ệ ể

S ký t Kí Ki uể ể Ph m vi bi u ạ ố ự

ch di nễ

th cướ

Char ( Signed char ) 256 1 -128 đ n 127 ế

byte

Unsigned char 256 1 0 đ n 255 ế

byte

Phân lo i ký t : ạ ự

Có th chia 256 ký t làm ba nhóm: ể ự

Nhóm 1: Nhóm các ký t mã 13 dùng đ ự ề đi u khi n có mã t ể ừ 0 đ n 31. Ch ng h n ký t ẳ ế ạ ự ể

10 chuy n con tr xu ng dòng d i (trên cùng m t c t). Các chuy n con tr v đ u dòng, ký t ỏ ề ầ ể ự ỏ ố ể ướ ộ ộ

ký t nhóm này nói chung không hi n th ra màn hình. ự ể ị

Nhóm 2: Nhóm các ký t văn b n có mã t 32 đ n 126. Các ký t này có th đ c đ a ra ự ả ừ ế ự ể ượ ư

màn hình ho c máy in. ặ

Nhóm 3: Nhóm các ký t đ ho có mã s t 127 đ n 255. Các ký t này có th đ a ra ự ồ ố ừ ạ ế ự ể ư

màn hình nh ng không in ra đ c. ư ượ

1.4.2. Ki u nguyên ể

ấ Cho phép s d ng s nguyên ki u int, s nguyên dài ki u long và s nguyên không d u ử ụ ể ể ố ố ố

ki u unsigned. ể

B ng 1.3. Kích c và ph m vi bi u di n c a các ki u s nguyên ể ễ ủ ể ố ả ạ ỡ

Kích Ki uể Ph m vi bi u di n ễ ể ạ

th cướ

int 2 byte -32768 đ n 32767 ế

unsigned 0 đ n 65535 2 byte ế

int

long 4 byte -2147483648 đ nế

2147483647

unsigned 0 đ n 4294967295 4 byte ế

long

Chú ý:

Ki u ký t ể ự cũng có th xem là m t d ng c a ki u nguyên. ộ ạ ủ ể ể

1.4.3. Ki u d u ph y đ ng ể ấ ẩ ộ

Cho phép s d ng ba lo i d li u d u ph y đ ng, đó là float, double và long double. ẩ ạ ữ ệ ấ ử ụ ộ

B ng 1.4. Kích c và ph m vi bi u di n c a chúng đ c ch ra trong b ng d i đây : ễ ủ ể ả ạ ỡ ượ ả ỉ ướ

S ch s ố ữ ố Kích Ki uể Ph m vi bi u di n ễ ể ạ th cướ có nghĩa

Float 4 byte 3.4E-38 đ n 3.4E+38 ế 7 đ n 8ế

8 byte 1.7E-308 đ nế 15 đ n 16ế Double 1.7E+308

long 10 byte 3.4E-4932 đ nế 17 đ n 18ế

double 1.1E4932

Gi i thích : ả

Máy tính có th l u tr đ c các s ki u float có giá tr tuy t đ i t ể ư ữ ượ ệ ố ừ ố ể ị ế 3.4E-38 đ n

3.4E+38. Các s có giá tr tuy t đ i nh h n 3.4E-38 đ ệ ố ỏ ơ ố ị ượ ễ ủ c xem b ng 0. Ph m vi bi u di n c a ạ ể ằ

c hi u theo nghĩa t ng t s double đ ố ượ ể ươ . ự

1.5. TÊN VÀ H NGẰ

1.5.1. TÊN

Tên là m t dãy các ký t c dùng đ xác đ nh các ộ ự bao g m ch cái, s và g ch n i và nó đ ố ữ ạ ồ ố ượ ể ị

ng khác nhau trong m t ch đ i l ạ ượ ộ ươ ng trình (nh tên h ng, tên bi n, tên m ng, tên hàm, tên con ế ư ả ằ

tr , tên t p, tên c u trúc, tên nhãn, ...) ấ ệ ỏ

Tên đ c đ t theo qui t c sau: ượ ặ ắ

- Ký t đ u tiên c a tên ph i là ch cái ho c d u g ch n i. ự ầ ặ ấ ạ ủ ữ ả ố

- Tên không đ ượ c trùng v i khoá. ớ

- Đ dài c c đ i c a tên theo m c đ nh là 32 ự ạ ủ ặ ị ộ

Ví d :ụ

Các tên đúng: a_1 delta x1 _step GAMA

Các tên sai :

3MN Ký t đ u tiên là s ự ầ ố

m#2 S d ng ký t # ử ụ ự

f(x) S d ng các d u ( ) ử ụ ấ

do Trùng v i t khoá ớ ừ

te ta S d ng d u tr ng ử ụ ắ ấ

Y-3 S d ng d u - ử ụ ấ

Chú ý :

Trong C thì tên b ng ch th ng và ch hoa là khác nhau (ví d tên AB khác v i ab). ữ ườ ằ ữ ụ ớ

Thông th ng dùng ch hoa đ đ t tên cho các h ng và dùng ch th ng đ đ t tên cho ườ ể ặ ữ ườ ữ ằ ể ặ

h u h t cho các đ i l ầ ế ạ ượ ả ng khác nh bi n, bi n m ng, hàm, c u trúc. Tuy nhiên đây không ph i ư ế ế ả ấ

là đi u b t bu c. ề ắ ộ

1.5.2. H NGẰ

.

H ng là đ i l ng mà giá tr c a nó không thay đ i trong quá trình tính toán ạ ượ ằ ị ủ ổ

1.5.2.1. Khai báo h ng ằ

Đ khai báo tên m t h ng, ta dùng dòng l nh sau: ộ ằ ệ ể

#define ằ ị

Ví d 1:ụ

#define MAX 1000

Lúc này, t t c các tên MAX trong ch ấ ả ươ ng trình xu t hi n sau này đ u đ ệ ề ượ ấ ằ c thay b ng

1000. Vì v y, ta th ng g i MAX là tên h ng, nó bi u di n s 1000. ậ ườ ễ ố ể ằ ọ

Ví d 2:ụ

#define PI 3.141593

Đ t tên cho m t h ng float là PI có giá tr là 3.141593. ộ ằ ặ ị

1.5.2.2. Các lo i h ng ạ ằ

a. H ng th c ự ( float và double ): có 2 cách vi ằ tế

- Cách 1: (d ng th p phân) s g m: ph n nguyên, d u ch m th p phân và ph n phân. ố ồ ấ ấ ậ ầ ầ ạ ậ

* Ví d : 214.35 , - 234.34, 234.0 ụ

- Cách 2: Vi t theo d ng khoa h c: ph n đ nh tr (s nguyên ho c s th c), e (E), ph n b c. ế ặ ố ự ị ố ầ ậ ầ ạ ọ ị

* Ví d : 1.543e7 = 15430000 ụ

123.456E-4=0.0123456

0.12e3=120.0

-49.5E-2=-0.495

b. H ng int ằ

H ng int là s nguyên có giá tr trong kho ng t ả ằ ố ị ừ -32768 đ n 32767. ế

Ví d :ụ

#define number1 Đ nh nghiã h ng int number1 có giá tr là ằ ị ị

-50 -50

Chú ý :

C n phân bi t hai h ng 5056 và 5056.0: ầ ệ ằ ở ự đây 5056 là s nguyên còn 5056.0 là h ng th c ằ ố

(d u ph y đ ng). ẩ ấ ộ

c. H ng long ằ

H ng long là s nguyên có giá tr trong kho ng t ả ằ ố ị ừ -2147483648 đ n 2147483647. ế

H ng long đ c vi t theo cách : 1234L ho c 1234l (thêm L ho c l vào đuôi) ằ ượ ế ặ ặ

M t s nguyên v t ra ngoài mi n xác đ nh c a int cũng đ c xem là long. ộ ố ượ ủ ề ị ượ

Ví d : ụ

#define sl Đ nh nghiã h ng long sl có giá tr là ằ ị ị

8865056L 8865056

#define sl 8865056 Đ nh nghiã h ng long sl có giá tr là ằ ị ị

8865056

d. H ng int h 8. ệ ằ

H ng int h 8 đ c vi t theo cách 0c1c2c3.... ng trong ệ ằ ượ ế Ở đây ci là m t s nguyên d ộ ố ươ

1 đ n 7. H ng int h 8 luôn luôn nh n giá tr d ng. kho ng t ả ừ ị ươ ệ ế ậ ằ

Ví d : ụ

#define h8 Đ nh nghiã h ng int h 8 có giá tr là ệ ằ ị ị

0345 3*8*8+4*8+5=229

e. H ng int h 16 ệ ằ

Trong h này ta s d ng 16 ký t : 0,1..,9,A,B,C,D,E,F. ử ụ ệ ự

Cách vi Cách vi tế Giá trị tế Giá trị

10 13 a ho c Aặ d ho c Dặ

11 14 b ho c Bặ e ho c Eặ

12 15 c ho c Cặ f ho c Fặ

H ng s h 16 có d ng 0xc1c2c3... ho c 0Xc1c2c3... ci là m t s trong h 16. ặ ộ ố ố ệ ệ ằ ạ

Ví d : ụ

#define h16 0xa5

#define h16 0xA5

#define h16 0Xa5

#define h16 0XA5

Cho ta h ng s h16 trong h 16 có giá tr nh nhau. Giá tr c a chúng trong h 10 là : ị ư ị ủ ệ ệ ắ ố

10*16+5=165.

f. H ng ký t ằ ự

H ng ký t riêng bi c vi t trong hai d u nháy đ n, ví d 'a'. ằ ự là m t ký t ộ ự t đ ệ ượ ế ụ ấ ơ

Giá tr c a 'a' chính là mã ASCII c a ch a. Nh v y giá tr c a 'a' là 97. H ng ký t có th ư ậ ị ủ ị ủ ữ ủ ằ ự ể

tham gia vào các phép toán nh m i s nguyên khác. ư ọ ố Ví d :ụ

Ví d :ụ

'9'-'0'=57-48=9

#define kt 'a' Đ nh nghĩa h ng ký t kt có giá tr là 97 ằ ị ự ị

H ng ký t còn có th đ c vi ằ ự ể ượ ế ộ ố ệ t theo cách sau: ' \c1c2c3'. Trong đó c1c2c3 là m t s h 8

mà giá tr c a nó b ng mã ASCII c a ký t ị ủ ủ ằ ự ầ c n bi u di n. ể ễ

'a' có th vi Ví d : ch a có mã h 10 là 97, đ i ra h 8 là 0141. V y h ng ký t ổ ụ ữ ệ ệ ằ ậ ự ể ế ướ i t d

đ c bi t ta c n s d ng cách vi t sau ( thêm d u \ ) : d ng '\141'. Đ i v i m t vài h ng ký t ạ ố ớ ằ ộ ự ặ ệ ầ ử ụ ế ấ

Cách Ký tự

vi tế

'\'' '

'\"' "

'\\' \

'\n' \n (chuy n dòng ) ể

'\0' \0 ( null )

'\t' Tab

'\b' Backspace

'\r' CR ( v đ u dòng ) ề ầ

'\f' LF ( sang trang )

Chú ý :

C n phân bi t h ng ký t '0' và '\0'. H ng '0' ng v i ch s 0 có mã ASCII là 48, còn ầ ệ ằ ự ữ ố ứ ằ ớ

\0 ( th ng g i là ký t null ) có mã ASCII là 0. h ng '\0' ng v i ký t ứ ằ ớ ự ườ ọ ự

H ng ký t ằ ự ự ự ể ể th c s là m t s nguyên, vì v y có th dùng các s nguyên h 10 đ bi u ộ ố ể ệ ậ ố

di n các ký t , ví d l nh printf("%c%c",65,66) s in ra AB. ễ ự ụ ệ ẽ

g. H ng xâu ký t ằ ự

H ng xâu ký t là m t dãy ký t b t kỳ đ t trong hai d u nháy kép. ằ ự ộ ự ấ ặ ấ

Ví d :ụ

#define xau1 "Ha noi"

#define xau2 "My name is Huy"

Xâu ký t c l u tr trong máy d đ i d ng m t m ng có các ph n t là các ký t riêng ự ượ ư ữ ướ ạ ầ ử ả ộ ự

bi t. Trình biên d ch t đ ng thêm ký t \0 đ ệ ị ự ộ ự null \0 vào cu i m i xâu ( ký t ố ỗ ự ượ ấ c xem là d u

). hi u k t thúc c a m t xâu ký t ủ ệ ế ộ ự

Chú ý :

C n phân bi t hai h ng 'a' và "a". 'a' là h ng ký t c l u tr trong 1 byte, còn "a" là đ ầ ệ ằ ằ ự ượ ư ữ

c l u tr trong 1 m ng hai ph n t đ : ph n t h ng xâu ký t ằ ự ượ ư ầ ử ữ ả ầ ử ứ ấ ầ th nh t ch a ch a còn ph n ứ ữ

th hai ch a \0. t ử ứ ứ

1.6. BI N VÀ BI U TH C

1.6.1. BI NẾ

Bi n là m t đ i l ng đ c ng ộ ạ ượ ế ượ ườ ậ i l p trình đ nh nghĩa và đ ị ượ ặ ệ c đ t tên thông qua vi c

khai báo bi n. Bi n dùng đ ch a d li u trong quá trình th c hi n ch ể ứ ữ ệ ự ệ ế ế ươ ị ủ ng trình và giá tr c a

bi n có th b thay đ i trong quá trình này. Cách đ t tên bi n gi ng nh cách đ t tên đã nói trong ể ị ư ế ế ặ ặ ổ ố

ph n trên. ầ

1.6.1.1. Khai báo bi nế

c khai báo tr c khi đ a vào s d ng. Vi c khai báo bi n đ M i bi n c n ph i đ ế ầ ả ượ ỗ ướ ử ụ ế ượ c ư ệ

th c hi n theo m u sau : ự ệ ẫ

; ế ể ữ ệ ủ ế

Chú ý: gi a các bi n ph i s d ng d u (,) đ ngăn cách. ả ử ụ ữ ể ế ấ

Ví d :ụ

m

a

i

n

(

)

{

int a, b, c; /*Khai báo ba bi n a, b, c ki u int */ ế ể

long dai, mn; /*Khai báo hai bi n dai, mn ki u long*/ ế ể

char kt1, kt2; /*Khai báo hai bi n kt1, kt2 ki u char*/ ể ế

float x, y /*Khai báo hai bi n x, y ki u float */ ế ể

double ca1, ca2; /*Khai báo hai bi n ca1, ca2 ki u double */ ể ế

}

Bi n ki u int ch nh n đ c các giá tr ki u int. Các bi n khác cũng có ý nghĩa t ng t ỉ ậ ượ ể ế ị ể ế ươ ự .

Các bi n ki u char ch ch a đ . Đ l u tr đ c m t xâu ký t ỉ ứ ượ ế ể c m t ký t ộ ự ể ư ữ ượ ộ ự ầ ử ụ ộ c n s d ng m t

m ng ki u char. ể ả

1.6.1.2.V trí c a khai báo bi n ủ ế ị

Các khai báo c n ph i đ c đ t ngay sau d u ả ượ ặ ầ ứ ấ { đ u tiên c a thân hàm và c n đ ng ủ ầ ầ

tr c m i câu l nh khác . ướ ọ ệ

int main()

{

; ế ể ữ ệ ủ ế

……..

}

Ví d :ụ

main()

{

int a,b,c;

a=2;

int d; /* V trí c a khai báo sai */ ủ ị

…. .

}

1.6.1.3. Kh i đ u cho bi n ở ầ ế

N u trong khai báo ế ngay sau tên bi n ta đ t d u = và m t giá tr nào đó thì đây chính là 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=-55.2, x=27.23, y, z, t=18.98;

Vi c kh i đ u và vi c khai báo bi n r i gán giá tr cho nó sau này là hoàn toàn t ế ồ ở ầ ệ ệ ị ươ ng

đ ng. ươ

1.6.1.4. L y đ a ch c a bi n ấ ị ỉ ủ ế

M i bi n đ ế ượ ấ ầ c c p phát m t vùng nh g m m t s byte liên ti p. S hi u c a byte đ u ố ệ ủ ộ ố ớ ồ ế ộ ỗ

chính là đ a ch c a bi n. Đ a ch c a bi n s đ ế ế ẽ ượ ử ụ ứ c s d ng trong m t s hàm ta s nghiên c u ộ ố ỉ ủ ỉ ủ ẽ ị ị

sau này (ví d nh hàm scanf ). ụ ư

Đ l y đ a ch c a m t bi n ta s d ng phép toán: ế ử ụ ể ấ ỉ ủ ộ ị & tên bi nế

Ví d :ụ

void main()

{

int x;

float r;

prinft(“\nnh p x=”); scanf(“%d”,&x); ậ

prinft(“\nnh p r=”); scanf(“%f”,&r); ậ

getch();

}

1.6.1. BI U TH C Ể Ứ

1.6.1.1. Phép toán s h c ố ọ

Phé Ý nghĩa Ví dụ p toán

a+b + Phép c ngộ

a-b - Phép trừ

Phép nhân a*b *

a/b Phép chia / (Chia s nguyên s ố ẽ l y ph n nguyên ấ ầ ch t ph n th p phân ) ặ ậ ầ

Phép chia a%b

l y ph n d ấ ầ ư % ầ ư ủ (Cho ph n d c a

phép chia a cho b )

Ví d 1ụ :

11/3=3

11%3=2

-(2+6)=-8

Th t u tiên : Các phép toán + và - có cùng th t u tiên, có th t u tiên nh h n các ứ ự ư ứ ự ư ứ ự ư ỏ ơ

phép * , / , % và c ba phép này l i có th t u tiên nh h n phép tr m t ngôi. ả ạ ứ ự ư ừ ộ ỏ ơ

Các phép toán s h c đ c th c hi n t trái sang ph i. ố ọ ượ ệ ừ ự ả

Phé Ý nghiã Ví dụ p toán

a>b So sánh l nớ > h nơ 4>5 có giá tr 0ị

a>=b So sánh l nớ >= h n ho c b ng ơ ặ ằ 6>=2 có giá tr 1ị

a

a<=b So sánh nhỏ <= h n ho c b ng ơ ặ ằ 8<=5 có giá tr 0ị

a==b So sánh b ngằ == nhau 6==6 có giá tr 1ị

a!=b So sánh khác != nhau 9!=9 có giá tr 0ị

1.6.1.2. Phép quan hệ

Th t u tiên: > , >= , < , <= == , != ứ ự ư

K t qu c a phép toán quan h là s nguyên ki u int, b ng 1 n u đúng, b ng 0 n u sai. ả ủ ệ ế ế ế ể ằ ằ ố

c s d ng là s còn đ Phép toán quan h ngoài toán h ng đ ệ ạ ượ ử ụ ố ượ ử ụ ể ữ ệ c s d ng v i ki u d li u ớ

char.

Th t u tiên gi a toán t s h c và toán t s h c , toán t ứ ự ư ữ ử ố ọ ử quan h : toán t ệ ử ố ọ ử quan h ệ

Ví d 2: ụ

i

Ví d 3: ụ

4 > 10 → có giá tr 0 (sai) ị

4 >= 4 → có giá tr 1 (đúng) ị

3 == 5 → có giá tr 0 (sai) ị

2 <= 1 → có giá tr 0 (sai) ị

6 != 4 → có giá tr 1 (đúng) ị

6 – 3 < 4 → có giá tr 1 (đúng), t ng đ ng (6 – 3) < 4 ị ươ ươ

–2 * –4 < 3 + 2 → có giá tr 0 (sai), t ng đ ng (–2 * –4) < (3 + 2) ị ươ ươ

1.6.1.3. Phép toán logic

!: NOT (phép ph đ nh) ủ ị

a !a

khác 0 0

1 b ng 0 ằ

&& : AND (phép và)

|| : OR (phép ho c)ặ

a&&b a||b a b

khác 0 khác 0 1 1

khác 0 0 1 b ng 0 ằ

khác 0 0 1 b ng 0 ằ

0 0 b ng 0 ằ b ng 0 ằ

Th t u tiên : !, &&, || ứ ự ư

Ví d 4ụ :

!(2 <= 1) → có giá tr 1 (đúng) ị

5 && 10 → có giá tr 1 (đúng) ị

!6 → có giá tr 0 (sai) ị

1 && 0 → có giá tr 0 (sai) ị

1 || 0 → có giá tr 1 (đúng) ị

Th t s h c, toán t ứ ự ư u tiên gi a các toán t ữ ử: ! , toán t ử ố ọ ử quan h , &&, ||. ệ

1.6.1.4. Phép toán trên bit

& : và (AND)

| : ho c (OR) ặ

^ : ho c lo i tr (XOR) ạ ừ ặ

>> : d ch ph i ả ị

<< : d ch trái ị

~ : đ oả

B B ~ a a a

it a it b a & b | b ^ b

0 0 1 1 0 0

0 1 0 0 0 1

1 0 0 1 1 1

1 1 0 1 1 0 Ví d 5ụ :

a = 13 → đ i ra h nh phân → 1101 ệ ị ổ

b = 10 → đ i ra h nh phân → 1010 ệ ị ổ

1101 1101 1101

& 1010 | 1010 ^ 1010

= 1000 = 1111 = 0111

= 8 = 15 = 7 (d ng th p phân) ậ ạ

1.6.1.5. Các phép toán khác

a. Phép toán gán

Phép gán là thay th giá tr hi n t i c a bi n b ng m t giá tr m i. ị ệ ạ ủ ế ằ ị ớ ế ộ

Các phép gán: =, +=, –=, *=, /=, %=, <<=, >>=, &=, |=, ^=.

Ví d 6ụ : ta có giá tr i = 3 ị

i = i + 3 → i = 6

i+= 3 → i = 6 ≡ i = i + 3

i *= 3 → i = 9 ≡ i = i* 3

b. Phép toán tăng, gi m: ++, –– ả

Toán t ++ s c ng thêm 1 vào toán h ng c a nó, toán t ử ẽ ộ ủ ạ ử –– s tr đi 1. ẽ ừ

Ví d 7ụ : ta có giá tr n = 6 ị

+ Sau phép tính ++n ho c n++, ta có n = 7. ặ

+ Sau phép tính ––n ho c n–– , ta có n = 5. ặ

* S khác nhau gi a ++n và n++, ––n và n–– ự ữ

+ Sau phép tính x = ++n + 2, ta có x = 9. (n tăng 1 c ng v i 2 r i gán cho x) ộ ớ ồ

+ Sau phép tính x = n++ + 2, ta có x = 8. (n c ng v i 2 gán cho x r i m i tăng 1) ớ ộ ồ ớ

1.6.1.6. Th t u tiên các phép toán ứ ự ư

ứ ẽ Các phép toán có đ u tiên khác nhau, đi u này có ý nghĩa trong cùng m t bi u th c s có ộ ư ể ề ộ

m t s phép toán này đ c th c hi n tr c m t s phép toán khác. ộ ố ượ ự ệ ướ ộ ố

1.6.1.7. Chuy n đ i ki u giá tr ể ổ ể ị

Vi c chuy n đ i ki u giá tr th ng di n ra m t cách t đ ng trong hai tr ể ổ ị ườ ệ ể ễ ộ ự ộ ườ ng h p sau: ợ

Khi gán bi u th c g m các toán h ng khác ki u. ứ ồ ể ể ạ

Khi gán m t giá tr ki u này cho m t bi n (ho c ph n t ị ể ầ ử ả ả m ng) ki u khác. Đi u này x y ế ể ề ặ ộ ộ

ra trong toán t gán, trong vi c truy n giá tr các tham s th c s cho các đ i. ử ố ự ự ệ ề ố ị

Ngoài ra, ta có th chuy n t ể ừ ộ ằ m t ki u giá tr sang m t ki u b t kỳ mà ta mu n b ng ể ể ể ấ ố ộ ị

phép chuy n sau : ể

(type) bi u th c ứ ể

Ví d :ụ

(float) (a+b)

Chuy n đ i ki u trong bi u th c: ể ổ ể ứ ể

Khi hai toán h ng trong m t phép toán có ki u khác nhau thì ki u th p h n s đ c nâng ơ ẽ ượ ể ể ấ ạ ộ

thành ki u cao h n tr c khi th c hi n phép toán. K t qu thu đ ể ơ ướ ự ế ệ ả ượ ơ c là m t giá tr ki u cao h n. ị ể ộ

Ch ng h n : ẳ ạ

Gi a int và long thì int chuy n thành long. ữ ể

Gi a int và float thì int chuy n thành float. ữ ể

Gi a float và double thì float chuy n thành double. ữ ể

1.7. NH P VÀ XU T D LI U Ấ Ữ Ệ Ậ

1.7.1. Hàm xu t d li u ra màn hình ấ ữ ệ

Cú pháp: printf("xâu đi u khi n" [, đ i s 1, đ i s 2, ...]); ể ố ố ố ố ề

Trong đó:

- đ i s 1, đ i s 2 … là h ng s , bi n, hàm. ố ố ố ố ế ằ ố

- xâu đi u khi n (đ t trong d u nháy kép): ch a hai ki u đ i t ng : ố ượ ứ ể ể ề ặ ấ

thông th c đ a ra tr c ti p thi ng t b ra. Ki u 1ể : các ký t ự ườ , chúng s đ ẽ ượ ư ự ế ế ị

Ví d 1:ụ

#include

#include

int main()

{

printf("\nChao ban den voi ngon ngu lap trinh C");

printf("\nMoi ban nhap ten");

getch();

return 0;

}

K t qu : ả ế

Chao ban den voi ngon ngu lap trinh C

Moi ban nhap ten

Các ký t thông th ng ch a các ký t đ c bi t: ự ườ ứ ự ề đi u khi n và ký t ể ự ặ ệ

\n: Nh y xu ng dòng k ti p canh v c t đ u tiên. ế ế ề ộ ầ ả ố

\t : Canh c t tab ngang. ộ

\r: Nh y v đ u hàng, không xu ng hàng. ề ầ ả ố

\a: Ti ng kêu bip. ế

\\ : In ra d u \ ấ

\" : In ra d u " ấ

\' : In ra d u ' ấ

%%: In ra d u % ấ

Ví d 2: ụ

void main()

{

printf("\n Xin chao ban\n");

printf("Bai hoc C dau tien. \n");

printf("Bai 1\nTong quan ve ngon ngu lap trinh"\n)

printf("Ma dinh dang \\" in ra dau \" . \n");

getch();

}

K t qu : ế ả

G p ký t ặ ự \n xu ng dòng in ra dòng ch Xin chao ban \n xu ng dòng. ữ ố ố

Bai hoc C dau tien \n xu ng dòng. ố

Bai 1 \n xuong dòng Tong quan v ngon ngu lap trinh \n xu ng dòng. ề ố

Bai hoc C dau tien con tr xu ng dòng. ố ỏ

Ma dinh dang \" in ra dau " \n xu ng dòng.. ố

Cách chuy n d ng Ký tự ể ủ Ki u c a ể ạ Ki u 2: ể chuy n d ng ể ạ đ iố các đ c tặ ả

c char Đ i đ c coi là 1 ký t . ố ượ ự chuy nể

d int Đ i đ c coi là s ố ượ ố d ngạ , m iỗ

nguyên có d u.ấ s ặ ả ẽ đ c t

ệ t o ra vi c ạ ld long Đ i đ c coi là s ố ượ ố

đ i d ng và ổ ạ nguyên ki u long. ể

ố ế in đ i ti p f float Đ i đ ố ượ c chuy n sang ể sau c aủ d ng th p phân. ậ ạ printf.

f double Đ i đ ố ượ c chuy n sang ể D ngạ d ng th p phân. ậ ạ t ng quát ổ

s “xâu ký Các ký t xâu s đ c in ự ẽ ượ : c a đ c t ủ ặ ả

ra. t ”ự

%[-][fw][.pp]ký t chuy n d ng ự ể ạ

M i đ c t chuy n d ng đ u đ c đ a vào b ng ký t % và k t thúc b i m t ký t ỗ ặ ả ể ạ ề ượ ư ằ ự ế ộ ở ự

chuy n d ng. Gi a % và ký t chuy n d ng có th có: ể ạ ữ ự ể ạ ể

ký t ự chuy n d ng: ể ạ

Ví d 3:ụ

void main()

{

int i=2,j=3, a=7,b=5;

float x;

x=9;

printf(“\n in so 1la:%d”,1); /*dòng printf 1*/

printf(“\n in so 2.34 la:%3.2f”,2.34);

printf(“\n in so i=%2d,j=%2d”,i,j);

printf(\n Tong %d+%d=%d”,a,b,a+b);

printf(“\n can bac hai cua %4.2f la %10.2f”,x,sqrt(x));

getch();

}

K t qu : ả ế

dòng printf 1: in so 1la:1

dòng printf 2: in so 2.34 la:2.34

dòng printf 3: in so i=2 ,j=2

dòng printf 4: Tong 7+5=12

dòng printf 5: căn b c hai c a x la 3.00 ậ ủ

1.7.2 Hàm nh p d li u t bàn phím ậ ữ ệ ừ

Cú pháp: scanf("xâu đi u khi n",đ a ch c a đ i s 1, đ a ch c a đ i s 2, ...); ỉ ủ ố ố ỉ ủ ố ố ể ề ị ị

trong đó:

- đ i s 1, đ i s 2 … là đ a ch c a bi n, m ng. ố ố ố ố ỉ ủ ế ả ị

chuy n d ng, m i đ c t - xâu đi u khi n: ề ể ch a các đ c t ặ ả ứ ỗ ặ ả ẽ ạ ể ạ ế s t o ra vi c đ i d ng bi n ệ ổ ạ

ti p sau c a scanf. ủ ế

D ng t ng quát c a đ c t : ủ ặ ả ổ ạ

%[*][d...d]ký t chuy n d ng ự ể ạ

Ví d 4: ụ

scanf("%d", &i); /*N u Nh p vào 12abc, bi n i ch nh n giá tr 12. Nh p 3.4 ch nh n giá ế ỉ ậ ỉ ậ ế ậ ậ ị

tr 3 vì i là bi n s nguyên.*/ ế ố ị

ặ scanf("%f%f", &a, &b); /* Nh p vào 2 s a, b ph i cách nhau b ng kho ng tr ng ho c ả ả ằ ắ ậ ố

enter*/

ạ scanf("%d/%d/%d", &ngay, &thang, &nam); /*Nh p vào ngày, tháng, năm theo d ng ậ

ngay/thang/nam (20/12/2010)*/

t ch ng trình nh p 2 s a, b nguyên t Ví d 5: Vi ụ ế ươ ậ ố ừ ế bàn phím và tính t ng 2 s đó in k t ổ ố

qu ra màn hình ả

int main()

{

int a, b, tong;

printf(”\n nhap a=”); scanf(”%d”,&a);

printf(”\n nhap b=”); scanf(”%d”,&b);

tong=(a+b);

printf(\nTong cua %d+%d=%d”,a,b,tong);

getch();

return 0;

}

K t qu : ả ế

nhap a=1

nhap b=2

Tong cua 1+2=3

BÀI T PẬ

#define Pi 3.14 đúng hay sai? Bài 1: Khai báo h ng ằ

a. Đúng

b. Sai

#define 2min 1000 đúng hay sai? Bài 2: Khai báo h ng ằ

b.

a. Đúng

Sai

Bài 3: Đo n ch

ng trình sau thi u gì?

ươ

ế

#include

#include

int main()

{

a=2;

b=6;

printf(”\n tong a+b=%d”,a+b);

getch();

return 0;

}

Bài 4: Khai báo bi nế int a;b=2; đúng hay sai?

a. Đúng

b. Sai

13/2 là? Bài 5: K t qu c a phép chia ả ủ ế

a. 6

b. 1

13%2 là? Bài 6: K t qu c a phép chia ả ủ ế

a. 6

b. 1

Bài 7: Phép so sánh 4<2 sau có k t qu ? ả ế

a. 1

b. 0

Bài 8: Phép so sánh 4!=2 sau có k t qu ? ả ế

a. 1

b. 0

Bài 9: Đo n ch ng trình thi u gì? ạ ươ ế

void main()

{int a=2,b=3;

printf(”tong a+b la”,a+b);

getch();

}

Bài 10: Đo n ch ng trình sau thi u gì? ạ ươ ế

void main()

{int a,b;

printf(”nhap a,b”);

scanf(”%d%d”,a,b);

printf(\n tong a+b=%d,a+b);

getch();

}

BÀI 3: T NG QUÁT V CH

NG TRÌNH

ƯƠ

VÀ CÁC THAO TÁC VI T CH

NG TRÌNH

ƯƠ

3.1. T NG QUÁT C A M T CH

NG TRÌNH C

ƯƠ

M t ch ộ ươ ng trình C bao g m các ph n nh : các ch th ti n x lý, khai báo bi n ngoài, các ỉ ị ề ử ư ế ầ ồ

hàm t t o, ch ng trình chính (hàm main). ự ạ ươ

C u trúc có th nh sau: ể ư ấ

Các ch th ti n x lý ị ề ử ỉ

#include ậ ư ệ

#define ằ ị

Khai báo các bi n ngoài (các bi n toàn c c) ph n này không b t bu c: ph n này khai báo ế ụ ế ầ ắ ầ ộ

các bi n toàn c c đ c s d ng trong c ch ng trình. ụ ượ ử ụ ả ươ ế

Ch ng trình chính ph n này b t bu c ph i có ươ ộ ắ ả ầ

main() ể ữ ệ ả ề

{

; /*Khai báo bi n trong hàm main*/ ể ữ ệ ế ế

; /*có th là câu l nh gán, câu l nh for, while, do while...*/ ệ ệ ể ệ

return ; /* Hàm ph i tr v k t qu */ ả ả ề ế ả ả ề ế ả

}

Cài đ t các hàm ặ

Tên hàm(các tham s s hình th c) ể ữ ệ ả ề ố ố ứ

{

; /*Khai báo bi n trong hàm*/ ể ữ ệ ế ế

; /*có th là câu l nh gán, câu l nh for, while, do while...*/ ệ ể ệ ệ

return ; /* Hàm ph i tr v k t qu */ ả ả ề ế ả ả ề ế ả

}

hàm main (thông th

ng là t

câu l nh đ u tiên

M t ch ộ

ươ

ng trình C b t đ u th c thi t ắ ầ

ườ

đ n câu l nh cu i cùng).

ế

Ví d : ụ Ch ươ ng trình tính x lũy th a y r i in ra màn hình. ừ ồ

#include

#include

int main()

{

double x,y,z;

printf("\n Nhap x va y");

scanf("%lf%lf",&x,&y);

z=pow(x,y); /* hàm l y lu th a y lu th a x */ ỹ ừ ỹ ừ ấ

printf("\n x= %8.2lf \n y=%8.2lf \n z=%8.2lf",x,y,z);

getch();

return 0;

}

Qui t c đ u t ắ ầ iên c n nh là: ớ ầ

t trên m t hay nhi u dòng nh ng ph i k t thúc M i câu l nh có th vi ệ ể ế ỗ ả ế ư ề ộ

ấ ; b ng d u ằ

Qui t c th hai là : ứ ắ

Các l i gi i thích c n đ c đ t gi a các d u /* và */ và có th đ c vi ờ ả ầ ượ ặ ể ượ ữ ấ t ế

Trên m t dòng ộ

Trên nhi u dòng ề

i c a dòng Trên ph n còn l ầ ạ ủ

Qui t c th ba là : ứ ắ

Trong ch ng trình, khi ta s d ng các hàm chu n, ví d nh printf(), getch() ,... mà các ươ ụ ư ử ụ ẩ

hàm này l i ch a trong file stdio.h trong th m c c a C, vì v y đ u ch ng trình ta ph i khai ạ ư ụ ủ ậ ở ầ ứ ươ ả

báo s d ng. ử ụ

#include "stdio.h " ho c #include

là: Qui t c th t ắ ứ ư

M t ch ộ ươ ng trình có th ch có m t hàm chính (hàm main()) ho c có th ể ể ỉ ặ ộ

có thêm vài hàm khác.

3.2. KH I Đ NG VÀ THOÁT KH I CH NG TRÌNH. Ở Ộ Ỏ ƯƠ

B c 1: Cài đ t ph n m m TC3.

ướ

B c 2: D\TC\BIN

\

ướ

3.2.1 Kh i đ ng ch ng trình. ở ộ ươ

3.2.2 Thoát ch ng trình. ươ

+ n phím F10 (kích ho t Menu), ch n menu File, ch n Quit (thoát). Ấ ạ ọ ọ

+ Ho c n t h p phím Alt +X. ặ ấ ổ ợ

3.3. THÔNG D CH, KH C PH C L I VÀ CHO CH Y CH NG TRÌNH Ụ Ỗ Ắ Ạ Ị ƯƠ

B c 1: Vi t ch ng trình. ướ ế ươ

B c 2 i. ướ : n phím F9 đ ki m tra l ể ể Ấ ỗ

B c 3 i. ướ : N u có l ế i s a l ỗ ử ỗ

B c 4 ng trình : Ctrl+F9 ướ : Ch y ch ạ ươ

3.4. CÁC THAO TÁC V I T P VĂN B N. Ớ Ệ Ả

3.4.1. T o m t ch ạ ộ ươ ng trình m i ớ

Menu File/New

3.4.2. Ghi ch ng trình vào đĩa. ươ

B c 1: Menu File/Save or n phím F2. ướ ấ

B c 2 ướ : Xhht nh p tên c n ghi.C ậ ầ

B c 3 ướ : n phím enter ấ

3.4.3. M t p đã ghi. ở ệ

B c 1 ướ : Menu File/Open or F3

B c 2 ướ : Xhht tìm tên c n mầ ở

Ả . 3.5. CÁC THAO TÁC V I KH I VĂN B N Ớ Ố

3.5.1. Đánh d u văn b n. ấ ả

Cách 1: Kích chu t trái đi m đ u văn b n đ n cu i đi m. ể ể ế ả ầ ộ ố

Cách 2: Phím Shift+mũi tên.

3.5.2. Sao chép (copy), di chuy n (cut), xóa (delete) ể

C1: Menu Edit:

C2: Ctrl+Insert (copy)

Shift+Del (Cut)

Ctrl+Del (Delete)

3.5.3. Dán văn b n(paste) ả

C1 : Menu Edit/Paste

C2 : Shift+Insert

3.5.4. Xu ng dòng ố

Khi con tr ch đ chèn đè ph i n Insert. ỏ ở ế ộ ả ấ

Đ t con tr t i v trí c n xu ng dòng n phím Enter. ỏ ạ ị ấ ặ ầ ố

BÀI T P:Ậ

Bài 1: Vi t ch ng trình nh p tên c a b n t bàn phím? ế ươ ủ ạ ừ ậ

G i ý:ợ

char ten[50];

printf(“Xin cho biet ten cua ban !”);

scanf(“%s”,ten);

Yêu c u: Ghi ch ng trình v i tên CHAO.C và cho th c hi n Ctrl+F9. ầ ươ ự ệ ớ

Bài 2: Vi t ch ng trình đ a ra màn hình giá tr s c a ký t a. ế ươ ị ố ủ ư ự

G i ý:ợ

printf(“ \nGiá tr s c a ký t a là %d”,’a’); ị ố ủ ự

Bài 3: Vi t ch ng trình đ a ra màn hình ký t a. ế ươ ư ự

G i ý:ợ

printf(“ \n In ký t a là %c”,’a’); ự

Bài 4: Vi t ch ng trình nh p vào 2 s a, b. in ra màn hình các giá tr : t ng, hi u, tích, ế ươ ị ổ ệ ậ ố

th ng c a 2 s đó. ươ ủ ố

Ch

ng 2

ươ

CÁC CÂU L NH ĐI U KHI N Ệ Ể Ề

ng các câu l nh đ M t ch ộ ươ ng trình bao g m nhi u câu l nh. Thông th ề ệ ồ ườ ệ ượ ệ c th c hi n ự

m t cách l n l t theo th t mà chúng đ c vi ầ ượ ộ ứ ự ượ ế ổ t ra. Các c u trúc đi u khi n cho phép thay đ i ể ề ấ

tr t t nói trên, do đó máy có th nh y th c hi n m t câu l nh khác m t ví trí tr ậ ự ể ả ự ệ ệ ộ ở ộ ướ c ho c sau ặ

câu l nh hi n th i. ệ ệ ờ

Xét v m t công d ng, có th chia các c u trúc đi u khi n thành các nhóm chính: ấ ề ặ ụ ề ể ể

Nh y không có đi u ki n. ề ệ ả

R nhánh. ẽ

.

T ch c chu trình. ổ ứ

Ngoài ra còn m t s toán t khác có ch c năng b tr nh break, continue ộ ố ử ổ ợ ư ứ

BÀI 1: CÂU L NH R NHÁNH Ệ

1.1. L NH VÀ KH I L NH Ố Ệ Ệ

1.1.1. Lệnh

Là một tác vụ, biểu thức, hàm, cấu trúc điều khiển…

Ví d ụ 1 :

x = x + 2;

printf("Day la mot lenh\n");

1.1.2. Khối lệnh

Là một dãy các câu lệnh đ cượ bọc b i cở ặp d u { }, các ấ lệnh trong khối lệnh ph iả viết thụt

vô 1 tab so v i cớ ặp d u { } ấ

Ví d ụ 2 :

{ //dau khoi a = 5;

b = 6; viết thụt vô 1 tab so với cặp { }

printf("Tong %d + %d = %d", a, b, a+b);

} //cuoi khoi

Chú ý: Quên dùng cặp dấu { } bao bọc khi s dử ụng khối lệnh, hoặc m ở dấu { và quên

đóng dấu }

1.2. CÂU L NH IF Ệ

1.2.1. Cú pháp

if (Bi u th c đi u ki n) ứ ể ề ệ

; ệ

Trong đó:

- if là t khóa. ừ

- Câu l nh có th là 1 câu l nh ho c nhi u câu l nh; t ệ

- Bi u th c đi u ki n là 1 bi u th c logic ch nh n 1 trong 2 giá tr đúng=1 ho c sai=0. ỉ ậ ứ ứ ề ể ệ ể ặ ị

ệ ề ệ ể ặ ừ ặ 2 câu l nh thì đ t trong c p ệ ặ

d u {}. ấ

1.2.2. S đ kh i ơ ồ ố

1.2.3. Ý nghĩa:

- N u bi u th c đi u ki n có giá tr =1, thì th c hi n câu l nh sau if. ự ứ ệ ế ệ ệ ể ề ị

- Ng i bi u th c đi u ki n có giá tr = 0 thì không th c hi n câu l nh sau if. c l ượ ạ ự ứ ể ệ ệ ề ệ ị

t ch ng trình nh p vào hai s a và b, tìm max c a hai s r i in k t qu lên Ví d 1ụ : Vi ế ươ ố ồ ủ ế ả ậ ố

màn hình?

#include

#include

int main()

{

int a, b, max;

//clrscr();

printf(“ \nnhap a=”); scanf(“%d”,&a);

printf(“ \nnhap b=”); scanf(“%d”,&b);

max = a;

if (b>max)

max = b;

printf(“ \n So lon nhat trong hai so vua nhap la: %d”,max);

getch();

return 0;

}

K t qu : ả ế

nhap a=3

nhap b=4

So lon nhat trong hai so vua nhap la:4

1.3. CÂU L NH IF … ELSE Ệ

1.3.1.Cú pháp

if (bi u th c đi u ki n) ứ ệ ể ề

; ệ

else

; ệ

Trong đó:

- if, else là các t khóa. ừ

- ặ Bi u th c đi u ki n là 1 bi u th c logic ch nh n 1 trong 2 giá tr đúng=1 ho c ỉ ậ ứ ứ ề ể ể ệ ị

sai=0.

- 2 câu l nh thì đ t trong Câu l nh có th là 1 câu l nh ho c nhi u câu l nh; t ệ ề ệ ể ệ ặ ừ ệ ặ

d u {}. ấ

1.3.2. S đ kh i ơ ồ ố

1.3.3.Ý nghĩa:

N u bi u th c đi u ki n có giá tr =1, thì th c hi n câu l nh 1. Ng ị ứ ự ệ ề ệ ế ệ ể c l ượ ạ ề i bi u th c đi u ứ ể

ki n có giá tr = 0 thì th c hi n câu l nh 2. ự ệ ệ ệ ị

Xét l ạ i ví d tìm max 2 s . ố ụ

#include

#include

main()

{

int a, b, max;

clrscr();

printf(“ \nnhap a=”); scanf(“%d”,&a);

printf(“ \nnhap b=”); scanf(“%d”,&b);

if (a>b)

max=a;

else

max = b;

printf(“ \n So lon nhat trong hai so vua nhap la: %d”,max);

getch();

return 0;

}

t ch ng trình gi i ph ng trình b c nh t, v i h s a, b. nh p vào t bàn Ví d 2:ụ Vi ế ươ ả ươ ớ ệ ố ậ ấ ậ ừ

phím.

#include

#include

main()

{

int a, b;

float x;

clrscr();

printf(“ \nNh p h s a = ”);scanf(“%d”,&a); ậ ệ ố

printf(“ \nNh p h s b = ”);scanf(“%d”,&b); ậ ệ ố

x = (float)-b/a;

if (a==0)

printf(“ \nPhuong trinh vo nghiem”);

else

printf(“\nPhuong trinh %dx + %d = 0 co nghiem x = %5.2f”, a, b, x);

getch();

return 0;

}

1.4. C U TRÚC IF Ấ L NGỒ

if l ng nhau có nghĩa là trong các kh i l nh ( 1 và 2 ) C cho phép s d ng các toán t ử ụ ử ố ệ ồ ở

if - else khác. Trong tr trên có th ch a các toán t ể ứ ử ườ ấ ng h p này, n u không s d ng các d u ử ụ ế ợ

đóng m ngo c cho các kh i thì s có th nh m l n gi a các if-else. ẽ ể ầ ữ ẫ ặ ố ở

Chú ý là máy s g n toán t if không có else g n nh t. Ch ng h n nh ẽ ắ ử else v i toán t ớ ử ạ ầ ẳ ấ ư

ng trình ví d sau : đo n ch ạ ươ ụ

if ( n>0 ) /* if th nh t*/ ứ ấ

if ( a>b ) /* if th hai*/ ứ

z=a;

else

z=b;

thì else ở đây s đi v i if th hai. ớ ứ ẽ

ng trình trên t ng đ Đo n ch ạ ươ ươ ươ ng v i : ớ

if ( n>0 ) /* if th nh t*/ ứ ấ

{

if ( a>b ) /* if th hai*/ ứ

z=a;

else

z=b;

}

Tr ng h p ta mu n else đi v i if th nh t ta vi ườ ứ ấ ợ ố ớ ế t nh sau : ư

if ( n>0 ) /* if th nh t*/ ứ ấ

{

if ( a>b ) /* if th hai*/ ứ

z=a;

}

else

z=b;

1.5. CÂU L NH SWITCH Ệ

1.5.1. Cú pháp

switch (bi u th c) ứ ể

{

case giá tr 1: l nh 1; break; ệ ị

case giá tr 2: l nh 2; break; ệ ị

………………………

case giá tr n: l nh n; break; ệ ị

[default: l nh m c đ nh; break;] ặ ị ệ

}

1.5.2. S đ kh i ơ ồ ố

1.5.3. Ý nghĩa:

- Tính giá tr c a bi u th c. ị ủ ứ ể

- N u giá tr c a bi u th c b ng giá tr 1 thì th c hi n l nh 1 r i thoát. ứ ằ ệ ệ ị ủ ự ế ể ồ ị

ự - N u giá tr c a bi u th c khác giá tr 1 thì so sánh v i giá tr 2, n u b ng giá tr 2 thì th c ế ằ ị ủ ứ ể ế ớ ị ị ị

hi n công vi c 2 r i thoát. ệ ệ ồ

- C nh th , so sánh t i giá tr n. ứ ư ế ớ ị

- N u t t c các phép so sánh trên đ u sai thì th c hi n l nh m c đ nh c a tr ế ấ ả ệ ệ ặ ị ự ủ ề ườ ợ ng h p

default

Chú ý :

- Bi u th c trong switch() ph i có k t qu là giá tr ki u s nguyên (int, char, long, …). ị ể ố ứ ể ế ả ả

- Các giá tr sau case cũng ph i là ki u s nguyên. ể ố ả ị

- Không b t bu c ph i có default. ộ ả ắ

t ch ng trình nh p s b t kỳ, in ra màn hình là th m y? Ví d :1ụ Vi ế ươ ậ ố ấ ứ ấ

int main()

{

int n; clrscr();

nhap:

printf("nhap so nguyen tu 1 den 7\n"); scanf("%d",&n);

switch (n)

{

case 1: printf("thu hai\n");break;

case 2: printf("thu ba\n");break;

case 3: printf("thu tu\n");break;

case 4: printf("thu nam\n");break;

case 5: printf("thu sau\n");break;

case 6: printf("thu bay\n");break;

case 7: printf("chu nhat\n");break;

default:

printf("Khong co so nay moi cac ban nhap lai:\n");

printf("-----------------------------------------------\n");

goto nhap;

}

getch(); return 0;

}

t ch ng trình nh p vào m t s nguyên d ng là tháng trong năm và in ra s Ví d 2:ụ Vi ế ươ ộ ố ậ ươ ố

ngày c a tháng đó. ủ

- Tháng có 31 ngày: 1, 3, 5, 7, 8, 10, 12

- Tháng có 30 ngày: 4, 6, 9, 10

- Tháng có 28 ho c 29 ngày : 2 ặ

- N u nh p vào s <1 ho c >12 thì in ra câu thông báo “không có tháng này “. ế ậ ặ ố

int main ()

{ int thang;

clrscr();

printf("\n Nhap vao thang trong nam ");

scanf("%d",&thang);

switch (thang)

{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

printf("\n Thang %d co 31 ngay ",thang);

break;

case 4:

case 6:

case 9:

case 11:

printf("\n Thang %d co 30 ngay ",thang);

break;

case 2:

printf ("\ Thang 2 co 28 hoac 29 ngay");

break;

default :

printf("\n Khong co thang %d", thang);

break;

}

getch();

return 0;

}

Ví d 3:ụ L p ch ậ ươ ng trình phân lo i h c sinh theo đi m. ạ ọ ể

int main()

{

int diem;

tt: printf("\nVao du lieu :");

printf("\n Diem =");

scanf("%d",&diem);

switch (diem)

{

case 0:

case 1:

case 2:

case 3:printf("Kem\n");break;

case 4:printf("Yeu\n");break;

case 5:

case 6:printf("Trung binh\n");break;

case 7:

case 8:printf("Kha\n");break;

case 9:

case 10:printf("Gioi\n");break;

default:printf(Vao sai\n);

}

printf("Tiep tuc 1, dung 0 :")

scanf("%d",&diem);

if (diem==1) goto tt;

getch();

return 0;

}

1.6. BÀI T P ÁP D NG

1. Viết chương trình nhập vào số nguyên dương, in ra thông báo số chẵn

hay lẻ.

H ư ngớ dẫ n : Nhập vào số nguyên d nươ g x. Kiểm tra nếu x chia chẵn cho hai thì

x là số

chẵn (hoặc chia cho 2 dư 0) ngược lại là số lẻ.

2. Viết chương trình nhập vào 4 số nguyên. Tìm và in ra số lớn nh t.ấ

H ư ngớ d nẫ : Ta có 4 số nguyên a, b, c, d. Tìm 2 số nguyên lớn nhất x, y của 2 cặp

(a, b)

và (c, d). Sau đó so sánh 2 số nguyên x, y để tìm ra số nguyên lớn nh t.ấ

3. Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 0, với a, b, c

nhập vào từ

bàn phím.

H ư ngớ dẫ n : Nhập vào 3

biến a, b, c. Tính Delta = b*b -

4*a*c

Nếu Delta < 0 thì

Ph nươ g trình vô nghiệm

Ngược lại

Nếu Delta = 0 thì

x1 = x2 = - b/

(2*a) Ngược lại

x1 = (- b - sqrt(Delta))/(2*a)

x2 = (- b + sqrt(Delta))/

(2*a) Hết Nếu

Hết Nếu

4. Viết chương trình nhập vào giờ phút giây (hh:mm:ss). C nộ g thêm số giây

nhập vào và in ra kết quả dưới d nạ g hh:mm:ss.

H ư ngớ d nẫ : Nhập vào giờ phút giây vào 3 biến gio, phut, giay và nhập và giây công thêm vào

biến them:

Nếu giay +

them < 60 thì giay

= giay + them

Ng i c l ượ ạ

giay = (giay + them) - 60

phut = phut + 1

Nếu phut >= 60 thì phut = phut - 60

gio = gio + 1

Hết nếu

Hết nếu

5. Viết chương trình nhập vào tháng, in ra tháng đó có bao nhiêu ngày.

H ư ngớ dẫ n : Nhập vào tháng

Nếu là tháng 1, 3, 5, 7, 8, 10, 12 thì có 30 ngày

Nếu là tháng 4, 6, 9, 11 thì có 31 ngày

Nếu là tháng 2 và là năm nhuận thì có 29 ngày ngược lại 28 ngày

(Năm nhuận là năm chia chẵn cho 4)

6. Viết chương trình nhập vào 2 số x, y và 1 trong 4 toán tử +, -, *, /. Nếu là + thì

in ra kết qu x + ả y, nếu là – thì in ra x – y, nếu là * thì in ra x * y, nếu là / thì in ra x / y

(nếu y = 0 thì thông báo không chia được)

#include "conio.h"

#include "stdio.h"

int main()

{

int x, y; char n;

printf ("\nNhap n:"); scanf ("%c", &n);

printf ("\nNhap x:"); scanf ("%d", &x);

printf ("\nnhap y:"); scanf ("%d", &y);

if (n=='+') printf ("Ket qua la: %d", x+y);

if (n=='-') printf ("ket qua la: %d", x+y);

if (n=='*') printf ("Ket qua la: %d", x*y);

if (n=='/')

{if (y!=0)printf ("Ket qua la: %0.2f", (float)x/y);

else printf ("Khong chia duoc");}

getch ();

return 0;

}

7. Viết chương trình nhập vào điểm 3 môn thi: Toán, Lý, Hóa của học sinh.

Nếu t ngổ điểm >= 15 và không có môn nào dưới 4 thì in kết qu ả đ uậ . Nếu đậu mà các

môn đều lớn hơn 5 thì in ra lời phê "Học đều các môn", ngược lại in ra "Học chưa

đều các môn", các trường hợp khác là "Thi h ng". ỏ

#include

#include

int main()

{

float T, L, H, Tong;

printf ("Diem Toan: "); scanf("%f", &T);

printf ("Diem Ly: "); scanf("%f", &L);

printf ("Diem Hoa: "); scanf("%f", &H);

Tong = T + L + H;

if ((Tong >= 15) && (T >= 5) && (L >= 5) && (H >= 5))

{printf ("\nDa dau");

if((T > 5) && (L > 5) && (H > 5))

printf ("\nHoc deu cac mon");

else

printf ("\nHoc chua deu cac mon");}

else

printf ("\nThi hong");

getch();

return 0;

}

8. Viết chương trình nhập số giờ làm và lương giờ rồi tính số tiền lương t nổ g

c ngộ . Nếu số giờ làm lớn hơn 40 thì những giờ làm dôi ra được tính 1,5 l n.ầ

#include

#include

int main()

{

9. Viết chương trình nhập vào 3 giá trị nguyên dương a, b, c. Kiểm tra xem

a, b, c có phải là 3 c nạ h của tam giác không? Nếu là 3 c nạ h của tam giác thì tính

diện tích của tam giác theo công thức sau:

S = p * (p - a) * (p - b) * p - c) , với p là 1/2 chu vi của tam giác.

#include

#include

#include

int main ()

{

int a, b, c; float p, S;

//clrscr();

printf("\nNhap a="); scanf("%d", &a);

printf("\nNhap b="); scanf("%d", &b);

printf("\nNhap c="); scanf("%d", &c);

if (a==0 | b==0 | c==0)

{

printf("\n3 canh nay khong tao thanh tam giac");

}

else

{

p = (a + b + c)/2;

S = sqrt(p*(p-a)*(p-b)*(p-c));

printf ("\nDien tich hinh Tam giac la: %5.2f", S);

}

getch();

return 0;

}

BÀI 2: CÂU L NH L P

2.1 CÂU L NH FOR Ệ

2.1.1. Cú pháp

for (bi u th c 1; bi u th c 2; bi u th c 3) ứ ứ ứ ể ể ể

;ệ

Trong đó:

- for là t khóa. ừ

- bi u th c 1: thông th ứ ể ườ ể ng là bi u th c đ gán giá tr ban đ u cho m t bi n đi u khi n ứ ể ể ề ế ầ ộ ị

l p.ặ

- bi u th c 2: là bi u th c quan h logic xác đ nh đi u ki n th c hi n vòng l p. ứ ứ ự ể ệ ể ệ ề ệ ặ ị

- bi u th c 3: là bi u th c gán dùng đ thay đ i giá tr c a bi n đi u khi n. ể ị ủ ứ ứ ể ể ế ề ể ổ

Chú ý: n u m t trong hai bi u th c 1, bi u th c 3 v ng m t thì ph i có d u (;) ngăn cách. ứ ứ ể ể ế ắ ặ ấ ả ộ

Nh ng nên vi ư ế t for đ y đ . ầ ủ

Tr ng h p 1: for( ;bi u th c 2;bi u th c 3) ườ ợ ứ ứ ể ể

Tr ườ ng h p 2: ợ ứ for(bi u th c 1;bi u th c ứ ể ể

2; )

Tr ng h p 3: for( ;bi u th c 2; ) ườ ợ ứ ể

2.2.2. S đ kh i ơ ồ ố

2.2.3. Nguyên t c ho t đ ng c a vòng l p for ạ ộ ủ ắ ặ

B c 1: Tính giá tr bi u th c 1 ị ể ướ ứ

B c 2: Xác đ nh giá tr bi u th c 2 ị ể ướ ứ ị

B c 3: N u bi u th c 2 có giá tr = 0 thì máy s ra kh i vòng for. ị ướ ứ ẽ ế ể ỏ

N u bi u th c 2 có giá tr = 1 thì máy s th c hi n câu l nh sau for, sau đó chuy n sang ẽ ự ứ ể ệ ế ệ ể ị

B c 4. ướ

B c 4: Tính giá tr bi u th c 3 sau đó quay l i B c 2. ị ể ướ ứ ạ ướ

2.2.4. Xét ví dụ

ng trình in dãy s nguyên t Ví d 1:ụ Vi ế t đo n ch ạ ươ ố ừ 1 đ n 10. ế

#include

#include

int main()

{ int i;

//clrscr();

printf("\n Day so tu 1 den 10 :");

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

printf("%3d ",i);

getch();

return 0;

}

K t qu : ế ả

Day so tu 1 den 10: 1 2 3 4 5 6 7 8 9 10

t ch ng trình nh p vào m t s nguyên n. Tính t ng c a các s nguyên t Ví d 2ụ : Vi ế ươ ộ ố ủ ậ ổ ố ừ 1

đ n n. ế

int main ()

56

{ unsigned int n,i,tong;

//clrscr();

printf("\n Nhap vao so nguyen duong n:"); scanf("%d",&n);

tong=0;

for (i=1; i<=n; i++)

tong+=i;

printf("\n Tong tu 1 den %d =%d ",n,tong);

getch();

return 0;

}

K t qu : ả ế

Nhap vao so nguyen duong n:9

Tong tu 1 den 9=45

2.2 CÂU L NH WHILE Ệ

2.2.1. Cú pháp

while (Bi u th c đi u ki n ệ ) ứ ể ề

; ệ

Câu l nhệ

57

2.2.2. S đ kh i ơ ồ ố

c.Nguyên t c ho t đ ng c a vòng l p while ạ ộ ủ ặ ắ

B c 1: Tính giá tr bi u th c đi u ki n. ị ể ướ ứ ệ ề

B c 2: N u bi u th c đi u ki n có giá tr =1, thì th c hi n câu l nh sau while và quay l ướ ự ứ ế ể ề ệ ệ ệ ị iạ

B c 1. ướ

B c 3: N u bi u th c đi u ki n có giá tr = 0 thì thoát kh i vòng l p while. ướ ứ ề ệ ể ế ặ ỏ ị

ệ Chú ý: câu l nh sau while ph i là câu l nh làm thay đ i giá tr c a bi u th c đi u ki n ị ủ ứ ệ ể ề ệ ả ổ

ho c ph i có m t câu l nh thoát kh i vòng l p ặ ệ ả ặ ộ ỏ

: Vi ng trình in dãy s nguyên t Ví d 1ụ ế t đo n ch ạ ươ ố ừ 1 đ n 10. ế

#include

#include

int main ()

{ int i;

//clrscr();

printf("\n Day so tu 1 den 10 :");

i=1;

while (i<=10)

{printf("%3d ",i);

i++;}

getch();

return 0;

}

K t qu : ế ả

Day so tu 1 den 10: 1 2 3 4 5 6 7 8 9 10

: Vi t ch ng trình nh p vào m t s nguyên n. Tính t ng c a các s nguyên t Ví d 2ụ ế ươ ộ ố ủ ậ ổ ố ừ 1

58

đ n n. ế

#include

#include

int main ()

{ unsigned int n,i,tong;

clrscr();

printf("\n Nhap vao so nguyen duong n:");

scanf("%d",&n);

tong=0;

i=1;

while (i<=n)

{

tong+=i;

i++;

}

printf("\n Tong tu 1 den %d =%d ",n,tong);

getch();

return 0;

}

K t qu : ả ế

Nhap vao so nguyen duong n:9

Tong tu 1 den 9=45

Ví d 3ụ :    Lập trình tính giai thừa của số N.

#include

#include

59

#include

int main ()

{

int n, i, GT;

//clrscr();

printf ("\nCHUONG TRINH TINH GIAI THUA");

printf ("\nCho n:"); scanf ("%d",&n);

GT = 1;

for (i=2; i<=n; i++)

GT *= i;

printf ("\nGiai thua cua %3d la %-10.0f", n, GT);

getch ();

return 0;

}

2.3 CÂU L NH DO …WHILE Ệ

2.3.1.Cú pháp:

do

; ệ

while (bi u th c đi u ki n) ứ ề ể ệ

60

2.3.2. S đ kh i ơ ồ ố

2.3.3. Nguyên t c ho t đ ng c a vòng l p do …while ạ ộ ủ ắ ặ

B c 1: Máy th c hi n ướ ự ệ ệ

B c 2: Tính giá tr bi u th c đi u ki n. ị ể ướ ứ ề ệ

i B c 1. - N u bi u th c đi u ki n có giá tr =1 thì quay l ệ ứ ề ể ế ị ạ ướ

- N u bi u th c đi u ki n có giá tr = 0 thì thoát kh i vòng l p do … while. ứ ệ ể ề ế ặ ỏ ị

: Vi ng trình in dãy s nguyên t Ví d 1ụ ế t đo n ch ạ ươ ố ừ 1 đ n 10. ế

#include

#include

int main ()

{ int i;

clrscr();

printf("\n Day so tu 1 den 10 :");

i=1;

do

{printf("%3d ",i);

i++;}

while (i<=10);

getch();

return 0;

}

61

K t qu : ế ả

Day so tu 1 den 10: 1 2 3 4 5 6 7 8 9 10

: Vi t ch ng trình nh p vào m t s nguyên n. Tính t ng c a các s nguyên t Ví d 2ụ ế ươ ộ ố ủ ậ ố ổ ừ 1

đ n n. ế

#include

#include

int main ()

{ unsigned int n,i,tong;

clrscr();

printf("\n Nhap vao so nguyen duong n:");

scanf("%d",&n);

tong=0;

i=1;

do

{ tong+=i;

i++;}

while (i<=n);

printf("\n Tong tu 1 den %d =%d ",n,tong);

getch();

return 0;

}

K t qu : ả ế

Nhap vao so nguyen duong n:9

Tong tu 1 den 9=45

2.3.4. So sánh các vòng l pặ

62

Vòng l p for, while : ặ

- Ki m tra đi u ki n tr c th c hi n công vi c sau nên đo n l nh th c hi n công vi c có ệ ề ể ướ ạ ệ ự ự ệ ệ ệ ệ

th không đ c th c hi n . ể ượ ự ệ

- Vòng l p k t thúc khi nào đi u ki n sai. ặ ế ệ ề

Vòng l p do…while : ặ

- Th c hi n công vi c tr ự ệ ệ ướ ệ c ki m tra đi u ki n sau nên đo n l nh th c hi n công vi c ạ ệ ự ề ệ ể ệ

đ c th c hi n ít nh t 1 l n. ượ ự ệ ầ ấ

- Vòng l p k t thúc khi nào đi u ki n sai. ặ ế ề ệ

- vòng l p (while, do ...while): Vòng l p for ặ ặ Vòng l p for l p v i s l n xác đ nh, còn 2 ớ ố ầ ặ ặ ị

vòng l p while và do ...while l p v i s l n không xác đ nh (l p vô đ nh). ớ ố ầ ặ ặ ặ ị ị

2.4 CÂU L NH GOTO, BREAK, CONTINUE. Ệ

2.4.1. Câu l nh goto ệ

Cú pháp: goto nhãn; a.

Ý nghĩa: Là l nh quay lai th c hi n các câu l nh sau nhãn (đã khai báo). b. ự ệ ệ ệ

c. Ví d :ụ

char ch;

tt:

………….

………….

………….

printf("Ban co muon tiep tuc nua khong Y/N ? ");

scanf("%c",&ch);

if (ch == 'y' || ch == 'Y')

goto tt;

2.4.2 Câu l nh break ệ

63

a. Cú pháp: break;

b. Ý nghĩa: Là l nh cho phép thoát kh i vòng l p trong cùng ch a nó (for, while và ứ ệ ặ ỏ

do while), ho c b gãy quy trình th c hi n m t kh i l nh. ặ ẻ ố ệ ự ệ ộ

c. t ch âm đ u tiên trong Ví d : Vi ụ ế ươ ng trình nh p vào m t dãy s , tìm ph n t ộ ầ ử ậ ố ầ

dãy.

#include

#include

main()

{

int i, n;

float a[100];

clrscr();

c a dãy n = ”);scanf(“%d”,&n); printf(“Nh p các ph n t ậ ầ ử ủ

for (i=1; i<=n; i++)

{ printf(“a[%d]”,i);

scanf(“%f”,&a[i]);

}

/*Tìm ph n t ầ ử âm đ u tiên*/ ầ

for (i=1; i<=n; i++)

if (a[i]<0)

break;

if (i<=n)

printf(“\nS âm đ u tiên a[%d] = %5.0f”,i,a[i]); ầ ố

else printf(“\nKhông có ph n t âm nào c \n”); ầ ử ả

getch();

return 0;

64

}

2.4.3 Câu l nh continue ệ

Cú pháp: continue; a.

Ý nghĩa: Là l nh t o ra vi c b t đ u l p l b. ệ ắ ầ ặ ạ ủ i c a chu trình ch a nó. Trong while ứ ệ ạ

và do while, l nh continue chuy n đi u khi n ch ng trình v th c hi n ngay ph n ki m tra ể ề ể ệ ươ ề ự ể ệ ầ

còn trong for, đi u khi n ch ng trình đ c kh i đ u l i (bi u th c 3). ề ể ươ ượ c chuy n v b ể ề ướ ở ầ ạ ứ ể

c. Ví d : Đo n ch ụ ạ ươ ố ng trình sau s d ng l nh continue đ b qua ph n x lý đ i ầ ử ử ụ ể ỏ ệ

v i s âm: ớ ố

for (i = 0; i <= n; i++)

if(a[i] < 0)

continue;

/*X lý các s d ng*/ ố ươ ử

2.4.3 Câu l nh ệ return

i v trí g i hàm sau khi các l nh trong hàm đó đ L nh ệ return dùng đ quay l ể ạ ị ệ ọ ượ c th c thi ự

c tr v cho ch xong. Trong l nh ệ return có th có m t giá tr g n v i nó, giá tr đó s đ ị ắ ẽ ượ ể ớ ộ ị ả ề ươ ng

trình. Cú pháp t ng quát c a câu l nh ệ return nh sau: ủ ư ổ

return bi u_th c; ể ứ

Bi u_th c là m t tùy ch n (không b t bu c). Có th có h n m t l nh return đ ộ ệ ứ ể ể ắ ọ ộ ơ ộ ượ ử c s

return đ u tiên. d ng trong m t hàm. Tuy nhiên, hàm s quay tr v v trí g i hàm khi g p l nh ẽ ụ ở ề ị ặ ệ ộ ọ ầ

c làm rõ h n sau khi h c v hàm. L nh ệ return s đ ẽ ượ ọ ề ơ

2.5. C U TRÚC L NG NHAU Ồ Ấ

: for l ng nhau’ Vòng l p ‘ặ ồ

M t vòng l p ặ for đ ộ ượ ọ c g i là l ng nhau khi nó n m bên trong m t vòng l p ằ ặ for khác. Nó ộ ồ

ng t nh sau: s có d ng t ẽ ạ ươ ự ư

for (i = 1; i < max1; i++)

{ ….

65

….

for (j = 0; j < max2 ; j++)

{

…..

}

….

}

Ví d ụ

#include

main()

{

int i, j, k;

i = 0;

printf(“Enter no. of row: “);

scanf(“%d”, &i);

printf(“\n”);

for (j = 0; j < i; j++)

{

printf(“\n”);

ặ for (k = 0; k <= j; k++) /*vòng l p for bên trong*/

printf(“*”);

}

}

Ch ng trình trên s hi n th ký t ‘*’ trên m i dòng và s ký t ‘*’ trên m i dòng s tăng ươ ẽ ể ị ự ố ỗ ự ẽ ỗ

thêm 1. Ch ng trình s nh n vào s dòng, t đó ký t ‘*’ s đ c in ra. ươ ẽ ậ ố ừ ự ẽ ượ

66

 Các vòng l p ‘while l ng nhau’ và ‘do ... while’ ồ ặ

Cũng gi ng nh vòng l p c l ng vào ặ for, các vòng l p ặ while và do ... while cũng có th đ ể ượ ồ ư ố

nhau. Hãy xem m t ví d đ c đ a ra d i đây. ụ ượ ư ộ ướ

Ví d ụ

#include

void main()

{

int x;

char i, ans;

i = '';

do{

clrscr();

x = 0;

ans = ‘y’;

printf(“\nEnter sequence of character: “);

do{

i = getchar();

x++;

}while (i != ‘\n’);

i = '';

printf(“\nNumber of characters entered is:%d”, --x);

printf(“\nMore sequences (Y/N)?”);

ans = getch();

}while (ans == ‘Y’ || ans == ‘y’);

}

67

K t qu c a ch ả ủ ế ương trình đư c minh h a nh ợ ọ ư sau:

Enter sequence of character: Good Morning!

Number of character entered is: 14

More sequences (Y/N)? N

cho đ n khi nh n phím Chương trình trên yêu c u ng ầ ư i dùng nh p vào m t chu i kí t ậ ờ ộ ỗ ự ế ấ

enter (vòng l p while bên trong ặ ). Khi đó, chương trình thoát kh i vòng l p ặ do…while bên trong. ỏ

Sau đó chương trình h i ngỏ ư i dùng có mu n nh p ti p n a hay thôi. N u ng ế ữ ế ậ ờ ố ườ ấ i dùng nh n

phím ‘y’ ho c ‘Y’, đi u ki n cho vòng while bên ngoài là true và ch ng trình nh c ng i dùng ề ệ ặ ươ ắ ườ

nh p vào chu i ký t khác. Ch ng trình c ti p t c cho đ n khi ng ậ ỗ ự ươ ứ ế ụ ế ườ ộ i dùng nh n b t kỳ m t ấ ấ

phím nào khác v i phím ‘y’ ho c ‘Y’. Và ch ng trình k t thúc. ặ ớ ươ ế

BÀI T PẬ

Bài 1.Vi t ch bàn phím, tìm max, min c a 3 s đó, in k t qu ế ươ ng trình nh p 3 s th c t ậ ố ự ừ ủ ế ố ả

lên màn hình.

Bài 2. Vi t ch ế ươ ng trình tìm s ngh ch đ o c a a. N u a!=0 in ra s nghich đ o, n u a==0 ế ả ủ ế ả ố ố ị

in ra thông báo không có s ngh ch đ o. ả ố ị

G i ý:ợ

if (a!=0)

printf(“\n so nghich dao cua a la %5.2f”,1/a);

else

printf(“\nkhong co so nghich dao”);

2+bx+c=0 v i a, b,c nh p t ớ

Bài 3: Vi t ch ng trình gi i ph ng trình b c ax bàn phím. ế ươ ả ươ ậ ậ ừ

Bài 4. Vi t ch ng trình tính chu vi, di n tích c a tam giác v i yêu c u sau khi nh p 3 s ế ươ ủ ệ ậ ầ ớ ố

i xem a, b, c có t o thành m t tam giác không? N u có thì tính chu vi và a, b, c ph i ki m tra l ả ể ạ ế ạ ộ

di n tích. N u không thì in ra câu " Không t o thành tam giác". ệ ế ạ

Trong đó: Chu vi CV = a+b+c

p=CV/2

68

Di n tích S = sqrt(p*(p-a)*(p-b)*(p-c)) ệ

G i ý: Đi u ki n l p thành 1 tam giác là: (a+b)>c&&(a+c)>b&&(b+c)>a ệ ậ ề ợ

Bài 5. Vi t ch ng trình nh p t bàn phím 2 s a, b và m t ký t ch. ế ươ ậ ừ ố ộ ự

N u: ch là “+“ thì th c hi n phép tính a + b và in k t qu lên màn hình. ự ế ệ ế ả

ch là “–“ thì th c hi n phép tính a - b và in k t qu lên màn hình. ự ệ ế ả

ch là “*” thì th c hi n phép tính a * b và in k t qu lên màn hình. ự ệ ế ả

ch là “/” thì th c hi n phép tính a / b và in k t qu lên màn hình. ự ệ ế ả

G i ý: bi n ch thu c ki u char, a,b thu c ki u int ho c float. ế ể ể ặ ộ ợ ộ

fllush(ch); //hàm xóa ký t enter. ự

Bài 5. Vi t ch ng trình tính n!. ế ươ

G i ý:ợ

gt =1;

for (i=1; i<=n; i++)

gt = gt*i;

Bài 6. Vi t ch ng trình in ra dãy s l ế ươ : ố ẻ

1 3 5 7…..2n-1

Bài 7. Vi t ch ng trình tính: ế ươ

S1=1+2+3+….+n

S2=2+4+6+….+2n

T3=1*2*3*…*n

T4=1*3*5*7*….*2n-1

Bài 8. Vi t ch ng ế ươ ng trình in b ng c u ch ả ử ươ

G i ý: s d ng 2 vòng l p for l ng nhau: ử ụ ặ ợ ồ

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

for(j=1;j<10;j++)

69

printf(“%dx%d=%d”,j,i,i*j);

Ch

ng 3

ươ

HÀM

H c xong ch ng này, sinh viên s n m đ c các v n đ sau: ọ ươ ẽ ắ ượ ề ấ

- Khái ni m v hàm (function) trong C. ệ ề

- Cách xây d ng và cách s d ng hàm trong C. ử ụ ự

BÀI 1: HÀM

1.1. KHÁI NI M V HÀM Ệ Ề

• Hàm là đo n ch ng trình th c hi n tr n v n m t công vi c nh t đ nh. ạ ươ ọ ẹ ấ ị ự ệ ệ ộ

• Hàm chia c t vi c l n b ng nhi u vi c nh . Nó giúp cho ch ệ ớ ề ệ ằ ắ ỏ ươ ủ ng trình sáng s a,

ng trình l n. d s a, nh t là đ i v i các ch ễ ử ố ớ ấ ươ ớ

1.2. CÁCH KHAI BÁO HÀM

Xây d ng m t hàm bao g m: khai báo ki u hàm, đ t tên hàm, khai báo các đ i và đ a ra ư ự ể ặ ộ ồ ố

câu l nh c n thi c vi ệ ầ ế ể ự t đ th c hi n yêu c u đ ra cho hàm. M t hàm đ ề ệ ầ ộ ượ ế t theo m u sau : ẫ

< Ki u d li u > (< Danh sách các đ i>) ể ữ ệ ố

{

< Khai báo thêm các bi n c c b >;

< Khai báo bi n>ế

ế ụ ộ

< Các câu l nh >; ệ

[return[bi u th c];] ứ ể

}

Trong đó:

+ Danh sách các đ i s : không b t bu c. Có hay không tuỳ theo chúng ta đ nh dùng hàm

ố ố

đó làm gì.

i s d ng đ t. + Tên hàm: b t bu c ph i có và do ng ộ ắ ả ườ ử ụ ặ

+ Khai báo bi n : N u danh sách các đ i s mà có thì ph n này bu c ph i có. Còn n u không thì ố ố ế ế ế ả ầ ộ

70

ng c l ượ ạ i có th b qua. ể ỏ

+ Ph n trong { }: là thân hàm. D u { } là b t bu c đ i v i m i hàm. ộ ố ớ ắ ầ ấ ọ

- < Khai báo thêm các bi n c c b >: ngay sau { và g i là bi n c c b dành riêng cho hàm s ế ụ ộ ế ụ ộ ọ ử

d ng.ụ

- đ i s luôn luôn truy n theo tr ( không thay đ i giá tr ). ố ố ề ổ ị ị

- < Các câu l nh >: có th s d ng các câu l nh đã h c nh if, switch, for, while, do… while … ể ử ụ ư ệ ệ ọ

- [return[bi u th c];]: không b t bu c. ứ ể ắ ộ

return ; /*không tr v giá tr */ ả ề ị

return [bi u th c]; ể ứ /*Tr v giá tr c a bi u th c*/ ả ề ị ủ ứ ể

Giá tr c a bi u th c trong câu l nh return s đ c gán cho hàm. ị ủ ẽ ượ ứ ể ệ

Ví d 1:ụ Vi ế t hàm tìm max 2 s . ố

int max2s(int a, int b)

{

int max;

if(a>b)

max=a;

else

max=b;

return max;

}

Gi i thích: ả

- Tên hàm: max2s có ki u nguyên. ể

- Đ i a: có ki u s nguyên; đ i b: có ki u s nguyên. ể ố ể ố ố ố

- Bi n max: có ki u s nguyên. ể ố ế

- câu l nh: r nhánh đ y đ . ầ ủ ệ ẽ

- return max; tr v giá tr max cho hàm max2s ả ề ị

ng trình chính (hàm main) dùng đ nh p vào 2 s nguyên a,b và in ra Ví d 2: ụ Ta có ch ươ ể ậ ố

71

màn hình s l n trong 2 s . ố ố ớ

#include

#include

int max2s(int a, int b)

{

int max;

if(a>b)

max=a;

else

max=b;

return max;

}

int main()

{

int a, b;

printf("\n Nhap vao 2 so a, b ");

scanf("%d%d",&a,&b);

printf("\n So lon la %d",max2s(a,b));

getch();

return 0;

}

C=n!/(k!)(n-k)!

C=gt(n)/gt(k)*gt(n-k)

1.3. G I HÀM Ọ

M t hàm khi đ nh nghĩa thì chúng v n ch a đ c th c thi tr khi ta có m t l ư ượ ẫ ộ ị ộ ờ ọ ế i g i đ n ự ừ

72

hàm đó.

a. Cú pháp g i hàm: ọ

([Danh sách các tham s th c s ]) ố ự ự

Chú ý:

+ S tham s th c s ph i b ng đ i s . ố ố ố ự ự ả ằ ố

+ Ki u c a tham s th c s ph i phù h p v i ki u c a đ i t ng ng. ố ự ự ả ể ủ ố ươ ứ ể ủ ớ ợ

Víd 1:ụ

int max2s(int x, int y) /*x,y là 2 đ i có ki u s nguyên*/ ể ố ố

{ int max; /* max bi n c c b */ ế ụ ộ

if (x>y)

max=x;

else

max=y;

return max;

}

main()

{

int a,b;

printf(“\n nhap a,b”);scanf(“%d%d”,&a,&b);

printf(“\n Gia tri lon nhat la%d”,max2s(a,b));

getch();

return 0;

}

b. Nguyên t c ho t đ ng c a hàm. ạ ộ ủ ắ

i g i hàm thì nó s b t đ u đ c th c hi n. Nói cách khác, khi máy g p l Khi g p m t l ặ ộ ờ ọ ẽ ắ ầ ượ ặ ờ i ự ệ

m t v trí nào đó trong ch ng trình, máy s t m d i ch đó và chuy n đ n hàm g i hàm ọ ở ộ ị ươ ẽ ạ ế ể ỗ ờ

73

ng ng. Quá trình đó di n ra theo trình t sau : t ươ ứ ễ ự

- C p phát b nh cho các bi n c c b . ế ụ ộ ộ ớ ấ

- Gán giá tr c a các tham s th c cho các đ i t ng ng. ố ự ị ủ ố ươ ứ

- Th c hi n các câu l nh trong thân hàm. ự ệ ệ

ế - Khi g p câu l nh return ho c d u } cu i cùng c a thân hàm thì máy s xoá các đ i, bi n ặ ấ ủ ẽ ệ ặ ố ố

c c b và ra kh i hàm. ụ ộ ỏ

- N u tr v t c gán ở ề ừ ộ m t câu l nh return có ch a bi u th c thì giá tr c a bi u th c đ ể ứ ượ ị ủ ứ ứ ế ể ệ

cho hàm. Giá tr c a hàm s đ c s d ng trong các bi u th c ch a nó. ị ủ ẽ ượ ử ụ ứ ứ ể

Ví d 2: Xây d ng hàm Hoanvi(a,b) đ đ i v trí cho nhau. ể ổ ị ụ ự

#include

#include

int Hoanvi(int a, int b)

{

int tg;

tg=a;

a=b;

b=tg;

printf(“\n Hai so doi vi tri cho nhau la a=%d,b=%d”,a,b);

return 0;

}

Void main()

{

int a,b;

printf(“\n nhap a,b”);scanf(“%d%d”,&a,&b);

printf(“\n Truoc khi goi ham hoan vi a=%d,b=%d”,a,b);

Hoanvi(a,b);

74

}

K t qu : ả ế

Nh p a,b 5 6 ậ

Truoc khi goi ham hoan vi a=5,b=6

Hai so doi vi tri cho nhau la a=6,b=5

1.4. HÀM Đ QUY Ệ

hàm này g i t i hàm khác, mà nó còn cho phép t C không nh ng cho phép t ữ ừ ọ ớ ừ ộ ể m t đi m

trong thân c a m t hàm g i t i chính hàm đó. hàm nh v y g i là hàm đ qui. ọ ớ ủ ộ ư ậ ệ ọ

Khi hàm g i đ qui đ n chính nó, thì m i l n g i máy s t o ra m t t p các bi n c c b ỗ ầ ọ ế ụ ộ ọ ệ ộ ậ ẽ ạ ế

c t o ra trong các l n g i tr c. m i hoàn toàn đ c l p v i t p các bi n c c b đã đ ớ ậ ế ụ ộ ộ ậ ớ ượ ạ ọ ướ ầ

Đ minh ho chi ti t nh ng đi u trên, ta xét m t ví d v tính giai th a c a s nguyên ể ạ ế ừ ủ ố ụ ề ữ ề ộ

ng n. khi không dùng ph ng pháp đ qui hàm có th đ c vi d ươ ươ ể ượ ệ ế t nh sau : ư

long int gt(int n) /* tính n! v i n>=0*/ ớ

{

long int gtphu=1;

int i;

for (i=1;i<=n;++i)

gtphu*=i;

return s;

}

ta nh n th y r ng n! có th tính theo công th c truy h i sau : ấ ằ ứ ể ậ ồ

n!=1 n u n=0 ế

n!=n*(n-1)! n u n>0 ế

hàm tính n! theo ph ng pháp đ qui có th đ c vi ươ ể ượ ệ ế t nh sau : ư

long int gtdq(int n)

75

{

if (n==0 || n==1)

return 1;

else

return(n*gtdq(n-1));

}

ta đi gi i thích ho t đ ng c a hàm đ qui khi s d ng trong hàm main d i đây : ả ạ ộ ử ụ ủ ệ ướ

#include "stdio.h"

main()

{

printf("\n 3!=%d",gtdq(3));

}

i hàm gtdq đ c th c hi n t hàm main(). máy s t o ra m t t p các l n g i đ u tiên t ầ ọ ầ ớ ượ ệ ừ ự ộ ậ ẽ ạ

bi n t đ ng c a hàm gtdq. t p này ch g m các đ i n. ta g i đ i n đ c t o ra l n th nh t là ế ự ộ ọ ố ỉ ồ ủ ậ ố ượ ạ ứ ấ ầ

n th nh t. giá tr c a tham s th c ( s 3 ) đ c gán cho n th nh t. lúc này bi n n trong thân ứ ấ ố ự ị ủ ố ượ ứ ấ ế

hàm đ c xem là n th nh t. do n th nh t có giá tr b ng 3 nên đi u ki n trong toán t if là sai ượ ứ ấ ứ ấ ị ằ ề ệ ử

và do đó máy s l a ch n câu l nh else. theo câu l nh này, máy s tính giá tr bi u th c : ị ể ẽ ự ứ ệ ệ ẽ ọ

n*gtdq(n-1) (*)

ệ đ tính bi u th c trên, máy c n g i chính hàm gtdq vì th l n g i th hai s th c hi n. ể ế ầ ọ ẽ ự ứ ứ ể ầ ọ

đây l i là đ i c a hàm , đ máy s t o ra đ i n m i, ta g i đó là n th hai. giá tr c a n-1 ọ ẽ ạ ị ủ ứ ố ớ ở ạ ố ủ ượ c

truy n cho hàm và hi u là n th hai, do v y n th hai có giá tr là 2. bây gi ứ ứ ề ể ậ ị ờ ẫ , do n th hai v n ứ

i ti p t c tính bi u th c : ch a tho mãn đi u ki n if nên máy l ề ư ệ ả ạ ế ụ ứ ể

n*gtdq(n-1) (**)

i t o ra đ i n l n th ba và đây n th bi u th c trên l ứ ể ạ ọ i g i hàm gtdq l n th ba. máy l ầ ứ ạ ạ ứ ầ ố ở ứ

ba có giá tr b ng 1. đ i n=1 th ba l c truy n cho hàm, lúc này đi u ki n trong l nh if ị ằ ứ ố i đ ạ ượ ề ề ệ ệ

đ c tho mãn, máy đi th c hi n câu l nh : ượ ự ệ ệ ả

76

return 1=gtdq(1) (***)

b t đ u t ắ ầ ừ ứ ấ ứ đây, máy s th c hi n ba l n ra kh i hàm gtdq. l n ra kh i hàm th nh t ng ẽ ự ệ ầ ầ ỏ ỏ

c gi i phóng, hàm gtdq(1) cho giá tr là 1 và máy v i l n vào th ba. k t qu là đ i n th ba đ ế ớ ầ ứ ứ ả ố ượ ả ị

tr v xét giá tr bi u th c ứ ở ề ị ể

n*gtdq(1) đây là k t qu c a (**) ả ủ ế

ở ỏ đây, n là n th hai và có giá tr b ng 2. theo câu l nh return, máy s th c hi n l n ra kh i ẽ ự ệ ầ ị ằ ứ ệ

hàm l n th hai, đ i n th hai s đ c gi i phóng, k t qu là bi u th c trong (**) có giá tr là ẽ ượ ứ ứ ầ ố ả ứ ế ể ả ị

2.1. sau đó máy tr v bi u th c (*) lúc này là : ở ề ể ứ

n*gtdq(2)=n*2*1

n l ạ i hi u là th nh t, nó có giá tr b ng 3, do v y giá tr c a bi u th c trong (*) là 3.2.1=6. ậ ứ ấ ị ằ ị ủ ứ ể ể

chính giá tr này đ c s d ng trong câu l nh printf c a hàm main() nên k t qu in ra trên màn ị ượ ử ụ ủ ệ ế ả

hình là :

3!=6

Chú ý :

Hàm đ qui so v i hàm có th dùng vòng l p thì đ n gi n h n, tuy nhiên v i máy tính khi ệ ể ặ ả ớ ơ ơ ớ

ậ dùng hàm đ qui s dùng nhi u b nh trên ngăn x p và có th d n đ n tràn ngăn x p. vì v y ề ộ ể ẫ ệ ẽ ế ế ế ớ

khi g p m t bài toán mà có th có cách gi ể ặ ộ ả ặ ặ i l p ( không dùng đ qui ) thì ta nên dùng cách l p ệ

này. song v n t n t i nh ng bài toán ch có th gi i b ng đ qui. ẫ ồ ạ ể ả ằ ữ ệ ỉ

Ví d 1 : ụ

Bài toán dùng đ qui tìm USCLN c a hai s nguyên d ng a và b. ủ ệ ố ươ

Trong tr ng h p suy bi n, khi a=b thì USCLN c a a và b chính là giá tr c a chúng. ườ ị ủ ủ ế ợ

Trong tr ng h p chung : ườ ợ

uscln(a,b)=uscln(a-b,b) n u a>b ế

uscln(a,b)=uscln(a,b-a) n u a

Ta có th vi t ch ng trình nh sau : ể ế ươ ư

#include "stdio.h"

int uscln(int a,int b ); /* Nguyên m u hàm*/ ẫ

77

main()

{ int m,n;

printf("\n Nhap cac gia tri cua a va b :");

scanf("%d%d",&m,&n);

printf("\n USCLN cua a=%d va b=%d la :%d",m,m,uscln(m,n))

}

int uscln(int a,int b)

{

if (a==b)

return a;

else

if (a>b)

return uscln(a-b,b);

else

return uscln(a,b-a);

}

1.5. BÀI T P ÁP D NG Ụ Ậ

1. Viết hàm tính n!

2. Viết hàm tính t nổ g S = 1+2+….+n.

3. Viết hàm kiểm tra số nguyên tố.

4. Viết hàm tính số h nạ g thứ n trong dãy Fibonacci.

5. Viết hàm tìm số lớn nhất trong 2 số.

BÀI 2: CÁC NGUYÊN T C TRUY N THAM S Ắ Ề Ố

2.1. KHÁI NI M BI N TOÀN C C, BI N C C B Ụ Ộ Ụ Ế Ệ Ế

2.1.1. Bi n toàn c c ụ ế

78

c khai báo ngoài t t c các hàm. Khái ni m:ệ Bi n toàn c c là bi n đ ế ượ ụ ế ấ ả

i các th vi n. V trí c a bi n toàn c c ế ụ : ủ ị d ở ướ ư ệ

#include<>

#include<>

; /*bi n toàn c c*/ ế ể ữ ệ ụ ế

int main()

{ ; ể ữ ệ ế

; ệ

...............

return 0;

}

Tên hàm() ể ữ ệ ố

{; ể ữ ệ ế

; ệ

...............

}

Ph m vi ho t đ ng b t kỳ ch nào trong ch ạ ộ : Bi n toàn c c có th đ c s d ng ể ượ ử ụ ở ấ ạ ụ ế ỗ ươ ng

trình (có nghĩa là nó đ c c p phát vùng nh sau khi đ c khai báo và vùng nh đ c d l ượ ấ ớ ượ ớ ượ ữ ạ i

cho đ n khi k t thúc ch ng trình). ế ế ươ

Ví du 1:

#include<>

int a, b;/*a,b bi n toàn c c, b nh c p phát 1 m i bi n 2 byte nh đ l u tr */. ộ ớ ấ ụ ế ớ ể ư ữ ế ỗ

int main()

{

....................

}

79

2.2.2. Bi n c c b (Bi n đ a ph ng) ế ụ ộ ế ị ươ

Bi n c c b là bi n đ c khai báo trong ch ng trình con. Khái ni m: ệ ế ụ ộ ế ượ ươ

V trí khai báo c a bi n c c b đ u ch ng trình con. ế ụ ộ: ủ ị ở ầ ươ

Tên hàm() ể ữ ệ ố

{ ; /*bi n c c b */ ế ụ ộ ể ữ ệ ế

.......

}

Ph m vi ho t đ ng: c s d ng trong ch ng trình con khi nó đ ạ ộ Bi n c c b ch đ ế ụ ộ ỉ ượ ử ụ ạ ươ ượ c

khai báo. Khi g p câu l nh return ho c d u } cu i cùng c a thân ch ng trình con thì máy s ặ ấ ủ ệ ặ ố ươ ẽ

ng trình con. xoá vùng nh bi n c c b và ra kh i ch ớ ế ụ ộ ỏ ươ

Chú ý:

N u bi n c c b có tên trùng v i tên c a bi n toàn c c thì u tiên s đ ế ụ ộ ẽ ượ ụ ủ ư ế ế ớ ế c dành cho bi n

toàn c c. Vì v y mà bi n c c b s đ c s d ng còn bi n toàn c c s không b nh h ng gì. ế ụ ộ ẽ ượ ử ụ ụ ẽ ị ả ụ ế ậ ưở

Ví d 2:ụ

#include

#include

/*---------------------------------------------------*/

void tang_t()

{

int a=8,b=8; /*Bi n c c b */ ế ụ ộ

a=a+12;

printf ("\n gia tri cua a = %d, b = %d",a,b);

}

/*---------------------------------------------------*/

void main()

{ int a=10,c=5;

80

a=a+5; c=c+2;

printf ("\n gia tri cua a = %d, c = %d",a,c);

tang_t();

printf ("\n gia tri cua a = %d, c = %d",a,c);

getch();

}

/*--------------------------------------------------*/

K t qu c a ch ng trình ả ủ ế ươ

2.2.3. Bi n đ a ch , Bi n con tr ế ị ế ỉ ỏ

Khái ni m: Bi n đ a ch là bi n đ c khai báo bình th ế ượ ế ệ ị ỉ ườ ng. Ví d : int a; ụ

Khái ni m: Bi n con tr là bi n đ c khai báo có * tr c tên bi n. Ví d : int *a; ế ượ ệ ế ỏ ướ ụ ế

Con tr là bi n ch a ứ đ a ch ị ế ỏ ỉ c a m t bi n khác. Vì con tr ch a đ a ch c a bi n khác nên ỏ ứ ị ỉ ủ ủ ế ế ộ

nó có th xâm nh p vào bi n khác gián ti p qua con tr . ỏ ế ế ể ậ

Ví d :ụ

int x, *px;

ng, nên câu l nh: px=&x; s gán đ a ch Phép toán m t ngôi & s cho đ a ch c a đ i t ẽ ỉ ủ ố ượ ộ ị ẽ ệ ị ỉ

c g i là " tr t đ c a bi n x cho tr px, và px bây gi ỏ ủ ế ờ ượ ọ ỏ ớ i bi n x ". ế

i đ a ch đó Phép toán m t ngôi * coi là toán h ng c a nó là đ a ch c n xét và thâm nh p t ủ ậ ớ ị ỉ ầ ạ ộ ị ỉ

đ l y ra n i dung (giá tr ). ể ấ ộ ị

Ví d :ụ

#include

/*---------------------------------------------------*/

void main()

{ int x=10,y,*px,*py;

81

px =&x; /* Bi n con tr px tr t ế ỏ ớ ị i đ a ch bi n x */ ỉ ế ỏ

py=&x; /* Bi n con tr py tr t ế ỏ ớ ị i đ a ch bi n x */ ỉ ế ỏ

printf ("\n gia tri cua x = %d, px = %d, py = %d",x,*px,*py);

*px=*px+10;

printf ("\n gia tri cua x = %d, px = %d, py = %d",x,*px,*py);

*py=*py+10;

printf ("\n gia tri cua x = %d, px = %d, py = %d",x,*px,*py);

y=*py; /* Bi n y chi l y giá tr c a bi n py*/ ị ủ ế ế ấ

y=y+15;

printf ("\n gia tri cua x = %d, px = %d, y = %d",x,*px,y);

getch();

}

/*--------------------------------------------------*/

K t qu c a ch ng trình ả ủ ế ươ

2.2.4. CÁCH TRUY N THAM S CHO HÀM Ố Ề

2.2.4.1. Truy n b ng tham tr ị ề ằ

ứ Truy n tham s b ng tham tr có nghĩa là truy n giá tr c a bi n cho tham s hình th c. ố ằ ị ủ ề ế ề ố ị

Sau khi truy n giá tr c a bi n không thay đ i. ị ủ ế ề ổ

Mô t :ả

xx’

x x

Ví d 1:ụ Ch ươ ng trình hoán v hai s . ố ị

void hoanvi(a,b)

{ int tg;

82

tg=a;

a=b;

b=tg;

printf(“\n a=%d,b=%d”,a,b);

}

main()

{

int a,b;

printf(“\n Ban nhap so thu nhat “);scanf(“%d”,&a);

printf(“\n Ban nhap so thu hai “);scanf(“%d”,&b);

printf(“\na=%d,b=%d”,a,b);

printf(“\n Hai so doi vi tri cho nhau la”);

hoanvi(a,b);

printf(“\n a=%d,b=%d”,a,b);

getch();

}

K t qu : ả ế

Nhap a=5; b=6

a=5,b=6

Hai so doi vi tri cho nhau la

a=6, b=5

a=5, b=6

2.2.4.2. Truy n b ng tham bi n ề ằ ế

Truy n tham s b ng tham bi n là truy n c giá tr và đ a ch c a bi n cho tham s hình ả ố ằ ỉ ủ ề ề ế ế ố ị ị

ả th c, cách truy n này làm thay đ i giá tr c a bi n sau khi truy n; cách truy n này chúng ta ph i ế ị ủ ứ ề ề ề ổ

dùng m t bi n con tr đ truy n. ỏ ể ế ề ộ

83

Mô t :ả

yy’

y y’

Ví d 2:ụ Ch ươ ng trình hoán v hai s . ố ị

Void hoanvi(int *a,int *b)

{ int tg;

tg=*a;

*a=*b;

*b=tg;

printf(“\na=%d,b=%d”,*a,*b);

}

void main()

{

int a,b;

printf(“\n Ban nhap so thu nha “);scanf(“%d”,&a);

printf(“\n Ban nhap so thu hai “);scanf(“%d”,&b);

printf(“\na=%d,b=%d”,a,b);

printf(“\n Hai so doi vi tri cho nhau la”);

hoanvi(&a,&b);

printf(“\n a=%d,b=%d”,a,b);

getch();

}

K t qu : ả ế

Nhap a=5; b=6

a=5, b=6

Hai so doi vi tri cho nhau la

84

a=6, b=5

a=6, b=5

Ví d 3:ụ

#include

/*---------------------------------------------------*/

void ch_tr_con1(int a,int b,int *c)

{

a=a+2; b=b+5; *c=*c+7;

printf("\n Trong ctc1 gia tri 1=%d, gia tri 2=%d, gia tri 3=%d",a,b,*c);

}

/*--------------------------------------------------*/

void ch_tr_con2(int a, int *b,int *c)

{

a=a+2; *b=*b+5; *c=*c+7;

printf("\n Trong ctc2 gia tri 1=%d, gia tri 2=%d, gia tri 3=%d",a,*b,*c);

}

void main()

{ int x=10,y=10,z=10;

printf("\n gia tri 1=%d, gia tri 2=%d, gia tri 3=%d",x,y,z);

ch_tr_con1(x,y,&z);

printf("\n gia tri 1=%d, gia tri 2=%d, gia tri 3=%d",x,y,z);

printf("\n--------------------------------------------------");

x=10;y=10;z=10;

printf("\n gia tri 1=%d, gia tri 2=%d, gia tri 3=%d",x,y,z);

ch_tr_con2(x,&y,&z);

printf("\n gia tri 1=%d, gia tri 2=%d, gia tri 3=%d",x,y,z);

85

getch();

}

/*--------------------------------------------------*/

K t qu c a ch ng trình ả ủ ế ươ

2.5. BÀI T P ÁP D NG Ụ Ậ

Bài 1: Vi ế ệ t hàm ki m tra xem 3 c nh a,b,c có l p thành tam giác không và hàm tính di n ể ạ ậ

tích tam giác.

G i ý: Đi u ki n l p thành tam giác ệ ậ ề ợ

(x+y>z)&&(y+z>x)&&(x+z>y)

Trong đó: Chu vi CV = x+y+z

p=CV/2

Di n tích S = sqrt(p*(p-x)*(p-y)*(p-z)) ệ

Bài 2: Vi t ch ng trình tính di n tích t giác khi bi t đ dài 4 c nh a, b, c, d và đ ế ươ ệ ứ ế ộ ạ ườ ng

chéo e.

G i ý: ợ

L p hàm ki m tra 3 c nh x, y, z l p thành tam giác(đã làm bài 1). ể ậ ậ ạ ở

L p hàm tính di n tích tam giác dttg(x,y,z) (đã làm bài 1). ệ ậ ở

giác=dttg(a,c,e)+dttg(b,d,e). Tính di n tích t ệ ứ

Bài 3: Vi t hàm tính n! ế

86

Bài 4: Tính t h p ch p k c a n ph n t ổ ợ ầ ử ủ ậ

=

C k n

k ! kn

)!

n !*(

-

L u ý: đã có hàm n! bài 3. ư ở

Bài 5: Tính t ng: S=1!+2!+3!+...+n! đã có hàm gthua(n) trên. ổ

Ch

ng 4

ươ

KI U D LI U CÓ C U TRÚC Ữ Ệ Ấ Ể

C u trúc là t p h p c a m t ho c nhi u bi n, ch úng có th khác ki u nhau, đ c nhóm ợ ủ ế ề ấ ặ ậ ộ ể ể ượ

i m t cái tên duy nh t đ ti n x lý. l i d ạ ướ ấ ể ệ ử ộ

C u trúc giúp cho vi c t ch c các d li u ph c t p, đ c bi t trong nh ng ch ng trình ệ ổ ứ ứ ạ ữ ệ ặ ấ ệ ữ ươ

l n vì trong nhi u tình hu ng chúng cho phép nhóm các bi n có liên quan l ớ ề ế ố ạ ể ử ư ộ i đ x lý nh m t

t. đ n v thay vì các th c th tách bi ơ ự ể ị ệ

- Khái ni m v ki u d li u m ng và ng d ng c a nó.

H c xong ch ng này, sinh viên s n m đ c các v n đ sau: ọ ươ ẽ ắ ượ ề ấ

ề ể ữ ệ ủ ụ ứ ệ ả

- Cách khai báo bi n ki u m ng và các phép toán trên các ph n t c a m ng. ầ ử ủ ế ể ả ả

BÀI 1: D LI U KI U M NG Ữ Ệ Ả M T CHI U Ộ Ể Ề

1.1. KHÁI NI M V D LI U KI U M NG M T CHI U.

Ề Ữ Ệ

M ng là m t ki u d li u có c u trúc bao g m m t s c đ nh các thành ph n có cùng ồ ộ ố ố ị ể ữ ệ ầ ả ấ ộ

ki u, cùng tên, khác ch s . ỉ ố ể

1.2. KHAI BÁO VÀ S D NG BI N KI U M NG M T CHI U.

Ử Ụ

xác đ nh 1.2.1. Khai báo m ng v i s ph n t ả ớ ố ầ ử ị

Cú pháp:

Tên m ng[S ph n t ]; ố ầ ử ầ ử ể ả

Trong đó:

87

- Ki u ph n t c a m ng có d li u thu c ki u gì (int, float, double,char). ầ ử: m i ph n t ỗ ầ ử ủ ữ ệ ể ể ả ộ

- Tên m ngả : là m t cái tên đ t đúng theo quy t c đ t tên c a bi n, h ng, hàm. Tên này ắ ặ ủ ế ằ ặ ộ

cũng mang ý nghĩa là tên bi n m ng. ế ả

- S ph n t ng ph n t t i đa trong m ng là bao ố ầ ử: là m t h ng s nguyên, cho bi ộ ằ ố t s l ế ố ượ ầ ử ố ả

nhiêu (hay nói khác đi kích th ướ ủ c c a m ng là gì). ả

- đây, ta khai báo m t bi n m ng g m có , ph n t th nh t là tên Ở ế ả ộ ồ ố ầ ử ph n t s ph n t ầ ử ầ ử ứ ấ

cu i cùng là -1 m ng ả [0], ph n t ầ ử ố tên m ngả [s ph n t ố ầ ử ].

Ví d : Cách khai báo bi n m ng m t chi u ề ụ ế ả ộ

int a[10]; /* Khai báo bi n m ng tên a có 10 ph n t ầ ử ể ữ ệ , ki u d li u là s nguyên, ph n t ố ầ ử ế ả

th nh t là a[0], ph n t cu i cùng là a[9].*/ ứ ấ ầ ử ố

trong b nh nh sau: Ta có th coi m ng a là m t dãy liên ti p các ph n t ộ ầ ử ể ế ả ớ ư ộ

0 1 2 3 4 5 6 7 8 9 V trí ị

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

ptử

, ki u d li u c a nó là ki u s th c*/ float a[20]; /* m ng có 20 ph n t ả ầ ử ể ữ ệ ủ ể ố ự

char S[20] ; /* 'A' 'B' ...... 'X '*/

1.2.2. Truy xu t t ng ph n t c a m ng ấ ừ ầ ử ủ ả

Tên bi n m ng[Ch s ] ỉ ố ả ế

; ph n t Ví d 1:ụ int a[10]; /* khai báo m ng a có 10 ph n t ầ ử ả ầ ử ứ ấ th nh t (có v trí 0) là a[0]; ị

88

ph n t th 2 (có v trí 1) là a[1]…*/ ầ ử ứ ị

Ví d 2: V a khai báo v a gán tr cho 1 m ng 1 chi u các s nguyên. In m ng s nguyên ụ ừ ừ ề ả ả ố ố ị

này lên màn hình.

int main()

{

int n,i,j;

int dayso[]={66,65,69,71,67,70};

clrscr();

n=sizeof(dayso)/sizeof(int); /*L y s ph n t n=6 */ ấ ố ầ ử

printf("\n Noi dung cua mang ");

for (i=0;i

printf("%d ",dayso[i]); /*dayso[i] truy xu t ph n t c a m ng*/ ầ ử ủ ấ ả

getch();

return 0;

}

1.2.3. Phép toán l y đ a ch ỉ ấ ị

&Tên m ng[ch s ] ỉ ố ả

Ví d : &b[9] /*s cho đ a ch c a ph n t b[9]*/ ầ ử ỉ ủ ụ ẽ ị

&b[2] /*s cho đ a ch c a ph n t b[2]*/ ầ ử ỉ ủ ẽ ị

Khi khai báo: float a[10];

máy s b trí b trí cho m ng a m i kho ng nh liên ti p, m i kho ng nh là 4 byte. ả ẽ ố ườ ế ả ả ố ớ ớ ỗ

Nh v y, n u bi t đ a ch c a m t ph n t ư ậ ế ế ị ầ ử ỉ ủ ộ ị nào đó c a m ng a, thì ta có th d dàng suy ra đ a ể ễ ủ ả

ch c a các ph n t ầ ử ỉ ủ khác c a m ng. ủ ả

V i C ta có : ớ

a t ng đ ng đ ng v i đ a ch ph n t a[0]*/ ươ ươ ng v i &a[0] /*Đ a ch c a m ng a t ị ỉ ủ ả ớ ươ ươ ỉ ầ ử ớ ị

a+i t ng đ ươ ươ ng v i &a[i] ớ

89

t ch ng trình nh p vào 1 m ng s nguyên và tính t ng c a dãy v a nh p. Ví d 1:ụ Vi ế ươ ủ ừ ả ậ ậ ố ổ

void main()

{

int a[4],i,tong;

printf(“Nhap gia tri cho mang”);

for (i=0;i<4;++i) Nh p giá tr cho s ph n ố ầ ậ ị

c a m ng { t ử ủ ả

printf("\n a[%d]=",i);

scanf("%d",&a[i]);

}

tong=0;

for (i=0;i<4;++i)

tong =tong+a[i];

printf("\n Tong cac phan tu mang la :%d ",tong);

getch();

}

K t qu : ả ế

a[0]=4

a[1]=3

a[2]=5

a[3]=1

Tong cac phan tu mang la: 13

tăng d n. Ví d 2:ụ Nh p vào m t m ng s nguyên sau đó s p x p theo th t ố ắ ế ứ ự ậ ả ộ ầ

void main ( )

{

int a[100],n, i, j, tg ;

90

printf(“\n nhap n=”);scanf(“%d”,&n);

/*Nhap mang*/

for ( i = 0 ; i < n ; i ++ )

{

printf ( " nhap a [ % d] = " , i );

scanf ( " %d", & a [i ]);

}

/*In mang vua nhap ra man hinh*/

for ( i = 0 ; i < n ; i ++ )

printf ( "%3d",a[i]);

printf(“\n”);

/* S p x p tăng d n */ ắ ế ầ

for ( i = 0 ; i < n -1 ; i ++)

for ( j = i + 1 ; j < n ; j ++ )

if (a[i] >a[j])

{

tg= a[i] ; a[i] = a[j]; a[j]= tg ;

}

/* in k t qu m ng đã s p x p ra màn hình */ ắ ế ả ả ế

for ( i = 0 ; i < n ; i ++ )

printf ( " % 3d " , a [ i ] );

getch ( );

}

1.3. BÀI T P ÁP D NG Ụ Ậ

Bài 1: Vi t ch c nh p t bàn phím và tính ế ươ ng trình nh p vào 1 m ng s nguyên n v i n đ ả ậ ố ớ ượ ậ ừ

ng c a m ng v a nh p. t ng s d ổ ố ươ ậ In k t qu ra màn hình. ả ừ ủ ế ả

Bài 2: Vi t ch c nh p t bàn phím và ế ươ ng trình nh p vào 1 m ng s nguyên n v i n đ ả ậ ớ ố ượ ậ ừ

ng c a m ng v a nh p. In k t qu ra màn hình. đ m xem có bao nhiêu s d ế ố ươ ừ ủ ế ả ậ ả

91

Bài 3: Vi t ch ng trình con: ế ươ

Ch ng trình con 1: Nh p vào 1 m ng s nguyên n v i n đ c nh p t bàn phím. ươ ả ậ ố ớ ượ ậ ừ

Ch ng trình con 2: In m ng v9+ a nh p ra màn hình. ươ ừ ậ ả

Ch ng trình con 3: Tính t ng s d ng c a m ng v a nh p. ươ ố ươ ổ ủ ừ ả ậ

Bài 4: Vi t ch ng trình con: ế ươ

Ch ng trình con 1: Nh p vào m t m ng s nguyên. ươ ả ậ ộ ố

Ch ng trình con 2: In m ng v a nh p ra màn hình. ươ ừ ậ ả

Ch ng trình con 3: S p x p theo th t tăng d n. ươ ắ ế ứ ự ầ

Bài 5: Vi t ch ng trình con: ế ươ

Ch ng trình con 1: Nh p vào m t m ng s nguyên. ươ ả ậ ộ ố

Ch ng trình con 2: In m ng v a nh p ra màn hình. ươ ừ ậ ả

Ch ng trình con 3: Tìm ph n t ươ ầ ử ớ l n nh t c a m ng. ấ ủ ả

BÀI 2: D LI U KI U M NG NHI U CHI U.

Ữ Ệ

2.1. KHÁI NI M V D LI U KI U M NG 2 CHI U.

Ề Ữ Ệ

Là m ng có t ả ừ hai chi u tr lên ề ở

2.2. KHAI BÁO VÀ S D NG BI N KI U M NG 2 CHI U.

Ử Ụ

xác đ nh. 2.2.1. Khai báo m ng v i s ph n t ả ớ ố ầ ử ị

Cú pháp: Tên m ng[S ph n t chi u 1] [S ph n t ố ầ ử ầ ử ể ả ố ầ ử ề chi u 2]; ề

Ví d : int a[2][3]; /* khai báo m ng 2 chi u có 2*3 ph n t là s nguyên*/ ầ ử ụ ề ả ố

Trong tr ng h p này, ta đã khai báo cho m t ma tr n có t i đa là 2 dòng, m i dòng có t ườ ậ ợ ộ ố ỗ ố i

đa là 3 c t.ộ

0 2 1 Dòng/c tộ

0 a[0][0] a[0][2] a[0][1]

1 a[1][0] a[1][2] a[1][1]

V i m ng hai chi u a[2][3] có 2*3=6 ph n t ng v i 6 đ a ch liên ti p trong b nh ầ ử ứ ộ ớ ề ế ả ớ ớ ị ỉ

92

đ c x p theo th t sau: ượ ế ứ ự

a[0] a[0] a[0] a[1] a[1] a[1] Phầ

[0] [1] [2] [0] [1] [2] n tử

1 2 3 4 5 6 Đ aị

chỉ

2.2.2. Truy xu t t ng ph n t c a m ng 2 chi u ấ ừ ầ ử ủ ề ả

Tên m ng[ch s 1][ch s 2] ỉ ố ỉ ố ả

Ví d : a[1][1] ụ

2.2.3. Phép toán l y đ a ch ỉ ấ ị

&Tên m ng[ch s 1] ỉ ố [ch s 2] ỉ ố ả

Ví d : &a[1][0] /*s cho đ a ch c a ph n t a[1][0] */ ầ ử ỉ ủ ụ ẽ ị

t ch ng trình nh p ma tr n a có m dòng n c t và in ma tr n ra màn hình. Ví d 1: ụ Vi ế ươ ậ ậ ậ ộ

int main()

{

int a[10][10], m, n, i, j;

printf("nhap so dong m= "); scanf("%d",&m);

printf("nhap so cot n= "); scanf("%d",&n);

/*nhap ma tran a*/

for(i=0;i

for(j=0; j

{

printf("a[%d] [%d]= ",i,j);

scanf("%d",&a[i][j]); /* &a[i][j] phép l y đ a ch */ ấ ị ỉ

}

/*in ra man hinh ma tran vua nhap*/

for(i=0;i

93

{ for(j=0; j< n; j++)

printf("%d ",a[i][j]); /* a[i][j] truy xu t đ n t ng ph n t ij*/ ấ ế ừ ầ ử

printf("\n")}

getch();

return 0;

}

t ch ng trình cho phép nh p 2 ma tr n a, b có m dòng n c t, th c hi n phép Ví d 2ụ : Vi ế ươ ự ệ ậ ậ ộ

toán c ng hai ma tr n a,b và in ma tr n k t qu lên màn hình. ậ ế ả ậ ộ

Đ ch ng trình d hi u ta vi bàn phím, hi n th ma tr n lên ể ươ ễ ể ế t các hàm: nh p 1 ma tr n t ậ ậ ừ ể ậ ị

màn hình, c ng 2 ma tr n. ộ ậ

void Nhap(int a[][10],int m,int n)

{

int i,j;

for(i=0;i

for(j=0; j

{

printf("phan tu o dong %d cot %d: ",i,j);

scanf("%d",&a[i][j]);

}

void InMaTran(int a[][10], int m, int n)

{

int i,j;

for(i=0;i

{

for(j=0; j< n; j++)

printf("%d ",a[i][j]);

94

printf("\n");

}

}

/* Cong 2 ma tran A & B ket qua la ma tran C*/

void CongMaTran(int a[][10],int b[][10],int m,int n,int c[][10])

{

int i,j;

for(i=0;i

for(j=0; j

c[i][j]=a[i][j]+b[i][j];

}

int main()

{

int a[10][10], b[10][10], m, n;

int c[10][10];/* Ma tran tong*/

printf("\nSo dong m= "); scanf("%d",&m);

printf("\nSo cot n= "); scanf("%d",&n);

printf("Nhap ma tran A\n");

Nhap(a,m,n);

printf("Nhap ma tran B\n");

Nhap(b,m,n);

printf("Ma tran A: \n");

InMaTran(a,m,n);

printf("Ma tran B: \n");

InMaTran(b,m,n);

CongMaTran(a,b,m,n,c);

95

printf("Ma tran tong C:\n");

InMaTran(c,m,n);

getch();

return 0;

}

2.3. BÀI T P ÁP D NG Ụ Ậ

Bài 1: cho mãng 2 chi u A, là ma tr n vuông c p n x n , l p ch ng trình : ề ậ ậ ấ ươ

a/ tính t ng t t c các ph n t d ng c a mãng. ổ ấ ả ầ ử ươ ủ

b/ tính t ng các ph n t A[i][j] mà i + j chia h t cho 5 . ầ ử ổ ế

c/ In ra các s nguyên t ố ố theo t ng hàng. ừ

d/ S p x p theo hàng. ắ ế

e/ S p x p theo c t . ắ ế ộ

f/ Tính t ng các ph n t trên đ ng chéo ( i = j ) , đ ng biên. ầ ử ổ ườ ườ

g/ Tìm max ; min theo t ng hàng, c t và toàn b ma tr n. ừ ậ ộ ộ

H c xong ch

BÀI 3: D LI U KI U XÂU KÝ T Ữ Ệ Ể Ự

ng này, sinh viên s n m đ c các v n đ sau: ọ ươ ẽ ắ ượ ề ấ

- Khái ni m v xâu ký t . ệ ề ự

- M t s hàm x lý xâu ký t và ng d ng c a chúng trong th c t ộ ố ử ự . ự ế ủ ứ ụ

3.1. KHÁI NI M V D LI U KI U XÂU KÝ T . Ự

Ề Ữ Ệ

Xâu ký t là m t dãy g m các ký t c k t thúc b ng ký t đ ự ồ ộ ự ặ ho c m t m ng các ký t ả ộ ự ượ ế ằ ự

‘\0’ (còn đ c g i là ký t ượ ọ ự NULL trong b ng mã ASCII). ả

Khi g p m t xâu ký t ộ ặ ự ủ ớ , máy s c p phát m t kho ng nh cho m t m ng ki u char đ l n ớ ẽ ấ ể ả ả ộ ộ

c a xâu và ch a thêm ký t '\0' là ký t dùng làm ký t đ ch a các ký t ể ứ ự ủ ứ ự ự ự ế k t thúc c a m t xâu ủ ộ

ký t .ự

xâu ký t c đ t trong c p d u nháy kép “”.ví d nh : "Viet Han" đ Các h ng ằ ự ượ ặ ụ ư ặ ấ

3.2. KHAI BÁO VÀ S D NG BI N KI U XÂU KÝ T

Ử Ụ

3.2.1. Khai báo theo m ng ả

96

Cú pháp: char [chi u dài t i đa]; ề ế ố

Ví d : char Ten[12]; ụ

V i khai báo trên b nh s cung c p 12+1 bytes đ l u tr n i dung c a chu i ký t Ten; ộ ớ ẽ ữ ộ ể ư ủ ấ ớ ỗ ự

byte cu i cùng l u tr ký t ‘\0’ đ ch m d t chu i. ư ữ ố ự ể ấ ứ ỗ

Cũng gi ng nh tên m ng, xâu ký t ư ả ố ự ả là m t hàng đ a ch bi u th đ a ch đ u c a m ng ỉ ầ ủ ỉ ể ộ ị ị ị

ch a nó. ứ

Chú ý:

i đa c a bi n chu i là m t h ng nguyên n m trong kho ng t - Chi u dài t ề ố ộ ằ ủ ế ằ ả ỗ ừ 1 đ n 255 ế

bytes.

i đa không nên khai báo th a đ tránh lãng phí b nh , nh ng cũng không nên - Chi u dài t ề ố ộ ớ ừ ể ư

khai báo thi u. ế

3.2.2. Khai báo theo con tr ỏ

Cú pháp: char *; ế

Ví d : char *Ten; ụ

V i khai báo trên b nh s dành 2 byte đ l u tr đ a ch c a bi n con tr Ten đang ch ể ư ộ ớ ẽ ữ ị ỉ ủ ế ớ ỏ ỉ

ả ọ ế đ n, ch a cung c p n i đ l u tr d li u. Mu n có ch đ l u tr d li u, ta ph i g i đ n ế ữ ữ ệ ữ ữ ệ ơ ể ư ỗ ể ư ư ấ ố

hàm malloc() ho c ặ calloc() có trong th vi n “alloc.h”, sau đó m i gán d li u cho bi n. ư ệ ữ ệ ế ớ

3.2.3. V a khai báo v a gán giá tr ị ừ ừ

Cú pháp: char []=<”h ng chu i”>; ế ằ ỗ

Ví d : char Chuoi[]="Mau nang hay la mau mat em” ; ụ

3.3. HÀM NH P (GETS), XU T (PUTS) CHU I Ỗ

3.3.1. Nh p xu t chu i ỗ ậ ấ

a) Nh p chu i t bàn phím ỗ ừ ậ

Đ nh p m t chu i ký t ộ ể ậ ỗ t ự ừ bàn phím, ta s d ng hàm gets() ử ụ

Cú pháp: gets(); ế ỗ

Ví d : char Ten[20]; ụ

97

gets(Ten);

Ta cũng có th s d ng hàm scanf() đ nh p d li u cho bi n chu i, tuy nhiên lúc này ta ể ậ ữ ệ ể ử ụ ế ỗ

ch có th nh p đ c m t chu i không có d u kho ng tr ng. ể ậ ượ ỉ ấ ả ắ ộ ỗ

Ngoài ra, hàm cgets() (trong conio.h) cũng đ c s d ng đ nh p chu i. ượ ử ụ ể ậ ỗ

Ví d : /* Chuong trinh nhap va in ra ten*/ ụ

#include

#include

void main(void)

{

char cname[30];

puts("Cho biet ten cua ban: ");

gets(cname);

puts("Chao ban ");

puts(cname); getch();

}

b) Xu t chu i lên màn hình ấ ỗ

Đ xu t m t chu i (bi u th c chu i) lên màn hình, ta s d ng hàm puts(). ể ấ ử ụ ứ ể ộ ỗ ỗ

Cú pháp: puts(); ể ứ ỗ

Ví d : Nh p vào m t chu i và hi n th trên màn hình chu i v a nh p. ỗ ừ ụ ể ậ ậ ỗ ộ ị

#include

#include

#include

int main()

{

98

char Ten[12];

printf("Nhap chuoi: ");gets(Ten);

printf("Chuoi vua nhap: ");puts(Ten);

getch();

return 0;

}

Ngoài ra, ta có th s d ng hàm printf(), cputs() (trong conio.h) đ hi n th chu i lên màn ể ử ụ ể ể ỗ ị

hình.

3.3.2. M t s hàm x lý chu i (trong th vi n “string.h”) ỗ ư ệ ộ ố ử

a.C ng chu i - Hàm strcat() ỗ ộ

Cú pháp: char *strcat(char *des, const char *source);

Hàm này có tác d ng ghép chu i ngu n vào chu i đích. ụ ỗ ồ ỗ

i, sau đó in c h và tên c a h lên màn hình. Ví dụ: Nh p vào h lót và tên c a m t ng ủ ậ ọ ộ ườ ủ ọ ả ọ

#include

#include

#include

int main()

{

char HoLot[30], Ten[12];

printf("Nhap Ho Lot: ");gets(HoLot);

printf("Nhap Ten: ");gets(Ten);

strcat(HoLot,Ten); /* Ghep Ten vao HoLot*/

printf("Ho ten la: ");puts(HoLot);

getch();

return 0;

99

}

ng thành ký t hoa - Hàm toupper() b. Đ i m t ký t ổ ộ th ự ườ ự

Hàm toupper() (trong ctype.h) đ ng thành ký t hoa. ượ c dùng đ chuy n đ i m t ký t ể ể ổ ộ th ự ườ ự

Cú pháp: char toupper(char c)

c. Đ i chu i ch th ữ ườ ỗ ổ ng thành chu i ch hoa, hàm strupr() ữ ỗ

Hàm struppr() đ c dùng đ chuy n đ i chu i ch th ng thành chu i ch hoa, k t qu ượ ữ ườ ể ể ỗ ổ ữ ế ỗ ả

tr v c a hàm là m t con tr ch đ n đ a ch chu i đ ỏ ỉ ế ả ề ủ ỗ ượ ộ ỉ ị c chuy n đ i. ể ổ

Cú pháp: char *strupr(char *s);

t ch ng trình nh p vào m t chu i ký t bàn phím. Sau đó s d ng hàm Ví dụ: Vi ế ươ ậ ỗ ộ t ự ừ ử ụ

strupr() đ chuy n đ i chúng thành chu i ch hoa. ữ ể ể ổ ỗ

#include

#include

#include

int main()

{

char Chuoi[255],*s;

printf("Nhap chuoi: ");gets(Chuoi);

s=strupr(Chuoi) ;

printf(“Chuoi chu hoa: ”);puts(s);

getch();

return 0;

}

d. Đ i chu i ch hoa thành chu i ch th ng, hàm strlwr() ữ ườ ữ ỗ ổ ỗ

ng, ta s d ng hàm strlwr(), các Mu n chuy n đ i chu i ch hoa thành chu i toàn ch th ữ ữ ườ ể ỗ ổ ố ỗ ử ụ

ng t nh hàm strupr() tham s c a hàm t ố ủ ươ ự ư

100

Cú pháp: char *strlwr(char *s)

e. Sao chép chu i, hàm strcpy() ỗ

Hàm này đ c dùng đ sao chép toàn b n i dung c a chu i ngu n vào chu i đích. ượ ộ ộ ủ ể ỗ ỗ ồ

Cú pháp: char *strcpy(char *des, const char *source)

t ch Ví dụ: Vi ế ươ ng trình cho phép chép toàn b chu i ngu n vào chu i đích. ộ ỗ ồ ỗ

#include

#include

#include

int main()

{

char Chuoi[255],s[255];

printf("Nhap chuoi: ");gets(Chuoi);

strcpy(s,Chuoi);

printf(“Chuoi dich: ”);puts(s);

getch();

return 0;

}

f. Sao chép m t ph n chu i, hàm strncpy() ầ ộ ỗ

Hàm này cho phép chép n ký t đ u tiên c a chu i ngu n sang chu i đích. ự ầ ủ ỗ ỗ ồ

Cú pháp: char *strncpy(char *Des, const char *Source, size_t n)

g. Trích m t ph n chu i, hàm strchr() ầ ộ ỗ

Đ trích m t chu i con c a m t chu i ký t b t đ u t m t ký t ủ ể ộ ỗ ộ ỗ ự ắ ầ ừ ộ đ ự ượ c ch đ nh trong ị ỉ

chu i cho đ n h t chu i, ta s d ng hàm strchr(). ử ụ ế ế ỗ ỗ

Cú pháp : char *strchr(const char *str, int c)

Ghi chú:

101

đã ch đ nh không có trong chu i, k t qu tr v là NULL. - N u ký t ế ự ả ả ề ế ỗ ỉ ị

- K t qu tr v c a hàm là m t con tr , con tr này ch đ n ký t c đ ả ả ề ủ ỉ ế ế ộ ỏ ỏ ự ượ ầ c tìm th y đ u ấ

tiên trong chu i str. ỗ

h. Tìm ki m n i dung chu i, hàm strstr() ế ỗ ộ

Hàm strstr() đ c s d ng đ tìm ki m s xu t hi n đ u tiên c a chu i s2 trong chu i s1. ượ ử ụ ự ấ ủ ế ể ệ ầ ỗ ỗ

Cú pháp: char *strstr(const char *s1, const char *s2)

K t qu tr v c a hàm là m t con tr ch đ n ph n t ả ả ề ủ ỏ ỉ ế ầ ử ầ ứ đ u tiên c a chu i s1 có ch a ủ ế ộ ỗ

chu i s2 ho c giá tr NULL n u chu i s2 không có trong chu i s1. ế ặ ỗ ỗ ỗ ị

t ch Ví dụ: Vi ế ươ ỗ ố ắ ầ ng trình s d ng hàm strstr() đ l y ra m t ph n c a chu i g c b t đ u ầ ủ ử ụ ể ấ ộ

chu i “ t ừ ỗ hoc”.

#include

#include

#include

int main()

{

char Chuoi[255],*s;

printf("Nhap chuoi: ");gets(Chuoi);

s=strstr(Chuoi,”hoc”);

printf(“Chuoi trich ra: ”);puts(s);

getch();

return 0;

}

3.4. BÀI T P ÁP D NG.

Vi t ch ế ươ ng trình nh p vào m t danh sách các h c sinh, và in danh sách v a nh p ra màn ọ ừ ậ ậ ộ

hình.

#include

#include

102

void main(){

char ds[20][50]; //Danh sách t i da 20 ng i, h tên m i ng i 50 ký t ố ườ ỗ ọ i t ườ ố ự

int i, n;

printf(“So hoc sinh:”); scanf(“%d”,&n);

for(i=0;i

{

printf(“Hoc sinh thu: %d”, i+1); gets(ds[i]);

}

for(i=0;i

puts(ds[i]);

getch();

}

TÀI LI U THAM KH O

[1] GS. Ph m Văn t ạ Ấ , K thu t l p trình C c s và nâng cao ậ ậ ơ ở ỹ ộ , NXB Th ng kê, Hà N i, ố

2003.

[2] Quách Tu n Ng c ọ , Ngôn ng l p trình C ữ ậ ấ , NXB Th ng kê, 2003. ố

t Linh - Lê Đang H ng - Lê Đ c Trung - Nguy n Thanh Thu (ch [3] Tr n Vi ầ ệ ứ ư ễ ỷ ủ

biên), Nh p môn l p trình ngôn ng C ậ ữ , NXB Khoa h c K thu t, 1999. ọ ậ ậ ỹ

[4] Lê Hoài B c - Lê Hoàng Thái - Nguy n Ph ng Th o - Nguy n T n Tr n Minh ễ ắ ươ ễ ầ ấ ả

Khang, Giáo trình Tin h c đ i c ng A2 ọ ạ ươ , NXB Đ i h c Qu c gia TP.HCM, 2005. ố ạ ọ

[5] Nguy n Đình Tê - Hoàng Đ c H i ậ ả , Giáo trình Lý thuy t và bài t p Ngôn ng C, T p ứ ễ ữ ế ậ

1, 2, 3, NXB Mũi Cà Mau, 2004.

Khoa Công ngh Thông tin - [6] Nguy n Văn Linh ễ , Giáo trình Tin H c Đ i C ng A, ọ ạ ươ ệ

103

Đ i h c C n Th , 1991. ầ ạ ọ ơ