Bài giảng Tin học đại cương - Bài 7: Kiểu dữ liệu và biểu thức trong C - Đỗ Bá Lâm

7.2.1. Khai báo và khởi tạo biến

• Một biến trước khi sử dụng phải được khai báo

• Cú pháp khai báo:

kieu_du_lieu ten_bien;

Hoặc:

kieu_du_lieu ten_bien1, , ten_bienN;

• Ví dụ: Khai báo một biến x thuộc kiểu số nguyên

2 byte có dấu (int), biến y, z,t thuộc kiểu thực 4

byte (float) như sau:

int x;

float y,z,t;

x = 3; y = x + 1;

67.2.1. Khai báo và khởi tạo biến (2)

Kết hợp khai báo và khởi tạo

• Cú pháp:

kieu_du_lieu ten_bien = gia_tri_ban_dau;

Hoặc:

kieu_du_lieu bien1=gia_tri1, bienN=gia_triN;

• Ví dụ:

int a = 3;// sau lenh nay bien a se co gia tri bang 3

float x = 5.0, y = 7.6; // sau lenh nay x co gia

// tri 5.0, y co gia tri 7.6

pdf 69 trang yennguyen 3480
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Tin học đại cương - Bài 7: Kiểu dữ liệu và biểu thức trong C - Đỗ Bá Lâm", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Tin học đại cương - Bài 7: Kiểu dữ liệu và biểu thức trong C - Đỗ Bá Lâm

Bài giảng Tin học đại cương - Bài 7: Kiểu dữ liệu và biểu thức trong C - Đỗ Bá Lâm
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
TIN HỌC ĐẠI CƯƠNG
Bài 7. Kiểu dữ liệu và biểu thức trong C
Đỗ Bá Lâm
lamdb@soict.hut.edu.vn
Nội dung
7.1. Các kiểu dữ liệu chuẩn trong C
7.2. Khai báo và khởi tạo biến, hằng
7.3. Biểu thức trong C
7.4. Các phép toán trong C
7.5. Một số toán tử đặc trưng
7.6. Các lệnh vào ra dữ liệu với các biến
2
7.1. Các kiểu dữ liệu chuẩn trong C
Kiểu dữ liệu Ý nghĩa Kích thước Miền dữ liệu
unsigned char Kí tự không dấu 1 byte 0  255 
char Kí tự có dấu 1 byte -128  127
unsigned int Số nguyên 
không dấu 
2 byte 065.535
int Số nguyên 
có dấu
2 byte -32.76832.767
3
7.1. Các kiểu dữ liệu chuẩn trong C
Kiểu dữ liệu Ý nghĩa Kích thước Miền dữ liệu
unsigned long Số nguyên không 
dấu
4 byte 0 
4,294,967,295
long Số nguyên có dấu 4 byte -2,147,483,648 
2,147,483,647
float Số thực dấu phẩy 
động, 
độ chính xác đơn
4 byte 3.4E-38 
 3.4E+38
double Số thực dấu phẩy 
động, 
độ chính xác kép
8 byte 1.7E-308  
1.7E+308
4
Nội dung
7.1. Các kiểu dữ liệu chuẩn trong C
7.2. Khai báo và khởi tạo biến, hằng
7.3. Biểu thức trong C
7.4. Các phép toán trong C
7.5. Một số toán tử đặc trưng
7.6. Các lệnh vào ra dữ liệu với các biến
5
7.2.1. Khai báo và khởi tạo biến
• Một biến trước khi sử dụng phải được khai báo 
• Cú pháp khai báo:
kieu_du_lieu ten_bien;
Hoặc:
kieu_du_lieu ten_bien1, , ten_bienN;
• Ví dụ: Khai báo một biến x thuộc kiểu số nguyên 
2 byte có dấu (int), biến y, z,t thuộc kiểu thực 4 
byte (float) như sau:
int x;
float y,z,t;
x = 3; y = x + 1;
6
7.2.1. Khai báo và khởi tạo biến (2)
Kết hợp khai báo và khởi tạo
• Cú pháp:
kieu_du_lieu ten_bien = gia_tri_ban_dau;
Hoặc:
kieu_du_lieu bien1=gia_tri1, bienN=gia_triN;
• Ví dụ:
int a = 3;// sau lenh nay bien a se co gia tri bang 3
float x = 5.0, y = 7.6; // sau lenh nay x co gia 
// tri 5.0, y co gia tri 7.6
7
7.2.2. Khai báo hằng
• Cách 1: Dùng từ khóa #define:
– Cú pháp:
# define ten_hang gia_tri
– Ví dụ:
#define MAX_SINH_VIEN 50
#define CNTT “Cong nghe thong tin” 
#define DIEM_CHUAN 23.5
8
7.2.2. Khai báo hằng
• Cách 2: Dùng từ khóa const :
– Cú pháp:
const kieu_du_lieu ten_hang = gia_tri;
– Ví dụ:
const int MAX_SINH_VIEN = 50;
const char CNTT[20] = “Cong nghe thong tin”;
const float DIEM_CHUAN = 23.5;
9
7.2.2. Khai báo hằng
• Chú ý:
– Giá trị của các hằng phải được xác định ngay 
khi khai báo.
– Trong chương trình, KHÔNG thể thay đổi
được giá trị của hằng.
– #define là chỉ thị tiền xử lý (preprocessing 
directive): tốc độ nhanh hơn
10
Nội dung
7.1. Các kiểu dữ liệu chuẩn trong C
7.2. Khai báo và khởi tạo biến, hằng
7.3. Biểu thức trong C
7.4. Các phép toán trong C
7.5. Một số toán tử đặc trưng
7.6. Các lệnh vào ra dữ liệu với các biến
11
7.3.1. Biểu thức số học
• Là biểu thức mà giá trị của nó là các đại 
lượng số học (số nguyên, số thực).
• Các toán tử là các phép toán số học (cộng, 
trừ, nhân, chia), các toán hạng là các đại 
lượng số học (số, biến, hằng).
• Ví dụ: 
– a, b, c là các biến thuộc một kiểu dữ liệu số 
nào đó.
– 3 * 3.7
– 8 + 6/3
– a + b – c
12
7.3.2. Biểu thức logic
• Là biểu thức mà giá trị của nó là các giá trị 
logic, tức là một trong hai giá trị: Đúng 
(TRUE) hoặc Sai (FALSE). 
– Giá trị nguyên khác 0: Đúng (TRUE), 
– Giá trị 0: Sai (FALSE). 
• Các phép toán logic gồm có
– AND: VÀ logic, kí hiệu là &&
– OR: HOẶC logic, kí hiệu là ||
– NOT: PHỦ ĐỊNH, kí hiệu là !
13
7.3.3. Biểu thức quan hệ
• Là những biểu thức trong đó có sử dụng 
các toán tử quan hệ so sánh như lớn hơn, 
nhỏ hơn, bằng nhau, khác nhau
• Chỉ có thể nhận giá trị là một trong 2 giá trị 
Đúng (TRUE) hoặc Sai (FALSE)
→ Biểu thức quan hệ là một trường hợp 
riêng của biểu thức logic.
14
7.3.4. Ví dụ
• Ví dụ về biểu thức quan hệ:
15
7.3.4. Ví dụ
• Ví dụ về biểu thức logic:
16
Nội dung
7.1. Các kiểu dữ liệu chuẩn trong C
7.2. Khai báo và khởi tạo biến, hằng
7.3. Biểu thức trong C
7.4. Các phép toán trong C
7.5. Một số toán tử đặc trưng
7.6. Các lệnh vào ra dữ liệu với các biến
17
7.4. Các phép toán trong C
• Bao gồm:
– Nhóm các phép toán số học
– Nhóm các phép toán thao tác trên bit
– Nhóm các phép toán quan hệ
– Nhóm các phép toán logic
– Ngoài ra C còn cung cấp một số phép toán 
khác nữa như phép gán, phép lấy địa chỉ 
18
7.4.1. Phép toán số học
19
7.4.2. Phép toán trên bit
20
1)
1)
7.4.2. Phép toán trên bit
21
7.4.3. Phép toán quan hệ
22
7.4.4. Phép toán logic
23
7.4.5. Phép toán gán
• Cú pháp
tên_biến = biểu_thức;
• Lấy giá trị của biểu_thức gán cho tên_biến
• Ví dụ:
int a, b, c;
a = 3;
b = a + 5;
c = a * b;
24
7.4.5. Phép toán gán
• Biểu thức gán là biểu thức nên nó cũng có giá trị.
• Giá trị của biểu thức gán bằng giá trị của 
biểu_thức:
→ Có thể gán giá trị của biểu thức gán cho một 
biến khác hoặc sử dụng như một biểu thức bình 
thường
• Ví dụ:
int a, b, c;
a = b = 2007;
c = (a = 20) * (b = 30);
25
7.4.5. Phép toán gán
• Phép toán gán thu gọn:
x = x + y; giống như
x += y;
• Dạng lệnh gán thu gọn này còn áp dụng 
được với các phép toán khác: +, -, *, /, %, 
>>, <<, &, |, ^
26
7.4.6. Thứ tự ưu tiên các phép toán
27
Ví dụ
• a < 10 && 2 * b < c
• → ( a < 10 ) && ( ( 2 * b ) < c )
28
Nội dung
7.1. Các kiểu dữ liệu chuẩn trong C
7.2. Khai báo và khởi tạo biến, hằng
7.3. Biểu thức trong C
7.4. Các phép toán trong C
7.5. Một số toán tử đặc trưng
7.6. Các lệnh vào ra dữ liệu với các biến
29
7.5.1. Các phép toán tăng giảm một đơn vị
• Tăng hoặc giảm một đơn vị cho biến:
– = + 1;
→ ++;
– = - 1;
→ --;
– Ví dụ:
• int a = 5;
• float x = 10;
• a ++; // tương đương với a = a + 1;
• x --; // tương đương với x = x – 1;
30
Tiền tố và hậu tố
• Tiền tố: Thay đổi giá trị của biến trước khi sử 
dụng
• Hậu tố: Tính toán giá trị của biểu thức bằng giá 
trị ban đầu của biến, sau đó mới thay đổi giá trị 
của biến 
• Ví dụ:
int a, b, c;
a = 3; // a bang 3
b = a++;// Dang hau to
// b bằng 3; a bằng 4
c = ++b;// Dang tien to
// b bằng 4, c bằng 4;
31
7.5.2. Phép toán lấy địa chỉ biến (&)
• Biến thực chất là một vùng nhớ được đặt tên (là tên của 
biến) trên bộ nhớ của máy tính. 
• Mọi ô nhớ trên bộ nhớ máy tính đều được đánh địa chỉ. 
Do đó mọi biến đều có địa chỉ
• & ;
– Ví dụ: int a = 2006;
→ &a; // co gia tri la 158 hay 9E 
32
.
.
.
.
.
.
D6
07
.
.
.
157
158
159
160
1
a
7.5.3. Phép toán chuyển đổi kiểu bắt buộc
• Chương trình dịch sẽ tự động chuyển đổi kiểu 
– char → int → long int → float →
double → long double
• Ngược lại
– Số nguyên long int 50,000 không phải là một số 
nguyên kiểu int vì phạm vi biểu diễn của kiểu int là từ 
(-32,768 đến 32,767).
→ Phải ép kiểu
• Cú pháp: 
() ;
33
7.5.3. Phép toán chuyển đổi kiểu bắt buộc (2)
• Ví dụ:
#include 
#include 
main()
{
long int li; int i; float f; clrscr();
li = 0x123456; f = 123.456;
i = (int) li;
printf(“\n li = %ld; i = %d”,li, i);
i = (int) f;
printf(“\n f = %f; i = %d”,f, i);
getch();
}
34
• Kết quả
li = 1193046; i = 13398
f = 123.456001; i = 123
7.7.4. Biểu thức điều kiện
• Cú pháp
• biểu_thức_1 ? biểu_thức_2 : biểu_thức_3
• Giá trị của biểu thức điều kiện
• Giá trị của biểu_thức_2 nếu biểu_thức_1 có giá trị 
khác 0 (tương ứng với giá trị logic ĐÚNG), 
• Ngược lại: Giá trị của biểu_thức_3 nếu biểu_thức_1 
có giá trị bằng 0 (tương ứng với giá trị logic SAI).
• Ví dụ:
float x, y, z; // khai báo biến
x = 3.8; y = 7.6; // gán giá trị cho các biến x, y
z = (x<y) ? x : y; // z sẽ có giá trị bằng giá trị
// nhỏ nhất trong 2 số x và y
35
Nội dung
7.1. Các kiểu dữ liệu chuẩn trong C
7.2. Khai báo và khởi tạo biến, hằng
7.3. Biểu thức trong C
7.4. Các phép toán trong C
7.5. Một số toán tử đặc trưng
7.6. Các lệnh vào ra dữ liệu
36
7.6. Các lệnh vào ra dữ liệu
• C cung cấp 2 hàm vào ra cơ bản:
o printf() 
o scanf()
• Muốn sử dụng 2 hàm printf() và 
scanf() ta cần khai báo tệp tiêu đề 
stdio.h:
#include 
Hoặc
#include “stdio.h”
37
7.6.1. Hàm printf
• Mục đích 
– Hiển thị ra màn hình các loại dữ liệu cơ bản 
như: Số, kí tự và xâu kí tự
– Một số hiệu ứng hiển thị đặc biệt như xuống 
dòng, sang trang,
• Cú pháp:
printf(xau_dinh_dang [, danh_sach_tham_so]);
– xau_dinh_dang: Qui định cách thức hiển thị 
dữ liệu ra màn hình máy tính.
– danh_sach_tham_so: Danh sách các biến sẽ 
được hiển thị giá trị lên màn hình theo cách 
thức được qui định trong xau_dinh_dang.
38
a. Mục đích và cú pháp
• Ví dụ: Chương trình sau
#include 
#include 
main()
{ int a = 5;
float x = 1.234;
printf(“Hien thi mot so nguyen %d và mot 
so thuc %f”,a,x);
getch();
}
• Sẽ cho ra kết quả:
Hien thi mot so nguyen 5 va mot so thuc 1.234000
39
a. Mục đích và cú pháp
• Trong xau_dinh_dang chứa:
– Các kí tự thông thường: Được hiển thị ra màn 
hình.
– Các nhóm kí tự định dạng: Xác định quy cách 
hiển thị các tham số trong phần 
danh_sach_tham_so.
– Các kí tự điều khiển: Dùng để tạo các hiệu 
ứng hiển thị đặc biệt như xuống dòng (‘\n’) 
hay sang trang (‘\f’)
40
a. Mục đích và cú pháp
• Mỗi nhóm kí tự định dạng chỉ dùng cho 
một kiểu dữ liệu
Ví dụ: %d dùng cho kiểu nguyên
%f dùng cho kiểu thực
• Nếu giữa nhóm kí tự định dạng và tham 
số tương ứng không phù hợp với nhau thì 
sẽ hiển thị ra kết quả không như ý. 
41
a. Mục đích và cú pháp
• danh_sach_tham_so phải phù hợp với các 
nhóm kí tự định dạng trong 
xau_dinh_dang về:
– Số lượng
– Kiểu dữ liệu 
– Thứ tự
42
Nhóm kí tự 
định dạng
Kiểu dữ liệu Kết quả
%c int, char Kí tự đơn lẻ
%i, %d int, char Số thập phân
%o int, char Số bát phân
(không có 0 đằng trước)
%x, %X int, char Số hexa 
(chữ thường/chữ hoa)
%u unsigned 
int/char
Số thập phân
43
b. Một số nhóm định dạng phổ biến
Nhóm kí tự 
định dạng
Kiểu dữ liệu Kết quả
%ld, %li long Số thập phân
%lo long Số bát phân
(không có 0 đằng trước)
%lx, %LX long Số hexa 
(chữ thường/chữ hoa)
%lu unsigned long Số thập phân
44
b. Một số nhóm định dạng phổ biến (2)
Nhóm kí tự 
định dạng
Kiểu dữ liệu Kết quả
%s char [] Hiển thị xâu kí tự 
kết thúc bởi ‘\0’
%f float/double Số thực dấu 
phẩy tĩnh
%e, %E float/double Số thực dấu 
phẩy động
% Hiển thị kí tự %
45
c. Một số nhóm định dạng phổ biến (3)
c. Độ rộng hiển thị - số nguyên
• Đối với số nguyên hoặc ký tự hoặc xâu ký tự:
– Có dạng %md, với m là số nguyên không âm
– Ví dụ: Có số a = 1234
Lệnh:
printf("%5d",a);//danh 5 cho de hien thi a 
printf(“\n%5d",34);
Cho ra kết quả: 1234 
34
( kí hiệu cho dấu cách đơn (space) )
46
c. Độ rộng hiển thị - số nguyên (2)
• Ví dụ:
printf("\n%3d %15s %3c", 1, "nguyen van a", 'g');
printf("\n%3d %15s %3c", 2, "tran van b", 'k');
• Kết quả:
1 nguyen van a g
2 tran van b k
47
c. Độ rộng hiển thị - số thực
• m, n là 2 số nguyên không âm
%m.nf
Trong đó:
– m vị trí để hiển thị số thực
– n vị trí trong m vị trí đó để hiển thị phần thập 
phân.
48
c. Độ rộng hiển thị - số thực (2)
• Ví dụ:
printf("\n%f",17.345);
printf("\n%.2f",17.345);
printf("\n%7.2f",17.345);
• Kết quả:
17.345000
17.34
17.34
49
c. Độ rộng hiển thị - Chú ý
• Khi số chỗ cần thiết để hiển thị nội dung 
dữ liệu lớn hơn trong định dạng: 
– Tự động cung cấp thêm chỗ mới để hiển thị 
chứ không cắt bớt nội dung của dữ liệu.
– Ví dụ: a=1000
printf(“So a la: %1d”, a);
– Kết quả:
So a la: 1000
50
d. Căn lề phải, lề trái
• Căn lề phải: 
– Khi hiển thị dữ liệu, mặc định C căn lề phải
• Căn lề trái:
– Nếu muốn căn lề trái khi hiển thị dữ liệu ta chỉ 
cần thêm dấu trừ - vào ngay sau dấu %.
51
d. Căn lề phải, lề trái (2)
• Ví dụ:
printf("\n%-3d %-15s %5.2f %-3c", 
9, "nguyen van a", 7.5, 'g');
printf("\n%-3d %-15s %5.2f %-3c", 
10, “nguyen ha", 6.75, 'k');
• Kết quả:
9nguyen van a7.50g
10nguyen ha6.75k
52
7.6.2. Hàm scanf
a. Mục đích và cú pháp:
• Mục đích:
– Hàm scanf() dùng để nhập dữ liệu từ bàn phím 
• Cú pháp:
scanf(xau_dinh_dang,[danh_sach_dia_chi]);
• Ví dụ:
scanf(“%d %f”, &a, &b); 
53
a. Mục đích và cú pháp
• Xau_dinh_dang: 
– Gồm các ký tự được qui định cho từng loại dữ 
liệu được nhập vào.
– Ví dụ: Với dữ liệu định nhập vào là kiểu 
nguyên thì xâu định dạng là : %d
• Danh_sach_dia_chi:
– Bao gồm các địa chỉ của các biến (toán tử &), 
phân tách nhau bởi dấu phẩy (,)
54
a. Mục đích và cú pháp
• danh_sach_dia_chi phải phù hợp với các 
nhóm kí tự định dạng trong 
xau_dinh_dang về:
– Số lượng
– Kiểu dữ liệu 
– Thứ tự
55
Nhóm kí tự 
định dạng
Kiểu dữ liệu Chú thích
%c char Kí tự đơn lẻ
%d int Số thập phân
%o int Số bát phân
%x int Số hexa
%u unsigned int Số thập phân
56
b. Một số nhóm định dạng phổ biến
Nhóm kí tự 
định dạng
Kiểu dữ liệu Chú thích
%s char[] Hiển thị xâu kí tự 
kết thúc bởi ‘\0’
%f float Số thực dấu 
phẩy tĩnh
%ld long Số nguyên
%lf double Số thực dấu 
phẩy tĩnh
% Đọc ký tự %
57
c. Một số nhóm định dạng phổ biến (2)
Ví dụ
#include 
#include 
main()
{
// khai bao bien
int a; float x;
char ch; char str[30];
// Nhap du lieu
printf(“Nhap vao mot so nguyen”);
scanf(“%d”,&a);
printf(“\n Nhap vao mot so thuc”);
scanf(“%f”,&x);
58
Ví dụ
printf(“\n Nhap vao mot ki tu”);
fflush(stdin); scanf(“%c”,&ch);
printf(“\n Nhap vao mot xau ki tu”);
fflush(stdin); scanf(“%s”,str);
// Hien thi du lieu vua nhap vao
printf(“\n Nhung du lieu vua nhap vao”);
printf(“\n So nguyen: %d”,a);
printf(“\n So thuc : %.2f”,x);
printf(“\n Ki tu: %c: ”,ch);
printf(“\n Xau ki tu: %s”,str);
getch();
}
59
Ví dụ
• Kết quả:
Nhap vao mot so nguyen: 2007
Nhap vao mot so thuc: 17.1625
Nhap vao mot ki tu: b
Nhap vao mot xau ki tu: ngon ngu lap trinh C
Nhung du lieu vua nhap vao
So nguyen: 2007
So thuc: 17.16
Ki tu: b
Xau ki tu: ngon
60
c. Một số quy tắc cần lưu ý
• Quy tắc 1: Khi đọc số
– Hàm scanf() quan niệm rằng mọi kí tự số, dấu 
chấm (‘.’) đều là kí tự hợp lệ.
– Khi gặp các dấu phân cách như tab, xuống 
dòng hay dấu cách (space bar) thì scanf() sẽ 
hiểu là kết thúc nhập dữ liệu cho một số
61
c. Một số quy tắc cần lưu ý (tiếp)
• Quy tắc 2: Khi đọc kí tự:
Hàm scanf() cho rằng mọi kí tự có trong
bộ đệm của thiết bị vào chuẩn đều là hợp
lệ, kể cả các kí tự tab, xuống dòng hay
dấu cách.
62
c. Một số quy tắc cần lưu ý (tiếp)
• Quy tắc 3: Khi đọc xâu kí tự:
+ Hàm scanf() nếu gặp các kí tự dấu
trắng, dấu tab hay dấu xuống dòng thì nó
sẽ hiểu là kết thúc nhập dữ liệu cho một
xâu kí tự.
+ Trước khi nhập dữ liệu kí tự hay xâu kí
tự ta nên dùng lệnh fflush(stdin) để
xóa bộ đệm.
63
7.6.3. Các lệnh vào ra khác
• Hàm gets():
Dùng để nhập vào từ bàn phím một xâu kí tự 
bao gồm cả dấu cách, điều mà hàm scanf()
không làm được. 
• Cú pháp :
gets (xâu_kí_tự);
• Ví dụ:
char str[40];
printf(“Nhap vao mot xau ki tu:”);
fflush(stdin); gets(str);
64
7.6.3. Các lệnh vào ra khác (2)
• Hàm puts():
Hiển thị ra màn hình nội dung xâu_kí_tự 
và sau đó đưa con trỏ xuống dòng mới.
• Cú pháp:
puts(xâu_kí_tự);
• Ví dụ:
puts(“Nhap vao xau ki tu:”);
• Tương đương với lệnh: 
printf(“%s\n”,“Nhap vao xau ki tu:“).
65
7.6.3. Các lệnh vào ra khác (3)
• Hàm getch(): thường dùng để chờ người 
sử dụng ấn một phím bất kì rồi sẽ kết thúc 
chương trình.
• Cú pháp
getch();
• Để sử dụng các hàm gets(), puts(), 
getch() ta cần khai báo tệp tiêu đề 
conio.h.
66
7.6.3. Các lệnh vào ra khác (4)
• Ví dụ:
#include 
#include 
main()
{
char str[30];
puts(“Hay cho biet ho ten ban:”);
fflush(stdin); gets(str);
printf(“Xin chao ”);
puts(str);
puts(“An phim bat ki de ket thuc...”);
getch();
}
67
Các lệnh nhập xuất khác
• Kết quả:
Nhap vao mot xau ki tu:
ngon ngu lap trinh C
Xau vua nhap vao: 
ngon ngu lap trinh C
An phim bat ki de ket thuc ...
68
Thảo luận
69

File đính kèm:

  • pdfbai_giang_tin_hoc_dai_cuong_bai_7_kieu_du_lieu_va_bieu_thuc.pdf