[r]
(1)TRƯỜNG ĐẠI HỌC PHẠM VĂN ĐỒNG KHOA CÔNG NGHỆ THÔNG TIN
TRẦN TẤN TỪ
BÀI GIẢNG
(Dùng cho sinh viên lớp đại học Công nghệ
thông tin, đại học Sư phạm tin học)
(2)LỜI NĨI ĐẦU
Cơ sở lập trình học phần giúp cho sinh viên nắm kiến thức để cài đặt thành cơng thuật tốn thành chương trình ngơn ngữ lập trình C Qua đó, trang bị cho sinh viên kiến thức để tiếp cận học tập tốt ngôn ngữ lập trình khác học kỳ
Bài giảng biên soạn giảng dạy cho sinh viên năm thứ nhất, bậc đại
học ngành Công nghệ thông tin ngành Sư phạm tin học kể từ năm 2008, theo hình thức đào tạo niên chế Hiện chương trình đào tạo Trường Đại học Phạm Văn Đồng chuyển đổi sang đào tạo theo học chế tín Chính vậy, giảng chỉnh sửa, bổ sung cho phù hợp với hình thức đào tạo theo học chế tín
Cũng nhân xin chân thành cám ơn hội đồng chuyên môn khoa Công
nghệ thông tin, Th.S Huỳnh Triệu Vỹ Th.S Võ Đức Lân dành thời gian đọc
đóng góp nhiều ý kiến quý báu để giảng hoàn chỉnh hơn, đáp ứng nhu cầu
học tập sinh viên Khoa Công nghệ thông tin - Trường Đại học Phạm Văn Đồng
Bài giảng khơng tránh khỏi thiếu sót, mong bạn đồng nghiệp
đóng góp ý kiến để giảng hoàn thiện lần chỉnh sửa sau
Xin chân thành cám ơn quý thầy cô, bạn đồng nghiệp !
(3)Bài giảng Cơ sở lập trình -1-
CHƯƠNG 1: CÁC THÀNH PHẦN CƠ BẢN Mục tiêu
Kết thúc chương, sinh viên có thể:
Nắm được thành phần cơ bản của ngôn ngữ lập trình C: bộ ký hiệu, từ khóa, tên cách đặt tên, cách ghi lời thích
Nắm được cấu trúc chung của một chương trình C
Hiểu vận dụng được phép toán, hàm đã được xây dựng cho kiểu dữ liệu cơ sở: kiểu số nguyên, kiểu số thực, kiểu ký tự, kiểu boolean 1.1Bộ ký hiệu từ khóa
1.1.1 Bộ ký hiệu
- 26 chữ la tinh hoa: A, B, …, Z - 26 chữ la tinh thường: a, b, …, z - 10 chữ số thập phân: 0,1,…,9
- Các ký hiệu toán học: +, -, *, /, = <, >, (, )
- Các ký hiệu đặc biệt: , ; “ ‘ _ @ # $ ! ^ [ ] { } … - Dấu cách hay khoảng trống
1.1.2 Từ khóa
Là từ dùng riêng ngôn ngữ lập trình C từ khóa có ý nghĩa tác dụng cụ thể
* Chú ý:
- Khơng thểđịnh nghĩa lại từ khóa
- Các từ khóa C viết dạng chữ thường
Một số từ khóa thơng dụng hay dùng ngơn ngữ lập trình C
auto break case char continue default double else extern float for goto if int long register return short sizeof static struct switch typedef union usnigned void volatile while asm … 1.1.3 Tên cách đặt tên
Trong chương trình, người lập trình dùng nhiều tên: tên chương trình, tên biến, tên hằng, tên hàm,… Mọi tên phải khai báo trước sử dụng Qui tắc đặt tên:
(4)Bài giảng Cơ sở lập trình -2-
- Tên khơng bắt đầu chữ số
- Tên không chứa ký tự đặc biệt dấu cách, dấu chấm câu,… Số ký tự tối đa tên Turbo C 32
- Tên không trùng với từ khóa
- C ngơn ngữ lập trình phân biệt chữ hoa chữ thường, tên NGHIEM khác với tên: Nghiem, nghiem,…
- Không đặt tên tiếng Việt (C xem cách làm sai cú pháp) - Các ví dụ vềđặt tên:
+ Một số tên đặt đúng: Gia_tri, _DX, pi, … + Một số tên đặt sai: 3X, PI$, Bien 1,
1.1.4 Chú thích
Khi viết chương trình bạn nên thêm vào lời thích chương trình sáng sủa dễ hiểu Trình biên dịch khơng biên dịch thích để tạo mã chương trình mà có tác dụng thuyết minh thêm cho dễ hiểu
Phần văn nằm cặp ký hiệu mở /* đóng */ phần thích Phần thích nằm nhiều dịng, miễn nằm cặp dấu mở
đóng nêu
Lưu ý: Trong C++ lời thích nằm sau cặp dấu // viết một dòng 1.2 Cấu trúc chung của một chương trình C
Cấu trúc tổng thể chương trình C thường có khối thơng dụng sau: ……… #include <…> /* để gọi tập tin tiền xử lý */
#define <…> /* định nghĩa số */ typedefs <…> /* định nghĩa kiểu liệu */
……… Function prototype /* khai báo nguyên mẫu hàm gồm tên tham số */ ……… Khai báo biến
……… <Kiểu liệu trả về> main() /* chương trình C bắt buộc phải có hàm main */ { Khai báo biến cục bộ, hàm main Các câu lệnh thực hàm main
(5)Bài giảng Cơ sở lập trình -3-
……… Function prototype /* định nghĩa nội dung tường minh hàm */
{
Khai báo biến, hàm Các câu lệnh thực hàm }
……… Như vậy, chương trình C thường bao gồm thành phần: tiền xử lý, định nghĩa: kiểu, hằng, khai báo biến ngoài, hàm tự tạo, hàm main Trong đó:
+ #include <…> /* để gọi tập tin tiền xử lý */ Ví dụ 1.1: #include <stdio.h>
+ #define <Tên số> <Giá trị hằng> /* định nghĩa số */ Ví dụ 1.2: #define MAX 100
+ typedef <tên kiểu cũ> <tên kiểu mới> /* định nghĩa kiểu liệu */ Ví dụ 1.3: typedef int Songuyen;
+ Function prototype /* khai báo nguyên mẫu hàm gồm tên tham số */ Trong phần khai báo nguyên mẫu hàm, bạn kiểu giá trị trả hàm, tên hàm, tham số hình thức hàm
Ví dụ 1.4: Khai báo nguyên mẫu hàm tính diện tích hình trịn float Tinh_dien_tich(float radius);
+ Khai báo biến (biến toàn cục): Là nơi khai báo biến có tầm tác dụng chương trình
Ví dụ 1.5: int n;
+ Trong chương trình C có nhiều hàm, hàm main hàm chính, bắt buộc phải có câu lệnh thực từ xuống Về nguyên tắc hàm phải trả lại giá trị cho tên hàm, không muốn sử dụng giá trị trả về, bạn viết sau: void main() Từ khóa void để hàm khơng có giá trị riêng (tức hàm không mang giá trị cụ thể thực xong hàm)
+ /* định nghĩa nội dung tường minh hàm */
Ví dụ 1.6: Định nghĩa nội dung hàm tính diện tích hình trịn với tham số radius (bán kính hình trịn)
(6)Bài giảng Cơ sở lập trình -4-
{ float dientich;
dientich = PI*radius*radius; return(dientich);
}
Lưu ý: Định nghĩa hàm Tinh_dien_tich viết phía hàm main
* Một số ví dụ:
Ví dụ 1.7: Chương trình in hình chữ “Chao cac ban” “Hen gap lai”
Giải
#include <stdio.h> main()
{
printf(“Chao cac ban\n”); printf(“Hen gap lai\n”); getch();
}
Giải thích chương trình ví dụ 1.7
#include <stdio.h>: Khai báo tập tin tiền xử lý stdio.h (viết tắt từ standard input/output) tập tin tiền xử lý chứa hàm vào/ra chuẩn Trong chương trình có sử dụng hàm printf (hàm chuẩn) định nghĩa tập tin stdio.h
Hàm printf hàm cho in hình nội dung nằm cặp dấu “ ” Ký tự \n ký tựđiều khiển xuống dòng
Phần thân chương trình bao gồm đoạn chương trình: main()
{
…
}
getch(); Khi chương trình viết hình câu “Chao cac ban” “Hen gap lai” dừng lại cho người sử dụng xem Nếu khơng có lệnh chương trình trở hình văn chương trình, người sử dụng khơng xem
được kết quả, lúc phải bấm tổ hợp phím Alt + F5 xem kết Ví dụ 1.8: Chương trình tính diện tích hình tròn
(7)Bài giảng Cơ sở lập trình -5-
#include <stdio.h> main()
{ float R,Dien_tich;
printf(“Nhap ban kinh R = “); scanf(“%f”,&R);
Dien_tich = 3.14*R*R;
printf(“Dien tich hinh tron co ban kinh %f %f”,R,Dien_tich); getch();
}
Giải thích chương trình ví dụ 1.8
float R, Dien_tich; Khai báo biến R Dien_tich có kiểu số thực printf(“Nhap ban kinh R = “); in hình dịng: Nhap ban kinh R = scanf(“%f”,&R); Hàm đọc giá trị từ bàn phím vào cho biến R %f mã
định dạng để qui định đọc giá trị vào cho biến R có kiểu số thực, &R hiểu
đọc giá trị vào cho nhớ biến R
Dịng lệnh printf(“Dien tich hinh tron co ban kinh %f %f”,R,Dien_tich); In giá trị biến R biến Dien_tich với qui cách in số thực
Ví dụ 1.9: Chương trình tính diện tích hình trịn có sử dụng chương trình
Giải
#include <stdio.h> main()
float Tinh_dien_tich(float radius); main()
{ float R;
pritnf(“Nhap ban kinh R = “); scanf(“%f”,&R);
printf(“Dien tich hinh tron = %f “,Tinh_dien_tich(R)); getch();
}
float Tinh_dien_tich(float radius) #define PI 3.14
{ float dientich;
(8)Bài giảng Cơ sở lập trình -6-
return(dientich); }
Giải thích chương trình ví dụ 1.9
#define PI 3.14 Đây khối ghép định nghĩa macro Với định nghĩa này, ngôn ngữ lập trình C dịch chương trình, chỗ chương trình xuất tên PI sẽđược thay 3.14
Việc tính diện tích thực hàm Tinh_dien_tich với tham số radius Nguyên mẫu hàm Tinh_dien_tich khai náo trước hàm main() định nghĩa tường minh nội dung hàm sau hàm main
1.3 Kiểu dữ liệu cơ sở
1.3.1 Kiểu dữ liệu
Dữ liệu dạng biểu diễn vật lý thông tin Những dạng liệu
được xử lý máy tính điện tử gồm: Các ký tự, hình ảnh, âm thanh, tri thức, kiện, luật dẫn Theo nghĩa rộng, liệu thơ số, ký tự, hình ảnh hay kết khác thiết bị chuyển đổi lượng vật lý thành ký hiệu Các liệu loại thường xử lý tiếp người đưa vào máy tính Trong máy tính, liệu lưu trữ xử lý chuyển cho người hay máy tính khác Dữ liệu thơ thuật ngữ tương đối, liệu xử lý bước liệu thô bước Trong máy tính điện tử, liệu
được biểu diễn chuỗi ký hiệu bảng chữ đó, mà phổ biến bảng chữ nhị phân (gồm ký hiệu “0” “1”) Một chương trình máy tính tập hợp liệu hiểu lệnh
Kiểu dữ liệu một tập hợp giá trị mà một biến thuộc kiểu đó có thể nhận được đó xác định một số phép toán Các kiểu liệu thường quy định ngơn ngữ lập trình, hay nói cách khác ngơn ngữ lập trình có tập kiểu liệu khác Trong ngôn ngữ lập trình, kiểu liệu biểu diễn miền giá trị xác định đó, giới hạn phụ thuộc vào kích thước vùng nhớ biểu diễn số Vì vậy, thơng tin đặc trưng kiểu liệu bao gồm:
+ Tên kiểu liệu
+ Kích thước vùng nhớ biểu diễn (tức miền giá trị) + Các phép toán sử dụng kiểu liệu
1.3.2 Kiểu số nguyên
(9)Bài giảng Cơ sở lập trình -7-
ngữ lập trình C kiểu số nguyên có dấu, định nghĩa với từ khóa int chiếm byte
Bảng từ khóa số nguyên phạm vi biểu diễn
Kiểu biến Từ khóa Số byte Phạm vi biểu diễn
Character char -128 +127
Integer int -32768…+32767
Short Integer short -32768…+32767
Unsigned character unsigned char 0…255
Unsigned Integer unsigned int 65535
Unsigned Short Integer unsigned short 65535
Long Integer long -2147483648…
+2147483647 Unsigned Long Integer Unsigned long 0… 4294967295
Lưu ý: Kiểu char thực chất kiểu ký tự, song C cho phép dùng ký tự như số nguyên Vì vậy, tính tốn biểu thưc số học kiểu char được sử dụng như số nguyên (chỉ mã ASCII tương ứng của ký tựđó) nhưng tính tốn trong biểu thức ký tự được hiểu ký tự Đây sự mềm dẻo của ngơn ngữ lập trình C
Có nhiều phép tính định nghĩa cho số ngun: phép tính số học, phép tính quan hệ, phép tính logic số học
Bảng liệt kê phép tính số học đối với kiểu số nguyên Phép toán Ký hiệu Ví dụ
Cộng + a + b
Trừ - a - b
Nhân * a * b
Chia lấy phần nguyên
/ a / b
Chia lấy số dư % a % b
Về nguyên tắc phép chia số nguyên cho kết số nguyên Muốn nhận
được kết số thực, bạn phái viết (float) a / b
Ví dụ 1.10: a = 15; b = 2; Vậy kết a/b 15/2 = Bạn muốn nhận kết phép chia số thực phải viết: (float) a/b; Lúc 15/2 = 7.5
(10)Bài giảng Cơ sở lập trình -8-
Hằng số nguyên có định kiểu trước: Để ghi số nguyên với kiểu định trước bạn ghi thêm ký tự vào cuối dãy số: L cho kiểu long, U cho kiểu Unsigned Integer, UL cho kiểu Unsigned Long
Ví dụ 1.11: 20000U số nguyên theo kiểu Unsigned Integer; * Cách biểu diễn số nguyên dưới dạng số Hecxa:
+ Ngoài cách viết theo dạng số thập phân, C quy ước cho phép viết số nguyên dạng số Hecxa, ký tự bắt đầu 0x 0X Chẳng hạn số 65 hệ thập phân viết dạng số Hecxa 0X41
+ Nếu viết số nguyên dạng số hệ số ký tự bắt đầu Chẳng hạn số 65 hệ thập phân viết dạng sốở hệ số là: 0101
Hai cách viết thuận lợi cho người lập trình hệ thống Lúc đó, byte biểu diễn hai chữ số Hecxa số Hecxa biểu diễn cụm số nhị phân bít Chẳng hạn: số 255 hệ thập phân, biểu diễn hệ Hecxa 0xFF
Ví dụ 1.12: Chương trình tính tổng số nguyên
Giải
#include <stdio.h> main()
{ int m=5,n=10; long tong; tong = m+n; getch(); }
1.3.3 Kiểu số thực
Là tập hợp số thực biểu diễn máy tính định nghĩa số từ khóa: float, double, long double
Trong máy tính số thực biểu diễn dạng: dạng bình thường dạng có phần mũ (dạng số khoa học)
+ Dạng bình thường: 3.14, 5.0
+ Dạng số khoa học: 1.254567E+02 tương đương với 1.254567*102 = 125.4567
(11)Bài giảng Cơ sở lập trình -9-
Bảng từ khóa của số thực phạm vi biểu diễn Kiểu biến Từ khóa Số
byte
Phạm vi biểu diễn
Số thực với độ xác đơn Single-precision floating-point
float 3.4e-38 … 3.4e38
độ xác chữ số Số thực với độ xác kép
Double-precision floating-point
double 1.7e-308 … 1.7e308
độ xác 15 chữ số Số thực với độ xác kép (độ
dài lớn)
Long double-precision floating-point
long double
10 3.4e-4832 … 1.1e4932
độ xác 19 chữ số
Cách viết số thực:
+ Không cần phần lẻ sau dấu chấm:
+ Không cần dấu chấm phần định trị có phần mũ: 2E-8 + Viết dạng bình thường: 5.6
+ Khơng cần số đầu tiên: 1512 + Chấp nhận dùng chữ e: 0.07e-3
Các phép tính số học kiểu thực: Cộng, trừ, nhân, chia Khác với kiểu số nguyên, phép chia (/) cho kết quả số thực khơng tồn tại phép tốn % cho kiểu số thực
Khởi tạo biến số thực ta viết: float x; x = 7.43; Hoặc viết float x = 7.43; Hằng số thực định trước kiểu: Ta viết số thực với kiểu định trước cách ghi thêm ký tự vào cuối dãy số (F cho kiểu float, L cho kiểu Long)
Ví dụ 1.13: 0.1234567E-33L số thực kiểu long
Các hàm số học dùng cho kiểu số nguyên số thực
Các hàm số học dùng cho kiểu số nguyên kiểu số thực định nghĩa tập tin tiền xử lý math.h sử dụng với đối số số nguyên số thực Nếu ký hiệu i tham số nguyên, f tham số thực Ta có bảng biểu diễn sau:
Hàm Kiểu giá trị trả về Tác dụng
abs(i) Int Trả giá trị tuyệt đối số nguyên i fabs(d) Double Trả giá trị tuyệt đối số thực d sin(d) Double Trả giá trị hàm sin
(12)Bài giảng Cơ sở lập trình -10-
cosh(d) Double Trả giá trị hàm cosh tan(d) Double Trả giá trị hàm tang exp(d) Double Trả giá trị e mũ x
log(d) Double Trả giá trị hàm loga số tự nhiên d pow(d1,d2) Double Trả giá trị d1 mũ d2
floor(d) Double Hàm cắt tròn số
ceil(d) Double Hàm làm tròn số
fmod(d1,d2) Double Hàm lấy phần dư phép chia d1/d2 sqrt(d) Double Hàm khai bậc
srand(d) void Khởi tạo số ngẫu nhiên, khơng có giá trị trả
Lưu ý: Các hàm số học chứa tập tin tiền xử lý math.h bạn phải khai báo ởđầu chương trình theo cú pháp: #include <math.h>
Ví dụ 1.14:
floor(3.146) = floor(3.746) = ceil(56.678) = 57 ceil(-56,678) = -57
1.3.4 Kiểu ký tự
Được định nghĩa với từ khóa char, bao gồm tất ký tự thường dùng: + Chữ a, b, c
+ Chữ số 0,…,9
+ Các dấu chấm phân đoạn câu: , ! …
Một ký tự viết cặp dấu nháy đơn Chẳng hạn: ‘a’; ‘0’; ký tựđược lưu trữ byte ô nhớ
Một giá trị kiểu ký tự phần tử tập hữu hạn ký tựđược xếp có thứ tự Có nhiều cách xếp chữ khác (không tồn chữ chuẩn cho tất máy tính) Tuy vậy, mã ký tựđược dùng rộng rãi phổ biến để trao đổi thơng tin máy vi tính mã ASCII (American Standard Code for Information Interchange) Ở ta quan tâm tới 128 ký tự đầu bảng mã ASCII (phần chuẩn để xây dựng ký tự cho ngơn ngữ lập trình)
(13)Bài giảng Cơ sở lập trình -11-
Bảng mã hóa ký tự khơng nhìn thấy được
Ký tự Dãy mã Giá trị bảng mã ASCII Hexa-Decimal Decimal
Đỗ chuông (BEL) \a 0x07
Xóa trái (BackSpace) \b 0x08
Nhảy cách ngang (HT) \t 0x09
Xuống dòng (LF) \n 0x0A 10
Nhảy cách đứng (VT) \v 0x0B 11
Xuống (FF) \f 0x0C 12
Vềđầu dòng (CR) \r 0x0D 13
Dấu “ \“ 0x22 34
Dấu ‘ \‘ 0x2C 39
Dấu ? \? 0x3F 63
Dấu \ \\ 0x5C 92
Mã null \0 0x00 00
Ví dụ 1.15: Muốn in hình chữ “Chao ban” với tiếng chuông phát trước sau viết chữ “Chao ban” bạn viết lệnh: printf(“\a Chao ban\a”);
Ngồi bạn sử dụng cách viết dạng hệ số 16 hay hệ số Chẳng hạn ký tự ‘A’ viết \x41 hay \101 Cách viết thường
được áp dụng cho sau bảng mã ASCII (vì sau bảng mã ASCII có hình dạng vị trí khó nhớ)
Khởi tạo giá trị cho biến ký tự: const char RC = ‘\r’; LF = ‘\n’; ESC = ‘0x1B’;
Các hàm xử lý ký tự nằm tập tin tiền xử lý ctype.h
Một số hàm xử lý ký tự
Hàm Kiểu giá trị trả về Tác dụng
toASCII(c) int Trả mã ASCII ký tự chứa biến ký tự c tolower(c) int Trả ký tự thường ký
tự chứa biến ký tự c toupper(c) int Trả ký tự hoa ký tự
chứa biến ký tự c Ví dụ 1.16: Chương trình đọc từ bàn phím ký tự thường, chuyển thành ký tự hoa in hình
(14)Bài giảng Cơ sở lập trình -12-
#include <stdio.h> #include <ctype.h> main()
{ char kytu_thuong, kytu_hoa; kytu_thuong = getchar();
kytu_hoa = toupper(kytu_thuong); putchar(kytu_hoa);
}
Trong chương trình ví dụ 1.16, hàm getchar() để nhận ký tự từ bàn phím hàm putchar() viết ký tự lên hình Các hàm nằm tập tin ctype.h
1.3.5 Kiểu dữ liệu Boolean
Trong thực tế ta thường gặp loại đại lượng nhận hai giá trị:
đúng (TRUE) sai (FALSE) Nhưng C kiểu liệu boolean không
định nghĩa cách tường minh, ẩn núp dạng số nguyên Trong C, kết tính tốn trả số ngun giá trị sẽđược hiểu giá trị FALSE, cịn kết trả khác (thơng thường 1) hiểu TRUE
Các phép toán của kiểu boolean
Toán tử logic Phép toán logic Ý nghĩa
&& AND Phép “và” logic
|| OR Phép “hoặc” logic
! NOT Phép “đảo” hay “phủđịnh” logic
Bảng chân trị của phép toán logic
X Y X && Y X || Y !X
0 0
0 Số khác 0 1
Số khác 0
Số khác Số khác 1
Ví dụ 1.17: Kết câu lệnh printf(“%d”,0&&3); hình
1.4Câu hỏi tập chương
1. Tên dùng để làm ? Quy tắc đặt tên ngơn ngữ lập trình C ?
2. Chương trình nguồn ? Có loại chương trình dịch ?
3. Kiểu liệu ? Các thông tin đặc trưng kiểu liệu ?
(15)Bài giảng Cơ sở lập trình -13-
CHƯƠNG 2: TIỀN XỬ LÝ - HẰNG - BIẾN - TOÁN TỬ
BIỂU THỨC - CÂU LỆNH
Mục tiêu
Kết thúc chương, sinh viên có thể:
Hiểu được ý nghĩa cách sử dụng của tập tin tiền xử lý thông dụng Nắm được khái niệm: hằng, biến, toán tử, biểu thức, câu lệnh cách sử dụng
2.1Tiền xử lý
Để thực chương trình C, chương trình nguồn bạn cần dịch sang ngơn ngữ máy chương trình dịch (compiler), trước tiên phải trải qua bước liên kết với đối tượng cần thiết khác, công việc thực tiền xử lý Thật vậy, viết chương trình C, bạn khơng viết tất mà viết liên quan trực tiếp đến cơng việc bạn, phần cịn lại thường rắc rối C viết sẵn bạn sử dụng tài nguyên Bộ tiền xử lý giúp bạn tìm liên kết chương trình nguồn với tài nguyên Lúc biên dịch thành cơng, bạn thấy đĩa ngồi tập nguồn bạn viết, bạn thấy có vài tập tin khác tên có obj, exe
Các lệnh C mà bạn dùng nhiều, để thuận lợi cho trình viết chương trình, nhà phát triển ngôn ngữ C viết lệnh vào tập tin tiền xử lý theo tiêu chí phục vụ Chẳng hạn, lệnh nhập, lệnh xuất, hàm toán học, lệnh xử lý chuỗi ký tự, lệnh tương tác hình, lệnh máy in, lệnh cho thuật toán kinh điển,…
Tuy nhiên, viết chương trình, khơng phải lúc bạn sử dụng tất lệnh mà bạn dùng lệnh cần tập tin chứa lệnh theo cú pháp:
#include <Tên tập tin cần liên kết> #include “Tên tập tin cần liên kết” Hai cách viết khác cách tìm kiếm tiền xử lý: Cách viết đầu tìm kiếm rộng hơn, thư mục C; Cách viết thứ nhì thực tìm kiếm thư mục làm việc C, tập tin tìm kiếm khơng có ởđó, chương trình báo lỗi
Trong chương trình, có nhiều tập tin cần liên kết, bạn viết chúng tập tin dòng đặt ởđầu chương trình nguồn Chẳng hạn:
(16)Bài giảng Cơ sở lập trình -14-
Các dịng khai báo khơng phải lệnh nên khơng có dấu chẩm phẩy cuối câu Tập tin tiền xử lý có h (header) chứa định nghĩa macro, hàm thông dụng định nghĩa trước
Tóm lại: Trong ngơn ngữ lập trình C, việc dịch một tập tin nguồn thành tập tin thực thi được tiến hành qua bước độc lập nhau: Tiền xử lý (Preprocessor) biên dịch (Tranlation) Hai bước được nối tiếp một cách tự động theo cách thức mà bạn có ấn tượng rằng đã thực hiện như một xử lý nhất
Sự giống khác thị #include #define:
+ Chỉ thị #include sử dụng nhằm gộp vào nội dung tập tin cần có (header file), khơng thể thiếu việc sử dụng hàm thư viện chuẩn
+ Chỉ thị #define hay sử dụng tập tin tiền xử lý định nghĩa trước thường lập trình viên khai thác định nghĩa ký hiệu, chẳng hạn: #define SIZE 20
CÁC TẬP TIN TIỀN XỬ LÝ THÔNG DỤNG
stdio.h: Tập tin định nghĩa hàm vào chuẩn (standard input/output) như: printf(), scanf(), getc(), putc(), gets(), puts(), fflush(), fopen(), fclose(), fread(), fwrite(), getchar(), putchar(),
conio.h: Tập tin chứa định nghĩa vào/ra chếđộ DOS console như: clrscr(), getch(), getche(), getpass(), cgets(), cputs(), putch(),clreol(), kbhit(),…
math.h: Tập tin định nghĩa hàm tính tốn như: abs(), sqrt(), log(), log10(), sin(), cos(), acos(), asin(), atan(), pow(), exp(),…
alloc.h: Tập tin định nghĩa hàm liên quan đến việc cấp phát quản lý nhớ, như: calloc(), realloc(), malloc(), free(); farmalloc(), farcalloc(), farfree(),…
io.h: Tập tin định nghĩa hàm vào/ra cấp thấp, như: open(), _open(), read(), _read(), close(), _close(), creat(), _creat(), creatnew(), eof(), filelength(), lock(),…
ctype.h: Tập tin định nghĩa hàm xử lý ký tự, như: toASCII(), tolower(), toupper(),…
stdlib.h: Tập tin định nghĩa hàm liên quan đến cấp phát nhớ string.h: Tập tin định nghĩa hàm xử lý xâu ký tự
dos.h: Tập tin định nghĩa hàm để đọc xác lập thời gian, ngày tháng năm
(17)Bài giảng Cơ sở lập trình -15-
2.2Hằng (Constant)
2.2.1 Khái niệm: Là đại lượng có giá trị không đổi suốt thời gian sử dụng chương trình Hằng lưu trữ nhớ có tên để dễ sử dụng
2.2.2 Định nghĩa hằng:
- Dùng thị #define:
+ Cú pháp: #define <Tên_hằng> <Giá_trị_hằng>
+ Tác dụng: Tên_hằng thay Giá_trị_hằng Với cách có thểđịnh nghĩa lại giá trị
+ Ví dụ 2.1: #define MAX 100
Trong chương trình chỗ gặp MAX sẽđược thay giá trị 100 + Chú ý: Không có dấu chấm phẩy cuối câu định nghĩa
- Sử dụng từ khóa const:
+ Cú pháp: const <kiểu_dữ_liệu> <tên_hằng> = <giá_trị_hằng>; const <tên_hằng> = <giá_trị_hằng>;
+ Tác dụng: Định nghĩa có tên tên_hằng có giá trị giá_trị_hằng sau không thểđịnh nghĩa lại (sửa đổi) giá trị
+ Ví dụ 2.2: const long double PI = 3,141592653589793;
Const d = 7; /* d kiểu integer, có giá trị */
+ Lưu ý: Trong kiểu định nghĩa thứ 2, chương trình tự động ấn định kiểu kiểu ngầm định, với turbo C có kiểu ngầm định int
* Sự khác giữa khai báo hằng số bằng define const ở chỗ là:
+ Với const, số cố định, số thực sự, định nghĩa lại
+ Khi gặp định nghĩa #define chương trình dịch lắp giá trị số vào biểu thức cần tính Điều đó, có nghĩa gặp tên hằng, máy dành số nhớ đủ để chứa giá trị vào Loại khơng thể
định nghĩa lại trình sử dụng Nó áp dụng cho loại số, xâu ký tự, logic,… Thực chất define <tên_hằng> thay tượng trưng cho đoạn văn bản, <giá_trị_hằng> Khi dịch, chương trình thay <tên_hằng> <giá_trị_hằng>
2.2.3 Các loại hằng:
Hằng int: Là số nguyên có kiểu int
(18)Bài giảng Cơ sở lập trình -16-
Hằng int hệ hệ 16: Các số C ngầm hiểu hệ 10, bạn hồn tồn viết hệ số (bắt đầu 0) hay số hệ 16 (bắt đầu 0X) Ví dụ 2.3 : 025, 057, 0x24, 0x41,… Hằng ký tự: Là ký tự viết cặp dấu nháy đơn, Ví dụ 2.4:
‘A’, ‘3’, ‘+’,… Trình biên dịch C lưu trữ cách dùng mã ASCII hệ số 10 C lưu thơng qua mã ASCII (trong hệ 10) Với ví dụ 2.4, giá trịđược lưu trữ tương ứng: 97, 43, 51
Đối với ký tựđặc biệt, C quy định cách viết:
‘\’’ biểu diễn cho ’ ‘\”’ biểu diễn cho ” ‘\\’ biểu diễn cho \ ‘\n’ biểu diễn ký tự xuống dòng ‘\0’ biểu diễn cho ‘\t’ biểu diễn ký tự tab
‘\r’ biểu diễn vềđầu dòng ‘\b’ biểu diễn ký tự backspace ‘\f’ biểu diễn sang trang
Hằng xâu ký tự (chuỗi ký tự): Giá trị dãy ký tựđược bao hai dấu nháy kép Ví dụ 2.5: “Truong Dai hoc”;
* Chú ý: Các hằng có thể được định nghĩa ngồi mọi hàm, hàm hoặc trong một khối lệnh Với C chuẩn, định nghĩa một khối dịng lệnh định nghĩa phải ở dòng đầu tiên của khối, tức trước tất cả lệnh khác của khối lệnh Trong C++ bạn có thểđặt định nghĩa hằng ở bất kỳ vị trí
2.3Biến (Variable)
- Khái niệm: Là đại lượng có giá trị thuộc kiểu ngơn ngữ lập trình, giá trị biến thay đổi thời gian tồn biến Biến
được lưu trữ nhớ có tên để dễ sử dụng Chương trình truy xuất đến ô nhớ cấp phát cho biến để lấy ghi giá trị thông qua tên biến Muốn sử dụng biến bạn phải khai báo trước sử dụng
- Cú pháp khai báo biến:
<Kiểu_dữ_liệu> <Danh_sách_tên_các_biến>; <Kiểu_dữ_liệu> <Tên_biến> = <Giá_trị>; Trong đó:
+ <Kiểu_dữ_liệu>: Là tên kiểu liệu tồn ngơn ngữ lập trình, kiểu liệu chuẩn kiểu liệu định nghĩa người lập trình
+ <Danh_sách_tên_các_biến>: Tên biến kiểu, đặt cách dấu phẩy
(19)Bài giảng Cơ sở lập trình -17-
Như vậy, đặc trưng biến gồm: tên biến, kiểu liệu biến, giá trị
đang lưu giữ Trong ngơn ngữ lập trình C biến có thể có kiểu void (kiểu khơng xác định)
Tên biến C đặt theo nguyên tắc đặt tên ngơn ngữ lập trình C (đã trình bày phần 1.1.3 trang 1)
-Ví dụ 2.6: Cách khai báo biến có kiểu số nguyên, số thực, ký tự main()
{ int m = 5, n = 10; /* Khai báo biến số nguyên m, n khởi tạo giá trị*/ float x,y; /* Khai báo biến số thực */
char kt = ‘A’; /* Khai báo biến ký tự khởi tạo giá trị*/ <Các câu lệnh xử lý chương trình>
}
Lưu ý: Khi gặp lệnh định nghĩa biến, chương trình dịch cấp phát vùng nhớ có kích thước phù hợp với kiểu liệu biến, có thành phần khởi tạo chương trình gán giá trị khởi tạo vào vùng nhớ biến Địa byte vùng nhớđược cấp phát cho biến, địa biến Để lấy địa biến, bạn dùng cú pháp: &<Tên_biến>;
2.4Biểu thức toán tử
2.4.1 Biểu thức (Expression)
-Khái niệm: Biểu thức tập hợp gồm hằng, hàm, biến, toán tử … Biểu thức tính tốn theo ngun tắc tốn học giá trị Trong biểu thức có thành phần chính: Tốn tử (operator) viết dấu phép tốn; Tốn hạng (operand) hằng, hàm, biến
- Ví dụ 2.7: 15 + sin(x); Dấu + toán tử, 15 sin(x) toán hạng - Các loại biểu thức:
+ Biểu thức số học biểu thức mà kết tính tốn cho giá trị số (số nguyên, số thực)
+ Biểu thức logic: Trong ngôn ngữ lập trình C biểu thức logic biểu thức mà kết tính tốn cho giá trị TRUE (giá trị khác mà thường 1) FALSE (giá trị 0)
+ Biểu thức quan hệ biểu thức có chứa tốn tử quan hệ ( <, >, <=, >=, ==, != ) Các toán hạng biểu thức quan hệ số nguyên, số thực, ký tự chúng không thiết phải tương thích với kiểu
(20)Bài giảng Cơ sở lập trình -18-
- Tốn tử số học hổ trợ ngơn ngữ lập trình C là: + (Cộng)
- (Trừ) * (Nhân) / (Chia)
% (lấy phần dư phép chia số nguyên) - Ví dụ 2.8:
int x = 15, y = 2, z; z = x % y;
Kết phép tính cho z = 1;
Thứ tự thực phép toán giống toán học
2.4.2.2 Toán tử thao tác bít
-Trong ngơn ngữ lập trình C có nhóm tốn tử mà thao tác thực bít tốn hạng, gọi tốn tử thao tác bít Các tốn hạng tham gia vào biểu thức có tốn tử thao tác bít phải có kiểu số ngun Các phép tính liên quan đến biểu diễn nhị phân máy tính
- Tốn tử & (phép AND theo bít)
+ Cú pháp: <Tốn_hạng_1> & <Tốn_hạng_2>
+ Chức năng: Thực phép AND bít tốn hạng trả kết có kích thước với tốn hạng
+ Bảng chân trị phép &
& 0 1
0 0
1
+ Ví dụ 2.9: int a = 7, b= 14, c; c = a & b;
Kết cho c = - Tốn tử | (phép OR theo bít)
+ Cú pháp: <Toán_hạng_1> | <Toán_hạng_2>
+ Chức năng: Thực phép OR bít tốn hạng trả kết có kích thước với tốn hạng Các bít trả vềđược tính kết phép tuyển bít tương ứng tốn hạng toán hạng