Chương III HẰNG, BIẾN VÀ MẢNGTrong chương trình C sử dụng các dạng thông tin kiểu giá trị sau: số nguyên int, số thực hay số dấu phẩy động float, số dấu phẩy động có độ chính xác gấp đô
Trang 1Chương III HẰNG, BIẾN VÀ MẢNG
Trong chương trình C sử dụng các dạng thông tin (kiểu giá trị) sau: số nguyên
(int), số thực hay số dấu phẩy động (float), số dấu phẩy động có độ chính xác gấp đôi (double) và ký tự (char).
Hằng chính là một giá trị thông tin cụ thể Biến và mảng là các đại lượng mang tin Mỗi loại biến (mảng) có thể chứa một dạng thông tin nào đó, ví dụ
biến kiểu int chứa được các số nguyên, biến kiểu float chứa được các
Trang 2Người ta chia biên ( mảng) thành:
- Biến (mảng) tự động
- Biến (mảng) ngoài
- Biến (mảng) tĩnh.
Biến (mảng) tự động chỉ tồn tại (được cấp phát bộ nhớ) khi nào chúng được sử dụng.
Biến (mảng) ngoài và tĩnh tồn tại trong suốt thời gian làm việc của chương trình.
Cách tổ chức như vậy vừa tiết kiệm bộ nhớ (vì cùng một khoảng nhớ lúc thì phân cho biến này, lúc thì phân cho biến khác), vừa cho phép sử dụng một tên biến cho các đối tượng khác nhau mà không gây ra một sự nhầm lẫn nào.
Trang 31 Một giá trị kiểu char chiếm một byte
(8bit) và biểu diễn được một ký tự thông qua bảng mã ASCII
Thực chất dữ liệu kiểu char là một số
nguyên không dấu trong khoảng từ 0 đến
Trang 4Dưới đây là phạm vi và kích cỡ biểu
diễn của giá trị kiểu char
Kiểu Phạm vi biểu
diễn của chúng là:
thướcint
long int
unsigned
-32768 32767-2145483648 2145483648
0 65535
2 byte
4 byte
2 byte
Trang 53 Giá trị dấu phẩy động Trong C cho
phép sử dụng 2 loại giá trị dấu phẩy
động là float và double Kích thước và
phạm vị biểu diển là:
Kiểu Phạm vi biểu
diễn
Số chữ số có nghĩa
Kích thước
float
double
1.5e-45 3.4e+38
5.0e-324 1.7e+308
7-815-16
4 byte
8 byte
Giải thích: Máy có thể lưu trữ được số
dấu phảy dộng có giá trị tuyệt đối trong khoảng từ 1.5e-45 đến 3.4e+38 Số có giá trị tuyệt đối nhỏ hơn 1.5e-45 đượ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ự.
Trang 6II Hằng
Hằng là các đại lượng mà các giá trị của nó không thay đổi trong quá trình tính toán Các loại hằng được sử dụng:
Hằng dấu chấm động (float và double) được viết
theo hai cách
Cách 1: (Ký pháp tự nhiên): Số được viết theo cách
thông thường chỉ có khác là dấu phẩy thập phân được thay bởi dấu chấm.
Ví dụ:
44.356, -43442.54546
Cách 2: (Ký pháp khoa học): Số được tách thành hai
phần là phần định trị và phần bậc Phần định trị là một số nguyên hoặc số thực được viết theo ký pháp tự nhiên, phần bậc là một số nguyên Hai
phần này cách nhau bởi ký tự e hoặc E
Ví dụ:
123.456e-5 (Biểu diễn giá trị 0.00123456)
0.123E5 (Biểu diễn giá trị 12300)
Trang 7 Hằng int là số nguyên có giá trị trong khoảng
Ở đây x1, x2, x3, là số nguyên trong khoảng từ
0 đến 7 Hằng nguyên hệ 8 luôn luôn nhận giátrị dương
Hằng int hệ 16 được viết theo cách:
0xx1x2x3 hoặc 0Xx1x2x3
Ở đây x1, x2, x3, là số nguyên trong khoảng từ
0 đến 9 và các chữ cái từ a(A) đến f(F) Hằng
Trang 8 Hằng ký tự là một ký tự riêng biệt được
viết trong dấu nháy đơn (‘), ví dụ: ‘a’, giá trị ‘a’chính là mã ASCII của chữ a Như vậy giá trịcủa ‘a’ là 97 Hằng ký tự có thể tham gia vàocác phép toán như mọi số nguyên khác
Ví dụ, giá trị của biểu thức:
‘a’ - ‘A’ = 97 - 65 = 32Hằng ký tự còn có thể được viết theocách
‘\x1x2x3 ’
Ở đây x1, x2, x3, là một số hệ 8 mà hệ giátrị của nó bằng mã ASCII của ký tự cần biểudiễn
Ví dụ:
Chữ a có mã hệ 10 là 97 đối ra hệ 8 là 141
Trang 9 Hằng xâu ký tự: là một dãy các ký tự bất kỳ đặt giữa hai dấu nháy kép (“)
Ví dụ:
“Dai Hoc Su Pham”
“” /* Xâu rỗng */
Cách định nghĩa một hằng:
#define <Tên hằng> <Giá trị của hằng>
Hoặc:
const <kiểu> <tên hằng> = <Giá trị>
Trang 10III Biến
Mọi biến cần phải khai báo trước khi sử dụng.Cách khái báo một biến:
type <tên biến>
Vị trí khái báo biến: Các biến khai báo cần
đặt ngay sau dấu { đầu tiên của thân hàm vàcần đứng trước mọi câu lệnh Như vậy, saumột câu lệnh gán chẵng hạn thì không đượckhai báo nữa
Việc khởi đầu cho các biến: Nếu trong khai
báo, ngay sau tên iến ta đặt dấu = và một giátrị nào đó thì đây chính là cách vừa khai báovừa khởi đầu cho một biến
Ví dụ:
int a, b = 45, c =50;
Trang 11Các kiểu dữ liệu
TYPE FORMAT BYTES MINIUM MAXIMUM
2 or 4
2 or 4 4
4
CHAR_MIN SCHAR_MI N
0 SHRT_MIN 0
INT_MIN 0
LONG_MIN 0
CHAR_MAX SCHAR_MAX UCHAR_MAX SHRT_MAX USHRT_MAX INT_MAX
UNIT_MAX LONG_MAX ULONG_MAX
Trang 12TYPE FORMAT BYTES MINIUM MAXIMUM
FLT_MIN DBL_MIN LDBL_MIN
FLT_MAX DBL_MAX LDBL_MAX
Trang 13IV Một số ví dụ về hằng và biến:
Ví dụ 1: Chương trình hiển thị các giá trị lớn nhất và
nhỏ nhất trong kiểu số nguyên
printf(" Minimum int = %i ", INT_MIN);
printf(" \n Maximum int = %i ", INT_MAX);
printf(" \n Maximum unsigned = %u ", UINT_MAX);
printf(" \n Maximum long int = %li ", LONG_MAX);
printf(" \n Maximum unsigned long = %lu ", big);
getch();
return 0;
}
Trang 14Ví dụ 2: Chương trình hiển thị các giá trị trong
printf(" Minimum char = %i ", CHAR_MIN);
printf(" \n Maximum char = %i ", CHAR_MAX);
printf(" \n Sau ky tu '%c' la ky tu '%c' ",lower_a, lower_a+1);
printf(" \n Ky tu hoa cua '%c' la '%c' ", lower_z,lower_z-'a'+'A');
getch();
return 0;
}
Trang 15Ví dụ 3: Hãy viết chương trinh chuyển đổi giữa các hệ
return 0;
}
Trang 16VI Mảng
Một biến chỉ có thể biểu diễn được một giá trị Để biểu diễn một dãy hay một bảng số ta có thể dùng nhiều
biến nhưng cáhc này không tiên lợi Việc sử dụng mảng là cách tốt hơn nhiều trong những trường hợp như vây
Mảng có thể hiểu là tập hợp nhiều phần tử có cùng một kiểu giá trị và có chung một tên Mỗi phần tử của mảng
biểu diễn được một giá trị
Có bao nhiêu kiểu biến thì cũng có bấy nhiêu kiểu mảng
Mảng cần được khai báo để định rõ:
- Loại mảng (int, float, double, )
- Tên mảng
Trang 17Khai bái mảng:
Khai báo mảng 1 chiêu:
int a[10] /*Khai báo một mảng chứa 10
số nguyên*/
Khai báo mảng 2 chiều:
int b[5][4] /Khai báo một ma trận có
5dòng 4 cột*/
Trang 18Chú ý:
Các phần của mảng được cấp phát các khoảng nhớ liên tiếp nhau trong bộ nhớ Nói cách khác phần tử có địa chỉ liên tiếp nhau trong bộ nhớ.
Trong bộ nhớ, các phần tử của mảng hai chiều được sắp xếp theo hàng.
Truy cập đến từng phần tử của mảng:
– Mỗi phần tử của mảng được xác định nhờ các chỉ số của nó.
– Chỉ số của mảng phải có giá trị int không vượt quá kích thước của chiều tương ứng.
Ví dụ:
a[i]
Trang 20Máy xem một khối lệnh cũng như một câulệnh riêng lẻ Nói cáhc khác, chổ nào trongchương trình đặt được một câu lệnh thì cóthể đặt một khối lệnh
2 Khai báo biến ở đầu khối lệnh:
Các khai báo chẳng những có thể đặt ởđầu mỗi hàm mà còn có thể viết ở đầukhối lệnh
Trang 213 Sự lòng nhau của các khối lệnh:
Bên trong một khối lệnh lại có thể viết thêm các khối lệnh khác Sự lồng nhau theo cách như vậy là không hạnh chế
4 Phạm vi hoạt động của biến và mảng:
Một điểm cần nhớ kỹ là: nếu ta quan miệncác biến và các mảng khái báo trong mộtkhối lệnh sẽ tồn tại suốt thời gian làm việccủa chương trình và được sử dụng trong toànbộ chương trình, thì cách hiểu như vậy làkhông dúng
Thực chất là: Khi máy bắt đầu làm việcvới khói lệnh thì các biến và các mảng khaibáo bên trong nó mới được hình thành vàđược cấp phát bộ nhớ Các biến này chỉtồn tại trong thời gain máy làm việc bên trong
Trang 22Từ đó cần nhớ:
- Giá trị của một biến hay một mảng khai báobên trong một khối lệnh không thể đưa ra đểsử dụng ở bất kỳ chổ nào ngoài khối lệnhđó
- Ở bất kỳ chổ nào bên ngoài một khối lệnh
ta không thể can thiệp đến các biến và cácmảng được khái báo bên trong khối lệnh đó
- Nếu bên trong một khối lệnh ta dùng mộtbiến (hay một mảng) có tên là a, thì điều nàykhông làm thay đổi gía trị của một biến kháccũng có tên là a (nếu có) được dùng ở đâuđó bên ngoài khối lệnh đó
- Tuy nhiên, nếu một biến (mảng) đã đượckhai báo ở ngoài một khối lệnh và trùng tênvới các biến khai báo bên trong khối lệnh và
Trang 24VI Vài nét về hàm và chương trình.
Hàm là một đơn vị độc lập của chương trình Tính độc lập của hàm được thể hiện trên hai điểm:
Không cho phép xây dựng một hàmbên trong hàm khác
Mỗi hàm có các biến, mảng, Riêngcủa mình và chúng chỉ được sửdụng nội bộ bên trong hàm đó
Một chương trình bao gồm một hoặc
nhiều hàm Hàm main() là thànn phần
bắt buộc của chương trình Chương trình bắt đầu thực hiện từ lệnh đầu
tiên của hàm main() và kết thức khi gặp dấu } cuối cùng Khi chương trình
làm việc máy có thể đi từ hàm này
Trang 25Việc truyền dữ liệu và kết quả từ hàmnày sang hàm khác được thực hiện theomột trong hai cách sau:
Sử dụng đối của hàm Sử dụng biến ngoài, mảng ngoài, biến tĩnh ngoài và mảng tĩnh ngoài.
VII Biến, mảng tự động:
Định nghĩa:
Biến (mảng) khái báo bên trong thân củamột hàm (kể cả hàm main()) gọi là biến(mảng) tự động Đối của hàm cũng đượcxem là biến tự động
Đặc trưng của biến, mảng tự động:
Phạm vị hoạt động: Các biến (mảng)tự động chỉ hoạt động bên trong thân của
Trang 26Thời gian tồn tại: Các biến (mảng) tự động của một hàm sẽ tồn tại (được cấp phát bộ nhớ) trong khoảng thời gian từ khi máy bắt đầu làm việc với hàm đến khi máy ra khỏi hàm.
Do chương trình bắt đầu làm việc từ câu lệnh đầu tiên của hàm main() và khi máy ra khỏi hàm main() thì chương trình kết thúc, nên nếu các biến, mảng khai báo trong main() sẽ tồn tại trong suốt thời gian làm việc của chương trình.
Khỏi đầu:
Chỉ có thể áp dụng cơ chế khởi đầu cho biến tự động.
Trang 27VIII Biến, mảng ngoài:
Định nghĩa:
Biến (mảng) khai báo ngoài hàm gọi là biến (mảng) ngoài.
Đặc trưng của biến, mảng ngoài:
Phạm vị hoạt động: Các biến (mảng) ngoài hoạt động từ vị trí khái báo cho đến cuối chương trình Như vậy, nếu một biến (mảng) ngoài được khai báo
ở đầu chương trình (đứng trước tất của các hàm) thì nó có thể được sử dụng trong bất kỳ hàm nào miễn là hàm đó không có các biến (mảng) tự
Trang 28Thời gian tồn tại: Các biến (mảng) ngoài sẽ tồn tại (được cấp phát bộ nhớ) trong suốt thời gian làm việc của chương trình.
Các quy tắc về khởi đầu:
1 Các biến (mảng) ngoài có thể khởi đầu (một lần) vào lúc dịch chương trình bằng cách sử dụng các biểu thức hằng Nếu không được khởi đầu, máy sẽ gán giá trị không.
2 Khi khởi đầu mảng ngoài có thể không cần chỉ ra kích thước (số phần tử) của nó Khi đó, mãy sẽ dành cho mảng một khoảng nhớ đủ để thu nhân danh sách giá trị khởi đầu.
3 Khi chỉ ra kích thước cụ thể của mảng, thì kích thước này cần không nhỏ hơn kích thước của bộ khởi đầu.
4 Bộ khởi đầu của một mảng char có thể:
Trang 29char ch1[]={'I', 'l','o','v','e'};
char ch2[]="I love";
char ch3[6]={'I', 'l','o','v','e'};
char ch4[6]="I love";
return 0;
}
Trang 30IX Biến tĩnh, mảng tĩnh
Khi khai báo biến (mảng ) tĩnh ta viết
thêm từ khoá static vào đằng trước
(mảng) tĩnh ngoài.
Các biến (mảng) tĩnh (trong và ngoài)
giống biến (mảng) ngoài ở chổ:
+ Chúng được cấp phát bộ nhớ trong suốt thời gian hoạt động của chương trình,
Trang 31+ Chúng có thể được khởi đầu một lần khidịch chương trình nhờ các biểu thức hằng.Các quy tắc khỏi đầu đối với biến (mảng)ngoài áp dụng cho biến mảng tĩnh Sựkhác nhau giữa biến (mảng) ngaòi với biến(mảng) tĩnh chỉ ở phạm vi hoạt động.
+ Các biến (mảng) tĩnh trong khi hoạt độngđược bên trong thân của hàm mà tại đóchúng được khai báo
+ Phạm vi hoạt động của các biến (mảng)tĩnh ngoài được tính từ khi chúng khai báođến cuối tệp gốc chứa chúng