11/24/2010
1
2.2 Biến, kiểu dữ liệu và các
toán tử toán học
Nội dung
 Biến
 Hằng
 Các kiểu dữ liệu cơ bản trong C
 Biểu thức toán học
 Một số hàm toán học trong C
 Toán tử logic và toán tử trên bit
 Độ ưu tiên của các toán tử
2.2 Biến, hằng, kiểu dữ liệu
 Biến (variable) là đại lượng mà giá trị có thể thay đổi trong 
chương trình. 
 Biến phải được khai báo trước khi sử dụng.
 Tên biến được đặt theo quy tắc định danh.
 Quy tắc đặt định danh (identifier):
 Gồm có: chữ cái, chữ số và dấu gạch dưới “_”
 Bắt đầu của định danh phải là chữ cái hoặc dấu gạch 
dưới, không được bắt đầu định danh bằng chữ số.
 Định danh do người lập trình đặt không được trùng với 
từ khóa, và các định danh khác.
2.2 Biến, hằng, kiểu dữ liệu
Định danh hợp lệ Định danh không hợp lệ
wiggles
cat2
Hot_Tub
taxRate
_kcab
$Z]**
2cat
Hot-Tub
tax rate
don‘t
int
Ngôn ngữ C phân biệt chữ hoa và chữ thường !
sum, Sum, sUm, suM, SUm là các tên biến khác nhau
11/24/2010
2
2.2 Biến, hằng, kiểu dữ liệu
 Độ dài tên biến không giới hạn, tuy nhiên chỉ có 31 ký tự
đầu là có ý nghĩa.
 Không nên đặt tên biến quá dài
Nên đặt tên biến có ý nghĩa
 VD. Biến chứa thông tin về điểm thi nên đặt là diemThi
hoặc diemThiTHDC thay vì chỉ đặt tên là d, I, x …
 Dùng quy tắc Camel: vd, soSinhVien, diemThi
 Dùng dấu gạch nối: vd, so_sinh_vien, diem_thi
2.2 Biến, hằng, kiểu dữ liệu
 Các ký tự, số hoặc xâu ký tự được 
gọi là một hằng (constant)
Vd. 5, 5.6, 'A',
"programming is funn"
 Biểu thức mà toán hạng chỉ gồm 
các hằng số được gọi là biểu thức 
hằng
VD. 4+5-6.1
 Các kiểu dữ liệu cơ bản  trong C : int, float,
double, char
2.2 Biến, hằng, kiểu dữ liệu 2.2 Biến, hằng, kiểu dữ liệu
 Kiểu số nguyên cơ bản : int
 10, ‐23, 0 là các hằng số nguyên
 Mặc định trong C các hằng số nguyên biểu diễn bằng hệ cơ
số 10. 
 Ngoài hệ cơ số 10, hằng số nguyên còn được biểu diễn
bằng hệ cơ số 8 (octal) và hệ sơ số 16 (hexa)
 Hệ cơ số 8 : bắt đầu bằng số 0, vd 050, 045
 Hệ cơ số 16: bắt đầu bằng 0x, vd 0x5F, 0xE5
 In ra dùng  %d, %i , %o, %#o, %x, %#x 
printf("%d %d %dn",50, 050, 0x50);
In ra : 50 40 80
11/24/2010
3
2.2 Biến, hằng, kiểu dữ liệu
 Các kiểu số nguyên khác: char, short, long, long long
 Kích thước lưu trữ
 Để chỉ rõ hằng kiểu long ta dùng thêm ký hiệu l hoặc L ở sau
Type
Macintosh 
Metrowerks CW 
(Default) Linux on a PC
IBM PC 
Windows XP 
Windows NT
ANSI C 
Minimum
char 8 8 8 8
int 32 32 32 16
short 16 16 16 16
long 32 32 32 32
long long 64 64 64 64
2.2 Biến, hằng, kiểu dữ liệu
 Số nguyên có dấu và số nguyên không dấu: signed và
unsigned 
 Mặc định các kiểu số nguyên là signed
 Khai báo số nguyên không dấu: unsigned
unsigned int, unsigned long,…
 Để chỉ ra rõ một hằng số nguyên là không dấu, dùng u
hoặc U ở cuối
243U, 34u, 343454UL
2.2 Biến, hằng, kiểu dữ liệu
 Kiểu số thực : float  
 3., 125.8, và –.0001 là các hằng số thực
 3.5e+2, .12e3 là các hằng số thực dưới dạng ký pháp khoa
học
 Kích thước biểu diễn : 32 bit
 In ra số thực
 %f dưới dạng dấu phảy tĩnh
 %e dưới dạng ký pháp khoa học
 %g tự điều chỉnh cho dễ nhìn
printf("%f %e %g", .00000012, 5.12, 50000.12);
2.2 Biến, hằng, kiểu dữ liệu
 Kiểu số thực mở rộng : double 
 Sử dụng 64 bit
 Độ chính xác gấp đôi so với float
 Để phân biệt 1 hằng số thực là float thì thêm ký hiệu f 
hoặc F ở cuối .34f   45.56F 
11/24/2010
4
2.2 Biến, hằng, kiểu dữ liệu
 Kiểu ký tự : char
 ‘A’, ‘v’, ‘0’, ‘n’ là các hằng ký tự
 In ra bằng %c
 Có thể dùng như một giá trị nguyên (chính là mã 
ASCII của ký tự đó)
printf("%c %d",'A','A');
2.2 Biến, hằng, kiểu dữ liệu
 Một số hằng ký tự Ký hiệu Ý nghĩa
a Audible alert
b Backspace
f Form feed
n Newline
r Carriage return
t Horizontal tab
v Vertical tab
 Backslash
” Double quote
’ Single quote
?  Question mark
2.2 Biến, hằng, kiểu dữ liệu
Type Constant Examples Printf char
char 'a', 'n' %c
short int %hi, %hx, %ho
unsigned short int %hi, %hx, %ho
int  12, ‐97, 0xFFE0, 0177  %i, %x, %o
unsigned int 12u, 100U, 0XFFu %u, %x, %o
long int 12L, ‐2001, 0xffffL %li, %lx, %lo
unsigned long int 12UL, 100ul, 0xffeeUL  %lu, %lx, %lo
long long int 0xe5e5e5e5LL, 500ll %lli, %llx, %llo
unsigned long long
int
12ull, 0xffeeULL %llu, %llx, %llo
float 12.34f, 3.1e‐5f %f, %e, %g
double 12.34, 3.1e‐5 %f, %e, %g
long double 12.341, 3.1e‐5l %Lf, %Le, %Lg
2.2 Biến, hằng, kiểu dữ liệu
/* Example 2.2.1
* kich thuoc cac kieu du lieu co ban */
#include <stdio.h>
int main(void)
{
printf("Kieu int %d bytes.n", sizeof(int));
printf("Kieu char %d bytes.n", sizeof(char));
printf("Kieu long %i bytes.n", sizeof(long));
printf("Kieu double %u bytes.n", sizeof(double));
return 0;
}
11/24/2010
5
2.2 Biến, hằng, kiểu dữ liệu
 Khai báo biến
Kiểu_dữ_liệu tên_biến ;
Kiểu_dữ_liệu tên_biến = giá_trị_ban_đầu ;
int a;
float b, c, diem_thi;
double  g, pi=3.1415, rad = 3.14;
 Khai báo hằng dưới dạng biểu tượng (symbolic constant )
#define   TÊN_HẰNG   giá_trị
const   kiểu_dữ_liệu    TÊN_HẰNG = giá_trị ;
2.2 Biến, hằng, kiểu dữ liệu
/* Example 2.2.2*/
#include <stdio.h>
#define    lai_xuat     0.013
int main(void)
{
const    int    so_thang = 12;
float    tien_gui = 10e6;
printf("Tien lai 1 nam : %gn", tien_gui*so_thang*lai_xuat);
return 0;
}
Kiểu dữ liệu logic – Boolean 
 Kiểu _Bool : kiểu logic chỉ có từ bản C99
 Kiểu logic trong C : 
 False tương ứng với 0
 True tương ứng với giá trị  0
 Kiểu _Bool : được định nghĩa trong <stdbool.h>
 Hai giá trị true, false được định nghĩa
 Có thể dùng  %i  để in ra biến kiểu _Bool
_Bool sam = true;
if(sam) printf("TRUE");
else printf("FALSE");
Biểu thức trong C
• Biểu thức toán học
• Các loại toán tử
• Độ ưu tiên của các toán tử
• Thay đổi độ ưu tiên của toán tử
11/24/2010
6
2.2 Biến, hằng, kiểu dữ liệu
 Biểu thức toán học : gồm các toán tử và toán hạng
 Toán hạng có thể là biến hoặc là hằng số
 Toán tử : 
 Toán tử 1 ngôi: –, +,!
 Toán tử hai ngôi : +, –, *, /, % ,… 
 Trình tự thực hiện theo thứ tự ưu tiên của các toán tử
2.2 Biến, hằng, kiểu dữ liệu
Toán tử Ý nghĩa Kiểu dữ liệu của toán 
hạng
Ví dụ
– Phép đổi dấu Số thực hoặc số 
nguyên
int a, b;
‐12; ‐a; ‐25.6;
Phép toán cộng Số thực hoặc số
nguyên
float x, y;
5 + 8; a + x;
3.6 + 2.9;
– Phép toán trừ Số thực hoặc số 
nguyên
3 – 1.6; a – 5;
* Phép toán nhân Số thực hoặc số
nguyên
a * b; b * y;
2.6 * 1.7;
/ Phép toán chia Số thực hoặc số
nguyên
10.0/3.0; (bằng 3.33…)
10/3.0; (bằng 3.33…)
10.0/3; (bằng 3.33…)
/ Phép chia lấy 
phần nguyên
Giữa 2 số nguyên 10/3; (bằng 3)
% Phép chia lấy 
phần dư
Giữa 2 số nguyên 10%3; (bằng 1)
#include <stdio.h> //Example 2.2.3
int main(void)
{
int a = 100;
int b = 2;
int c = 25;
int d = 4;
int result;
result = a ‐ b; // trừ
printf ("a ‐ b = %in", result);
result = b * c; // nhân
printf ("b * c = %in", result);
result = a / c; // chia
printf ("a / c = %in", result);
result = a + b * c; // thứ tự thực hiện
printf ("a + b * c = %in", result);
printf ("a * b + c * d = %in", a * b + c * d);
return 0;
}
2.2 Biến, hằng, kiểu dữ liệu Độ ưu tiên của toán tử
Loại toán tử Toán tử Tính kết hợp
Một ngôi – , ++, – – Phải đến trái
Hai ngôi ^ (pow(x,y) xy) Trái đến phải
Hai ngôi * , / , % Trái đến phải
Hai ngôi + , – Trái đến phải
Hai ngôi = Phải đến trái
 Độ ưu tiên đề cập đến thứ tự thực thi các toán tử trong C
 Độ ưu tiên tạo nên cấu trúc phân cấp của loại toán tử này 
so với loại toán tử khác khi tính giá trị một biểu thức số học
 Độ ưu tiên của các toán tử này được thay đổi bởi các dấu 
ngoặc đơn trong biểu thức
11/24/2010
7
2.2 Biến, hằng, kiểu dữ liệu
 Phép toán với số nguyên và toán tử một ngôi
#include <stdio.h> //Example 2.2.4
int main (void)
{
int a = 25;
int b = 2;
float c = 25.0;
float d = 2.0;
printf ("6 + a / 5 * b = %in", 6 + a / 5 * b);
printf ("a / b * b = %in", a / b * b);
printf ("c / d * d = %fn", c / d * d);
printf ("‐a = %in", ‐a);
return 0;
}
2.2 Biến, hằng, kiểu dữ liệu
 Phép chia module (%)
#include <stdio.h> //Example 2.2.5
int main (void)
{
int a = 25, b = 5, c = 10, d = 7;
printf ("a %% b = %in", a % b);
printf ("a %% c = %in", a % c);
printf ("a %% d = %in", a % d);
printf ("a / d * d + a %% d = %in",
a / d * d + a % d);
return 0;
}
Chuyển đổi giữa số nguyên và số thực
// Example 2.2.6
#include <stdio.h>
int main (void)
{
float f1 = 123.125, f2;
int i1, i2 = ‐150;
i1 = f1; // floating to integer conversion
printf ("%f assigned to an int produces %in", f1, i1);
f1 = i2; // integer to floating conversion
printf ("%i assigned to a float produces %fn", i2, f1);
f1 = i2 / 100; // integer divided by integer
printf ("%i divided by 100 produces %fn", i2, f1);
f2 = i2 / 100.0; // integer divided by a float
printf ("%i divided by 100.0 produces %fn", i2, f2);
f2 = (float) i2 / 100; // type cast operator
printf ("(float) %i divided by 100 produces %fn", i2, f2);
return 0;
}
2.2 Biến, hằng, kiểu dữ liệu
 Toán tử chuyển kiểu (type cast operator)
f2 = (float) i2 / 100; 
(int) 29.55 + (int) 21.99
Hoặc  int(29.55) + int(21.99)
 Chuyển kiểu tự động
char  int  long int  float  double  long double
11/24/2010
8
Một số hàm toán học trong C
Hàm Ý nghĩa
Kí hiệu
toán học
Ví dụ
sqrt(x) Căn bậc 2 của x sqrt(16.0) bằng 4.0
pow(x,y) x mũ y xy pow(2,3) bằng 8
exp(x) e mũ x ex exp(1.0) bằng 2.718282
log(x) logarithm tự nhiên (cơ số e)
của x
ln x log(2.718282) bằng 1.0
log10(x) logarithm cơ số 10 của x log x log10(100) bằng 2
sin(x) sin của x sin x sin(0.0) bằng 0.0
cos(x) cosin của x cos x cos(0.0) bằng 1.0
tan(x) tang của x tg x tan(0.0) bằng 0.0
ceil(x) phần nguyên già của x, tức
là số nguyên nhỏ nhất
không nhỏ hơn x
ceil(2.5) bằng 3
ceil(-2.5) bằng –2
floor(x) phần nguyên non của x, tức
là số nguyên lớn nhất không
lớn hơn x
floor(2.5) bằng 2
floor(-2.5) bằng –3
x
 
x
 
x
 VD1. Viết chương trình tính khoảng cách giữa
hai điểm A(1, 3, 5) và B(0.5, 7, 6.5) trong không
gian 3 chiều
 VD2. Viết chương trình tính
3
log (56)
Toán tử quan hệ và Logic
Toán tử quan hệ : Kiểm tra mối quan hệ giữa hai biến
hay giữa một biến và một hằng
Toán tử quan hệ
Toán tử Ý nghĩa
> Lớn hơn
>= Lớn hơn hoặc bằng
< Nhỏ hơn
<= Nhỏ hơn hoặc bằng
== Bằng
!= Không bằng
Toán tử Logic: là những ký hiệu dùng để kết hợp hay 
phủ định biểu thức chứa các toán tử quan hệ
Toán tử quan hệ và Logic (tt.)
Những biểu thức dùng toán tử Logic trả về
0 thay cho false và 1 thay cho true
Ví dụ: (5>10) && (7<20)
Toán tử Ý nghĩa
&& AND: Kết quả là True khi cả 2 điều kiện đều đúng
|| OR : Kết quả là True khi chỉ một trong hai điều kiện 
là đúng
! NOT: Tác động trên các giá trị riêng lẻ, chuyển đổi
True thành False và ngược lại.
11/24/2010
9
Toán tử Logic nhị phân
Toán tử logic nhị phân: thực hiện giống toán tử logic 
nhưng trên các bit. 
Toán tử Mô tả
Bitwise AND 
( x & y)
Mỗi vị trí của bit trả về kết quả là 1 nếu bit của hai toán 
hạng là 1.
Bitwise OR
( x | y)
Mỗi vị trí của bit trả về kết quả là 1 nếu bit của một 
trong hai toán hạng là 1. 
Bitwise NOT
( ~ x)
Ðảo giá trị của bit(1 thành 0 và ngược lại). 
Bitwise XOR 
( x ^ y)
Thực hiện XOR trên 2 bit  (cho giá trị 0 nếu 2 bit bằng 
nhau, và 1 nếu ngược lại). 
<<, >> dịch bit 
trái và phải
Toán tử Logic nhị phân (tt.)
Ví dụ
• 10 & 15 1010 & 11111010  10
• 10 | 15 1010 | 11111111  15
• 10 ^ 15 1010 ^ 11110101  5
• ~ 10  ~1010 1…11110101  -11
•15 << 3  1111 << 3  1111000
•15 >> 3  1111 >> 3  1
Thứ tự ưu tiên Kiểu toán tử
1 Số học (Arithmetic)
2 So sánh (Comparison)
3 Logic (Logical)
Khi một biểu thức có nhiều loại toán tử thì độ ưu tiên
giữa chúng phải được thiết lập.
Độ ưu tiên giữa các toán tử
Độ ưu tiên Toán tử Trình tự kết hợp
(  ) 
[ ] 
. 
‐> 
++ ‐‐ (dạng hậu tố) 
Trái sang phải
++   ‐‐
+ ‐
! ~  
(type)
*
&
sizeof 
Phải sang trái
*  / % Trái sang phải
+ ‐ Trái sang phải
<< >> Trái sang phải
< <=
> >=
Trái sang phải
Giảm dần
11/24/2010
10
Độ ưu tiên của các toán tử
Độ ưu tiên Toán tử Trình tự kết hợp
== != Trái sang phải
& Trái sang phải
^ Trái sang phải
! Trái sang phải
&& Trái sang phải
|| Trái sang phải
?: (toán tử điều kiện) Phải sang trái
=
+= ‐=
*= /=
%= &=
^= |=
<<= >>=
Phải sang trái
, (ngăn cách biểu thức) Trái sang phải
Giảm dần
Độ ưu tiên giữa các toán tử (tt.)
Ví dụ :
2*3+4/2 > 3 AND 3<5 OR 10<9
Việc tính toán như sau :
[2*3+4/2] > 3 AND 3<5 OR 10<9
Toán tử số học sẽ được tính trước
[[2*3]+[4/2]] > 3 AND 3<5 OR 10<9
[6+2] >3 AND 3<5 OR 10<9
[8 >3] AND [3<5] OR [10<9]
Kế đến là toán tử so sánh có cùng độ ưu tiên. Ta áp dụng quy
tắc tính từ trái sang phải.
True AND True OR False
Cuối cùng là toán tử kiểu Logic. 
AND sẽ có độ ưu tiên cao hơn OR
[True AND True] OR False
True OR False
True
Độ ưu tiên giữa các toán tử (tt.) Thay đổi độ ưu tiên
 Dấu ngoặc đơn ( ) có độ ưu tiên cao nhất
 Độ ưu tiên của các toán tử có thể được thay đổi bởi dấu 
ngoặc đơn
 Toán tử có độ ưu tiên thấp hơn nếu đặt trong dấu ngoặc 
đơn sẽ được thực thi trước
 Khi các cặp ngoặc đơn lồng nhau ( ( ( ) ) ), cặp ngoặc đơn 
trong cùng nhất sẽ được thực thi trước
 Nếu trong biểu thức có nhiều cặp ngoặc đơn thì việc thực thi 
sẽ theo thứ tự từ trái sang phải 
11/24/2010
11
Ví dụ :
5+9*3^2‐4 > 10 AND (2+2^4‐8/4 > 6 OR (2<6 AND 10>11))
Cách tính :
1)  5+9*3^2‐4 > 10 AND (2+2^4‐8/4 > 6 OR (True AND False))
Dấu ngoặc đơn bên trong sẽ được tính trước
2)  5+9*3^2‐4 > 10 AND (2+2^4‐8/4 > 6 OR False)
Thay đổi độ ưu tiên (tt.)
3)  5+9*3^2‐4 >10 AND (2+16‐8/4 > 6 OR False)
Kế đến dấu ngoặc đơn ở ngoài được tính đến
4) 5+9*3^2‐4 > 10 AND (2+16‐2 > 6 OR False)
5) 5+9*3^2‐4 > 10 AND (18‐2 > 6 OR False)
6)  5+9*3^2‐4 > 10 AND (16 > 6 OR False)
7)  5+9*3^2‐4 > 10 AND (True OR False)
8)  5+9*3^2‐4 > 10 AND True
Thay đổi độ ưu tiên (tt.)
9) 5+9*9‐4>10 AND True
Biểu thức bên trái được tính trước
10) 5+81‐4>10 AND True
11)  86‐4>10 AND True
12)  82>10 AND True
13) True AND True
14) True
Thay đổi độ ưu tiên (tt.)

More Related Content

PDF
C23_Buoi1_BasicC_aewfdvccccccccccccc.pdf
PDF
Baigiang022 bien va kieu
PPT
1 Gioi Thieu Chung
PPT
Thdc3 Lap Trinh C
DOC
Bai giangtrenlop
PPT
Session 02
PPT
Session 02
PDF
LTNC_Chuong1-Kieu du lieu va cac cau truc.pdf
C23_Buoi1_BasicC_aewfdvccccccccccccc.pdf
Baigiang022 bien va kieu
1 Gioi Thieu Chung
Thdc3 Lap Trinh C
Bai giangtrenlop
Session 02
Session 02
LTNC_Chuong1-Kieu du lieu va cac cau truc.pdf

Similar to chapter2.2.Variable.datatype.Arithmetic_Expression.pdf (20)

PPT
PDF
cpp chương 1 cấu trúc dữ liệu và giải thuật
PDF
Chuong 2@ngon ngu c
PDF
LAP TRINH C - SESSION 2
PPTX
C++ presentation.pptxádddddddddddddddddđ
PDF
Ctdl c1
PDF
lap trinh c Phan2 chuong5
DOCX
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
PDF
BÀI 2: Các khái niệm cơ bản của ngôn ngữ lập trình c++
PDF
Bài tập mẫu C và C++ có giải
PDF
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
PDF
06 tong quan ve ngon ngu c
PDF
PPT
Nhập môn lập trình - Vương Bá Thịnh
PDF
Nmlt c03 cac_kieudulieucoso_in
PPT
Nmlt c03 cac_kieudulieucoso
PDF
Ngon ngu c theo chuan ansi
PDF
Lập trình C cho VĐK 8051
PDF
C cho 8051
PDF
Python Beginner Class day-02-strings
cpp chương 1 cấu trúc dữ liệu và giải thuật
Chuong 2@ngon ngu c
LAP TRINH C - SESSION 2
C++ presentation.pptxádddddddddddddddddđ
Ctdl c1
lap trinh c Phan2 chuong5
Bài giảng Lập trình cơ bản - truongkinhtethucpham.com
BÀI 2: Các khái niệm cơ bản của ngôn ngữ lập trình c++
Bài tập mẫu C và C++ có giải
Bài giảng ngôn ngữ lập trình C cơ bản trường đại học công nghiệp thực phẩm TP...
06 tong quan ve ngon ngu c
Nhập môn lập trình - Vương Bá Thịnh
Nmlt c03 cac_kieudulieucoso_in
Nmlt c03 cac_kieudulieucoso
Ngon ngu c theo chuan ansi
Lập trình C cho VĐK 8051
C cho 8051
Python Beginner Class day-02-strings
Ad

chapter2.2.Variable.datatype.Arithmetic_Expression.pdf

  • 1. 11/24/2010 1 2.2 Biến, kiểu dữ liệu và các toán tử toán học Nội dung  Biến  Hằng  Các kiểu dữ liệu cơ bản trong C  Biểu thức toán học  Một số hàm toán học trong C  Toán tử logic và toán tử trên bit  Độ ưu tiên của các toán tử 2.2 Biến, hằng, kiểu dữ liệu  Biến (variable) là đại lượng mà giá trị có thể thay đổi trong  chương trình.   Biến phải được khai báo trước khi sử dụng.  Tên biến được đặt theo quy tắc định danh.  Quy tắc đặt định danh (identifier):  Gồm có: chữ cái, chữ số và dấu gạch dưới “_”  Bắt đầu của định danh phải là chữ cái hoặc dấu gạch  dưới, không được bắt đầu định danh bằng chữ số.  Định danh do người lập trình đặt không được trùng với  từ khóa, và các định danh khác. 2.2 Biến, hằng, kiểu dữ liệu Định danh hợp lệ Định danh không hợp lệ wiggles cat2 Hot_Tub taxRate _kcab $Z]** 2cat Hot-Tub tax rate don‘t int Ngôn ngữ C phân biệt chữ hoa và chữ thường ! sum, Sum, sUm, suM, SUm là các tên biến khác nhau
  • 2. 11/24/2010 2 2.2 Biến, hằng, kiểu dữ liệu  Độ dài tên biến không giới hạn, tuy nhiên chỉ có 31 ký tự đầu là có ý nghĩa.  Không nên đặt tên biến quá dài Nên đặt tên biến có ý nghĩa  VD. Biến chứa thông tin về điểm thi nên đặt là diemThi hoặc diemThiTHDC thay vì chỉ đặt tên là d, I, x …  Dùng quy tắc Camel: vd, soSinhVien, diemThi  Dùng dấu gạch nối: vd, so_sinh_vien, diem_thi 2.2 Biến, hằng, kiểu dữ liệu  Các ký tự, số hoặc xâu ký tự được  gọi là một hằng (constant) Vd. 5, 5.6, 'A', "programming is funn"  Biểu thức mà toán hạng chỉ gồm  các hằng số được gọi là biểu thức  hằng VD. 4+5-6.1  Các kiểu dữ liệu cơ bản  trong C : int, float, double, char 2.2 Biến, hằng, kiểu dữ liệu 2.2 Biến, hằng, kiểu dữ liệu  Kiểu số nguyên cơ bản : int  10, ‐23, 0 là các hằng số nguyên  Mặc định trong C các hằng số nguyên biểu diễn bằng hệ cơ số 10.   Ngoài hệ cơ số 10, hằng số nguyên còn được biểu diễn bằng hệ cơ số 8 (octal) và hệ sơ số 16 (hexa)  Hệ cơ số 8 : bắt đầu bằng số 0, vd 050, 045  Hệ cơ số 16: bắt đầu bằng 0x, vd 0x5F, 0xE5  In ra dùng  %d, %i , %o, %#o, %x, %#x  printf("%d %d %dn",50, 050, 0x50); In ra : 50 40 80
  • 3. 11/24/2010 3 2.2 Biến, hằng, kiểu dữ liệu  Các kiểu số nguyên khác: char, short, long, long long  Kích thước lưu trữ  Để chỉ rõ hằng kiểu long ta dùng thêm ký hiệu l hoặc L ở sau Type Macintosh  Metrowerks CW  (Default) Linux on a PC IBM PC  Windows XP  Windows NT ANSI C  Minimum char 8 8 8 8 int 32 32 32 16 short 16 16 16 16 long 32 32 32 32 long long 64 64 64 64 2.2 Biến, hằng, kiểu dữ liệu  Số nguyên có dấu và số nguyên không dấu: signed và unsigned   Mặc định các kiểu số nguyên là signed  Khai báo số nguyên không dấu: unsigned unsigned int, unsigned long,…  Để chỉ ra rõ một hằng số nguyên là không dấu, dùng u hoặc U ở cuối 243U, 34u, 343454UL 2.2 Biến, hằng, kiểu dữ liệu  Kiểu số thực : float    3., 125.8, và –.0001 là các hằng số thực  3.5e+2, .12e3 là các hằng số thực dưới dạng ký pháp khoa học  Kích thước biểu diễn : 32 bit  In ra số thực  %f dưới dạng dấu phảy tĩnh  %e dưới dạng ký pháp khoa học  %g tự điều chỉnh cho dễ nhìn printf("%f %e %g", .00000012, 5.12, 50000.12); 2.2 Biến, hằng, kiểu dữ liệu  Kiểu số thực mở rộng : double   Sử dụng 64 bit  Độ chính xác gấp đôi so với float  Để phân biệt 1 hằng số thực là float thì thêm ký hiệu f  hoặc F ở cuối .34f   45.56F 
  • 4. 11/24/2010 4 2.2 Biến, hằng, kiểu dữ liệu  Kiểu ký tự : char  ‘A’, ‘v’, ‘0’, ‘n’ là các hằng ký tự  In ra bằng %c  Có thể dùng như một giá trị nguyên (chính là mã  ASCII của ký tự đó) printf("%c %d",'A','A'); 2.2 Biến, hằng, kiểu dữ liệu  Một số hằng ký tự Ký hiệu Ý nghĩa a Audible alert b Backspace f Form feed n Newline r Carriage return t Horizontal tab v Vertical tab Backslash ” Double quote ’ Single quote ?  Question mark 2.2 Biến, hằng, kiểu dữ liệu Type Constant Examples Printf char char 'a', 'n' %c short int %hi, %hx, %ho unsigned short int %hi, %hx, %ho int  12, ‐97, 0xFFE0, 0177  %i, %x, %o unsigned int 12u, 100U, 0XFFu %u, %x, %o long int 12L, ‐2001, 0xffffL %li, %lx, %lo unsigned long int 12UL, 100ul, 0xffeeUL  %lu, %lx, %lo long long int 0xe5e5e5e5LL, 500ll %lli, %llx, %llo unsigned long long int 12ull, 0xffeeULL %llu, %llx, %llo float 12.34f, 3.1e‐5f %f, %e, %g double 12.34, 3.1e‐5 %f, %e, %g long double 12.341, 3.1e‐5l %Lf, %Le, %Lg 2.2 Biến, hằng, kiểu dữ liệu /* Example 2.2.1 * kich thuoc cac kieu du lieu co ban */ #include <stdio.h> int main(void) { printf("Kieu int %d bytes.n", sizeof(int)); printf("Kieu char %d bytes.n", sizeof(char)); printf("Kieu long %i bytes.n", sizeof(long)); printf("Kieu double %u bytes.n", sizeof(double)); return 0; }
  • 5. 11/24/2010 5 2.2 Biến, hằng, kiểu dữ liệu  Khai báo biến Kiểu_dữ_liệu tên_biến ; Kiểu_dữ_liệu tên_biến = giá_trị_ban_đầu ; int a; float b, c, diem_thi; double  g, pi=3.1415, rad = 3.14;  Khai báo hằng dưới dạng biểu tượng (symbolic constant ) #define   TÊN_HẰNG   giá_trị const   kiểu_dữ_liệu    TÊN_HẰNG = giá_trị ; 2.2 Biến, hằng, kiểu dữ liệu /* Example 2.2.2*/ #include <stdio.h> #define    lai_xuat     0.013 int main(void) { const    int    so_thang = 12; float    tien_gui = 10e6; printf("Tien lai 1 nam : %gn", tien_gui*so_thang*lai_xuat); return 0; } Kiểu dữ liệu logic – Boolean   Kiểu _Bool : kiểu logic chỉ có từ bản C99  Kiểu logic trong C :   False tương ứng với 0  True tương ứng với giá trị  0  Kiểu _Bool : được định nghĩa trong <stdbool.h>  Hai giá trị true, false được định nghĩa  Có thể dùng  %i  để in ra biến kiểu _Bool _Bool sam = true; if(sam) printf("TRUE"); else printf("FALSE"); Biểu thức trong C • Biểu thức toán học • Các loại toán tử • Độ ưu tiên của các toán tử • Thay đổi độ ưu tiên của toán tử
  • 6. 11/24/2010 6 2.2 Biến, hằng, kiểu dữ liệu  Biểu thức toán học : gồm các toán tử và toán hạng  Toán hạng có thể là biến hoặc là hằng số  Toán tử :   Toán tử 1 ngôi: –, +,!  Toán tử hai ngôi : +, –, *, /, % ,…   Trình tự thực hiện theo thứ tự ưu tiên của các toán tử 2.2 Biến, hằng, kiểu dữ liệu Toán tử Ý nghĩa Kiểu dữ liệu của toán  hạng Ví dụ – Phép đổi dấu Số thực hoặc số  nguyên int a, b; ‐12; ‐a; ‐25.6; Phép toán cộng Số thực hoặc số nguyên float x, y; 5 + 8; a + x; 3.6 + 2.9; – Phép toán trừ Số thực hoặc số  nguyên 3 – 1.6; a – 5; * Phép toán nhân Số thực hoặc số nguyên a * b; b * y; 2.6 * 1.7; / Phép toán chia Số thực hoặc số nguyên 10.0/3.0; (bằng 3.33…) 10/3.0; (bằng 3.33…) 10.0/3; (bằng 3.33…) / Phép chia lấy  phần nguyên Giữa 2 số nguyên 10/3; (bằng 3) % Phép chia lấy  phần dư Giữa 2 số nguyên 10%3; (bằng 1) #include <stdio.h> //Example 2.2.3 int main(void) { int a = 100; int b = 2; int c = 25; int d = 4; int result; result = a ‐ b; // trừ printf ("a ‐ b = %in", result); result = b * c; // nhân printf ("b * c = %in", result); result = a / c; // chia printf ("a / c = %in", result); result = a + b * c; // thứ tự thực hiện printf ("a + b * c = %in", result); printf ("a * b + c * d = %in", a * b + c * d); return 0; } 2.2 Biến, hằng, kiểu dữ liệu Độ ưu tiên của toán tử Loại toán tử Toán tử Tính kết hợp Một ngôi – , ++, – – Phải đến trái Hai ngôi ^ (pow(x,y) xy) Trái đến phải Hai ngôi * , / , % Trái đến phải Hai ngôi + , – Trái đến phải Hai ngôi = Phải đến trái  Độ ưu tiên đề cập đến thứ tự thực thi các toán tử trong C  Độ ưu tiên tạo nên cấu trúc phân cấp của loại toán tử này  so với loại toán tử khác khi tính giá trị một biểu thức số học  Độ ưu tiên của các toán tử này được thay đổi bởi các dấu  ngoặc đơn trong biểu thức
  • 7. 11/24/2010 7 2.2 Biến, hằng, kiểu dữ liệu  Phép toán với số nguyên và toán tử một ngôi #include <stdio.h> //Example 2.2.4 int main (void) { int a = 25; int b = 2; float c = 25.0; float d = 2.0; printf ("6 + a / 5 * b = %in", 6 + a / 5 * b); printf ("a / b * b = %in", a / b * b); printf ("c / d * d = %fn", c / d * d); printf ("‐a = %in", ‐a); return 0; } 2.2 Biến, hằng, kiểu dữ liệu  Phép chia module (%) #include <stdio.h> //Example 2.2.5 int main (void) { int a = 25, b = 5, c = 10, d = 7; printf ("a %% b = %in", a % b); printf ("a %% c = %in", a % c); printf ("a %% d = %in", a % d); printf ("a / d * d + a %% d = %in", a / d * d + a % d); return 0; } Chuyển đổi giữa số nguyên và số thực // Example 2.2.6 #include <stdio.h> int main (void) { float f1 = 123.125, f2; int i1, i2 = ‐150; i1 = f1; // floating to integer conversion printf ("%f assigned to an int produces %in", f1, i1); f1 = i2; // integer to floating conversion printf ("%i assigned to a float produces %fn", i2, f1); f1 = i2 / 100; // integer divided by integer printf ("%i divided by 100 produces %fn", i2, f1); f2 = i2 / 100.0; // integer divided by a float printf ("%i divided by 100.0 produces %fn", i2, f2); f2 = (float) i2 / 100; // type cast operator printf ("(float) %i divided by 100 produces %fn", i2, f2); return 0; } 2.2 Biến, hằng, kiểu dữ liệu  Toán tử chuyển kiểu (type cast operator) f2 = (float) i2 / 100;  (int) 29.55 + (int) 21.99 Hoặc  int(29.55) + int(21.99)  Chuyển kiểu tự động char  int  long int  float  double  long double
  • 8. 11/24/2010 8 Một số hàm toán học trong C Hàm Ý nghĩa Kí hiệu toán học Ví dụ sqrt(x) Căn bậc 2 của x sqrt(16.0) bằng 4.0 pow(x,y) x mũ y xy pow(2,3) bằng 8 exp(x) e mũ x ex exp(1.0) bằng 2.718282 log(x) logarithm tự nhiên (cơ số e) của x ln x log(2.718282) bằng 1.0 log10(x) logarithm cơ số 10 của x log x log10(100) bằng 2 sin(x) sin của x sin x sin(0.0) bằng 0.0 cos(x) cosin của x cos x cos(0.0) bằng 1.0 tan(x) tang của x tg x tan(0.0) bằng 0.0 ceil(x) phần nguyên già của x, tức là số nguyên nhỏ nhất không nhỏ hơn x ceil(2.5) bằng 3 ceil(-2.5) bằng –2 floor(x) phần nguyên non của x, tức là số nguyên lớn nhất không lớn hơn x floor(2.5) bằng 2 floor(-2.5) bằng –3 x   x   x  VD1. Viết chương trình tính khoảng cách giữa hai điểm A(1, 3, 5) và B(0.5, 7, 6.5) trong không gian 3 chiều  VD2. Viết chương trình tính 3 log (56) Toán tử quan hệ và Logic Toán tử quan hệ : Kiểm tra mối quan hệ giữa hai biến hay giữa một biến và một hằng Toán tử quan hệ Toán tử Ý nghĩa > Lớn hơn >= Lớn hơn hoặc bằng < Nhỏ hơn <= Nhỏ hơn hoặc bằng == Bằng != Không bằng Toán tử Logic: là những ký hiệu dùng để kết hợp hay  phủ định biểu thức chứa các toán tử quan hệ Toán tử quan hệ và Logic (tt.) Những biểu thức dùng toán tử Logic trả về 0 thay cho false và 1 thay cho true Ví dụ: (5>10) && (7<20) Toán tử Ý nghĩa && AND: Kết quả là True khi cả 2 điều kiện đều đúng || OR : Kết quả là True khi chỉ một trong hai điều kiện  là đúng ! NOT: Tác động trên các giá trị riêng lẻ, chuyển đổi True thành False và ngược lại.
  • 9. 11/24/2010 9 Toán tử Logic nhị phân Toán tử logic nhị phân: thực hiện giống toán tử logic  nhưng trên các bit.  Toán tử Mô tả Bitwise AND  ( x & y) Mỗi vị trí của bit trả về kết quả là 1 nếu bit của hai toán  hạng là 1. Bitwise OR ( x | y) Mỗi vị trí của bit trả về kết quả là 1 nếu bit của một  trong hai toán hạng là 1.  Bitwise NOT ( ~ x) Ðảo giá trị của bit(1 thành 0 và ngược lại).  Bitwise XOR  ( x ^ y) Thực hiện XOR trên 2 bit  (cho giá trị 0 nếu 2 bit bằng  nhau, và 1 nếu ngược lại).  <<, >> dịch bit  trái và phải Toán tử Logic nhị phân (tt.) Ví dụ • 10 & 15 1010 & 11111010  10 • 10 | 15 1010 | 11111111  15 • 10 ^ 15 1010 ^ 11110101  5 • ~ 10  ~1010 1…11110101  -11 •15 << 3  1111 << 3  1111000 •15 >> 3  1111 >> 3  1 Thứ tự ưu tiên Kiểu toán tử 1 Số học (Arithmetic) 2 So sánh (Comparison) 3 Logic (Logical) Khi một biểu thức có nhiều loại toán tử thì độ ưu tiên giữa chúng phải được thiết lập. Độ ưu tiên giữa các toán tử Độ ưu tiên Toán tử Trình tự kết hợp (  )  [ ]  .  ‐>  ++ ‐‐ (dạng hậu tố)  Trái sang phải ++   ‐‐ + ‐ ! ~   (type) * & sizeof  Phải sang trái *  / % Trái sang phải + ‐ Trái sang phải << >> Trái sang phải < <= > >= Trái sang phải Giảm dần
  • 10. 11/24/2010 10 Độ ưu tiên của các toán tử Độ ưu tiên Toán tử Trình tự kết hợp == != Trái sang phải & Trái sang phải ^ Trái sang phải ! Trái sang phải && Trái sang phải || Trái sang phải ?: (toán tử điều kiện) Phải sang trái = += ‐= *= /= %= &= ^= |= <<= >>= Phải sang trái , (ngăn cách biểu thức) Trái sang phải Giảm dần Độ ưu tiên giữa các toán tử (tt.) Ví dụ : 2*3+4/2 > 3 AND 3<5 OR 10<9 Việc tính toán như sau : [2*3+4/2] > 3 AND 3<5 OR 10<9 Toán tử số học sẽ được tính trước [[2*3]+[4/2]] > 3 AND 3<5 OR 10<9 [6+2] >3 AND 3<5 OR 10<9 [8 >3] AND [3<5] OR [10<9] Kế đến là toán tử so sánh có cùng độ ưu tiên. Ta áp dụng quy tắc tính từ trái sang phải. True AND True OR False Cuối cùng là toán tử kiểu Logic.  AND sẽ có độ ưu tiên cao hơn OR [True AND True] OR False True OR False True Độ ưu tiên giữa các toán tử (tt.) Thay đổi độ ưu tiên  Dấu ngoặc đơn ( ) có độ ưu tiên cao nhất  Độ ưu tiên của các toán tử có thể được thay đổi bởi dấu  ngoặc đơn  Toán tử có độ ưu tiên thấp hơn nếu đặt trong dấu ngoặc  đơn sẽ được thực thi trước  Khi các cặp ngoặc đơn lồng nhau ( ( ( ) ) ), cặp ngoặc đơn  trong cùng nhất sẽ được thực thi trước  Nếu trong biểu thức có nhiều cặp ngoặc đơn thì việc thực thi  sẽ theo thứ tự từ trái sang phải 
  • 11. 11/24/2010 11 Ví dụ : 5+9*3^2‐4 > 10 AND (2+2^4‐8/4 > 6 OR (2<6 AND 10>11)) Cách tính : 1)  5+9*3^2‐4 > 10 AND (2+2^4‐8/4 > 6 OR (True AND False)) Dấu ngoặc đơn bên trong sẽ được tính trước 2)  5+9*3^2‐4 > 10 AND (2+2^4‐8/4 > 6 OR False) Thay đổi độ ưu tiên (tt.) 3)  5+9*3^2‐4 >10 AND (2+16‐8/4 > 6 OR False) Kế đến dấu ngoặc đơn ở ngoài được tính đến 4) 5+9*3^2‐4 > 10 AND (2+16‐2 > 6 OR False) 5) 5+9*3^2‐4 > 10 AND (18‐2 > 6 OR False) 6)  5+9*3^2‐4 > 10 AND (16 > 6 OR False) 7)  5+9*3^2‐4 > 10 AND (True OR False) 8)  5+9*3^2‐4 > 10 AND True Thay đổi độ ưu tiên (tt.) 9) 5+9*9‐4>10 AND True Biểu thức bên trái được tính trước 10) 5+81‐4>10 AND True 11)  86‐4>10 AND True 12)  82>10 AND True 13) True AND True 14) True Thay đổi độ ưu tiên (tt.)