PHẦN 1:
NGÔN NGỮ LẬP TRÌNH C
CHƯƠNG 1: CÁC KHÁI NIỆM CƠ BẢN
Nội dung
Khái niêm về ngôn ngữ lập trình
Lời chú thích
Câu lệnh
Kiểu dữ liệu
Biến
Hằng
Phép toán
Biểu thức
Các hàm thư viện chuẩn của ngôn ngữ C
KHÁI NIỆM VỀ NGÔN NGỮ LẬP TRÌNH
Một chương trình (CT) là một chuỗi các chỉ thị điều khiển sự hoạt động của
máy tính nhằm để giải quyết một công việc hay một vấn đề nào đó.
Người ta có thể sử dụng các ngôn ngữ lập trình (NNLT) khác nhau để viết
các CT. Khi một CT được viết bằng một NNLT thì các chỉ thị, câu lệnh
trong CT phải tuân theo các quy tắc mà NNLT đó quy định.
• Ví dụ 1: Chương trình in câu thông báo “Chào bạn” ra màn hình
• #include <stdio.h>
• /*Chương trình in ra một câu thông báo*/
• void main()
• {
• printf(“Chao ban”); /* hàm printf() dùng in dữ liệu ra màn hình */
• }
• Chú ý: hàm main() là hàm bắt buộc mọi chương trình phải có. Khi chạy
chương trình máy chạy từ câu lệnh đầu tiên của hàm main() đến câu lệnh
cuối cùng của nó
• Ví dụ 2: CT nhắc người dùng nhập vào 2 số nguyên, tính tổng số của
chúng và in giá trị tổng ra màn hình.
• #include <stdio.h>
• // CT tính tổng 2 số nguyên
• void main()
• {
• int a, b, s; // khai báo ba biến nguyên a, b, và s
• printf (“Nhap so nguyen thu 1:”);
• scanf(“%d”, &a); // hàm scanf() dùng nhập dữ liệu cho biến a printf
(“Nhap so nguyen thu 2:”);
• scanf(“%d”, &b);
• s = a + b; // tính biểu thức a+b và gán kết quả cho biến s
• printf(“ket qua: %d\n”, s);
• }
Chú ý:
• ký hiệu & là toán tử lấy địa chỉ
• ký hiệu %d là định dạng để in giá trị biến nguyên s.
LỜI CHÚ THÍCH
Lời chú thích là nhưng lời giải thích của người viết chương trình để làm
cho chương trình dễ hiểu, nó không có tác dụng gì đối với chương trình
dịch.
Có hai hình thức chú thích:
Lời chú thích được dặt giữa hai dấu /* và */
Lời chú thích được bắt đầu bởi dấu //
CÂU LỆNH
Lệnh biểu thức bao gồm một biểu thức đơn giản và theo sau là dấu chấm
phẩy.
• Ví dụ 1:
• a = b + 3.5;
• printf(“Chao cac ban”);
Lệnh kép bao gồm một số lệnh riêng lẽ được bao trong cặp dấu {}. Những
lệnh riêng lẽ này có thể là lệnh biểu thức, lệnh kép hay lệnh điều khiển.
Lệnh kép không được kết thúc bởi dấu chấm phẩy.
• Ví dụ 2:
• {
• s = r * r * PI;
• printf(“Dien tich là %0.2f\n”, s);
• }
Lệnh điều khiển bao gồm các câu lệnh như lệnh rẽ nhánh, lệnh lặp, lệnnh
chuyển điều khiển, …
• Ví dụ 3:
• if(r < 0)
• printf(“gia tri khong hop le\n”);
• else
• {
• s = r * r * PI;
• printf(“Dien tich là %0.2f\n”, s);
• }
KIỂU DỮ LIỆU
Kiểu dữ liệu là khái niệm để chỉ một tập hợp các giá trị. Có bốn kiểu dữ
liệu cơ bản là char, int, float và double
Kiểu char dùng để biểu diễn một ký tự trong bảng mã ASCCI, thực chất là
một số nguyên không dấu có giá trị từ 0 đến 255.
Kiểu int dùng để biểu diễn các số nguyên và có thể có 3 loại: int, long int,
unsigned int.
Kiểu float dùng để biểu diễn các số thực với độ chính xác đơn.
Kiểu double dùng để biểu diễn các số thực với độ chính xác kép
• Kiểu Phạm vi Kích thước
• char 0 255 1 byte
• int -32768 32767 2 bytes
• long -2147483648 2147483648 4 bytes
• unsiged 0 65535 2 bytes
• float 3.4e-38 3.43+38 4 bytes
• double 1.7e-308 1.7e+308 8 bytes
Chú ý: Máy có thể lưu trữ được số kiểu float có giá trị tuyệt đối từ 3.4e-38
đến 3.43+38. 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 số double được hiểu theo nghĩa tương tự.
BIẾN
Biến là một đại lượng có giá trị thay đổi trong thời gian thực hiện chương
trình.
Mỗi biến có một tên và một địa chỉ dành riêng cho nó.
Mỗi biến có thể chứa giá trị tương ứng với kiểu dữ liệu của biến đã khai
báo.
Để sử dụng một biến cần khai báo biên đó. Cú pháp khai báo như sau:
<tên kiểu dữ liệu> <tên biến>;
• Ví dụ:
• int a; // khai báo một biến a kiểu int
• long b; // khai báo một biến b kiểu long
• float delta; // khai báo một biến delta kiểu float
HẰNG
Hằng là đại lượng mà giá trị của nó không thay đổi trong thời gian thực
hiện chương trình.
Hằng có thể được định nghĩa bởi toán tử define
• #define <tên hằng> <giá trị>
• Ví dụ:
• #define MAX 100
• #define PI 3.14159
• #define E 2.71828
• Chú ý: Cách định nghĩa này có hai điểm lợi:
Nó thay đổi một tên khó hiểu như 100 bằng một tên có nghĩa là MAX,
bởi vậy chương trình trở nên sáng sủa, dễ đọc.
Nếu trong chương trình xuất hiện nhiều lần, khi muốn thay đổi giá trị
của hằng ta phải sửa giá trị tại những nơi hằng đó xuất hiện, nếu dùng
#define ta chỉ cần sử duy nhất dòng #define
PHÉP TOÁN
Phép toán số học
• Gồm có +, -, *, / , %(phép chia lấy phần dư)
• Chú ý:
Phép chia hai số nguyên sẽ chặt cụt phần phân.
Phép chia hai số thực hoặc một số thực với mộ số nguyên sẽ cho ra số
thực.
Phép tóan % không áp dụng cho số thực.
Ví dụ 1:
int a = 9, b = 2, x, y;
float c = 9.0, z;
x = a/b; // x = 4
y = a%b; // y = 1
z = c/a; // z = 2.5
Phép toán quan hệ
• Gồm có >, >=, <, <=, ==, != (khác)
Phép toán logic
• Gồm có || (hoặc), && (và), ! (phủ định)
• a b a&&b a||b !a
• 0 0 0 0 1
• 0 1 0 1 1
• 1 0 0 1 0
• 1 1 1 1 0
Phép toán tăng giảm
• ++: cộng thêm một vào một toán hạng.
• : trừ bớt một khỏi toán hạng.
• Ví dụ 2:
• int n = 10; //khởi tạo giá trị cho biến n
• n++; // bây giờ n có giá trị 11
• Trong C phân biệt n++ và ++n. Với n++ thì giá trị của n được dùng trước
khi tăng n, ++n thì giá trị của n được dùng sau khi tăng n. Tương tự cho
phép toán
• Ví dụ 3:
• int n = 10;
• int m = ++n + 20; // n = 11, m = 31;
• Ví dụ 4:
• int n = 10;
• int m = n++ + 20; // m = 30, n = 11;
Phép toán chuyển kiểu (ép kiểu)
• Phép toán chuyển kiểu dùng để chuyển một kiểu bất kỳ sang một kiểu
mong muốn.
• (<kiểu>) <biến>
• Ví dụ 5:
• float n = 2520.40;
• int m = (int) n; // m = 2520
Phép toán gán
• <biến> = <biểu thức>;
• Ví dụ 6: n = 10; //gán giá trị 10 cho biến n
Phép toán gán kép
• <biến> <phép toán>= <biểu thức>;
• Ví dụ 8:
• n = 10; //gán giá trị 10 cho biến n
• n += 10; // n = n + 10 -> 20
• n -= 5; // n = n – 5 -> 15
• n *= 2; // n = n * 2 -> 30
BIỂU THỨC
Biểu thức là sự kết hợp giữa các phép toán và toán hạng để diễn đạt một
công thức toán học nào đó. Toán hạng có thể xem là một đại lương có một
giá trị nào đó bao gồm hằng, biến và hàm.
Biểu thức được phân loại theo kiểu giá trị nguyên và thực. Trong các mệnh
đề logic, biểu thức được phân thành đúng (giá trị khác không) và sai (giá trị
bằng 0).
• Ví dụ 5:
• p = (a + b + c) / 2;
• s = sqrt(p*(p-a)*(p-b)*(p-c));
Biểu thức điều kiện
• <E1> ? < E2 > : < E3 >
• Giá trị của biểu thức điều kiện sẽ bằng E2 nếu E1 đúng, ngược lại bằng E3
• Ví dụ 7:
• s = x > y ? x : y; // s sẽ bằng giá trị lớn nhất của x, y
CÁC HÀM THƯ VIỆN CHUẨN C
Thư viện C chuẩn tập hợp các hàm đã định nghĩa sẳn và các phần tử khác
vào trong những tập tin tiêu đề *.h (header files). Để sử dụng các hàm
trong thư viện này, chúng ta đặt các chỉ thị #include ở đầu tập tin chương
trình.
Các hàm toán học
• Các hàm toán học được định nghĩa trong tập tin tieu đề math.h. Để dùng
các hàm này cần thêm vào đầu chương trình chỉ thị #include <math.h>
• Tên hàm Ý nghĩa
• ceil(x) Lấy phần nguyên của x cộng thêm 1
• floor(x) Lấy phần nguyên của x
• abs(x) Lấy giá trị tuyệt đối của x
• sprt(x) Lấy căn bậc hai của x
• pow(x, p) Lấy x lũy thừa p
• exp(x) exponential của x(e
x
)
• log(x) Lấy logarithm tự nhiên của x
CÁC HÀM NHẬP XUẤT DỮ LIỆU
Các hàm nhập xuất dữ liệu định nghĩa trong tập tin tiêu đề stdio.h. Để dùng
các hàm này cần thêm vào đầu chương trình chỉ thị #include <stdio.h>
Hàm nhập dữ liệu
• Cú pháp
• int scanf(“chuỗi định dạng”[,danh sách các đối]);
Chuỗi định dạng
• %c ký tự
• %d số nguyên (int)
• %ld số nguyên (long)
• %f số thực (float)
• %lf số thực (double)
Danh sách các đối: mỗi đối trong danh sách là một con trỏ chứa địa chỉ
của một biến dùng để lưu trữ giá trị đọc vào từ bàn phím.
Hàm xuất dữ liệu
• cú pháp
• int printf(“chuỗi định dạng”[,danh sách các đối]);
Chuỗi định dạng được đặt trong nháy kép, gồm 3 loại:
+ Chuỗi ký tự ghi như thế nào in ra giống như vậy.
+ Ký tự định dạng cho phép xuất giá trị các đối ra màn hình
• %c ký tự
• %s chuỗi
• %d số nguyên (int)
• %ld số nguyên (long)
• %f số thực (float hay double)
+ Ký tự điều khiển
• \n sang dòng mới
• \t dấu tab
• \r nhảy về đầu dòng, không xuống dòng
Danh sách các đối được phân cách nhau bởi dấu phẩy. Đối có thể là
một hằng, một biến, một lời gọi hàm. Giá trị của đối sẽ được chuyển
dạng và in ra theo cách viết ký tự định dạng.
Tràn số trong tính toán
• Tràn số xảy ra khi kết quả tính toán trong một biểu thức vượt quá miền xác
định của dữ liệu hiện tại.
• Ví dụ 6:
• void main()
• {
• int a = 1000;
• int b = 50;
• long c = a*b;
• printf(“%ld\n”, c); //c sẽ mang giá trị âm
• }
• Do hai biến a và b kiểu int nên chương trình sẽ cho rằng kết quả sẽ thuộc
kiểu int. Nhưng biểu thức a*b cho ra kết quả 50000 lớn hơn 32767 và như
vậy lỗi tràn số sẽ xảy ra, kết quả nhận được sẽ là con số âm. Trong trường
hợp này ta nên ép kiểu như sau: c = (long)a * b. Với thao tác ép kiểu này,
biến a sẽ được hiểu là kiểu long nên biểu thức (long)a*b sẽ được hiểu thuộc
kiểu long.