Chuong 03- Co ban ve Ngon ngu C 1
Chương 1
GiỚI THIỆU VỀ THUẬT TOÁN
Mục tiêu
• Hiểu được Thuật toán là gì ?
• Mô tả những thuật toán cơ bản.
• Giải thích được các bước để giải một bài
toán bằng máy tính.
Nội dung
• Giới thiệu tổng quan
• Khái niệm về thuật toán
• Các phương pháp biểu diễn thuật toán
1.1- Giới thiệu tổng quan
• Thông tin (information)
– Cho biết giá trị của 2 số nguyên
– Thông báo kết quả tính tổng
• Dữ liệu (data)
– Chứa số nguyên thứ 1
– Chứa số nguyên thứ 2
– Chứa số nguyên tổng kết quả
Ví dụ : Thực hiện phép tính cộng 2 số nguyên
1.2.Lưu trữ dữ liệu
• Một dữ liệu phải có vùng nhớ chứa nó
• Nhiều dữ liệu cần vùng nhớ lớn
• Hai loại lưu trữ dữ liệu thường dùng:
số
số nguyên nhỏ số nguyên lớn số thực
ký tự
chuỗi ký tự
• Chương trình: Tập các lệnh máy
mà CPU phải thực thi nhằm giải
một bài toán.
• Một chương trình là 1 tập tin có
phần mở rộng tùy thuộc vào hệ
điều hành.
• Thông thường 1 chương trình
có tên mở rộng: .exe, .com
• CPU chạy 1 chương trình theo
cách tuần tự từng lệnh.
1001001000101
1100110011000
0101001100110
1010110100001
1.6.Thuật toán - Algorithm
• Cách diễn giải một bài toán
• Cách tiếp cận để giải bài toán.
• Muốn giải thì phải biết cách giải.
• Cách giải 1 bài toán cụ thể là 1 thuật toán
cụ thể
• Mô tả 1 thuật toán là diễn đạt các bước
thực thi của thuật toán đó.
• Dùng ngôn ngữ tự nhiên
• Dùng lưu đồ (flowchart)
• Mã giả
1.7.Biểu diễn thuật toán
1. Nhập vào số nguyên thứ 1 (a)
2. Nhập vào số nguyên thứ 2 (b)
3. Tính tổng của a và b
5
d
X X
yes
no
a>0
Xuất c
B1: Nhập số nguyên a
B2: Nhập số nguyên b
B3: c = a+b;
B4: Xuất số nguyên c
Begin
Nhập a
Nhập b
c=a+b
End
Xuất c
Thuật toán - Mô tả bằng mã giả
(Pseudo code)
• Mã giả thực chất là
ngôn ngữ tự nhiên có
pha lẫn một số cách viết
của ngôn ngữ lập trình.
Minh họa: Thực hiện phép
tính cộng 2 số nguyên
1.8.Minh họa: Giải thuật tìm trị lớn nhất
trong 3 số
B1: t = a;
B2: if (t<b)
t=b;
TRÌNH
1001001000101
1100110011000
0101001100110
1010110100001 Bótay.com?
• Lập trình: tạo ra 1 chương trình
• Lập trình bằng ngôn ngữ máy
Đừng lo, có 1 phần mềm giúp diễn đạt 1 chương
trình bằng tiếng Anh( ngôn ngữ con người) rồi giúp
chuyển sang ngôn ngữ máy
Ngôn ngữ lập trình: Tập quy định về
cách diễn đạt 1 chương trình ( văn
phạm của ngôn ngữ)
Phần mềm ngôn ngữ: Một chương
trình máy tính cho phép: soạn thảo,
biên dịch, kiểm lỗi cú pháp, thực thi
chương trình.
2.1.KHÁI NIỆM VỀ NGÔN NGỮ LẬP
TRÌNH
Chuong 03- Co ban ve Ngon ngu C 4
2.2.Dịch chương trình- Translating
Chương trình
theo ngôn ngữ
lập trình
Biên dịch
Compile
(dịch toàn bộ)
nó.
2.5.Lập trình cấu trúc
• Ngôn ngữ lập trình Pascal hay C thuộc loại
ngôn ngữ lập trình cấu trúc.
• Chương trình được chia nhỏ thành các hàm
(function) thực hiện một chức năng chuyên biệt.
• Có thể coi hàm là các chương trình thu nhỏ, liên
kết lại với nhau để xây dựng nên ứng dụng.
• Dễ bảo trì, tăng độ tin cậy, chính xác.
• Biến toàn cục giảm, biến cục bộ tăng lên.
• Khi thay đổi cấu trúc dữ liệu dùng chung thì
nhóm lập trình cùng viết chung chương trình bị
ảnh hưởng.
2.6.Lập trình Hướng đối tượng
• Ngày nay, C++ hay C#, java… thuộc loại ngôn
ngữ lập trình hướng đối tượng.
• Trừu tượng dữ liệu, không bận tâm chi tiết cài
đặt cụ thể.
• Có thể sử dụng lại một cách dễ dàng hay nâng
cấp các đối tượng.
• Càng dễ bảo trì, tăng độ tin cậy, chính xác.
• Bước 1: Hiểu kỹ và biết cách giải bài toán
– Xác định dữ liệu liên quan đến bài toán
– Hiểu các thao tác lên dữ liệu
• Bước 2: Tìm một giải thuật để giải.
– Sắp xếp các thao tác sao cho có thứ tự hợp lý.
• Bước 3: Viết chương trình theo ngôn ngữ.
– Mở trình soạn thảo.
– Viết chương trình theo ngôn ngữ đã chọn.
– Biên dịch chương trình và sửa lỗi cú pháp.
End
Chương trình
mã máy
Xin cám ơn
Tài liệu tham khảo
• “Lập trình C”, Quách Tuấn Ngọc, Nhà Xuất Bản Giáo dục
2004
• “K thuật lập trình C cơ s và nâng cao”, Phạm Văn t,
Nhà Xuất Bản Khoa Học Kỹ Thuật – 1996.
• “Giáo trình ngôn ngữ C”, Lê Hoài Bắc – Lê Hoàng Thái –
Nguyễn Tấn Trần Minh Khang – Nguyễn Phương Thảo, Nhà
Xuất Bản Đại Học Quốc Gia Tp. Hồ Chí Minh – 2003.
• “Giáo trình lý thuyết & Bài tập ngôn ngữ C”, Nguyễn
Đình Tê – Hoàng Đức Hải, Nhà Xuất Bản Mi Cà Mau.
• “Bài tập ngôn ngữ C từ A đến Z”, Hunh Tấn Dng –
Hoàng Đức Hải, Nhà Xuất Bản Lao Động – Xã Hội.
Chương 3
MỞ ĐẦU VỀ NGÔN NGỮ C
Nội dung
• Nhận biết tập ký tự dùng trong C
• Nhận biết một số từ khóa của C.
• Nhận biết tổ hợp ESCAPE của C
• Dạng thức của một chương trình C
• Chỉ thị tiền xử lý
• Nhận biết các kiểu dữ liệu cơ bản của C
– cấu trúc chọn : if , else , switch , case , default
– cấu trúc lăp: for , while , do
– Từ khóa điều khiển: break , continue , return , goto
– …
3.3. Tên – Name / Identifier
• Do người lập trình tự định nghĩa, dùng đặt tên cho
hằng, biến, hàm…(không được trùng với keywords)
• Tên là 1 từ, chiều dài 1 từ : Có thể tự ấn định bằng
Menu Options / Compiler / Source / Identifier Length
• Các từ trong C phân biệt chữ hoa chữ thường (case-
sensitive)
Hãy cho biết các tên sau tên nào là hợp lệ?
m _12 _m12 12m 6L
Hãy cho biết các tên sau có cùng ngữ nghĩa hay không?
delta Delta dElta DELTA
„a‟ ‟z‟, „A‟ ‟Z‟
„_‟ (gạch nối)
„0‟ ‟9‟
„a‟ ‟z‟, „A‟ ‟Z‟
„_‟ (gạch nối)
3.4. Chuỗi
ESCAPE
• Escape: thoát, bỏ qua
• Chuỗi escape bắt đầu
bằng ký tự „\‟ mang ý
nghĩa bỏ qua ý nghĩa
thông thường của ký
tự đứng sau ký tự
này.
• Do đó chuỗi escape
đầu dòng
'\f'
Form feed Sang trang kế tiếp
3.5.Các kiểu dữ liệu cơ bản của C
– Data types
• Kích thước và phạm vi của kiểu dữ liệu phụ thuộc
vào trình biên dịch ( xem file limit.h và float.h )
Định dạng
Nhập/Xuất
Kiểu
Số
byte
Phạm vi
%c unsigned char 1 0 255
%c char 1 -128 127
%u unsigned int 2 0 65,535
%d, %i int 2 - 32,768 32,767
%lu unsigned long <int> 4 0 4,294,967,295
%ld, %li long <int> 4 -2,147,483,648 2,147,483,647
%f float 4 3.4 * (10
-38
) 3.4 * (10
+38
)
%lf double (long float) 8 1.7 * (10
-308
) 1.7 * (10
+308
)
{ printf("%lf", =3.141592;*3.2*3.2);
getch();
}
Error!
#include <stdio.h>
#include <conio.h>
#define Area(x) x*x
void main()
{ printf("%lf", 3+2*3+2);
getch();
}
Không được
mong đợi
#define Area(x) (x)*(x)
(3+2)*(3+2)
OK
Thí dụ:
-Hằng không kiểu: trình biên
dịch dùng bộ nhớ ít nhất để
chứa, tối thiểu là 2 bytes.
-Hằng có kiểu sẽ buộc trình
biên dịch phải dùng đúng
kiểu đã chỉ định để lưu trữ
trị hằng.
-Hằng chuỗi ký tự được để
trong cặp nháy đôi.
-Hằng ký tự được để trong
cặp nháy đơn.
Toán tử sizeof(data) cho biết số byte
mà data này chiếm chỗ.
{
clrscr();
printf(“Chao cac ban");
getch();
}
/*…*/ Khối chú thích
// Chú thích đến cuối dòng
Khai báo sử dụng thư viện
#include : chỉ thị tiền xử lý
Chương trình chính , bắt
buộc là main()
; kết thúc 1 câu lệnh đơn
Chuong 03- Co ban ve Ngon ngu C 8
Ví dụ: Cấu trúc một chương
trình C
Từ nay về sau, chúng
ta nên thêm phần chú
thích để gợi nhớ
Chú thích – Comment
• Dùng để giải thích chương trình.
• Chú thích 1 dòng: chỉ dùng trong C++
// Chú thích
• Chú thích nhiều dòng: C/C++
/* Các dòng chú thích
……
*/
• Dòng chú thích được bỏ qua khi biên dịch
Chỉ thị tiền xử lý – Preprocessor
indicators
NHẬP XUT DỮ LIỆU TRONG C
Nội dung
• Các hàm nhập dữ liệu chuẩn
• Các hàm xuất dữ liệu chuẩn
4.1. Nhập – Input
• Macro:
– int getchar(); // nhận 1 ký tự từ bàn phím,
// không in ra màn hình
• Functions:
– int getch(); // tương tự như getchar()
– int getche(); // nhận 1 ký tự từ bàn phím và
// in ra màn hình
– char* gets(char *s); // nhận chuỗi ký tự
– int scanf(char *format, [, address,…]);
4.2. Xuất – Output
• Macro:
– int putchar(int c); // xuất ký tự c ra màn hình.
• Functions:
– int putch(int c); // tương tự như putchar()
– int puts(const char *s); // xuất chuỗi ký tự ra
// màn hình
– int printf(const char *format [, argument,…]);
– int cprintf(const char *format [, argument,…]);
Ví dụ:
Chương 5
BIỂU THỨC VÀ CÁC PHÉP
TOÁN
Phần nguyên
Kết quả
Nguyên / Thực
Thực
Kết quả
Thực / Nguyên
Thực
Kết quả
Thực / Thực
Thực
Kết quả
Phép chia
trong C
%
/
Ví dụ:
Toán tử % chỉ dùng
cho số nguyên
Chuong 03- Co ban ve Ngon ngu C 11
5.1.2. Toán tử so sánh –
Relational operators
Ví dụ:
Toán tử so sánh
5.1.2. Toán tử luận lý – Logical
operators
Toán tử Luận lý
5.1.3. Toán tử gán – Assigment
operators
• Khi gán trị mới cho 1 biến, trị c bị ghi đè.
0000000000000001
Bạn có nhận xét gì ?
Chuong 03- Co ban ve Ngon ngu C 12
Ví dụ:
0000 0000 0000 0011
0000 0000 0000 0111
0000 0000 0000 0100
7*4 28
7/4 1
5.1.5. Các toán tử khác
• Ép kiểu (type casting) :
– (kiểuT) x
– kiểuT (x)
• Toán tử 3 ngôi: BTĐK ? X : Y;
• Quản lý bộ nhớ:
– sizeof(biến) : Lấy kích thước byte của „biến‟
– sizeof(kiểu dữ liệu) : Lấy kích thước byte của „kiểu dữ liệu‟
– new : Cấp phát động một vùng nhớ
– delete : Trả một nhớ đã được cấp phát động
– &biến : Lấy địa chỉ bộ nhớ của „biến‟ (địa chỉ chiếm 4 byte DOS)
Ví dụ về ép kiểu lớn sang kiểu nhỏ
0000 0001
0000 0000
m=256
0000 0000
c
Ép kiểu lớn sang kiểu nhỏ
Ép kiểu tự động
toán tử
• Nhìn chung độ ưu tiên:
– Cặp ngoặc từ trong ra
ngoài
– Toán tử số học, nhân chia
trước cộng trừ sau.
– Toán tử so sánh
– Toán tử luận lý
– Toán tử gán
TT Phép toán Trình tự kết hợp
1
() []
Trái qua phải
2
! ~ & –(dấu trừ) ++ (type ) sizeof
Phải qua trái
3
* ( phép nhân ) / %
Trái qua phải
4
+ – (phép trừ)
Trái qua phải
5
<< >>
Trái qua phải
6
< <= > >=
Trái qua phải
7
== !=
nhất và thuộc kiểu cơ bản.
• Các hàm toán học được khai báo trong math.h
Tham khảo thư viện toán học của C
Gõ vào màn hình soạn thảo: math.h
Để con nháy dưới từ math, Gõ Ctrl + F1
Chương 6
CU TRÚC ĐIỀU KHIỂN TRONG
C
Nội dung:
• Câu lệnh đơn
• Khối lệnh
• Cấu trúc chọn
• Cấu trúc lặp
• Ngắt điều khiển
6.1. Câu lệnh đơn – Simple
statement
• Là một câu lệnh đơn giản như:
– Khai báo hằng, biến
– Gán trị cho biến
– …
• Kết thúc bằng dấu chấm phẩy ;
6.2. Khối lệnh – Block/compound
statement
• Gồm một nhóm câu lệnh lại thành một khối trong cặp
ngoặc nhọn { }.
else phải đi với if ngay trước đó
Ví dụ
Hãy vẽ lưu đồ cho 2
chương trình này và tìm
sự khác biệt giữa chúng
Cả 2 chương trình
cùng cho một kết qủa
Ví dụ về một điều kiện thỏa phải làm
nhiều lệnh
Bạn giải thích thế nào về lỗi
trong chương trình này?
Ví dụ về if lồng nhau - nesting if
statement
Bạn hãy diễn đạt chương trình trên bằng
ngôn ngữ tự nhiên và vẽ lưu đồ.
84
6.3.2: Cấu trúc else if
• Cú pháp lệnh if (biểu thức luận lý 1)
khối lệnh 1;
else if (biểu thức luận lý 2)
khối lệnh 2;
…
else if (biểu thức luận lý n-1)
khối lệnh n-1;
else
khối lệnh n;
1 1
0 0 0
…
c1
6.3.2. Cấu trúc chọn 1/n –
switch…case
• Dựa trên trị một biểu thức số nguyên hoặc ký tự (kiểu có
thứ tự) để rẽ nhánh.
switch (Bt)
{ case c1: CácCLệnh_1; break;
case c2: CácCLệnh_2; break;
case c3: CácCLệnh_3; break;
…
default: CácCLệnhCuối;
}
thân
Cấu trúc
switch…
case
Bt
c2 c3
other
• c1,c2,c3,… là các hằng số nguyên hoặc ký tự.
• Nếu không có break, câu lệnh kế tiếp được thực
thi cho đến khi gặp break, hoặc hết thân của switch.
• Các case đóng vai trò điểm nhập của một lựa chọn.
88
Lưu đồ chi tiết
89
Vi dụ :Viết chương trình nhập vào tháng và in
• };
• }
• else
• printf("Thang khong hop le.\n");
• getch();
• }
•
Chuong 03- Co ban ve Ngon ngu C 16
Ví dụ: Bài toán người cha thưởng con
Theo bạn, người con được thưng mấy
cái áo và bao nhiêu tiền ?
6.4. Cấu trúc lặp – Loops
• Cấu trúc lặp while
• Cấu trúc lặp do … while
• Cấu trúc lặp for
yes
6.4.1. do while Loops, while Loops
KhởiTạo;
do
{
Khối lệnh;
Tăng/ giảm;
}
while(BiểuThứcĐiềuKiện);
KhởiTạo;
while (BiểuThứcĐiềuKiện)
{
Khối lệnh;
{
Khối lệnh;
Tăng/giảm;
}
Kiểm tra điều kiện
trước khi thực thi
Khi tạo
BTĐK
Khối lệnh
Tăng/ giảm
yes
no
Chuyển for while
S=0;
for (i = 1; i <= n; i = i + 1)
{
S = S + i;
}
S=0;
i = 1;
while(i <= n)
{
S = S + i;
i = i + 1;
}
Khối lệnh;
for ( Khi tạo ; BTĐK ; Tăng/Giảm )
{
}
while (
for (j = 1; j <= h; j++)
printf("*");
printf("\n");
}
getch();
}
99
Lưu đồ?
• Chỉ điểm sai
6.5. Ngắt điều khiển – Control statement
• 3 tình huống ngắt:
– Ngắt cả chương trình: exit(0); // stdlib.h
– Ngắt một chương trình con(function): return [Exp];
– Ngắt 1 cấu trúc switch hay loops
• break; // ngắt ngang
• continue; // bỏ qua 1 lần lặp
• Câu lệnh return sẽ được bàn đến trong Hàm.
• Câu lệnh goto không khuyến khích sử dụng.
• Khi gặp câu lệnh break, cấu trúc switch hay
Loops đang được thực thi sẽ bị cắt ngang để
lệnh kế sau đó được thực thi (được gọi là
chuyển điều khiển sang lệnh kế tiếp).
Thí dụ về
break và
continue
với loops
Xem trợ giúp về một file thư viện
Ctrl + F1
Chuong 03- Co ban ve Ngon ngu C 18
103