BÀI GIẢNG
NGÔN NG
Ữ
L
Ậ
P TRÌNH C/C++
TS. T
r
ần Đăn
g
Hưn
g
NGÔN NG
Ữ
L
Ậ
P TRÌNH C/C++
g
g
Khoa Công Nghệ Thông Tin
Email:
N
ộ
i Dung
N
ộ
i Dung
Chương 1: Giới thiệu
Chương 2: Các cấu trúc điều khiển
Chương 3: Hàm (functions)
Chương 4: Mảng (arrays)
Chương 5: Con t
r
ỏ (pointers)
Chương 6: Kí tự và xâu (characters and strings)
Ch
ươ
ng 7: C
ấ
u trúc và file (structures and files)
Ch
ươ
ng 7: C
ấ
u trúc và file (structures and files)
Chương 8: Tiền xử lý (preprocessors)
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Hình thức đánh giá
Dự lớp 30 %
Bài thi cuối khóa 70%
Trắc nghiệm 40%
Thực hành trên máy 60%
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Tài liệu tham khảo và trình biên dịch
Sách
Ngôn ngữ lập trình C – Quách Tuấn Ngọc
Ấ
Kỹ thuật lập trình C – Phạm Văn
Ấ
t
/>
Trình biên d
ị
ch
Trình biên d
ị
ch
TC 3.0 (giao diện giống Pascal)
Visual C++ (windows)
(li )
gcc
(li
nux
)
Dev-C++ (windows)
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Chương 1: Giới thiệu
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
L
ị
ch s
ử
ngôn ng
ữ
l
ậ
p trình C
L
ị
ch s
ử
ngôn ng
ữ
l
ậ
p trình C
Ra đời vào khoảng năm 1970, viết bởi Dennis Ritchie
tại phòng thí nghiệm Bell.
Ra đời dưới sựảnh hưởng của các ngôn ngữ t
r
ước
đó: BCPL (1967) và B (1970).
Đ
ượ
c dùng đ
ể
vi
ế
t h
ệ
đi
ề
u hành Unix
Đ
ượ
c dùng đ
ể
vi
ế
t h
ệ
đi
ề
u hành Unix
Độc lập với phần cứng (khả chuyển)
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Chu
ẩ
n C (standard C)
Chu
ẩ
n C (standard C)
Có rất nhiều phiên bản C
ANSI C (American National Standards Institute): 1989
Các phiên bản update vào năm 1995 (C95), 1999 (C99)
C và C++
C là b
ả
ở
ộ
ủ
C đ
ể
h
ỗ
l
ậ
ìh h
ớ
đ
ố
i
C
++
là b
ả
n
m
ở
r
ộ
ng
c
ủ
a
C đ
ể
h
ỗ
t
r
ợ
l
ậ
p
tr
ì
n
h h
ư
ớ
ng
đ
ố
i
tượng và thiết kế các phần mềm lớn.
C không hẳn là một phần của C++, nhưng có thể sử dụng cả C
à C h
ằ
hi
ế
k
ế
h
ìh lih h
v
à C
++
n
h
ằ
m
t
hi
ế
t
k
ế
c
h
ương
tr
ì
n
h li
n
h h
ọat.
Nên thành thạo C trước khi học C++.
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Th
ư
vi
ệ
n chu
ẩ
n C
Th
ư
vi
ệ
n chu
ẩ
n C
Chương trình C chỉ bao gồm các modules được gọi là
hàm (function)
ể
ế
Có th
ể
tự vi
ế
t các hàm
Sử dụng các hàm trong thư viện chuẩn
Tránh phát minh l
ạ
i bánh xe
(avoid re
inventing the wheel)
☺
Tránh phát minh l
ạ
i bánh xe
(avoid re
-
inventing the wheel)
☺
Tránh việc tự viết các hàm đã có trong thư viện
Các hàm trong thư viện chuẩn thường được viết cẩn thận và
hiệu quả
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Các pha của
chương trình C
Soạn thảo chương trình (edit)
Đặt tên file có đuôi là .c (vidu.c,
bi1 )
b
a
i1
.c,…
)
Tiền xử lý (preprocess)
Biên d
ị
ch (compile)
Biên d
ị
ch (compile)
Link
Load
Excute
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Một chương trình C đơn giản
-Ví dụ 1: In một dòng chữ ra màn hình-
Lời giải thích
Đặt trong cặp dấu /* …. */
Trình biên d
ị
ch s
ẽ
b
ỏ
qua
Trình biên d
ị
ch s
ẽ
b
ỏ
qua
Được dùng để chú thích cho các dòng lệnh
Chỉ dẫn tiền biên dịch
#include <stdio h>
-
s
ử
d
ụ
ng các hàm vào/ra
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
#include <stdio
.
h>
s
ử
d
ụ
ng các hàm vào/ra
.
Cần biết hàm nào nằm trong thư viện chuẩn nào
M
ộ
t ch
ươ
ng trình C đ
ơ
n gi
ả
n
M
ộ
t ch
ươ
ng trình C đ
ơ
n gi
ả
n
-Ví dụ 1: In một dòng chữ ra màn hình-
Một chương trình C có thể có 1 hoặc nhiều hàm, nhưng
buộc phải có hàm main()
ấ
ể
ố
Cặp d
ấ
u {} th
ể
hiện các kh
ố
i (block) chương trình,
thân các hàm luôn được đặt trong cặp {}
L
ệ
nh printf() đ
ư
a n
ộ
i dung ra màn hình
L
ệ
nh printf() đ
ư
a n
ộ
i dung ra màn hình
Kí tự \n đưa con trỏ xuống 1 dòng mới
Hàm int main
(),
nên
p
hải có l
ệ
nh return t
r
ả về m
ộ
t số
(), p
ệ
ộ
nguyên, return 0; - hàm kết thúc bình thường.
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Hàm printf() và các kí tự điều khiển
Hàm printf(s): đưa nội dung của s ra màn hình, s có
thể là hằng xâu kí tự, biến, hoặc biểu thức.
ố
ằ
Một s
ố
h
ằ
ng kí tự đặc biệt:
\n – đưa con trỏ xuống dòng
\
r
–
đ
ư
a con tr
ỏ
v
ề
đ
ầ
u dòng
\
r
đ
ư
a con tr
ỏ
v
ề
đ
ầ
u dòng
\t – đưa con trỏ đến vị trí tab tiếp theo
\a – bật 1 tiếng chuông
\
\
đ
kí t
\
\
\
-
đ
ưa
ra
kí t
ự
\
\” – đưa ra kí tự “
Ví d
ụ
: tha
y
đổi hàm
p
rintf
()
tron
g
ví d
ụ
1.
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
ụ
y
p() g
ụ
Ví dụ 2: Cộng hai số
Wednesday, April 04, 2012Ngôn ngữ lậptrìnhC © T.Đ.Hưng – ĐHSPHN
Nhập dữ liệu – scanf()
scanf(“%d”, &integer1)
Đợi người dùng nhập giá trị, rồi gõ phím Enter
ế
Lưu giá t
r
ị vào bi
ế
n ở bên phải toán tử
Đổi giá trị được nhập sang kiểu dữ liệu của biến
= (toán tử gán)
Gán giá trị cho biến
Tá t
ử
hi ôi
Bi t
T
o
á
n
t
ử
h
a
i
ng
ôi
-
Bi
nary
opera
t
o
r
Ví dụ:
sum = variable1 + variable2;
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Biến và cách đặt tên biến
Biến (variables)
Tương ứng với các vùng trong bộ nhớ máy tính
ỗ
ế
ể
M
ỗ
i bi
ế
n có tên, ki
ể
u, kích thước, và giá t
r
ị
Khi biến được gán một giá trị mới, giá trị cũ bị ghi đè
Đọc
g
iá t
r
ị của các biến tron
g
bộ nhớ khôn
g
làm tha
y
đổi các
g
g
gy
biến trong bộ nhớ
Quy tắc đặt tên biến
Chu
ỗ
i ký t
ự
(ch
ữ
cái a z A Z
Chu
ỗ
i ký t
ự
(ch
ữ
cái a
z
,
A
Z
,
chữ số 0 9, dấu gạch dưới _ )
Không được bắt đầu bằng chữ số
Phâ bi
ệ
t h
ữ
h h
ữ
th
ờ
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Phâ
n
bi
ệ
t
c
h
ữ
h
oa
c
h
ữ
th
ư
ờ
ng.
Khai báo biến
Trước khi sử dụng các biến thì phải khai báo nó.
Cách khai báo:
Kiểu_dữ_liệu tên_biến;
hoặc
Ki
ể
ud
ữ
li
ệ
u tên bi
ế
n
=
giá tr
ị
đ
ầ
u;
Ki
ể
u
_
d
ữ
li
ệ
u tên
_
bi
ế
n giá
_
tr
ị
_đ
ầ
u;
Khai báo nhiều biến cùng kiểu thì các biến cách nhau
bởi dấu phẩy
Ví dụ:
int a;
double n = 10;
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
float m = 10, p = 20;
Các kiểu dữ liệu chuẩn
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Các phép toán
Các phép toán số học
Cộng/trừ: + -
Phép nhân: *
Ví dụ
x = x + 2;
Phép nhân: *
Phép chia: /
Phép chia lấy dư: %
Q t
ắ
tiê
y = x / 4;
x = x % 10;
Q
uy
t
ắ
c
ưu
tiê
n
Các phép toán trong ngoặc được tính trước
Các ngoặc lồng nhau, các phép toán ở bên trong nhất được tính
t
ớ
h
ấ
t
tr
ư
ớ
c
n
h
ấ
t
Tiếp theo là các phép nhân, chia, và phép lấy số dư
Các phép toán được tính từ trái sang phải
à
í
ố
ù
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Cộng v
à
t
r
ừ được t
í
nh cu
ố
i c
ù
ng
Các phép toán được tính từ trái sang phải
Ví dụ: thứ tự
ưu tiên các
p
hé
p
toán
pp
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Các phép toán logic
Toán tử “và”: &&
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Toán tử “hoặc”: ||
Các phép toán trên bit
Toán tử: & -phép toán AND
Toán tử: | - phép toán OR
Toán tử: ~ - phép đảo ngược bit
Toán tử: << - dịch bit sang trái
á
To
á
n tử: >> - dịch bit sang phải
Ví dụ:
x = 10; y = x << 2; => y = 24
x = 14; y = x >> 2; => y = 3
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
x = 9; y = 7; z = x % y; => z = 2
Các phép toán rút gọn
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
Các phép toán rút gọn
Ví dụ
x = 10; y = 20; x += y; => x = 30
x = 4; x
*
= 2;
=>
x = 8
x = 4; x = 2;
=>
x = 8
Sự khác nhau giữa ++x và x++
++x: giá trị của x sẽ tăng lên 1 đơn vị TRƯỚC khi thực hiện
b
ể
h
ó
ủ
b
i
ể
u
t
h
ức
c
ó
mặt
c
ủ
a
x.
x++: giá trị của x sẽ tăng lên 1 đơn vị SAU khi thực hiện biểu
thức có mặt của x.
Ví dụ:
x = 10; y = ++x + 2; => x = 11; y = 13
x = 10; y = x++ + 2;
=>
x = 11
;
y = 12
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
x = 10; y = x++ + 2;
=>
x = 11
;
y = 12
x = 10; y = 20; z = 2 * (++x – y++); => x = 11; y = 21; z = -18
Các đặc tả của hàm printf()
Để đưa nội dung của các biến (hoặc biểu thức) ra màn
hình phải có các chỉ dẫn cụ thể cho từng loại dữ liệu.
Ví dụ:
int x = 20; printf(“x = %d”, x);
float x
=
15.5; printf(
“
x
=
%f
”
, x);
float x 15.5; printf( x
%f
, x);
float x = 10; printf(“x = %6.2f”, x);
int x = 10; y = 15.5; printf(“x = %6d, y = %6.2f”,x,y);
Cá kí
đ
ặ
ả
Cá
c
kí
tự
đ
ặ
c
t
ả
%d (hoặc %i) int %c char
%f
float
%lf
double
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN
%f
float
%lf
double
%s string %x hexadecimal
Các đặc tả của hàm scanf()
Để nhập các giá trị vào cho các biến cần phải có chỉ dẫn kiểu dữ
liệu cho từng biến.
Ví dụ:
ố
ê
àí
Nhập hai s
ố
nguy
ê
n int từ b
à
n ph
í
m
printf(“Cho hai so nguyen a,b: “); scanf(“%d%d”,&a,&b);
Nhập một số int và một số float từ bàn phím
p
rintf
(
“Cho so n
g
u
y
en a va so thuc b: ”
);
scanf
(
“%d%f”
,
&a
,
&b
);
p( gy ); ( ,
,
);
Chú ý: Khi nhập xâu kí tự thì không có dấu & trước biến, vì bản thân
tên xâu đã là con trỏ.
printf(“Cho mot xau ki tu: “); scanf(“%s”,st);
Các kí t
ự
đ
ặ
c t
ả
cho t
ừ
ng ki
ể
u d
ữ
li
ệ
u gi
ố
ng trong hàm printf()
Các kí t
ự
đ
ặ
c t
ả
cho t
ừ
ng ki
ể
u d
ữ
li
ệ
u gi
ố
ng trong hàm printf()
Chú ý: Hàm printf() và scanf() đều nằm trong thư viện <stdio.h>,
nên đầu chương trình phải khai báo thư viện bằng lệnh:
#include <stdio.h>
Wednesday, April 04, 2012Ngôn ngữ lập trình C © T.Đ.Hưng – ĐHSPHN