– Dữ liệu phải được nhập vào các biến.. Nếu không có toán tử địa chỉ, giá trị của biến sẽ không được cập nhật – Thư viện: stdio.h Lê Nguyên Khôi... • Biến lưu giá trị thuộc một kiểu
Trang 1Tin học cơ sở 4
Biến và Các Kiểu Dữ Liệu Cơ Bản
Trang 2Lệnh xuất dữ liệu – printf
Xuất dữ liệu ra màn hình:
printf("%i - %i = %i\n", a, b, a - b);
– Các ký tự hằng được in nguyên văn
– Các ký tự định dạng được thay bằng giá trị của biểu thức
Trang 3Nhập dữ liệu từ màn hình:
scanf("%i %i", &a, &b);
– Trong chuỗi định dạng chỉ có ký tự định dạng và khoảng
trắng.
– Dữ liệu phải được nhập vào các biến.
– Trước tên biến phải ghi dấu & - toán tử địa chỉ Nếu không có
toán tử địa chỉ, giá trị của biến sẽ không được cập nhật – Thư viện: stdio.h
Lê Nguyên Khôi
Trang 4#include <stdio.h>
int main(void) {
Trang 6• Biến lưu giá trị thuộc một kiểu DL nào đó.
• Để sử dụng biến: đặt tên hợp lệ -> khai báo biến
• Biến được lưu trong bộ nhớ bằng một dãy liên tục các ô nhớ
• Mỗi biến có ba thuộc tính:
– Tên
– Kiểu
– Giá trị hiện tại
• Phải khai báo biến trước khi sử dụng
Trang 7double length, width;
• Khởi tạo giá trị ngay khi khai báo:
<Kiểu Dữ Liệu> <Tên Biến> = <Giá Trị>;
Trang 8Tên biến
• Dùng để định danh biến
• Bắt đầu bằng chữ cái, tiếp đến là các chữ cái, chữ số hoặc dấu gạch chân
• Không được trùng với từ khóa của C/C++
• C phân biệt chữ thường và chữ hoa
• Tên biến nên gợi nghĩa và ngắn gọn
• Ví dụ: i, k53, X, nchars, numberOfChars,
number_of_chars.
Trang 9Quy tắc đặt tên
• Dễ đọc, dễ hiểu
• Không nên bắt đầu bằng dấu gạch chân (_)
• Dùng chữ in hoa cho các ký tự đầu của mỗi từ:
Trang 10Từ khóa của C
Trang 11Từ khóa của C++
Lê Nguyên Khôi
Trang 12Các kiểu DL cơ bản
• Các kiểu số nguyên.
• Các kiểu số thực.
Trang 13Giá trị lớn nhất
Số lượng bytes (miền giá trị) của mỗi kiểu phụ thuộc vào trình dịch
Giá trị được định nghĩa trong thư viện limits.h
Đa phần sử dụng kiểu int
Lê Nguyên Khôi
Trang 14unsigned long big = ULONG_MAX;
printf("minimum int = %i, ", INT_MIN);
printf("maximum int = %i\n", INT_MAX);
printf("maximum unsigned = %u\n", UINT_MAX);
printf("maximum long int = %li\n", LONG_MAX);
printf("maximum unsigned long = %lu\n", big);
unsigned long big = ULONG_MAX;
printf("minimum int = %i, ", INT_MIN);
printf("maximum int = %i\n", INT_MAX);
printf("maximum unsigned = %u\n", UINT_MAX);
printf("maximum long int = %li\n", LONG_MAX);
printf("maximum unsigned long = %lu\n", big);
return 0;
} minimum int = -32768, maximum int = 32767 maximum unsigned = 65535
maximum long int = 2147483647 maximum unsigned long = 4294967295
minimum int = -32768, maximum int = 32767 maximum unsigned = 65535
maximum long int = 2147483647 maximum unsigned long = 4294967295
Trang 15printf("minimum char = %i, ", CHAR_MIN);
printf("maximum char = %i\n", CHAR_MAX);
printf(“Sau '%c' la '%c'\n", lower_a, lower_a + 1);
printf(“Ky tu in hoa '%c'\n", lower_m - 'a' + 'A');
printf("minimum char = %i, ", CHAR_MIN);
printf("maximum char = %i\n", CHAR_MAX);
printf(“Sau '%c' la '%c'\n", lower_a, lower_a + 1);
printf(“Ky tu in hoa '%c'\n", lower_m - 'a' + 'A');
Trang 16Số nguyên trong các cơ số khác
• Các hệ cơ số có thể thực hiện được: cơ số 8 (octal),
cơ số 10 (decimal), cơ số 16 (hexadecimal)
int dec = 20, oct = 020, hex = 0x20;
printf("dec=%d, oct=%d, hex=%d\n", dec, oct, hex);
printf("dec=%d, oct=%o, hex=%x\n", dec, oct, hex);
int dec = 20, oct = 020, hex = 0x20;
printf("dec=%d, oct=%d, hex=%d\n", dec, oct, hex);
printf("dec=%d, oct=%o, hex=%x\n", dec, oct, hex);
return 0;
} dec=20, oct=16, hex=32 dec=20, oct=20, hex=20 dec=20, oct=16, hex=32 dec=20, oct=20, hex=20
Trang 17Các kiểu số thực
Name #bytes format Max val Min val
long double 12 %Lf %Le
%Lg
LDBL_MIN LDBL_MAX
Số lượng bytes (miền giá trị) của mỗi kiểu phụ thuộc vào trình dịch Giá trị được định nghĩa trong thư viện float.h
Đa phần sử dụng kiểu double
Lê Nguyên Khôi
Trang 18f= 3.14 g=1.20e-05 h=5e+09
Trang 19Kiểu boolean và void
• Trong C:
– Không có kiểu boolean (logic)
– Sử dụng kiểu int để thay thế:
• 0 false (sai), tất cả các giá trị khác true (đúng)
• void:
– Hàm không trả lại bất kỳ giá trị nào
– Được dùng để khai báo kiểu trả lại của các Hàm mà
không có giá trị trả lại hoặc ta không quan tâm đến giá trị trả lại
Lê Nguyên Khôi
Trang 20Biểu diễn các giá trị của biến
1.414F Căn bậc hai của 2 float
Trang 22Khai báo hằng
• Cách 1:
const double TOC_DO_ANH_SANG = 1079252848.8; const double TOC_DO_ANH_SANG = 1.079e+9;
• Chỉ khác cách khai báo biến ở từ khóa const
• Không được phép thay đổi giá trị của hằng
Trang 23const long double PI = 3.141592653590L;
const int NGAY_TRONG_TUAN = 7;
const long double PI = 3.141592653590L;
const int NGAY_TRONG_TUAN = 7;
Trang 24const doule TOC_DO_ANH_SANG = 1079252848.8;
const doule TOC_DO_ANH_SANG = 1.079e+9;
Trang 25int ngay = CHU_NHAT;
long flag = USE_API;
#include <stdio.h>
long flag = USE_API;
Tìm từ “PI”, thay bằng 3.1415
Không thay thế “PI”
Lưu ý: không có
“=” và “;”
Lê Nguyên Khôi
Trang 27• Biến phải được gán giá trị trước khi sử dụng;
–Nếu không thì sao?
Lê Nguyên Khôi
Trang 28• ++ tăng lên 1: x++; tương đương x=x+1;
• giảm đi 1 : x ; tương đương x=x-1;
Trang 29++ và
• ++: tăng giá trị lên 1
• : giảm giá trị xuống 1
• Có thể đặt trước hoặc sau biến
// ví dụ y = 5
// như vậy, y = 6 nhưng x = 5
Trang 30Chuyển đổi kiểu DL cơ bản
• Có thể gán giá trị kiểu dữ liệu này cho biến thuộc kiểu dữ liệu khác
<biến int> = <giá trị double>
<biến double> = <giá trị int>
Trang 31Chuyển đổi kiểu DL cơ bản
• Chuyển kiểu dữ liệu một cách chủ động
<biến int> = (int) <giá trị double>
< biến double> = (double) <giá trị int>
Trang 33Ví dụ về toán tử chia “/”
• Trình biên dịch dựa vào kiểu của các toán
hạng để quyết định phép chia tương ứng
int main(void) {
int i = 5, j = 4, k; double f = 5.0, g = 4.0, h;
“i”, “j” kiểu int, “/” là
phép chia lấy nguyên
Trang 35Các phép toán logic
Toán tử Sử dụng Trả về true (đúng) nếu
&& TH1 && TH2 TH1 và TH2 cùng đúng, đánh giá
Trang 37Bitwise operators & ^ |
Logical operators && ||
Trang 38Tính giá trị của các biểu thức
• Trong 1 biểu thứ, các phép toán có độ ưu tiên cao hơn được thực hiện trước
• Nếu cùng mức ưu tiên thì thực hiện từ trái qua phải
• Ví dụ: ‘*’ thực hiện trước ‘+’.
• Nên sử dụng cặp dấu ()
– x + y * 2 -> x + (y * 2)
Trang 39Kiểu enum
• Một cách khác dùng để khai báo hằng
enum <tên kiểu> {<giá trị 1>,< giá trị 2>,…} enum THANG {MOT, HAI, BA, …}
enum NGAY {THU2, THU3, THU4, …}
• Sử dụng enum khi không quan tâm tới giá trị của kiểu:
– Chỉ cần biết tên của thứ trong tuần, tên của tháng trong năm chứ không cần biết giá trị là bao nhiêu.
enum THANG {MOT, HAI, BA, …}
enum NGAY {THU2, THU3, THU4, …}
enum MON_HOC {TOAN, LY, HOA, VAN, …}
Trang 40Kích thước - sizeof (Obj)
• Cho biết kích thước của đối tượng theo đơn vị byte
return 0;
} "big" su dung 4 bytes short su dung 2 bytes
double su dung 8 bytes
"big" su dung 4 bytes short su dung 2 bytes double su dung 8 bytes