Giáo trình Lập trình căn bản (Bản đẹp)

1. Giới thiệu

a. Tổng quan về ngôn ngữ lập trình C

C là ngôn ngữ lập trình cấp cao, được sử dụng rất phổ biến để lập

trình hệ thống cùng với Assembler và phát triển các ứng dụng.

Vào những năm cuối thập kỷ 60 đầu thập kỷ 70 của thế kỷ XX,

Dennish Ritchie (làm việc tại phòng thí nghiệm Bell) đã phát triển ngôn ngữ

lập trình C dựa trên ngôn ngữ BCPL (do Martin Richards đưa ra vào năm

1967) và ngôn ngữ B (do Ken Thompson phát triển từ ngôn ngữ BCPL vào

năm 1970 khi viết hệ điều hành UNIX đầu tiên trên máy PDP-7) và được cài

đặt lần đầu tiên trên hệ điều hành UNIX của máy DEC PDP-11.

Năm 1978, Dennish Ritchie và B.W Kernighan đã cho xuất bản quyển

“Ngôn ngữ lập trình C” và được phổ biến rộng rãi đến nay.

Lúc ban đầu, C được thiết kế nhằm lập trình trong môi trường của hệ

điều hành Unix nhằm mục đích hỗ trợ cho các công việc lập trình phức tạp.

Nhưng về sau, với những nhu cầu phát triển ngày một tăng của công việc lập

trình, C đã vượt qua khuôn khổ của phòng thí nghiệm Bell và nhanh chóng

hội nhập vào thế giới lập trình để rồi các công ty lập trình sử dụng một cách

rộng rãi. Sau đó, các công ty sản xuất phần mềm lần lượt đưa ra các phiên

bản hỗ trợ cho việc lập trình bằng ngôn ngữ C và chuẩn ANSI C cũng được

khai sinh từ đó.

Ngôn ngữ lập trình C là một ngôn ngữ lập trình hệ thống rất mạnh và

rất “mềm dẻo”, có một thư viện gồm rất nhiều các hàm (function) đã được

tạo sẵn. Người lập trình có thể tận dụng các hàm này để giải quyết các bài

toán mà không cần phải tạo mới. Hơn thế nữa, ngôn ngữ C hỗ trợ rất nhiều

phép toán nên phù hợp cho việc giải quyết các bài toán kỹ thuật có nhiều

công thức phức tạp. Ngoài ra, C cũng cho phép người lập trình tự định nghĩa

thêm các kiểu dữ liệu trừu tượng khác. Tuy nhiên, điều mà người mới vừa4

học lập trình C thường gặp “rắc rối” là “hơi khó hiểu” do sự “mềm dẻo” của

C. Dù vậy, C được phổ biến khá rộng rãi và đã trở thành một công cụ lập

trình khá mạnh, được sử dụng như là một ngôn ngữ lập trình chủ yếu trong

việc xây dựng những phần mềm hiện nay.

Ngôn ngữ C có những đặc điểm cơ bản sau:

o Tính cô đọng (compact): C chỉ có 32 từ khóa chuẩn và 40 toán tử

chuẩn, nhưng hầu hết đều được biểu diễn bằng những chuỗi ký tự ngắn gọn.

o Tính cấu trúc (structured): C có một tập hợp những chỉ thị của lập

trình như cấu trúc lựa chọn, lặp Từ đó các chương trình viết bằng C được

tổ chức rõ ràng, dễ hiểu.

o Tính tương thích (compatible): C có bộ tiền xử lý và một thư viện

chuẩn vô cùng phong phú nên khi chuyển từ máy tính này sang máy tính

khác các chương trình viết bằng C vẫn hoàn toàn tương thích.

o Tính linh động (flexible): C là một ngôn ngữ rất uyển chuyển và cú

pháp, chấp nhận nhiều cách thể hiện, có thể thu gọn kích thước của các mã

lệnh làm chương trình chạy nhanh hơn.

o Biên dịch (compile): C cho phép biên dịch nhiều tập tin chương

trình riêng rẽ thành các tập tin đối tượng (object) và liên kết (link) các đối

tượng đó lại với nhau thành một chương trình có thể thực thi được

(executable) thống nhất.

Ngày nay có một số ngôn ngữ lập trình cấp cao khác như C++, C#,

Đây là các ngôn ngữ lập trình hướng đối tượng và có thể xem là ngôn ngữ C

nâng cấp. Do đó, toàn bộ những gì bạn học được trong ngôn ngữ C đều có

thể áp dụng cho các ngôn ngữ nâng cấp đó.

Giáo trình Lập trình căn bản (Bản đẹp) trang 1

Trang 1

Giáo trình Lập trình căn bản (Bản đẹp) trang 2

Trang 2

Giáo trình Lập trình căn bản (Bản đẹp) trang 3

Trang 3

Giáo trình Lập trình căn bản (Bản đẹp) trang 4

Trang 4

Giáo trình Lập trình căn bản (Bản đẹp) trang 5

Trang 5

Giáo trình Lập trình căn bản (Bản đẹp) trang 6

Trang 6

Giáo trình Lập trình căn bản (Bản đẹp) trang 7

Trang 7

Giáo trình Lập trình căn bản (Bản đẹp) trang 8

Trang 8

Giáo trình Lập trình căn bản (Bản đẹp) trang 9

Trang 9

Giáo trình Lập trình căn bản (Bản đẹp) trang 10

Trang 10

Tải về để xem bản đầy đủ

pdf 101 trang xuanhieu 5920
Bạn đang xem 10 trang mẫu của tài liệu "Giáo trình Lập trình căn bản (Bản đẹp)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Lập trình căn bản (Bản đẹp)

Giáo trình Lập trình căn bản (Bản đẹp)
ần tử. Bạn 
dùng lệnh break để thoát khỏi vòng lặp dowhile trước khi bước sang phần tử thứ 
51. Thêm đoạn lệnh sau vào trước dòng 11: 
 if(i >= MAX) //kiem tra phan tu buoc sang 51 
 { 
 printf("Mang da day!\n"); //thong bao "Mang da day" 
 i++; //tang i len 1 do dong 14 giam i xuong 1 
 break; //thoat khoi vong lap dowhile 
 } 
 1.6. Khởi tạo mảng 
 Ví dụ 5 : Có 4 loại tiền 1, 5, 10, 25 và 50 đồng. Hãy viết chương trình nhập vào 
 số tiền sau đó cho biết số số tiền trên gồm mấy loại tiền, mỗi loại bao nhiêu tờ. 
 Phác họa lời giải: Số tiền là 246 đồng gồm 4 tờ 50 đồng, 1 tờ 25 đồng, 2 tờ 10 
 đồng, 0 tờ 5 đồng và 1 tờ 1 đồng, Nghĩa là bạn phải xét loại tiền lớn trước, nếu 
 hết khả năng mới xét tiếp loại kế tiếp. 
 Chương trình 
 /* Nhap vao so tien va doi tien ra cac loai 50, 25, 10, 5, 1 */ 
 #include 
 #include 
 #define MAX 5 
 90 
 void main(void) 
{ 
 int itien[MAX] = {50, 25, 10, 5, 1}; //Khai bao va khoi tao mang voi 5 phan 
tu 
 int i , isotien, ito; 
 printf("Nhap vao so tien: "); 
 scanf("%d", &isotien); //Nhap vao so tien 
 for (i = 0; i < MAX; i++) 
 { 
 ito = isotien/itien[i]; //Tim so to cua loai tien thu i 
 printf("%4d to %2d dong\n", ito, itien[i]); 
 isotien = isotien%itien[i]; //So tien con lai sau khi da loai tru cac loai 
tien da co 
 } 
 getch(); 
} 
Kết quả in ra màn hình 
 Nhap vao so tien: 246 
 4 tờ 50 đồng 
 1 tờ 25 đồng 
 2 tờ 10 đồng 
 0 tờ 5 đồng 
 1 tờ 1 đồng 
 _ 
* Điều gì sẽ xảy nếu số phần tử mảng lớn hơn số mục, số phần tử dôi ra không 
được khởi tạo sẽ điền vào số 0. Nếu số phần tử nhỏ hơn số mục khởi tạo trình 
biên dịch sẽ báo lỗi. 
 Ví dụ 6 : 
 int itien[5] = {50, 25}, phần tử itien[0] sẽ có giá trị 50, itien[1] có giá trị 25, 
 91 
 itien[2], itien[3], itien[4] có giá trị 0. 
 int itien[3] = {50, 25, 10, 5, 1} → trình biên dịch báo lỗi 
1.7. Khởi tạo mảng không bao hàm kích thước 
Trong ví dụ trên giả sử ta khai báo int itien[] = {50, 25, 10, 5, 1}. Khi đó trình 
biên dịch sẽ đếm số mục trong danh sách khởi tạo và dùng con số đó làm kích 
thước mảng. 
1.8. Mảng nhiều chiều 
Ví dụ 7 : khai báo mảng 2 chiều int ia[5][10]; với int là kiểu mảng, ia là tên 
mảng, 
số phần tử mảng là 5 x 10. 
Ý nghĩa: Khai báo một mảng 2 chiều số nguyên gồm 50 phần tử, mỗi phần tử 
có kiểu int. 
1.9. Tham chiếu đến từng phần tử mảng 2 chiều 
Sau khi được khai báo, mỗi phần tử trong mảng 2 chiều đều có 2 chỉ số để tham 
chiếu, chỉ số hàng và chỉ số cột. Chỉ số hàng bắt đầu từ 0 đến số hàng – 1 và chỉ 
số cột bắt đầu từ 0 đến số cột – 1. Tham chiếu đến một phần tử trong mảng 2 
chiều ia: ia[chỉ số hàng][chỉ số cột] 
 92 
ia[3][2] là phần tử tại hàng 3 cột 2 trong mảng 2 chiều xem như là một biến 
kiểu int. 
1.10. Nhập dữ liệu cho mảng 2 chiều 
 for (i = 0; i < 5; i++) //vòng for có giá trị i chạy từ 0 đến 4 cho hàng 
 for (ij = 0; ij < 10; ij++) //vòng for có giá trị ij chạy từ 0 đến 9 cho cột 
 { 
 printf("Nhap vao phan tu ia[%d][%d]: ", i + 1, ij + 1); 
 scanf("%d", &ia[i][ij]); 
 } 
* Thứ tự nhập dữ liệu vào mảng 2 chiều 
2. Chuỗi 
Chuỗi được xem như là một mảng 1 chiều gồm các phần tử có kiểu char như 
mẫu tự, con số và bất cứ ký tự đặc biệt như +, -, *, /, $, # 
Theo quy ước, một chuỗi sẽ được kết thúc bởi ký tự null ('\0' : kí tự rỗng). 
Ví dụ: chuỗi "Infoworld" được lưu trữ như sau: 
 93 
2.1. Cách khai báo chuỗi 
Ví dụ 8 : char cname[30]; 
Ý nghĩa: Khai báo chuỗi cname có chiều dài 30 kí tự. Do chuỗi kết thúc bằng kí 
tự null, nên khi bạn khai báo chuỗi có chiều dài 30 kí tự chỉ có thể chứa 29 kí 
tự. 
Ví dụ 9 : Nhập vào in ra tên 
Chương trình 
/* Chuong trinh nhap va in ra ten*/ 
 #include 
#include 
 void main(void) 
{ 
 char cname[30]; 
 printf("Cho biet ten cua ban: "); 
 scanf("%s", cname); 
 printf("Chao ban %s\n", cname); 
 getch(); 
} 
Kết quả in ra màn hình 
 Cho biet ten cua ban: Minh 
 Chao ban Minh 
Lưu ý: không cần sử dụng toán tử địa chỉ & trong cname trong lệnh scanf("%s", 
fname), vì bản thân fname đã là địa chỉ. 
Dùng hàm scanf để nhập chuỗi có hạn chế như sau: Khi bạn thử lại chương 
trình trên với dữ liệu nhập vào là Mai Lan, nhưng khi in ra bạn chỉ nhận được 
Mai. Vì hàm scanf nhận vào dữ liệu đến khi gặp khoảng trắng thì kết thúc. 
 94 
2.2. Hàm nhập (gets), xuất (puts) 
Sử dụng hàm gets, puts phải khai báo #include 
- Hàm gets dùng để nhập một chuỗi kí tự từ bàn phím thông qua stdin 
 Dạng hàm: char * gets(char *s); 
 Hoạt động: 
 Hàm tiến hành nhận một dãy kí tự từ stdin cho đến khi gặp kí tự ‘\n’ (do đó 
 nếu trong stdin đã có sẵn kí tự ‘\n’ rồi thì hàm gets sẽ không chờ người sử 
 dụng nhập dữ liệu vào nữa, ta nói hàm gets đã bị trôi). Kí tự ‘\n’ sẽ loại khỏi 
 stdin nhưng không được đặt vào chuỗi. Chuỗi nhận được sẽ tự động bổ sung 
 thêm kí tự ‘\0’ để đánh dấu sự kết thúc chuỗi rồi được đặt vào vùng nhớ do 
 con trỏ s trỏ tới. Hàm trả về địa chỉ của chuỗi nhận được. 
 Ví dụ để nhập từ bàn phím một chuỗi kí tự rồi lưu vào biến HoTen ta viết 
 như sau: 
 Char HoTen[25]; gets(HoTen); 
- Hàm puts dùng để đưa một chuỗi kí tự ra ngoài màn hình thông qua stdout. 
 Dạng hàm: int puts(const char *s); 
 Hoạt động: 
 Hàm sẽ đưa chuỗi do con trỏ s quản lý và một kí tự ‘\n’ lên stdout. Nếu 
 thành công hàm sẽ trả về kí tự cuối cùng được xuất (chính là kí tự ‘\n’), 
 ngược lại hàm trả về EOF. 
 Ví dụ câu lệnh puts(“Hello”);, sẽ đưa ra màn hình dòng chữ “Hello” sau đó 
 xuống dòng. Tương tự câu lệnh printf(“Hello\n”); 
Ví dụ 10 
Chương trình 
/* Chuong trinh nhap va in ra ten*/ 
 #include 
#include 
 void main(void) 
{ 
 95 
 char cname[30]; 
 puts("Cho biet ten cua ban: "); 
 gets(cname); 
 puts("Chao ban "); 
 puts(cname); 
 getch(); 
 } 
Kết quả in ra màn hình 
 Cho biet ten cua ban: 
 Mai Lan 
 Chao ban 
 Mai Lan 
 _ 
Lưu ý: Đối với hàm puts kí tự kết thúc chuỗi null (\0) được thay thế bằng kí tự 
newline (\n). Hàm gets và puts chỉ có 1 đối số và không sử dụng dạng thức trong 
nhập liệu cũng như xuất ra màn hình. 
 2.3. Khới tạo chuỗi 
Ví dụ 11 
Chương trình 
/* Chuong trinh nhap va in ra ten*/ 
 #include 
 #include 
 void main(void) 
{ 
 char cname[30]; 
 char chao[] = "Chao ban"; 
 printf("Cho biet ten cua ban: "); 
 gets(cname); 
 96 
 printf("%s %s.\n", chao, cname); 
 getch(); 
} 
Kết quả in ra màn hình 
 Cho biet ten cua ban: Mai Lan 
 Chao ban Mai Lan 
 _ 
Lưu ý: Chiều dài tối đa của chuỗi khởi tạo bằng số kí tự + 1 (kí tự null). Với chuỗi 
chao có chiều dài là 9. 
 2.4. Mảng chuỗi 
Ví dụ 12 
Chương trình 
/* Chuong trinh nhap thang (so) và in ra thang (chu) tuong ung*/ 
#include 
#include 
 void main(void) 
{ 
 char cthang[12][15] = {"January", "February", "March", "April", 
 "May", "June", "July", "August", "September", 
 "October", "November", "December"}; 
 int ithang; 
 printf("Nhap vao thang (1-12): "); 
 scanf("%d", &ithang); 
 printf("%s.\n", cthang[ithang-1]); 
 getch(); 
} 
Kết quả in ra màn hình 
 97 
Nhap vao thang (1-12): 2 
February 
_ 
 98 
 Bài tập hết chương 
Bài 1. Viết hàm tìm số lớn nhất, nhỏ nhất trong một mảng n số nguyên. 
Bài 2. Viết hàm sắp xếp tăng dần, giảm dần của một dãy số cho trước. 
Bài 3. Viết hàm tách tên và họ lót từ một chuỗi cho trước. 
Bài 4. Viết hàm cắt bỏ khoảng trắng thừa ở giữa, hai đầu. 
Bài 5. Viết hàm chuyển đổi 1 chuỗi sang chữ thường và 1 hàm chuyển đổi sang 
chữ HOA. 
Bài 6. Viết hàm chuyển đổi 1 chuỗi sang dạng Title Case (kí tự đầu của mỗi từ là 
chữ HOA, các kí tự còn lại chữ thường) 
Bài 7. Viết chương trình nhập vào 1 chuỗi và in ra chuỗi đảo ngược. 
 Ví dụ: Nhập vào chuỗi "Lap trinh C can ban" 
 In ra "nab nac C hnirt paL" 
Bài 8. Viết chương trình nhập vào một chuỗi ký tự rồi đếm xem trong chuỗi đó có 
bao nhiêu chữ 'th'. 
Bài 9. Biết rằng năm 0 là năm Canh thân (năm kỵ nhau có chu kì là 3, năm hợp 
nhau có chu kì là 4). Hãy viết chương trình cho phép gõ vào năm dương lịch (ví dụ 
1997), xuất ra năm âm lịch (Đinh sửu) và các năm kỵ và hợp. 
Có 12 chi: Tý, Sửu, Dần, Mão, Thìn, Tỵ, Ngọ, Mùi, Thân, Dậu, Tuất, Hợi. 
 Có 10 can: Giáp, Ất, Bính, Đinh, Mậu, Kỷ, Canh, Tân, Nhâm, Quý. 
 99 
 Mục lục 
Chương I. Giới thiệu về ngôn ngữ C ...................................................................... 1 
 1. Giới thiệu ......................................................................................................................... 3 
 2. Khởi động và thoát chương trình ...................................................................................... 9 
Chương II. Các thành phần trong ngôn ngữ C ..................................................... 11 
 1. Từ khóa ......................................................................................................................... 11 
 2. Tên ................................................................................................................................ 11 
 3. Kiểu dữ liệu ................................................................................................................... 12 
 4. Ghi chú .......................................................................................................................... 15 
 5. Khai báo biến ................................................................................................................. 16 
 6. Nhập/ xuất dữ liệu.......................................................................................................... 21 
Chương III. Cấu trúc rẽ nhánh có điều kiện .......................................................... 27 
 1. Lệnh và khối lệnh .......................................................................................................... 27 
 1.1. Lệnh ....................................................................................................................... 27 
 1.2. Khối lệnh ................................................................................................................ 27 
 2. Lệnh if ........................................................................................................................... 27 
 2.1. Dạng 1 (if thiếu) ..................................................................................................... 27 
 2.2. Dạng 2 (if đủ) ......................................................................................................... 31 
 2.3. Cấu trúc else if ........................................................................................................ 35 
 2.4. Cấu trúc if lồng nhau............................................................................................... 37 
 3. Lệnh switch ................................................................................................................... 40 
 3.1. Cấu trúc switch.case (switch thiếu) ..................................................................... 41 
 3.2. Cấu trúc switch.case (switch đủ) ......................................................................... 44 
 3.3. Cấu trúc switch lồng nhau ....................................................................................... 46 
Chương IV. Cấu trúc vòng lặp.............................................................................. 53 
 1. Lệnh for ......................................................................................................................... 53 
 2. Lệnh break ..................................................................................................................... 59 
 3. Lệnh continue ................................................................................................................ 60 
 4. Lệnh while ..................................................................................................................... 62 
 5. Lệnh dowhile ............................................................................................................. 64 
 6. Vòng lặp lồng nhau ........................................................................................................ 67 
 7. So sánh sự khác nhau của các vòng lặp .......................................................................... 69 
Chương V. Hàm ................................................................................................... 71 
 100 
 1. Các ví dụ về hàm ........................................................................................................... 71 
 2. Tham số dạng tham biến và tham trị ............................................................................... 80 
 3. Sử dụng biến toàn cục .................................................................................................... 81 
 4. Dùng dẫn hướng #define ................................................................................................ 84 
Chương VI. Mảng và chuỗi .................................................................................. 86 
 1. Mảng ............................................................................................................................. 86 
 1.1. Cách khai báo mảng ................................................................................................ 86 
 1.2. Tham chiếu đến từng phần tử mảng ........................................................................ 86 
 1.3. Nhập dữ liệu cho mảng ........................................................................................... 87 
 1.4. Đọc dữ liệu từ mảng................................................................................................ 87 
 1.5. Sử dụng kỹ thuật Sentinal ....................................................................................... 89 
 1.6. Khởi tạo mảng ........................................................................................................ 90 
 1.7. Khởi tạo mảng không bao hàm kích thước .............................................................. 92 
 1.8. Mảng nhiều chiều ................................................................................................... 92 
 1.9. Tham chiếu đến từng phần tử mảng 2 chiều ............................................................ 92 
 1.10. Nhập dữ liệu cho mảng 2 chiều ........................................................................... 93 
 2. Chuỗi ............................................................................................................................. 93 
 2.1. Cách khai báo chuỗi ................................................................................................ 94 
 2.2. Hàm nhập (gets), xuất (puts) ................................................................................... 95 
 2.3. Khới tạo chuỗi ........................................................................................................ 96 
 2.4. Mảng chuỗi ............................................................................................................. 97 
 101 

File đính kèm:

  • pdfgiao_trinh_lap_trinh_can_ban_ban_dep.pdf