Bài giảng Tin học đại cương - Phần 2: Ngôn ngữ lập trình C (Tiết 2)

11/24/2010  
Nội dung  
Biến  
Hằng  
2.2 Biến, kiểu dữ liệu và các  
toán tử toán học  
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  
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.  
Định danh hợp lệ  
wiggles  
cat2  
Hot_Tub  
taxRate  
_kcab  
Định danh không hợp lệ  
$Z]**  
2cat  
Hot-Tub  
tax rate  
don‘t  
int  
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ố.  
Ngôn ngữ C phân biệt chữ hoa và chữ thường !  
Đị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.  
sum, Sum, sUm, suM, SUm là các tên biến khác nhau  
1
11/24/2010  
2.2 Biến, hằng, kiểu dữ liệu  
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.  
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 fun\n"  
Không nên đặt tên biến quá dài  
Nên đặt tên biến có ý nghĩa  
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. Biến chứa thông tin về điểm thi nên đặt là diemThi  
hoặc diemThiTHDCthay vì chỉ đặt tên là d, I, x …  
VD. 4+5-6.1  
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  
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  
Các kiểu dữ liệu cơ bản trong C : int, float,  
double, char  
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 %d\n",50, 050, 0x50);  
In ra : 50 40 80  
2
11/24/2010  
2.2 Biến, hằng, kiểu dữ liệu  
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ữ  
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  
Macintosh  
Metrowerks CW  
(Default)  
IBM PC  
Windows XP  
Linux on a PC Windows NT  
ANSI C  
Minimum  
Khai báo số nguyên không dấu: unsigned  
Type  
unsigned int, unsigned long,…  
char  
int  
8
8
8
8
32  
16  
32  
32  
16  
32  
64  
32  
16  
32  
64  
16  
16  
32  
64  
Để chỉ ra rõ một hằng số nguyên là không dấu, dùng u  
hoặc U ở cuối  
short  
long  
243U, 34u, 343454UL  
long long 64  
Để chỉ rõ hằng kiểu long ta dùng thêm ký hiệu l hoặc L ở sau  
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ố thực : float  
Kiểu số thực mở rộng : double  
Sử dụng 64 bit  
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  
Độ 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  
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);  
3
11/24/2010  
2.2 Biến, hằng, kiểu dữ liệu  
2.2 Biến, hằng, kiểu dữ liệu  
Một số hằng ký tự  
Ký hiệu  
Ý nghĩa  
Kiểu ký tự : char  
\a  
\b  
\f  
\n  
\r  
\t  
\v  
\\  
\”  
\’  
\?  
Audible alert  
Backspace  
‘A’, ‘v’, ‘0’, ‘\n’ là các hằng ký tự  
In ra bằng %c  
Form feed  
Newline  
Có thể dùng như một giá trị nguyên (chính là mã  
ASCII của ký tự đó)  
Carriage return  
Horizontal tab  
Vertical tab  
Backslash  
printf("%c %d",'A','A');  
Double quote  
Single quote  
Question mark  
2.2 Biến, hằng, kiểu dữ liệu  
2.2 Biến, hằng, kiểu dữ liệu  
Type  
Constant Examples  
Printf char  
char  
'a', '\n'  
%c  
/* Example 2.2.1  
* kich thuoc cac kieu du lieu co ban */  
#include <stdio.h>  
short int  
unsigned short int  
int  
%hi, %hx, %ho  
%hi, %hx, %ho  
12, ‐97, 0xFFE0, 0177 %i, %x, %o  
int main(void)  
{
unsigned int  
long int  
12u, 100U, 0XFFu  
%u, %x, %o  
12L, ‐2001, 0xffffL  
%li, %lx, %lo  
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;  
unsigned long int  
long long int  
12UL, 100ul, 0xffeeUL %lu, %lx, %lo  
0xe5e5e5e5LL, 500ll  
12ull, 0xffeeULL  
%lli, %llx, %llo  
%llu, %llx, %llo  
unsigned long long  
int  
}
float  
12.34f, 3.1e‐5f  
12.34, 3.1e‐5  
%f, %e, %g  
%f, %e, %g  
double  
long double  
12.341, 3.1e‐5l  
%Lf, %Le, %Lg  
4
11/24/2010  
2.2 Biến, hằng, kiểu dữ liệu  
2.2 Biến, hằng, kiểu dữ liệu  
/* Example 2.2.2*/  
#include <stdio.h>  
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 ;  
#define lai_xuat 0.013  
int main(void)  
int a;  
{
float b, c, diem_thi;  
double g, pi=3.1415, rad = 3.14;  
const int so_thang = 12;  
float tien_gui = 10e6;  
Khai báo hằng dưới dạng biểu tượng (symbolic constant )  
#define TÊN_HẰNG giá_trị  
printf("Tien lai 1 nam : %g\n", tien_gui*so_thang*lai_xuat);  
return 0;  
}
const kiểu_dữ_liệu TÊN_HẰNG = giá_trị ;  
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  
Biểu thức trong C  
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  
•
•
•
•
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ử  
_Bool sam = true;  
if(sam) printf("TRUE");  
else printf("FALSE");  
5
11/24/2010  
2.2 Biến, hằng, kiểu dữ liệu  
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;  
–
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ử :  
Phép toán cộng Số thực hoặc số  
float x, y;  
5 + 8; a + x;  
3.6 + 2.9;  
3 – 1.6; a – 5;  
ꢁ
nguyên  
Phép toán trừ Số thực hoặc số  
nguyên  
–
Phép toán nhân Số thực hoặc số  
nguyên  
a * b; b * y;  
2.6 * 1.7;  
*
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ử  
Phép toán chia Số thực hoặc số  
/
10.0/3.0; (bằng 3.33…)  
10/3.0; (bằng 3.33…)  
10.0/3; (bằng 3.33…)  
nguyên  
Phép chia lấy  
phần nguyên  
Phép chia lấy  
phần dư  
Giữa 2 số nguyên  
Giữa 2 số nguyên  
/
10/3;  
(bằng 3)  
%
10%3; (bằng 1)  
2.2 Biến, hằng, kiểu dữ liệu  
#include <stdio.h> //Example 2.2.3  
int main(void)  
Độ ưu tiên của toán tử  
Độ ưu tiên đề cập đến thứ tự thực thi các toán tử trong C  
{
int a = 100;  
int b = 2;  
int c = 25;  
Độ ư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  
int d = 4;  
int result;  
Độ ư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  
result = a ‐ b; // trừ  
printf ("a ‐ b = %i\n", result);  
result = b * c; // nhân  
printf ("b * c = %i\n", result);  
result = a / c; // chia  
printf ("a / c = %i\n", result);  
result = a + b * c; // thứ tự thực hiện  
printf ("a + b * c = %i\n", result);  
printf ("a * b + c * d = %i\n", a * b + c * d);  
return 0;  
Loại toán tử  
Một ngôi  
Hai ngôi  
Toán tử  
Tính kết hợp  
Phải đến trái  
Trái đến phải  
Trái đến phải  
Trái đến phải  
Phải đến trái  
– , ++, – –  
^
(pow(x,y)xy)  
Hai ngôi  
* , / , %  
Hai ngôi  
+ , –  
=
Hai ngôi  
}
6
11/24/2010  
2.2 Biến, hằng, kiểu dữ liệu  
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  
Phép chia module (%)  
#include <stdio.h> //Example 2.2.4  
int main (void)  
{
#include <stdio.h> //Example 2.2.5  
int main (void)  
{
int a = 25;  
int b = 2;  
float c = 25.0;  
float d = 2.0;  
printf ("6 + a / 5 * b = %i\n", 6 + a / 5 * b);  
printf ("a / b * b = %i\n", a / b * b);  
printf ("c / d * d = %f\n", c / d * d);  
printf ("‐a = %i\n", ‐a);  
return 0;  
int a = 25, b = 5, c = 10, d = 7;  
printf ("a %% b = %i\n", a % b);  
printf ("a %% c = %i\n", a % c);  
printf ("a %% d = %i\n", a % d);  
printf ("a / d * d + a %% d = %i\n",  
a / d * d + a % d);  
return 0;  
}
}
2.2 Biến, hằng, kiểu dữ liệu  
. Chuyển đổi giữa số nguyên và số thực  
// Example 2.2.6  
#include <stdio.h>  
int main (void)  
{
Toán tử chuyển kiểu (type cast operator)  
f2 = (float) i2 / 100;  
float f1 = 123.125, f2;  
int i1, i2 = ‐150;  
(int) 29.55 + (int) 21.99  
i1 = f1; // floating to integer conversion  
printf ("%f assigned to an int produces %i\n", f1, i1);  
Hoặc  
int(29.55) + int(21.99)  
f1 = i2; // integer to floating conversion  
printf ("%i assigned to a float produces %f\n", i2, f1);  
f1 = i2 / 100; // integer divided by integer  
printf ("%i divided by 100 produces %f\n", i2, f1);  
f2 = i2 / 100.0; // integer divided by a float  
printf ("%i divided by 100.0 produces %f\n", i2, f2);  
Chuyển kiểu tự động  
f2 = (float) i2 / 100; // type cast operator  
printf ("(float) %i divided by 100 produces %f\n", i2, f2);  
char int long int float double long double  
return 0;  
}
7
11/24/2010  
Một số hàm toán học trong C  
Kí hiệu  
toán học  
Hàm  
Ý nghĩa  
Căn bậc 2 của x  
Ví dụ  
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  
sqrt(x)  
sqrt(16.0)bằng 4.0  
x
xy  
ex  
pow(x,y)  
exp(x)  
log(x)  
pow(2,3)bằng 8  
exp(1.0)bằng 2.718282  
log(2.718282)bằng 1.0  
x mũ y  
e mũ x  
logarithm tự nhiên (cơ số e) ln x  
của x  
log10(x)  
sin(x)  
log10(100)bằng 2  
sin(0.0)bằng 0.0  
cos(0.0)bằng 1.0  
tan(0.0)bằng 0.0  
ceil(2.5)bằng 3  
ceil(-2.5)bằng –2  
logarithm cơ số 10 của x  
sin của x  
log x  
sin x  
cos x  
tg x  
cos(x)  
tan(x)  
ceil(x)  
VD2. Viết chương trình tính  
cosin của x  
tang của x  
phần nguyên già của x, tức  
x
là số nguyên nhỏ nhất    
log3 (56)  
không nhỏ hơn x  
floor(x)  
floor(2.5)bằng 2  
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  
x
   
floor(-2.5)bằng –3  
Toán tử quan hệ và Logic  
Toán tử quan hệ và Logic (tt.)  
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ử 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ử  
Ý nghĩa  
Toán tử quan hệ  
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  
Toán tử  
Ý nghĩa  
||  
!
là đúng  
>
>=  
<
Lớn hơn  
Lớn hơn hoặc bằng  
Nhỏ hơn  
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.  
Ví dụ: (5>10) && (7<20)  
<=  
==  
!=  
Nhỏ hơn hoặc bằng  
Bằng  
Không bằng  
Những biểu thức dùng toán tử Logic trả về  
0 thay cho false và 1 thay cho true  
8
11/24/2010  
Toán tử Logic nhị phân (tt.)  
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.  
Ví dụ  
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.  
• 10 & 151010 & 11111010 10  
• 10 | 151010 | 11111111 15  
• 10 ^ 151010 ^ 11110101 5  
• ~ 10 ~1010 1…11110101 -11  
•15 << 3 1111 << 3 1111000  
•15 >> 3 1111 >> 3 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  
Độ ưu tiên Toán tử  
Trình tự kết hợp  
Trái sang phải  
Độ ưu tiên giữa các toán tử  
(
)
[
]
.
‐>  
++  
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.  
‐‐ (dạng hậu tố)  
++  
+
‐‐  
‐
Phải sang trái  
!
~
(type)  
*
Thứ tự ưu tiên  
Kiểu toán tử  
&
1
2
3
Số học (Arithmetic)  
sizeof  
So sánh (Comparison)  
Logic (Logical)  
*
/
%
Trái sang phải  
Trái sang phải  
Trái sang phải  
Trái sang phải  
+
‐
<<  
>>  
<
>
<=  
>=  
9
11/24/2010  
Độ ưu tiên của các toán tử  
Độ ưu tiên giữa các toán tử (tt.)  
Độ ư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  
Phải sang trái  
Phải sang trái  
==  
&
!=  
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  
?: (toán tử điều kiện)  
=
+=  
*=  
%=  
^=  
‐=  
/=  
&=  
|=  
[[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]  
<<=  
>>=  
, (ngăn cách biểu thức)  
Trái sang phải  
Thay đổi độ ưu tiên  
Độ ưu tiên giữa các toán tử (tt.)  
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  
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.  
. 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  
True AND True OR False  
. 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  
Cuối cùng là toán tử kiểu Logic.  
AND sẽ có độ ưu tiên cao hơn OR  
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  
[True AND True] OR False  
True OR False  
True  
10  
11/24/2010  
Thay đổi độ ưu tiên (tt.)  
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  
Ví dụ :  
5+9*3^2‐4 > 10 AND (2+2^4‐8/4 > 6 OR (2<6 AND 10>11))  
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  
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.)  
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  
11  
pdf 11 trang Thùy Anh 24540 Free
Bạn đang xem tài liệu "Bài giảng Tin học đại cương - Phần 2: Ngôn ngữ lập trình C (Tiết 2)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_tin_hoc_dai_cuong_phan_2_ngon_ngu_lap_trinh_c_tiet.pdf