Bài giảng Hệ thống thông tin - Phần 3: Lập trình C - Chương 2: Kiểu dữ liệu và biểu thức trong C

Khai báo và sử dụng biến

 Cú pháp khai báo:

kiểu_dữ_liệu tên_biến;

Hoặc:

kiểu_dữ_liệu tên_biến1, , tên_biếnN;

 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;

pdf 68 trang kimcuc 6040
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Hệ thống thông tin - Phần 3: Lập trình C - Chương 2: Kiểu dữ liệu và biểu thức trong C", để 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 Hệ thống thông tin - Phần 3: Lập trình C - Chương 2: Kiểu dữ liệu và biểu thức trong C

Bài giảng Hệ thống thông tin - Phần 3: Lập trình C - Chương 2: Kiểu dữ liệu và biểu thức trong C
1Chương 2: 
Kiểu dữ liệu và biểu thức trong C
Ngo Van Linh
Bộ môn Hệ thống thông tin
Viện Công nghệ thông tin và Truyền thông
Đại học Bách Khoa Hà Nội
2Nội dung chương này
 2.1. Các kiểu dữ liệu chuẩn trong C
 2.2. Khai báo và sử dụng biến, hằng
 2.3. Các lệnh vào ra dữ liệu với các biến
 2.4. Các lệnh vào ra khác
 2.5. Các phép toán trong C
 2.6. Biểu thức trong C
 2.7. Một số toán tử đặc trưng
32.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 biểu 
diễn
unsigned 
char
Kí tự 1 byte 0 255
char Kí tự 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
-32768 
+32767
42.1. Các kiểu dữ liệu chuẩn trong C (tiếp)
52.2. Khai báo và sử dụng biến, hằng
 2.2.1. Khai báo và sử dụng biến
 2.2.2. Khai báo và sử dụng hằng
62.2.1. Khai báo và sử dụng biến
 Cú pháp khai báo:
kiểu_dữ_liệu tên_biến;
Hoặc:
kiểu_dữ_liệu tên_biến1, , tên_biếnN;
 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;
7Khai báo và khởi tạo giá trị cho biến
 Cú pháp:
kiểu_dữ_liệu tên_biến = giá_trị_ban_đầu;
Hoặc:
kiểu_dữ_liệu biến1=giá_trị1, biếnN=giá_trịN;
 Ví dụ:
int a = 3;// sau lenh nay bien a se co gia tri bang 3
float x = 5.0, y = 2.6; // sau lenh nay x co gia 
// tri 5.0, y co gia tri 2.6
82.2.2. Khai báo hằng
 Cách 1: Dùng từ khóa #define:
 Cú pháp:
# define tên_hằng giá_trị
 Ví dụ:
#define MAX_SINH_VIEN 50
#define CNTT "Cong nghe thong tin" 
#define DIEM_CHUAN 23.5
92.2.2. Khai báo hằng (tiếp)
 Cách 2: Dùng từ khóa const :
 Cú pháp:
const kiểu_dữ_liệu tên_hằng = giá_trị;
 Ví dụ:
const int MAX_SINH_VIEN = 50;
const char CNTT[20] = "Cong nghe thong tin";
const float DIEM_CHUAN = 23.5;
10
2.3. Các lệnh vào ra dữ liệu
 C cung cấp 2 hàm vào ra cơ bản:
 printf() 
 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"
11
2.3.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(xâu_định_dạng, [danh_sách_tham_số]);
 xâu_định_dạng: Là xâu dùng để qui định cách
thức hiển thị dữ liệu ra màn hình máy tính.
 danh_sách_tham_số: 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 xâu_định_dạng.
12
2.3.1. Hàm printf (tiếp)
 Trong xâu_định_dạng 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_sách_tham_số.
 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')
13
Hàm printf - ví dụ:
 Chương trình sau
#include 
#include 
void 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
14
Hàm printf
 Trong ví dụ trên:
 “Hien thi mot so nguyen %d và mot so thuc %f”
là xâu_định_dạng
 a,x là danh_sách_tham_số
 %d dùng để báo cho máy biết rằng cần phải 
hiển thị tham số kiểu nguyên (biến a) 
 %f dùng để báo cho máy cần hiển thị tham số 
tương ứng (biến x) theo định dạng số thực 
15
Hàm printf
 Nhóm kí tự định dạng thứ k trong xâu_định_dạng dùng
để xác định quy cách hiển thị tham số thứ k trong
danh_sách_tham_số.
 Số lượng tham số trong Danh_sách_tham_số bằng số
lượng nhóm các kí tự định dạng trong xâu_định_dạng.
Trong ví dụ trên là 2.
 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ư ý.
16
Nhóm ký tự định dạng
 Một số nhóm kí tự định dạng phổ biến:
17
Nhóm ký tự định dạng (tiếp)
18
Nhóm ký tự định dạng (tiếp)
19
Bổ sung về định dạng
 C cho phép đưa thêm một số thuộc tính định
dạng dữ liệu khác vào trong xâu định dạng
như:
 Độ rộng để hiển thị (độ rộng tối thiểu)
 Căn lề trái 
 Căn lề phải.
20
Độ rộng hiển thị
 Đố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ụ: nếu 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) )
21
Độ rộng hiển thị (tiếp)
 Đối với số nguyên hoặc ký tự hoặc xâu ký tự:
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
22
Độ rộng hiển thị (tiếp)
 Đối với số thực: m, n là 2 số nguyên không âm
%m.nf
Báo rằng cần dành:
 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.
23
Độ rộng hiển thị (tiếp)
 Định dạng với dữ liệu là số thực (tiếp):
 Ví dụ:
printf("\n%f",12.345);
printf("\n%.2f",12.345);
printf("\n%8.2f",12.345);
 Kết quả:
12.345000
12.35
12.35
24
Độ rộng hiển thị (tiếp)
 Khi số chỗ cần để 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
25
Căn lề phải, căn 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 %.
26
Căn lề phải, căn lề trái (tiếp)
 Ví dụ:
printf("\n%-3d %-15s %4.2f %-3c", 
9, "nguyen van a", 8.5, 'g');
printf("\n%-3d %-15s %4.2f %-3c", 
10, "nguyen ha", 6.75, 'k');
 Kết quả:
9nguyen van a8.50g
10nguyen ha6.75k
27
2.3.2. Hàm scanf
 Mục đích:
 Hàm scanf() dùng để nhập dữ liệu từ bàn phím 
 Cú pháp:
scanf(xâu_định_dạng,[danh_sách_địa_chỉ]);
 Ví dụ:
scanf("%d%f", &a, &b);
 Địa chỉ của một biến được viết bằng cách đặt dấu
& trước tên biến.
 Ví dụ:
Các biến có tên là a, x, ten_bien
Thì địa chỉ của chúng lần lượt sẽ là: &a, &x, &ten_bien
28
Hàm scanf (tiếp)
 Xâu_định_dạng:
 Gồm các ký tự được quy đị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_sách_địa_chỉ:
 Bao gồm các địa chỉ của các biến, các địa chỉ này được
phân tách nhau bởi dấu phẩy (,)
 Danh_sách_địa_chỉ phải phù hợp với các nhóm kí tự
định dạng trong xâu_định_dạng về:
 Số lượng
 Kiểu dữ liệu
 Thứ tự
29
Nhóm ký tự định dạng
30
Nhóm ký tự định dạng (tiếp)
31
Ví dụ:
#include 
#include 
void main()
{
// khai bao bien
int a;
float x;
char ch;
char* str;
// Nhap du lieu
printf(“Nhap vao mot so 
nguyen”);
scanf(“%d”,&a);
printf(“\n Nhap vao mot so thuc”);
scanf(“%f”,&x);
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);
}
32
Kết quả:
Nhap vao mot so nguyen: 2007
Nhap vao mot so thuc: 18.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: 18.16
Ki tu: b
Xau ki tu: ngon
33
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ố
 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.
34
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.
35
2.4. 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;
puts(“Nhap vao mot xau ki tu:”);
fflush(stdin); gets(str);
36
Các lệnh vào ra khác (tiếp)
 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:“).
37
Các lệnh vào ra khác (tiếp)
 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.
38
Các lệnh vào ra khác - ví dụ:
#include 
#include 
void main()
{
// khai bao bien
char* str;
// Nhap du lieu
puts(“Nhap vao mot xau 
ki tu:”);
fflush(stdin); 
gets(str);
// Hien thi du lieu vua nhap 
vao
puts(“Xau vua nhap vao: ”);
puts(str);
puts(“An phim bat ki de ket 
thuc...”);
getch();
}
39
Các lệnh vào ra 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 ...
40
2.5. 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ỉ
41
2.5.1. Phép toán số học
42
2.5.2. Các phép toán trên bit
43
Các phép toán trên bit (tiếp)
44
2.5.3. Các phép toán quan hệ
45
2.5.4. Phép toán logic
46
2.5.5. Phép 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;
47
Phép gán (tiếp)
 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);
48
Phép gán (tiếp)
 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: +, -, *, /, %, 
>>, <<, &, |, ^
49
2.5.6. Thứ tự ưu tiên các phép toán
50
Nguyên tắc xác định trật tự thực hiện các phép toán
 Biểu thức con trong ngoặc được tính toán trước
các phép toán khác
 Phép toán một ngôi đứng bên trái toán hạng được
kết hợp với toán hạng đi liền nó.
 Nếu toán hạng đứng cạnh hai toán tử thì có 2 khả
năng là
 Nếu hai toán tử có độ ưu tiên khác nhau thì toán tử nào
có độ ưu tiên cao hơn sẽ kết hợp với toán hạng
 Nếu hai toán tử cùng độ ưu tiên thì dựa vào trật tự kết
hợp của các toán tử để xác định toán tử được kết hợp
với toán hạng.
51
2.6. Biểu thức trong C
 2.6.1. Các loại biểu thức
 2.6.2. Sử dụng biểu thức
52
2.6.1. Các loại biểu thức
 Biểu thức số học:
 Là biểu thức mà giá trị của nó là cái đạ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
53
Các loại biểu thức (tiếp)
 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à !
54
Các loại biểu thức (tiếp)
 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.
55
Các loại biểu thức (tiếp)
 Ví dụ về biểu thức quan hệ:
56
Các loại biểu thức (tiếp)
 Ví dụ về biểu thức logic:
57
2.6.2. Sử dụng biểu thức
 Làm vế phải của lệnh gán.
 Làm toán hạng trong các biểu thức khác.
 Làm tham số thực trong lời gọi hàm.
 Làm chỉ số trong các cấu trúc lặp for, 
while, do while.
 Làm biểu thức kiểm tra trong các cấu trúc rẽ 
nhánh if, switch.
58
2.7. Một số toán tử đặc trưng
 2.7.1. Các phép toán tăng giảm một đơn vị
 2.7.2. Phép toán lấy địa chỉ biến
 2.7.3. Phép toán chuyển đổi kiểu bắt buộc
 2.7.4. Biểu thức điều kiện
59
2.7.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;
60
Các phép toán tăng giảm một đơn vị (tiếp)
 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;
61
2.7.2. Phép toán lấy địa chỉ biến (&)
 & ;
 Ví dụ: a là kiểu dữ liệu int (2 bytes)
&a; // co gia tri la 3,300,159 hay 0032:5B3F
62
2.7.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 
 Số nguyên int long int
 Số long int float
 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
63
Phép toán chuyển đổi kiểu bắt buộc (tiếp)
 Ví dụ:
#include 
#include 
void main()
{
long int li; int i; float f; clrscr();
li = 0x12345678; f = 123.456;
i = (int) li;
printf(“\n li = %ld”,li);
printf(“\n i = %d”,i); i = (int) f;
printf(“\n f = %f”,f);
printf(“\n i = %d”,i);
getch();
}
64
Phép toán chuyển đổi kiểu bắt buộc (tiếp)
 Kết quả
li = 1193046
i = 13398
f = 123.456001
i = 123
 C hỗ trợ chuyển kiểu tự động trong những 
trường hợp sau
char int long int float 
double long double
65
2.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 = 2.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
66
Bài tập
 Bài 1
 Viết chương trình tính chu vi và diện tích hình
tròn theo giá trị bán kính r nhập từ bàn phím.
 Bài 2
 Nhập phần thực x và phần ảo y của một số
phức, sau đó in ra theo mẫu: (x,y) với các yêu
cầu số in ra có 2 chữ số sau dấu chấm thập
phân.
67
Bài tập
 Bài 3
 Tính giá trị của biểu thức sau và đưa ra giá trị
của biến a, b, c sau khi thực hiện phép toán:
 a++ + ++a
 --a - b-- * ++c
 với a,b,c là các số nguyên nhập vào từ bàn phím
 Bài 4
 Dùng biểu thức điều kiện ? : để đưa ra số lớn
nhất trong 3 số thực nhập vào từ bàn phím
68

File đính kèm:

  • pdfbai_giang_he_thong_thong_tin_phan_3_lap_trinh_c_chuong_2_kie.pdf