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ự
1.3.Dạng biểu diễn dữ liệu và toán
tử
Dạng biểu diễn số
nhị phân
+
+ =
3
2 5
00000011 00000010 00000101
00000011
00000010
00000101
Đúng
Cộng hai biểu diễn số nhị phân
cho kết qủa là một biểu diễn nhị
phân đúng kết qủa đang mong đợi.
Chuong 03- Co ban ve Ngon ngu C 2
1.4.Lệnh máy- Machine Instruction
• Một dữ liệu quy định cách CPU thực thi 1 tác vụ
cơ bản
• Dạng 1 lệnh máy:
110111 1000100101101 1010011001011
Tác vụ Toán hạng 1 Toán hạng 2
(cộng) (address 1) ( address 2)
• Có thể có toán hạng 3 (dữ liệu chứa kết qủa).
• Dạng lệnh máy phụ thuộc kiến trúc CPU.
• Lệnh máy là lệnh nhị phân.
1.5.Chương trình- Program
• 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
4. Xuất tổng
Ví dụ : Thực hiện phép tính cộng 2 số nguyên
Thuật toán - Mô tả bằng ngôn ngữ
tự nhiên
3 2 5
năm
Yếu điểm của cách diễn đạt
bằng NNTN
• NNTN có nhiều cách diễn đạt khác nhau
cho 1 thuật toán.
• Dùng NNTN để diễn đạt thuật toán có khả
năng gây “hiểu sai ”.
Chuong 03- Co ban ve Ngon ngu C 3
• Dùng hình vẽ (graphic) để mô tả một thuật toán.
• Trong lưu đồ chỉ rõ tiến trình thực thi thuật toán.
• Không thể hiểu lầm vì có quy tắc để vẽ.
Thuật toán - Mô tả bằng lưu đồ
(Flowchart)
• Điểm bắt đầu và kết thúc
• Hướng tính toán
• Nhập/xuất
• Tính toán
• Lựa chọn ½
• Lựa chọn 1/n
• Điểm ráp nối khi lưu đồ lớn
Begin End
Nhập a
c=a+b
2
9 7
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;
B3: if (t<c)
t=c;
B4: Xuất t;
5
7
2
7
a
b
c
Bảy
Nếu muốn nhập 3 số a, b, c thì thêm những gì
vào giải thuật và thêm vào đâu?
no
Begin
End
t=a
t<b
t<c
yes
no
yes
t=b
t=c
Xuất t
5
Chương 2
NGÔN NGỮ LẬP TRÌNH
2.1.KHÁI NIỆM VỀ NGÔN NGỮ LẬP
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ộ)
Chương trình
Chương trình
theo ngôn ngữ
lập trình
Thông dịch
Interpreting
(dịch từng câu)
1 lệnh
CPU
thực thi
2.3.Các loại ngôn ngữ lập trình thông
dụng
• Ngôn ngữ lập trình Hợp ngữ
• Ngôn ngữ lập trình Basic
• Ngôn ngữ lập trình Pascal
• Ngôn ngữ lập trình C / C++
• Ngôn ngữ lập trình Java
• …
2.4.Lập trình tuần tự - tuyến tính
• Ngôn ngữ lập trình Hợp ngữ thuộc loại
ngôn ngữ lập trình tuyến tính.
• Các phần của chương trình nối nhau theo
dãy dài, làm khó hiểu về mặt logic.
• Việc điều khiển chương trình được thực
hiện bằng cách nhảy lung tung, khó kiểm
soát.
• Mọi dữ liệu đều toàn cục, nên các thành
phần của chương trình có thể làm thay đổi
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.
– Chạy chương trình, kiểm tra kết qủa.
2.7.Các bước xây dựng chương trình
Chuong 03- Co ban ve Ngon ngu C 5
2.7.Các bước xây dựng chương trình
Bài toán
Phân
tích
Dữ liệu
Giải thuật
Dùng
Editor
NNLT
Chương
trình
ngôn
ngữ
Start
Yes
No
Yes
Lỗi cú pháp
No
giải thuật sai
Dịch
Chạy
Lỗi
?
Kq
đúng
?
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
• Tự định nghĩa được kiểu dữ liệu
• Định nghĩa và phân biệt được hằng và biến
• Nhận diện và sử dụng được các toán tử của C
• Biết sử dụng các cấu trúc điều khiển của C
3.1. Tập ký tự của C –
Character set
• Digits: 0 9
• Letters- alphabet characters: a z, A Z
• Special characters: + - * / % & ! # ^ & …
Các ký tự in được của bàn phím chuẩn
Chuong 03- Co ban ve Ngon ngu C 6
3.2. Từ khóa – Keywords
• Là những từ ngôn ngữ C đã định nghĩa sẵn cho người lập
trình sử dụng để thiết kế chương trình.
• Là thành phần cơ bản để tạo câu lệnh trong C.
• Bao gồm các nhóm:
– Kiểu số nguyên : char , int , short , unsigned , long
– Kiểu số thực: float , double
– Kiểu rời rạc : enum
– Kiểu cấu trúc : struct , union
– Kiểu rỗng: void
– Tự định kiểu: typedef
– Khai báo hằng: const , define
– Khai báo biến: static , extern , auto, register, volatile
– 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
mang một ý nghĩa đặc
biệt.
Cách
viết
Tên gọi Ý nghĩa
'\''
Single quote Ký tự '
'\"'
Double quote Ký tự "
'\\'
Backslash Ký tự \
‘\?’
Question mark Ký tự ?
‘\a’
Alert Phát tiếng Beep ra loa
'\n'
New line Xuống dòng mới
'\0'
NULL Rỗng
'\t'
Horizontal tab
Di chuyển con nhấp nháy
tới vị trí tab kế tiếp
'\b'
Backspace Lùi con nhấp nháy 1 vị trí
'\r'
Carriage return
Đưa con nhấp nháy về
đầ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
)
%lf long double 10 3.4 * (10
-4932
) 1.1 * (10
+4932
)
3.6. Hằng – Constant
• Cách 1:Dùng macro. Ví dụ:
#define PI 3.141592
• Cách 2: Dùng từ khóa const. Ví dụ:
const PI = 3.141592;
Hay là:
const double PI = 3.141592;
Chú ý: #define
• Đặt một tên gọi cho một nội dung
• Còn gọi là macro.
#include <stdio.h>
#include <conio.h>
#define PI 3.141592
void main()
{ printf("%lf", 3.141592*3.2*3.2);
getch();
}
Thay thế trị trước khi biên dịch
Chuong 03- Co ban ve Ngon ngu C 7
Hiệu ứng lề – Side effect
#include <stdio.h>
#include <conio.h>
#define PI =3.141592;
void main()
{ 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ỗ.
3.7. Biến – Variable
• Biến phải thuộc 1 kiểu dữ liệu.
• Khai báo biến:
• 2 biến cùng kiểu cách nhau dấu phẩy.
• C chuẩn chỉ cho phép khai báo biến ở đầu
chương trình. Còn C++, cho phép khai báo biến
bất k chỗ nào nếu thấy cần.
Ví dụ:
int m=3 ;
long t1=23, t2=3*t1;
double z1, z2, z3 ;
char c1 , c2 = „A‟ ;
<Kiểu dữ liệu> tênbiến;
Ví dụ
Lỗi “khai báo kết thúc không đúng cách” vì khai báo xong biến t,
sang biến kiểu khác mà để dấu “phẩy”.
Đáng lẽ phải là dấu “chấm phẩy”.
3.7. Biến – Variable
Lấy địa chỉ của biến: &tênbiến
Đúng về Syntax,
nhưng Sai về Lý luận
3.8. Cấu trúc một chương trình
C
/* CHAO.CPP
Chuong trinh minh hoa don gian */
// Xuat chuoi “Chao cac ban” ra man hinh
#include <stdio.h>
#include <conio.h>
void main()
{
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
• Còn được gọi là chỉ thị tiền biên dịch vì
đây là những chỉ thị mà trình biên dịch
phải làm trước khi chuyển chương trình C
thành chương trình mã máy.
• Các chỉ thị này bắt đầu bằng „#‟
Cách làm việc của chỉ thị
#include
nội dung file
stdio.h
nội dung file
conio.h
code
chương trình
Compile
Chỉ thị #include : Chèn 1 file
• #include <file thư mục Include Directories>
• #include “file không thuộc Include Directories”
• Lưu ý: Không nên có khoảng trống giữa < , > và tên
file vì trong cặp ký tự này được hiểu là tên file
Lưu ý chỉ thị
#include
Không có
khoảng trắng
có khoảng trắng
(Error)
Chuong 03- Co ban ve Ngon ngu C 9
Chương 4
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
Chuong 03- Co ban ve Ngon ngu C 10
5.1. Toán tử - Operators
• Toán tử: Ký hiệu mô tả 1 phép toán cho
kết qủa 1 trị duy nhất.
• Toán hạng (operand): Dữ liệu để phép
toán tác động.
• Kết qủa (result): Dữ liệu mới được sinh ra
sau khi thực thi xong phép toán.
• C hỗ trợ các phép toán có 1/2/3 toán hạng
• Unary/binary/ternary operator: Toán tử
1/2/3 ngôi.
Các loại toán tử của C
• Toán tử số học – Arithmetic ops
• Toán tử so sánh – Relational ops
• Toán tử luận lý – Logical ops
• Toán tử gán – Assignment ops
• Toán tử trên bit – Bitwise ops
• Các toán tử khác
5.1.1. Toán tử số học –
Arithmetic operators
Ví dụ:
int k = 3, t = 6;
int u = k- -;
int v = - - t;
Hỏi k, t, u, v có trị bao nhiêu?
Lưu ý về Toán tử chia
Nguyên % Nguyên
Phần dư
Kết quả
Nguyên / Nguyê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
x=1;
Ví dụ Tương đương
s = s+a; s += a;
s = s / a; s /= a;
0000000000001011
x=11;
Ví dụ:
5.1.4. Toán tử bit – Bitwise operators
0000111
<< Left shift Right shift >>
00001110
00011100
00000011
00000001
1 bit
2 bit
14
d
28
d
7
d
3
d
1
d
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
• Kiểu kết qủa của 1 biểu
thức là kiểu lớn nhất
của toán hạng tham gia
biểu thức.
int n=3; long t=123; double x=5.3;
3*n + 620*t – 3*x
(int*int) + (int*long) - (int*double)
int + long - double
long - double
double
Hãy giải thích vì sao
chương trình sau
cho kết qủa sai?
Theo bạn, một hộ sử dụng
155 kwh điện một tháng và
tính tiền theo công thức
sau sẽ cho kết qủa
đúng hay sai?
t =100*650+50*850+5*1150;
0111 1111 1111 1111
0000 0000 0000 0001
1000 0000 0000 0000
+
5.2. Độ ưu tiên của toán tử –
Operator Precedence
• Thứ tự mà một toán tử được thực hiện khi
biểu thức có nhiều toán tử.
Độ ưu tiên của
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
== !=
Trái qua phải
8
&
Trái qua phải
9
^
Trái qua phải
10
|
Trái qua phải
11
&&
Trái qua phải
12
||
Trái qua phải
13
?:
Phải qua trái
14
= += -= *= /= %= <<=
>>= &= ^= |=
Phải qua trái
15
,
Trái qua phải
Chuong 03- Co ban ve Ngon ngu C 13
5.3. Biểu thức – Expressions
• Sự kết hợp đúng cách của hằng, biến, hàm, toán tử
• Hàm trong biểu thức là một tác vụ cho một trị duy
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 { }.
• Kết thúc 1 khối lệnh không cần dấu chấm phẩy.
• Khối lệnh được xem là một câu lệnh.
Chuong 03- Co ban ve Ngon ngu C 14
6.3. cấu trúc chọn – Select structure
• Còn gọi là cấu trúc rẽ nhánh (branching).
• Dựa trên một điều kiện hay một dữ liệu để
xác định một hướng thực thi chương trình.
• Cấu trúc chọn 1/2: if … else …
• Cấu trúc chọn 1/n : switch…case…
6.3.1. Cấu trúc chọn ½ :
if…else…
• Cú pháp :
if (condition) CâuLệnh_1;
[ else CâuLệnh_2;]
• Biểu thức điều kiện được tính toán (trả trị 0: sai, 1 hay
khác 0:đúng) trước khi rẽ nhánh.
condition
?
CâuLệnh
yes
no
condition
?
CâuLệnh_1
yes
no
CâuLệnh_2
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;
Chuong 03- Co ban ve Ngon ngu C 15
85
Cấu trúc else if
• Nếu biểu thức luận lý 1 đúng thì thực
hiện khối lệnh 1 và thoát khỏi cấu trúc if
• Ngược lại Nếu biểu thức luận lý n-1
đúng thì thực hiện khối lệnh n-1 và thoát
khỏi cấu trúc if Ngược lại thì
• thực hiện khối lệnh n.
86
Cấu trúc else if
Vào
KL1
BTĐK1
KLn
Ra
BTĐK2
BTĐKn -1
KLn-1
KL2
1
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
ra quý. (tháng 1 -> quý 1, tháng 10 -> quý 4)
• Nhập vào giá trị tháng, kiểm tra xem tháng
có hợp lệ (trong khoảng 1 đến 12). Nếu
hợp lệ in ra quý tương ứng (1->3: quý 1,
4->6: quý 2, 7->9: quý 3, 10->12: quý 4).
90
• void main(void)
• { int ithang;
• printf("Nhap vao thang: ");
• scanf("%d", &ithang);
• if (ithang > 0 && ithang <= 12)
• {
• switch(ithang)
• {
• case 1:
• case 2:
• case 3:
• printf("Quy 1.\n");break;
• case 4:
• case 5:
• case 6:
• printf("Quy 2.\n");
• break;
• case 7:
• case 8:
case 9: printf("Quy 3.\n"); break;
• case 10:
• case 11:
• case 12:printf("Quy 4.\n");
• break;
• };
• }
• 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;
Tăng/ giảm;
}
Thực thi trước
Kiểm tra sau
Kiểm tra trước
Thực thi sau
Khi tạo
BTĐK
Khối lệnh
Tăng/ giảm
yes no
Khi tạo
BTĐK
Khối lệnh
Tăng/ giảm
no
6.4.2. for Loops
• for (KhiTạo ; Biểu thứcĐiềuKiện; Tăng/giảm)
{
Khối lệnh;
}
• KhiTạo;
for ( ; Biểu thứcĐiềuKiện ; Tăng/giảm)
{
Khối lệnh;
}
• KhiTạo;
for ( ; ĐiềuKiện ;)
{
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 (
)
{
}
BTĐK
Khi tạo ;
Khối lệnh;
Tăng/Giảm;
96
Ví dụ : Nhập n là số nguyên
dương. Tính tổng S = 1+2+…+n
Chỉ chổ sai
Chuong 03- Co ban ve Ngon ngu C 17
97
Ví dụ : Vẽ LĐ : nhập chiều cao h,
xuất hình vuông tương ứng.
• Nhập h = 4
• Xuất
* * * *
* * * *
* * * *
* * * *
98
CODE
void main()
{
int i, j, h;
printf("Nhap vao chieu cao h = ");
scanf("%d", &h);
for (i = 1; i <= h; i++)
{
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
Bài tập
1. Viết chương trình nhập vào n số nguyên. Tính
và in ra tổng các số chẳn của chúng.
2. Viết chương trình nhập vào n số nguyên. Tính
và in ra tổng các số lẽ và chia hết cho 3 của
chúng .
3. Viết chương trình nhập 3 số thực. Kiểm tra
xem 3 số đó có hợp lại thành 3 cạnh của 1
tam giác hây không? Nếu không phải thì xuất
“kg phải là 3 cạnh của tam giác”, còn nếu phải
thì cho biết đó là tam giác gì?
104
Bài tập
4 . Viết chương trình nhập chiều cao h. Xuất
hình chử nhật tương ứng.
5. Viết chương trình nhập tháng, năm. Cho
biết tháng đó có bao nhiêu ngày.
Xin cám ơn