Bài giảng học phần Lập trình nâng cao - Chương 1: Giới thiệu chung
1.1. Giới thiệu ngôn ngữ lập trình C 1.2. Các phần tử cơ bản của ngôn ngữ C 1.3. Cấu trúc chương trình 1.4. Các kiểu dữ liệu cơ bản 1.5. Hằng, biến, hàm, biểu thức, toán tử, câu lệnh
Bạn đang xem trước 20 trang tài liệu Bài giảng học phần Lập trình nâng cao - Chương 1: Giới thiệu chung, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
CHƯƠNG 1: GIỚI THIỆU CHUNG
BÀI GIẢNG HỌC PHẦN
LẬP TRÌNH NÂNG CAO
Nội dung
1.1. Giới thiệu ngôn ngữ lập trình C
1.2. Các phần tử cơ bản của ngôn ngữ C
1.3. Cấu trúc chương trình
1.4. Các kiểu dữ liệu cơ bản
1.5. Hằng, biến, hàm, biểu thức, toán tử, câu lệnh
2
1.1. Giới thiệu ngôn ngữ lập trình C
• Lịch sử phát triển
• Đặc điểm của ngôn ngữ C
• Môi trường lập trình
3
Lịch sử phát triển (1)
• Được phát triển bởi
Dennis MacAlistair
Ritchie và các cộng
sự tại phòng thí
nghiệm Bell của
tập đoàn AT&T
(Mỹ)
• Giai đoạn phát triển
khởi đầu: 1969-
1973, trong đó giai
đoạn sáng tạo nhất
là trong năm 1972
4
Dennis M. Ritchie (1941-2011). Là một
nhà khoa học máy tính, công tác tại Bell
Labs (Mỹ); được xem là cha đẻ của ngôn
ngữ lập trình C và có ảnh hưởng lớn đến
các hệ điều hành Multics, Unix. Các giải
thưởng lớn: Giải thưởng Turing (1983),
Huy chương Hamming (1990), Giải
thưởng Nhà nước về Công nghệ (1999)
Lịch sử phát triển (2)
• C được phát triển dựa trên nền ngôn ngữ B và
BCPL. Tên ngôn ngữ C được xem là sự tiếp nối của
ngôn ngữ B
• Năm 1973, Ritchie & Thompson đã viết lại hệ điều
hành UNIX bằng ngôn ngữ C - phiên bản phổ biến
và là cơ sở quan trọng nhất để phát triển các hệ điều
hành phổ biến hiện nay, điển hình là Linux và Mac
OS của Apple
• Năm 1978, Ritchie và Brian Kernighan xuất bản
cuốn “The C programming language”
5
Lịch sử phát triển (3)
• Sau 1978, C được bổ sung thêm những tính năng
mới trong nhiều phiên bản khác nhau nhưng không
tương thích với nhau
• Năm 1989, Viện tiêu chuẩn quốc gia Hoa Kỳ (ANSI
- American National Standards Institue) đã công bố
phiên bản chuẩn hóa của ngôn ngữ C:
“Programming Language C” ANSI X3.159-1989,
phiên bản này thường được nhắc đến với tên gọi
ANSI C, còn gọi là C “chuẩn” hay C89. ANSI C
được hỗ trợ bởi hầu hết các chương trình dịch
6
Lịch sử phát triển (4)
• Năm 1990, tiêu chuẩn ANSI C (với một vài chi tiết
nhỏ được điều chỉnh) đã được tiêu chuẩn hóa bởi Tổ
chức Quốc tế về Tiêu chuẩn hóa (ISO): phiên bản
ISO/IEC 9899:1990 hay còn gọi là ISO C hay C99.
Phiên bản này được hỗ trợ bởi GCC và nhiều
chương trình dịch khác tuy nhiên lại không được hỗ
trợ bởi các chương trình dịch của Microsoft và
Borland
• C hiện là một trong những ngôn ngữ lập trình thông
dụng và là nguồn gốc xây dựng các ngôn ngữ lập
trình “mạnh” và phổ biến khác như C++, Java
7
Đặc điểm của ngôn ngữ C
• Là một ngôn ngữ lập trình có cấu trúc:
- Cho phép tập hợp mã lệnh và cấu trúc
- Cho phép ẩn lệnh, thông tin khỏi phần còn lại của
chương trình để dùng cho tác vụ riêng
- Chương trình có thể chia nhỏ thành các hàm
(functions) hoặc các khối lệnh (code blocks)
• Có tính khả chuyển, linh hoạt cao
• Có thế mạnh trong việc xử lý dữ liệu số, văn bản, cơ
sở dữ liệu,
• Được xem như ngôn ngữ lập trình hệ thống, sử
dụng để xây dựng các chương trình hệ thống, trình
điều khiển thiết bị, xử lý ảnh,
8
Môi trường lập trình (1)
• Biên dịch và thực hiện chương trình
9
Môi trường lập trình (2)
• Môi trường phát triển tích hợp (IDE – Integrated
Development Evironment):
- Biên tập chương trình nguồn (soạn thảo – edit)
- Biên dịch (compile)
- Thực thi (runtime)
- Sửa lỗi (gỡ rối - debug)
• Các điển hình
- Turbo C++ và Borland C++ của Borland, Inc
- MSC và VC của Microsoft Corp
- GCC của GNU project
-
10
Môi trường lập trình (3)
• Lưu ý:
- Lập trình viên không bắt buộc phải lập trình
trong môi trường IDE
- Có thể sử dụng một phần mềm soạn thảo chuyên
dụng để tạo file nguồn (ví dụ: notepad++), sau đó
sử dụng trình biên dịch thích hợp (ví dụ: BCC
5.5) để biên dịch và tạo file thực thi
11
1.2. Các phần tử cơ bản của ngôn ngữ C
• Tập ký tự
• Từ khóa
• Tên
• Một số quy tắc viết chương trình
12
Tập ký tự (1)
• Là phần tử cơ bản, bắt buộc phải có để tạo nên
chương trình:
- Tổ hợp các ký tự từ
- Liên kết các từ theo cú pháp câu lệnh
- Tổ chức các câu lệnh chương trình
Ví dụ: include, typedef, main, printf(), getch(),
13
Tập ký tự (2)
• Tập ký tự của ngôn ngữ C gồm:
- 26 chữ cái in hoa: A, B, , Z
- 26 chữ cái in thường: a, b, ..., z
- 10 chữ số: 0, 1, , 9
- Các ký hiệu toán học: + - * / =
- Ký tự gạch nối _
- Dấu cách
- Các ký hiệu đặc biệt: . , ; : ? ! \ & | % # $ () [] {}
14
Từ khóa
• Là các từ dành riêng của ngôn ngữ lập trình, được
sử dụng với mục đích xác định
• Người lập trình không được phép sử dụng các từ
khóa vào các mục đích khác như đặt tên cho các đối
tượng mới: biến, hàm, hằng,
• Các từ khóa trong C được viết bằng chữ thường
• Một số từ khóa thông dụng:
- typedef, const, signed, unsigned, struct, enum,
void, sizeof, static
- char, int, short, long, float, double
- default, if, else, case, switch, for, while, do
- break, continue, goto, return, interrupt
-
15
Tên
• Tên (định danh): Là dãy các ký tự dùng để xác định
các đối tượng trong chương trình như: biến, hằng,
hàm, kiểu dữ liệu,
• Quy tắc đặt tên:
- Không được trùng với các từ khóa
- Tên được đặt có tính gợi nhớ
- Gồm các ký tự chữ, số và dấu gạch nối, ký tự đầu
tiên phải là ký tự chữ hoặc dấu gạch nối
Ví dụ đặt tên đúng: a, b, x, y, PI,
Ví dụ đặt tên sai: int, char, tinh giai thua
• Lưu ý: ngôn ngữ C phân biệt chữ hoa và chữ thường
16
Một số quy tắc viết chương trình
• Quy tắc viết lệnh:
- Mỗi câu lệnh phải được kết thúc bằng dấu ;
- Mỗi câu lệnh nên đặt trên một dòng
- Khối lệnh gồm nhiều lệnh đơn phải đặt trong cặp
dấu { }
• Quy tắc viết chú thích:
- Trên một dòng: //Lời chú thích
- Viết trên nhiều dòng: /* Lời chú thích */
• Nên dùng dấu Tab lùi đầu dòng để trình bày chương
trình cho hợp lý
17
1.3. Cấu trúc chương trình
• Gồm các phần theo thứ tự sau:
- Khai báo các tệp tiêu đề
- Khai báo các macro
- Định nghĩa các kiểu dữ liệu mới
- Khai báo nguyên mẫu của các hàm
- Khai báo các biến toàn cục
- Hàm main()
- Định nghĩa các hàm (đã khai báo nguyên mẫu)
18
Khai báo các tệp tiêu đề (1)
• Thư viện chuẩn:
- Gồm nhiều tệp tiêu đề chứa các chương trình con
(hàm) được xây dựng sẵn. Muốn sử dụng hàm
nào cần khai báo tệp tiêu đề của thư viện chứa
hàm đó
• Cú pháp khai báo tệp tiêu đề:
#include
hoặc #include " tên_tệp_tiêu_đề "
Ví dụ: #include
#include "conio.h"
19
Khai báo các tệp tiêu đề (2)
• Các tệp tiêu đề cơ bản:
Tệp tiêu đề Chức năng
stdio.h Các hàm vào/ra cơ bản
conio.h Các hàm giao tiếp người dùng sử dụng MS-
DOS API
math.h Các hàm toán học cơ bản
ctype.h Các hàm xử lý ký tự
string.h Các hàm xử lý xâu
stdlib.h Các hàm tiện ích
time.h Các hàm điều khiển thời gian
20
Khai báo các tệp tiêu đề (3)
• Lưu ý:
- Người lập trình cũng có thể xây dựng sẵn các
hàm và đặt vào trong thư viện để dùng khi cần
thiết
- Một số trình biên dịch cho phép thêm hàm do
người lập trình xây dựng vào thư viện chuẩn.
Một số trình biên dịch yêu cầu người lập trình
phải tạo thư viện riêng
21
Khai báo các macro
• Cú pháp:
#define tên giá_trị
Ví dụ: #define N 100
#define length (3+5)
#define max(a,b) (a)>(b)?(a):(b)
22
Định nghĩa các kiểu dữ liệu mới
• Cú pháp:
typedef khai báo kiểu dữ liệu mới;
Ví dụ:
typedef int soluong;
typedef int mang100[100];
• Lưu ý: Sau khi định nghĩa các kiểu dữ liệu mới, có
thể dùng tên kiểu dữ liệu mới để khai báo các biến,
mảng, cấu trúc
Ví dụ:
soluong a,b;
mang100 c;
23
Khai báo nguyên mẫu của các hàm
• Cú pháp:
kiểu_dữ_liệu_trả_về tên_hàm(danh sách kiểu_dữ
_liệu tên_tham_số);
Ví dụ: int tong(int a,int b);
float max(float a,float b,float c);
• Lưu ý:
- Không bắt buộc phải khai báo nguyên mẫu các hàm
- Việc khai báo nguyên mẫu cho phép trình biên dịch
phát hiện lỗi khi gọi hàm (số lượng tham số không
đúng) hoặc tự động chuyển đổi kiểu dữ liệu (ví dụ:
chuyển từ kiểu int trong lời gọi hàm sang kiểu float
của tham số)
- Trong nguyên mẫu cũng có thể bỏ tên các tham số
24
Khai báo các biến toàn cục
• Cú pháp:
kiểu_dữ_liệu tên_biến;
Ví dụ:
int a,b;
float x,y;
• Lưu ý: Có thể khởi tạo giá trị cho các biến ngay khi
khai báo biến
Ví dụ:
int a=4, b=5;
float x, y=9.25;
25
Hàm main()
• Cú pháp:
kiểu_dữ_liệu_trả_về main(void)
{
//Các khai báo, các lệnh;
}
Lưu ý: kiểu_dữ_liệu_trả_về là int
Ví dụ:
int main(void)
{
printf("Xin chao!");
printf("\nDay la chuong trinh thu nghiem.");
return 0;
}
26
Định nghĩa các hàm (1)
• Các hàm đã được khai báo nguyên mẫu cần được
định nghĩa ở đây
Ví dụ:
int tong(int a,int b)
{
int s;
s=a+b;
printf("Tong la: %d", s);
return s;
}
27
Định nghĩa các hàm (2)
Ví dụ (tiếp):
float max(float a,float b,float c)
{
float m;
m=a>b?a:b;
return (m>c?m:c);
}
28
Một vài chương trình đơn giản (1)
• Chương trình viết câu thông báo ra màn hình:
#include
#include
int main(void)
{
printf("Xin chao!");
printf("\nDay la chuong trinh thu nghiem.");
return 0;
}
29
Một vài chương trình đơn giản (2)
• Chương trình tính tổng 2 số nguyên a, b:
#include
#include
void main()
{
int a,b,tong;
printf("Hay nhap 2 so nguyen a, b:\n");
scanf("%d%d",&a,&b);
tong = a+b;
printf("Tong a + b = %d",tong);
getch();
}
30
1.4. Các kiểu dữ liệu cơ bản
• Khái niệm kiểu dữ liệu
• Phân loại kiểu dữ liệu
• Kiểu ký tự
• Kiểu số nguyên
• Kiểu số thực
• Kiểu logic
31
Khái niệm kiểu dữ liệu
• Kiểu dữ liệu: xác định tập các giá trị mà một đối
tượng thuộc kiểu đó có thể nhận được, cách thức
lưu trữ dữ liệu và các phép toán có thể thực hiện
Ví dụ:
Dữ liệu kiểu int:
- Biểu diễn các số nguyên có dấu trong miền giá trị
-32768..32767
- Chiếm kích thước 2 byte khi lưu trữ
- Có thể thực hiện các phép toán: phép đảo dấu -,
các phép toán số học + - * / %, các phép so sánh
> >= < <= == !=
32
Phân loại kiểu dữ liệu (1)
• Các kiểu dữ liệu cơ bản:
- Kiểu ký tự
- Kiểu số nguyên
- Kiểu số thực
- Kiểu logic (không tường minh)
• Kiểu do người dùng tự định nghĩa:
- Kiểu liệt kê
33
Phân loại kiểu dữ liệu (2)
• Các kiểu dữ liệu có cấu trúc:
- Kiểu mảng
- Kiểu xâu ký tự
- Kiểu cấu trúc
- Kiểu tệp
• Kiểu con trỏ
34
Kiểu ký tự (1)
• Gồm 2 kiểu:
• Dùng để biểu diễn các ký tự trong bảng mã ASCII
(256 ký tự)
• Không lưu trực tiếp các ký tự mà lưu mã ASCII
tương ứng (giá trị số) kiểu ký tự có thể được
dùng như kiểu số nguyên
• Các hằng ký tự đặt trong cặp dấu nháy đơn ' ', các
hằng xâu ký tự đặt trong cặp dấu nháy kép " "
Tên kiểu Kích thước lưu trữ Miền giá trị
[signed] char 1 byte -128..127
unsigned char 1 byte 0..255
35
Kiểu ký tự (2)
• Một số hằng ký tự điều khiển:
'\0' null
'\n' đưa con trỏ xuống đầu dòng tiếp theo
'\t' tab
'\b' backspace
'\r' carriage return – đưa con trỏ màn hình về đầu
dòng
'\f' line feed – sang trang
36
Kiểu số nguyên
• Gồm 6 kiểu:
• Các hằng số nguyên được viết bình thường
Tên kiểu Kích thước Miền giá trị
int 2 byte -32768..32767
unsigned int 2 byte 0..65535
short 2 byte -32768..32767
unsigned short 2 byte 0..65535
long 4 byte -2147483648.. 2147483647
unsigned long 4 byte 0..4294967295
37
Kiểu số thực (1)
• Gồm 2 kiểu:
Ghi chú:
(*) Độ chính xác đơn (single-precision), chính xác
đến 7 số lẻ
(**) Độ chính xác kép (double-precision), chính
xác đến 19 số lẻ
Tên kiểu Kích thước Miền giá trị
float (*) 4 byte ±3.4*10-38.. ±3.4*1038
double(**) 8 byte ±1.7*10-308.. ±1.7*10308
38
Kiểu số thực (2)
• Có 2 cách biểu diễn hằng số thực
- Biểu diễn theo dạng thập phân:
phần_nguyên.phần_thập_phân
Ví dụ: 1.25, 910.5
- Biểu diễn theo dạng khoa học hay dạng mũ:
phần_định_trịEphần_mũ
(có thể thay ký hiệu E bằng e)
Ví dụ: 1.25E3, 3.14E-2, -5.4e2, -8.5e-3
39
Kiểu logic
• Ngôn ngữ C ngầm định không tường minh 2 giá trị
logic:
- FALSE (sai): 0
- TRUE (đúng): giá trị khác 0 (thường là 1)
40
1.5. Hằng, biến, hàm, biểu thức, toán tử, câu
lệnh
• Hằng
• Biến
• Hàm
• Biểu thức
• Toán tử
• Câu lệnh
41
Hằng (1)
• Cú pháp khai báo 1:
#define tên_hằng giá_trị
Ví dụ:
#define MAX 100
#define PI 3.141593
• Cú pháp khai báo 2:
const kiểu_dữ_liệu tên_hằng = giá_trị;
Ví dụ:
const int MAX=100;
const float PI=3.14;
42
Hằng (2)
• Lưu ý:
- Không thể thay đổi giá trị của Hằng trong quá
trình thực hiện chương trình
- Giá trị của Hằng phải được xác định ngay khi
khai báo
- #define là chỉ thị tiền xử lý (preprocessing
directive). Ưu điểm của cú pháp khai báo này:
+ Dễ đọc, dễ thay đổi
+ Dễ chuyển đổi giữa các nền tảng phần cứng
+ Tốc độ nhanh
43
Biến (1)
• Cú pháp khai báo:
kiểu_dữ_liệu tên_biến;
hoặc
kiểu_dữ_liệu tên_biến1, , tên_biếnn;
Ví dụ:
int a,b;
float x,y,z;
char c;
44
Biến (2)
• Lưu ý:
- Cần khai báo tất cả các biến trước khi sử dụng
- Có thể kết hợp khai báo biến với việc khởi tạo giá
trị cho biến theo cú pháp:
kiểu_dữ_liệu tên_biến=giá_trị;
Ví dụ:
int a=4,b=5;
float x,y,z=10.9;
- Tùy mục đích sử dụng, biến có thể được khai báo ở
ngoài hàm, đầu hàm (ngay sau ký hiệu { để bắt đầu
thân hàm) hoặc đầu khối lệnh (ngay sau ký hiệu {
bắt đầu khối lệnh)
45
Hàm
• Là một đơn vị độc lập của chương trình, cho phép
nhận dữ liệu vào, xử lý dữ liệu và trả về kết quả
Ví dụ: pow(x,y), sin(x), cos(x),
• Một chương trình có thể có nhiều hàm
• Hàm main() là bắt buộc phải có, chương trình bắt
đầu thực hiện từ câu lệnh đầu tiên của hàm main()
• Ngôn ngữ C không cho phép xây dựng hàm bên
trong một hàm khác; tuy nhiên có thể truyền dữ
liệu/kết quả từ hàm này sang hàm khác qua các
tham số/biến ngoài
46
Biểu thức (1)
• Được tạo thành từ sự kết hợp các toán tử (operater)
và các toán hạng (operand) để thể hiện một công
thức tính toán
- Toán tử: tác động lên các toán hạng và trả về giá
trị thuộc một kiểu nhất định. Các toán tử : +, -, *,
/,
- Toán hạng: hằng, biến, phần tử mảng, lời gọi
hàm,
• Mỗi biểu thức có một giá trị thuộc kiểu xác định
- Ví dụ:
4+5*2, (a+b)*2, x-y/9,
47
Biểu thức (2)
• Có 3 dạng biểu thức cơ bản:
- Biểu thức số học
Ví dụ: 9/3-1, 2*a+5,
- Biểu thức logic
Ví dụ: !1, a && b || c,
- Biểu thức quan hệ
(một trường hợp riêng của biểu thức logic)
Ví dụ: 9!=5, a>b,
48
Biểu thức (3)
• Sử dụng biểu thức:
- Dùng làm vế phải trong các lệnh gán giá trị
- Dùng làm toán hạng trong các biểu thức khác
- Dùng làm tham số thực sự trong các lời gọi hàm
- Dùng làm chỉ số trong các cấu trúc lặp for, while,
do while
- Dùng làm biểu thức kiểm tra trong các cấu trúc
rẽ nhánh if, switch
-
49
Toán tử
• Các toán tử số học
• Các phép thao tác trên bit
• Các toán tử quan hệ
• Các toán tử logic
• Các toán tử đặc biệt
• Thứ tự ưu tiên của các toán tử
50
Các toán tử số học (1)
• Các toán tử 1 ngôi:
Lưu ý: Với các toán tử ++/--, nếu đặt toán tử trước
toán hạng thì thực hiện tăng/giảm giá trị trước, đặt
toán tử sau toán hạng thì thực hiện tăng/giảm giá trị
sau
Ví dụ:
x=9; y=x++; z=x--; y=9, z=10, x=9
x=9; y=++x; z=--x; y=10, x=9, z=9
Toán tử Ý nghĩa Kiểu toán hạng Ví dụ
- Đảo dấu Nguyên hoặc thực -5, -12
++ Tăng 1 đơn vị Nguyên hoặc thực ++4, x++
-- Giảm 1 đơn vị Nguyên hoặc thực --4, x--
51
Các toán tử số học (2)
• Các toán tử 2 ngôi:
Toán tử Ý nghĩa Kiểu toán hạng Ví dụ
+ Phép cộng Nguyên hoặc thực 3+5, x+1.25
- Phép trừ Nguyên hoặc thực 9-1, y-4.5
* Phép nhân Nguyên hoặc thực 3*4, x*2.5
/ Phép chia Nguyên hoặc thực 11.0/3.0, x/y
11.0/3, 11/3.0
/ Phép chia lấy
phần nguyên
2 số nguyên 11/3
% Phép chia lấy
phần dư
2 số nguyên 11%3
52
Các phép thao tác trên bit (1)
• Gồm các phép thao tác:
Toán
tử
Ý nghĩa Kiểu toán
hạng
Ví dụ
& Phép và theo
bit
2 số nhị phân 0&0, 0&1, 1&0,
1&1, 100&101
| Phép hoặc
theo bit
2 số nhị phân 0|0, 0|1, 1|0, 1|1,
100|101
^ Phép hoặc loại
trừ theo bit
2 số nhị phân 0^0, 0^1, 1^0,
1^1, 100^101
<< Dịch trái số nhị phân a<<2, 101<<2
>> Dịch phải số nhị phân a>>2, 101>>2
~ Lấy phần bù số nhị phân ~0, ~1, ~101
53
Các phép thao tác trên bit (2)
• Lưu ý: Đối với các phép dịch chuyển số học, nếu
thực hiện trên giá trị thuộc kiểu số nguyên có dấu
thì bảo toàn bit dấu (bit cực trái), nếu thực hiện trên
các giá trị thuộc kiểu số nguyên không dấu
(unsigned) thì bit dấu không có ý nghĩa và cũng bị
dịch chuyển như các bit khác
Ví dụ:
(-256)<<2 = -1024
(-256)>>2 = -64
54
Các toán tử quan hệ
• Gồm các toán tử:
Toán tử Ý nghĩa Kiểu toán hạng Ví dụ
> Lớn hơn Nguyên hoặc thực 5>3, a>b
>= Lớn hơn
hoặc bằng
Nguyên hoặc thực 2>=2, a>=b
< Nhỏ hơn Nguyên hoặc thực 1<3, a<b
<= Nhỏ hơn
hoặc bằng
Nguyên hoặc thực 3<=8, a<=b
== Bằng Nguyên hoặc thực 3==4, a==b
!= Khác Nguyên hoặc thực 3!=4, a!=b
55
Các toán tử logic
• Gồm các toán tử:
Toán tử Ý nghĩa Kiểu toán hạng Ví dụ
! Phép phủ định 1 biểu thức logic !1, !(a>b)
&& Phép và 2 biểu thức logic 1&&0, a>=11
&& a<=99
|| Phép hoặc 2 biểu thức logic 1||0, a<-9 ||
a==0
56
Các toán tử đặc biệt
• Toán tử điều kiện
• Toán tử gán
• Dấu ,
• Phép lấy địa chỉ của biến
• Phép ép kiểu
57
Toán tử điều kiện
• Cú pháp:
Biểu thức 1 ? Biểu thức 2 : Biểu thức 3
Ý nghĩa: Biểu thức 1 nhận giá trị đúng thì toán tử
trả về giá trị là Biểu thức 2, ngược lại toán tử trả về
giá trị là Biểu thức 3
Ví dụ: a>b?a:b
58
Toán tử gán (1)
• Cú pháp: tên_biến=biểu_thức;
Ý nghĩa: gán giá trị của biểu_thức cho tên_biến
Ví dụ: int a,b,c;
a=5;
b=4;
c=a*b;
• Lưu ý:
- Biểu thức gán tên_biến=biểu_thức (không có dấu ;)
được sử dụng như các biểu thức thông thường khác
Ví dụ: c=(a=5)*(b=4);
a=b=c=20;
59
Toán tử gán (2)
• Toán tử gán dạng thu gọn:
Toán tử gán: x=x+y;
Dạng thu gọn: x+=y;
• Lưu ý: Dạng thu gọn này áp dụng được với tất cả
các phép toán 2 ngôi +, -, *, /, % và các phép thao
tác trên bit &, ^, |, >
60
Dấu ,
• Xét ví dụ:
x=(a++,b=a+b);
↔ a++; b=a+b; x=b;
• Các biểu thức trong ngoặc đặt ngăn cách nhau bởi
dấu , sẽ được tính theo chiều từ trái sang phải
• Biểu thức dùng để gán giá trị cho x là biểu thức con
ngoài cùng bên phải
61
Phép lấy địa chỉ của biến
• Tên biến được xem như tên vùng nhớ lưu trữ giá trị
của biến
• Vùng nhớ được đánh địa chỉ biến có địa chỉ
• Cú pháp: &tên_biến
Ví dụ: khai báo int a=125;
&a trả về địa chỉ vùng nhớ lưu giá trị của biến a
62
Phép ép kiểu
• Sử dụng khi biểu thức gồm các toán hạng khác kiểu
hoặc khi cần gán giá trị thuộc kiểu này cho một biến
thuộc kiểu khác
• Cú pháp:
(kiểu_dữ_liệu_mới) tên_biến
hoặc (kiểu_dữ_liệu_mới) (biểu thức)
Ví dụ: với khai báo int a,b;
((float)a)/b trả về kết quả phép chia chính xác theo
kiểu số thực
(int) (a+0.5) trả về một kết quả theo kiểu số nguyên
• Lưu ý: kiểu dữ liệu mới phải “cao hơn” kiểu dữ liệu
hiện tại, tránh ép kiểu từ “cao” xuống “thấp”
63
Thứ tự ưu tiên của các toán tử (1)
64
Mức Các toán tử Trình tự kết hợp
1 () [] -> . :: Trái qua phải
2 ! ~ - ++ -- & * (type) sizeof Phải qua trái
3 * / % Trái qua phải
4 + - Trái qua phải
5 > Trái qua phải
6 >= Trái qua phải
7 == != Trái qua phải
8 & Trái qua phải
9 ^ Trái qua phải
10 | Trái qua phải
11 && Trái qua phải
12 || Trái qua phải
13 ? : Phải qua trái
14 = *= /= %= += -= >= &= ^= |= Phải qua trái
15 , Trái qua phải
Thứ tự ưu tiên của các toán tử (2)
• Để việc tính toán được dễ dàng nên bổ sung các cặp
dấu ngoặc () một cách hợp lý trong biểu thức
Ví dụ:
- n = 1+2*3 có thể viết thành n = 1+(2*3)
- a>=11 && a=11)
&& (a<=99)
65
Câu lệnh (1)
• Là một chỉ thị hoàn chỉnh yêu cầu máy tính thực
hiện một/một nhóm thao tác nào đó
• Chương trình được tạo thành từ một dãy các câu
lệnh
• Mỗi lệnh kết thúc bằng dấu ;
• Phân loại
- Lệnh đơn: không chứa các câu lệnh khác, ví dụ,
lệnh gán giá trị
Ví dụ: a=4; b=5;
- Lệnh phức: chứa nhiều lệnh, ví dụ, khối lệnh đặt
trong cặp dấu {}, không có dấu ; sau ký hiệu }
Ví dụ: {x=3.2;
y=8.9;}
66
Câu lệnh (2)
• Lưu ý:
- Trình biên dịch bỏ qua các dấu cách, Tab và các ký
hiệu xuống dòng được chèn vào trong các lệnh
Ví dụ:
int a;
a=125;
a = 125;
a
=
125;
- Một khối lệnh có thể chứa nhiều khối lệnh khác
- Thân hàm cũng được xem là một khối lệnh không
nằm trong bất kỳ khối lệnh nào khác
67
Câu lệnh (3)
• Lưu ý (tiếp):
- Biến được khai báo