Download as pps, pdf, or txt
Download as pps, pdf, or txt
You are on page 1of 51

MÔN HỌC

Giảng viên: Nguyễn Đức Hoàng


Bộ môn Điều Khiển Tự Động
Khoa Điện – Điện Tử
Đại Học Bách Khoa Tp.HCM
Email: ndhoang@hcmut.edu.vn
Nội dung môn học (10
chương)
(14 tuần = 28 tiết LT + 14 tiết BT)

Chương 1: Ôn lại các kiến thức cơ bản về


máy tính
Chương 2: Các kiểu dữ liệu và thao tác
Chương 3: Giới thiệu ngôn ngữ lập trình
C
Chương 4: Các thành phần cơ bản và
kiểu dữ liệu của C
Chương 5: Các lệnh điều khiển và vòng
lặp
Chương 6: Hàm
Tài liệu tham khảo
Tài liệu: Tin Học 2
Đặng Thành Tín

Kỹ Thuật Lập Trình C


GS. Phạm Văn Ất
Giáo Trình C
Nguyễn Hữu Tuấn
Giáo trình BT Kỹ thuật lập
trình C
Đánh giá
Thi giữa kỳ : 20%
Thi cuối kỳ : 80%
CHƯƠNG 4

CÁC THÀNH PHẦN CƠ BẢN VÀ


CÁC KiỂU DỮ LiỆU CỦA C
Nội dung chương 4
4.1 Danh hiệu
4.2 Các kiểu dữ liệu chuẩn của C
4.3 Hằng
4.4 Biến
4.5 Biểu thức
4.6 Các phép toán của C
4.7 Cấu trúc tổng quát của chương trình
C
Danh hiệu
Khái niệm
Danh hiệu là tên của biến, hằng, hàm…
hay các ký hiệu được quy định đặc trưng
cho một thao tác nào đó.
Có 2 loại:
3.Ký hiệu
4.Danh hiệu
Ký hiệu

Ký hiệu là các dấu được C quy định để


biểu diễn cho một thao tác nào đó.
Ký hiệu đơn: dùng 1 dấu để biểu diễn
một thao tác
VD: +, - , *, /, %, =, >, <,…
Ký hiệu kép: dùng 2 dấu trở lên để biểu
diễn một thao tác
VD: ++, --, ==, /*,*/, >=, &&,…
Danh hiệu

Danh hiệu là các từ khóa của ngôn ngữ


hoặc tên của biến, hằng, hàm trong C.
Gồm từ khóa và danh hiệu.
Từ khóa

Từ khóa là các danh hiệu mà C đã định


nghĩa sẵn cho lập trình viên sử dụng khi
viết chương trình
VD: int, double, char, if, for, while,
sizeof, typedef,…
Lưu ý:
- Từ khóa phải được viết bằng chữ
thường
Danh hiệu

Danh hiệu là tên của các hằng, biến,


hàm,…
Có 2 loại:
Danh hiệu chuẩn: do C khai báo và thiết
kế sẵn
VD: printf, scanf, main,
Danh hiệu không chuẩn: do lập trình
viên khai báo và định nghĩa khi thiết kế
Nguyên tắc đặt tên
danh hiệu không
chuẩn
- Không trùng với từ khóa
- Không trùng với danh hiệu chuẩn
- Ký tự đầu phải là chữ hoặc dấu gạch nối
VD: a, a1, a_1, _a, A, _A, _1, Case, …
(đúng)
: 1a, 1_, case, a 1,… (sai)
Các kiểu dữ liệu chuẩn
của C
Tổng quát
C có 4 kiểu dữ liệu chuẩn: char, int,
float, double.
Mỗi kiểu yêu cầu về bộ nhớ và tầm trị
KiỂU KÍCH THƯỚC TẦM TRỊ
như sau:
char 8 bit -128 ÷+127

int 16 bit -32768 ÷+32767

float 32 bit 3.4E-37 ÷ 3.4E38

1.7E-307 ÷
double 64 bit
1.7E308
Kiểu char
char là kiểu nguyên 1 byte, có thể giữ
một ký tự hoặc giá trị 8 bit.
Mỗi bộ dịch C có quy định khác nhau về
tầm trị của char
VD:
char c; char c;
c = ‘A’ ; c = 65;
printf(“%c”,c); printf(“%d”,c);
Kiểu int
int là kiểu dữ liệu số nguyên, kích thước
số nguyên do máy quy định, đối với máy
PC và bộ dịch Borland C/C++ thì chiều
dài của kiểu int là 16 bit có dấu.
VD:
int i;
i = 101;
i = i + 10;
printf(“%d”,i);
Kiểu float và double
float là kiểu số thực dấu chấm động, có độ
chính xác đơn
double là kiểu số thực dấu chấm động, có
độ chínhfloat
xác a;
kép
VD: double b;
a = 1.24;
b = 2.57;
printf(“%f”,a);
printf(“%lf”,b);
Để bổ sung cho 4 kiểu dữ liệu, C đưa ra
các dạng bổ sung signed, unsigned,
short, long kết hợp với các kiểu cơ bản
để tạo thêm các unsigne
kiểu mở rộng.
Kiểu\Dạ
signed short long
ng d
signed
unsigned
char char → x x
char
char unsigned
short int
signed int int long int
int →
→ int → → long
int/short
unsigned
long float
float x x x
→ double
long
double x x x
double
Hằng
Khái niệm
Hằng là những giá trị cố định có giá trị
hoàn toàn xác định và không thể thay
đổi chúng trong quá trình thực thi
chương trình.
Có 4 loại:
- Hằng số
- Hằng ký tự
- Chuỗi ký tự
- Biểu thức hằng
Hằng số

Hằng số là các trị số đã xác định, có thể là


số nguyên hoặc số thực
Hằng số nguyên
+ Thuộc 1 trong 2 kiểu : int hoặc long int
, có thể được biểu diễn ở dạng thập phân,
bát phân, thập lục phân
+ Thường chiếm 1 word trong bộ nhớ
+ Nếu dạng long int chiếm 2 word trong
bộ nhớ, khi viết phải thêm chữ l hoặc L
vào sau số đó.
+ Có thể ở dạng unsigned, khi viết phải
thêm chữ u hoặc U vào sau số đó
+ Có thể viết hằng số nguyên ở dạng bát
Ví dụ hằng số nguyên
Dạng biểu Tương đương
Hằng nguyên
diễn thập phân
567 Decimal 567
-321 Decimal -321
021 Octal 17
0x3f Hex 63
0X3f Hex 63
567L Decimal (long) 567
021L Octal (long) 17
0x3fL Hex (long) 63
Hằng thực
+ Số thực có thể ở dạng dấu chấm tĩnh
hoặc dấu chấm động.
+ Hằng thực dấu chấm động có các thành
phần:
- Phần nguyên: tùy
- Dấu chấm thập phân: bắt buộc
- Phần lẻ: tùy
- Ký tự e hoặc E và số mũ
VD: 123.5E2, 1.2e-4, .245e3,…
Lưu ý về hằng số
- Các hằng số được viết không có dấu
thập phân hoặc số mũ → số nguyên, lưu
trữ theo kiểu int
- Các hằng số nguyên lớn hơn khả năng
1 int → tự động lưu trữ theo kiểu long
- Các hằng số nguyên lớn hơn khả năng
1 long → tự động lưu trữ theo kiểu
double
Hằng ký tự
Hằng ký tự biểu diễn một giá trị ký tự
đơn, ký tự này được viết giữa dấu nháy
đơn (‘’), mỗi ký tự có một mã tương ứng
trong bảng mã của máy, thường là ASCII
Một ký tự khi in ra màn hình có nhiều
dạng tùy vào chuỗi định dạng xuất
VD:
printf(“%d, %c, %o, %x”,’A’,’A’,’A’,’A’);
Kết quả in ra màn hình: 65, A, 101, 41
Chuỗi ký tự
Một chuỗi ký tự là một loạt các ký tự
nằm trong cặp dấu nháy kép (“”)
VD: “University of Technology”
Trong bộ nhớ, chuỗi ký tự đang được sử
dụng được lưu trữ tại địa chỉ bắt đầu xác
định như một dãy các ký tự liên tiếp tận
cùng bằng
S tký tự
r kết
i thúc
n chuỗi,
g \0 ký tự

NUL
VD:
Phân biệt hằng ký tự và chuỗi ký tự
Biểu thức hằng
Một biểu thức được xem là hằng nếu giá
trị của nó được xác định hoàn toàn
VD: 10 % 3 + 5;
‘B’ – ‘A’;
4 == 5;
Biến
Khai báo biến
- Tất cả các biến sử dụng trong chương
trình C đều phải được khai báo trước
- Tên biến là một danh hiệu không chuẩn
hợp lệ
VD: Var, _denta, a1,… là tên biến hợp lệ
1var, printf, a b,… là tên biến không
hợp lệ
- C phân biệt chữ hoa, chữ thường
VD: VAR, VAr, Var, var,… là những biến
khác nhau
Khai báo biến (tt)
- Cú pháp khai báo biến: kiểu ds_tb
VD: unsigned int i, j, k;
double x, y, delta;
- Có thể khởi động trị cho biến ngay sau
khi khai báo
VD: long i = 1, j = i;
double x = 3.14, y = 2*x;
Khai báo biến (tt)
- Có thể khai báo biến ở một trong ba vị
trí sau:
+ Ngoài tất cả các hàm → biến toàn cục
+ Đầu phần thân hàm hoặc khối lệnh →
biến cục bộ Biến toàn
float a; cục
+ Trong phần định nghĩa đối số của hàm
main()
VD: { int i, j; Biến cục bộ
……..
}
int giaithua(int n); Đối số hàm
Các bổ túc kiểu const
và volatile
- Từ khóa const khi được khai báo cho
biến thì nó xác định rằng biến không bị
thay đổi trong quá trình thực thi chương
trình
- Cú pháp: const kiểu ds_tb [=trị khởi
tạo];
VD: const int i = 1;
- Nếu kiểu không nêu cụ thể thì biến
thuộc kiểu int
- Từ khóa volatile chỉ rằng một biến có
Biểu thức
Khái niệm
Biểu thức là một sự kết hợp giữa các
phép toán và các toán hạng để tạo ra trị
Biểu thức có thể là phép gọi hàm, biểu
thức gán, biểu thức luận lý,…
VD: p = (a+b+c)/2;
s = sqrt(p*(p-a)*(p-b)*(p-c));
z = x%2 + (y==1);
Các phép toán của C
Toán tử số học
C có các toán tử số học giữa 2 toán hạng
: +,int- ,i *,
= /,
3,%j = 2; double x = 2.0, y = .2;
VD:j = -i + 5; y = -x + 5;
j = i/3; y = x/3;
j = i%3;
Khi các toán hạng khác kiểu, C tự động
chuyển kiểu theo luật: toán hạng thuộc
kiểu có trị nhỏ sẽ chuyển sang kiểu có
trị lớn. double x = 2.0;
int i = 2;
VD: i → 2.0
x = x/i; (double)
Toán tử so sánh
C có các toán tử so sánh giữa 2 toán hạng:
==, !=, >, <, >=, <=
int i = 3, j = 2; double x = 2.0, y;
VD:
char kt; y = (x ==2);
kt = (i>j)+(j<2)-(i%j==1); y = (x=3);

Khi các toán hạng khác kiểu, C tự động


chuyển kiểu theo luật như toán tử số
học
Toán tử logic
C có các toán tử logic: !, &&, ||
Toán Toán
Kết quả
hạng 1 hạng 2
A
A B !A A||B
&&B
Bằng o Bằng o 1 0 0
Bằng o Khác 0 1 0 1
Khác 0 Bằng o 0 0 1
Khác 0 Khác 0 0 1 1
VD:
int i = 3, j = 2; double x = 2.0, y = 0;
char kt; char kt;
kt = i&&j; kt = !y || (x&&y);
Toán tử trên bit
C có các toán tử trên bit: ~, &, |, ^, <<,
>>
0xa1b6 & 0xff = 0xb6
VD:
0xa1b6 | 0xff = 0xa1ff
0xa1b6 ^ 0xffff = 0xre49
0xa1b6 << 8 = 0xb600
0xa1b6 >> 8 = 0xa1
~ 0xa1b6 = 0x5e49
Toán tử tăng giảm
C có 2 toán tử đặc biệt: tăng (++), giảm
(--)
Cúnpháp:
= 5; ++bien; bien++; --bien; bien--;
VD:++n; --n; n++; n--;

Sự khác nhau giữa ++n và n++ ở chỗ:


n++: n tăng sau khi giá trị của nó đã
được sử dụng
++n:
n =n5;
tăng trước khi giá trị của nó được
sử b = ++n;
dụng
VD:c = n++;
Toán tử gán
Phép gán được dùng để thay đổi trị của
biến
Cú pháp: bien = tri;
bien op = tri; ⇔ bien = bien op
tri
tri :n hằng,
= 5; biến, biểun = 1;thức
b = 2;
op:b+, = -, *, /, %, <<,
n%2; b +=>>,n; &, |, ^,…
VD:b = ++n; b += ++n;
b = (n==1); b %= (n==1);
Toán tử gán (tt)
Nếu 2 toán hạng khác kiểu, toán hạng
bên phải sẽ được chuyển theo kiểu của
toán hạng
int n = 5; bên trái
double b = 2.125;
VD:
n = b;
printf(“%5.2lf, %2d\n”,b,n); 2.13, 2
double a, b = 2.124;
b = (a=b*2)+(a*=2);
8.50,
printf(“%5.2lf, %5.2lf\n”,a,b);
12.74
Toán tử phẩy – Biểu
thức phẩy
Toán tử phẩy cho phép tạo ra biểu thức
phẩy gồm 2 biểu thức cách nhau dấu phẩy
Việc tính toán biểu thức phẩy được thực
hiện từ trái qua phải, kết quả là giá trị và
kiểu của kết quả biểu thức bên phải
Cúdouble
pháp: a,bieuthuc, bieuthuc_ketqua;
b = 2.124;
b += (a=b,a*=b); 4.51,
VD:
printf(“%5.2lf, %5.2lf\n”,a,b); 6.64
double a, b = 2.124;
b = (a=b,b+5.20); 2.12,
printf(“%5.2lf, %5.2lf\n”,a,b); 7.32
Toán tử điều kiện
Biểu thức điều kiện
Cú pháp: dieukien ? bieuthuc1 : bieuthuc2;
Nếu dieukien khác 0 thì kết quả là kết quả
của bieuthuc1, ngược lại kết quả là kết
quả của bieuthuc2
double s,a = 1.2, b = 2.124;
VD:
s = (a>b?a:b);
printf(“%5.2lf\n”,s); 2.12
Toán tử sizeof
Toán tử sizeof cho biết kích thước tính
theo byte của một biến hoặc một kiểu
dữ liệu nào đó
Cú pháp: sizeof(tên biến);
sizeof tên biến;
sizeof(kiểu dữ liệu);
float a;
VD:
unsigned k1, k2;
k1 = sizeof(a);
k2 = sizeof(float); k1 = 4, k2
=4
Độ ưu tiên của các
toán tử
Ví dụ
VD:
int a = 9, b = 6; int a = 7, b = 8;
a++; ++a;
a = a + b--; a += --a + ++b%2;
a = a+ --b; a = --a%b++ + b,++b;
a = ~a&b; a = a&&b++ + a?a:b--;
Cấu trúc tổng quát
của chương trình C
+ Các #include
+ Các #define
+ Khai báo các đối tượng dữ liệu ngoài
(biến, mảng, cấu trúc)
+ Khai báo nguyên mẫu các hàm
+ Hàm main()
+ Định nghĩa các hàm (hàm main() có thể
đặt sau hoặc vào giữa các hàm khác
Một số lưu ý khi viết
chương trình C
1. Mỗi câu lệnh có thể viết trên một hay
nhiều dòng nhưng phải kết thúc bằng dấu ;
2. 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 1 dòng,
nhiều dòng, phần còn lại của dòng
3. Trong chương trình, khi sử dụng các hàm
chuẩn như printf scanf,…thì phải thêm các
thư viện chuẩn chứa các hàm này đầu
chương trình, ví dụ: #include “stdio.h”
4. Một chương trình chỉ có một hàm chính

You might also like