You are on page 1of 68

Cơ sở lập trình

Số tín chỉ: 3
Giảng viên: Ths. Cù Nguyên Giáp
Bộ môn: Tin học

10/04/23 Cơ sở lập trình 1


Chương 2
Lập trình căn bản trên C
2.1 Giới thiệu Turbo C
2.2 Các yếu tố cơ bản trong C
2.3 Cấu trúc chương trình C
2.4 Các lệnh cơ bản của C

10/04/23 Cơ sở lập trình 2


2.1 Giới thiệu Turbo C
2.1.1 Khởi động, kết thúc làm việc với Turbo C
2.1.2 Môi trường làm việc của Turbo C

10/04/23 Cơ sở lập trình 3


2.1.1 Khởi động và kết thúc làm việc với Turbo C
• Khởi động
– C1: Nháy đúp biểu tượng TC trên màn hình
Desktop (tạo shortcut từ TC.exe)
– C2: Nháy đúp chuột vào tệp chương trình của TC
trong thư mục BIN trong thư mục cài đặt của TC
• Kết thúc
– C1: Nháy chuột vào FileQuit
– C2: Nhấn tổ hợp phím tắt Alt +X
Lưu ý: sử dụng với Windows7 (DosBox)

10/04/23 Cơ sở lập trình 4


2.1.2 Môi trường làm việc của Turbo C (Màn
hình console)

Lưu ý: Phóng to/ thu nhỏ màn hình (Alt+Enter)

10/04/23 Cơ sở lập trình 5


2.1.2 Công cụ lập trình C khác:

10/04/23 Cơ sở lập trình 6


2.2 Các yếu tố cơ bản trong Turbo C
2.2.1. Bảng chữ cái
2.2.2. Từ khóa
2.2.3. Tên gọi
2.2.4. Chú thích
2.2.5. Các kiểu dữ liệu cơ sở
2.2.6. Các đại lượng
2.2.7. Biểu thức

10/04/23 Cơ sở lập trình 7


2.2.1 Bảng chữ cái (Bộ ký tự)
• C sử dụng bộ kí tự ASCII, bao gồm:
– Chữ cái: A  Z, a z
– Dấu gạch nối: _
– Số: 0 -> 9
– Các dấu phép toán số học: + - * / <> % ^
– Các cặp dấu ngoặc: ( ) { } [ ]
– Các dấu ngăn cách: dấu cách, dấu nhảy tab, dấu xuống dòng
– Các dấu khác: # $ . , : ; “ ! ‘ ? @
Đặc điểm:
- Mỗi kí tự tương ứng một mã (số nguyên 0255)
- 128 kí tự đầu là kí tự cố định, còn lại là kí tự mở rộng
Lưu ý: không sử dụng các ký tự la mã và tiếng việt trong viết câu lệnh nhưng
được phép ghi chú thích

10/04/23 Cơ sở lập trình 8


2.2.2 Từ khóa (Keyword)
• Khái niệm: Là một tập các từ dùng riêng cho từng
ngôn ngữ lập trình.
• Mỗi từ khóa có một ý nghĩa và tác dụng cụ thể. Ví dụ
như tên kiểu dữ liệu, tên toán tử v.v..
• Một số từ khóa
• Lưu ý:
– Không được đặt tên các đối tượng khác trùng tên với từ
khóa như biến, hằng, mảng…
– Từ khóa phải viết bằng chữ thường.

10/04/23 Cơ sở lập trình 9


2.2.3 Tên gọi (Identifier)
• Khái niệm: Là một dãy các ký tự đặt cạnh nhau, được dùng để
định danh các đối tượng khác nhau trong chương trình như
tên biến, tên hàm,…
• Quy tắc:
– Tên chỉ được chứa các chữ cái, chữ số và dấu gạch nối _
– Tên phải bắt đầu bằng chữ cái hoặc dấu gạch nối
– Không được trùng với từ khóa
– Phân biệt giữa chữ hoa và chữ thường
– Độ dài tối đa của tên mặc định là 32

10/04/23 Cơ sở lập trình 10


2.2.4 Chú thích
• Mục đích: dùng để giải thích, làm rõ nghĩa cho một
câu lệnh nào đó, được trình biên dịch bỏ qua khi dịch
chương trình
• Vị trí:
• Các chú thích được đặt trong cặp dấu /* */ hoặc đặt
sau cặp dấu //

10/04/23 Cơ sở lập trình 11


2.2.5 Các kiểu dữ liệu cơ sở
• Khái niệm 1 kiểu dữ liệu: là một tập hợp các giá trị
mà một biến thuộc kiểu đó có thể nhận được, và
trên đó xác định một số phép toán.
• Phân loại:
– Kiểu dữ liệu vô hướng: kiểu cơ sở và kiểu do người dùng
định nghĩa
– Kiểu dữ liệu có cấu trúc: kiểu mảng(array), kiểu cấu trúc –
bản ghi (struct – record), kiểu tệp (file)
– Kiểu con trỏ (pointer)

10/04/23 Cơ sở lập trình 12


2.2.5 Các kiểu dữ liệu cơ sở
• Đặc trưng:
– Tên kiểu
– Miền giá trị
– Vùng nhớ được cấp phát
– Các phép toán

10/04/23 Cơ sở lập trình 13


2.2.5 Các kiểu dữ liệu cơ sở (cont)
• Các kiểu dữ liệu cơ sở
– Kiểu kí tự
– Kiểu số nguyên
– Kiểu số thực

10/04/23 Cơ sở lập trình 14


2.2.5 Các kiểu dữ liệu cơ sở (cont)
Kiểu dữ liệu Tên kiểu Kích thước Miền giá trị

Kí tự có dấu (signed) char 1B -128 127

Kí tự không dấu unsigned char 1B 0  255

Số nguyên có dấu int 2B -215  215 – 1

Số nguyên không dấu unsigned int 2B 0  216 – 1

Số nguyên ngắn có dấu short 2B -215  215 – 1

Số nguyên ngắn không dấu unsigned short 2B 0  216 – 1

Số nguyên dài có dấu long 4B -231  231 – 1

Số nguyên dài không dấu unsigned long 4B 0  232 – 1

10/04/23 Cơ sở lập trình 15


2.2.5 Các kiểu dữ liệu cơ sở (cont)
Kiểu dữ liệu Tên kiểu Kích Miền giá trị
thước

Số thực với độ chính xác đơn float 4B 3.4e-38 -> 3.4e38

Số thực với độ chính xác kép double 8B 1.7e-308 -> 1.7e308

Số thực dài với độ chính xác long 10B 3.4e-4932->3.4e4932


kép double

Lưu ý: bảng trên biểu diễn miền giá trị có giá trị dương lớn nhất và giá
trị âm nhỏ nhất bằng giá trị dương lấy đối

10/04/23 Cơ sở lập trình 16


2.2.5 Các kiểu dữ liệu cơ sở (cont)
• Các phép toán:
• Kiểu số nguyên:
– Phép toán số học: +, -, *, /, %
– Phép toán quan hệ: >, <,>=, <=, ….
– Phép toán logic: &&, ||, !
– Phép toán với bit: &, |, ^, ~,>>, <<
• Kiểu số thực:
– Phép toán số học: +, -, *, /, %
– Phép toán quan hệ: >, <,>=, <=, ….
Lưu ý: cách viết khoa học của số thực (dấu phẩy động)
3.14 314e-2 0.314e+1

10/04/23 Cơ sở lập trình 17


2.2.5 Các kiểu dữ liệu cơ sở (cont)
• Các phép toán:
• Kiểu ký tự: sử dụng các hàm:
– toASCII(c)
– tolower(c)
– toupper(c)
Thư viện ctype.h
Lưu ý: hằng kí tự được đặt trong cặp dấu ‘ ’, xâu ký
tự đặt trong cặp dấu “ ”

10/04/23 Cơ sở lập trình 18


2.2.6 Các đại lượng
• Hằng (constant): là đại lượng giá trị không thay đổi
trong quá trình tính toán.
• Phân loại: Hằng không có kiểu và hằng có kiểu
• Khai báo hằng có kiểu:
const <kiểu_dữ_liệu> <tên_hằng> = <giá_trị>;
• Khai báo hằng không có kiểu :
– Có thể khai báo hằng bằng cách sử dụng định nghĩa
macro với từ khóa define
#define <tên_hằng> <giá_trị>

10/04/23 Cơ sở lập trình 19


2.2.6 Các đại lượng
• Ví dụ:
const float pi =3.14;
#define max 3.14
• Sự khác nhau giữa hai khai báo
– Cú pháp
– Cấp phát bộ nhớ
– Biên dịch

10/04/23 Cơ sở lập trình 20


2.2.6 Các đại lượng (cont)
• Biến (variable): là một đại lượng có giá trị thuộc một kiểu dữ
liệu nào đó và giá trị này có thể thay đổi trong thời gian tồn tại
của biến
• Khai báo biến:
<kiểu_dữ_liệu> <tên_biến1> [=<giá_trị1>];
• Lưu ý:
– Khai báo nhiều biến cùng kiểu trên cùng dòng lệnh.
– Tên biến nên mang tính chất gợi nhớ, ngắn gọn.
• Ví dụ:
– float z=3.14;
– int x, y=8;
10/04/23 Cơ sở lập trình 21
2.2.7 Biểu thức
 Khái niệm: Biểu thức là sự kết hợp giữa các toán hạng và toán tử theo
một cách phù hợp để diễn đạt một công thức toán học nào đó.
 Trong đó:
 Các toán hạng có thể là hằng, biến hay lời gọi hàm hoặc một biểu
thức con nào đó.
 Các toán tử phụ thuộc vào ngôn ngữ.
 Phát biểu quy nạp:
 Hằng, biến, lời gọi hàm gọi là biểu thức.
 Nếu A là biểu thức, B là biểu thức, Δ là một phép toán hợp lệ giữa A
và B trên ngôn ngữ C thì A Δ B là một biểu thức
 Chỉ những thành phần nào được kết hợp từ hai yếu tố trên mới gọi
là biểu thức.

10/04/23 Cơ sở lập trình 22


2.2.7 Biểu thức
• Giá trị biểu thức : có thể ước lượng được và thuộc một
kiểu dữ liệu nào đó.
• Biểu thức logic trong C (trong C không có kiểu dữ liệu
logic): Ngôn ngữ C sử dụng số để diễn đạt các giá trị
logic (1-đúng/0-sai).
• Ngoài ra C còn sử dụng giá trị NULL để thể hiện giá trị
sai và giá trị đúng là giá trị khác NULL

10/04/23 Cơ sở lập trình 23


2.2.7 Biểu thức
 Vị trí của biểu thức: Biểu thức có thể thấy trong bất
kì một câu lệnh nào của C
 Ví dụ:
 Vế phải của một câu lệnh gán:
ví dụ: x = 5*a + sqrt(y);
 Làm tham số thực sự của hàm:
ví dụ: sqrt(y)
 Làm chỉ số:
ví dụ: x[++i]
 Trong câu lệnh điều kiện if, for

10/04/23 Cơ sở lập trình 24


2.3 Cấu trúc chương trình C
1. [Các bao hàm tệp]
2. [Các định nghĩa kiểu, biến, hằng]
3. [Các định nghĩa macro] //chương 4
4. [Các khai báo nguyên mẫu hàm] //chương 4
5. <kiểu_hàm> main ([tham số])
{
// thân hàm main
}
6. [Các định nghĩa hàm]
Lưu ý: dấu [ ] để chỉ yếu tố có thể có hoặc không
dấu <> để chỉ yếu tố bắt buộc (đv các trình biên dịch)

10/04/23 Cơ sở lập trình 25


2.3 Cấu trúc chương trình C
 #include "stdio.h"
 #include "string.h“
 int main()
 {
// khai bao bien
 char *str;
 /* do something*/
 return 0;
 }

10/04/23 Cơ sở lập trình 26


Các bao hàm tệp
 Khái niệm: Bao hàm tệp là các chỉ dẫn tiền xử lý để chương trình
dịch chèn file thư viện vào trong chương trình.
 Mục đích:
 Cách chỉ dẫn:
#include <[path]\ file_name.*>
hoặc #include “[path]\file_name.*”
 Hoạt động: Trước khi dịch, chương trình dịch sẽ tìm tệp theo tên
và đường dẫn ghi trong chỉ dẫn. Nếu tìm thấy thì nội dung của
tệp này được gọi ra và chèn vào tệp nguồn đang xét đúng tại vị
trí chỉ dẫn include. Nếu không tìm thấy thì thông báo lỗi.
 Sự khác nhau: khi không có đường dẫn
<> tìm trong thư mục ngầm định trước
“ ” tìm trong thư mục hiện tại chứa tệp chương trình

10/04/23 Cơ sở lập trình 27


Hàm main
• Khái niệm hàm: là đoạn chương trình được viết ra một lần
nhưng có thể sử dụng nhiều lần, chỉ cần gọi tên hàm và cung
cấp các tham số tương ứng.
• Hàm main là yếu tố bắt buộc của mỗi chương trình C, là nơi bắt
đầu thực thi (chạy) của chương trình
• Lưu ý:
– Hàm phải trả lại một giá trị cho tên hàm nhưng với hàm main(),
không nhất thiết phải trả kết quả void main()
– Hàm main kiểu void không được trình biên dịch chấp nhận
trong một số công cụ hỗ trợ lập trình C như Dev-cpp, MS
VisualC

10/04/23 Cơ sở lập trình 28


Các bước viết chương trình
• Soạn thảo chương trìnhtạo tệp có phần mở rộng
của các tệp *.C, *.CPP
• Dịch chương trình
Tạo các tệp *.obj, *.com, *.exe
Phát hiện lỗi
• Chạy chương trình và thử với các bộ dữ liệu đặc
biệt
 Phát hiện lỗi

10/04/23 Cơ sở lập trình 29


2.4 Các lệnh cơ bản của Turbo C
2.4.1. Lệnh gán
2.4.2. Lệnh vào, ra dữ liệu
2.4.3. Các lệnh điều khiển rẽ nhánh
2.4.4. Các lệnh điều khiển chu trình

10/04/23 Cơ sở lập trình 30


Câu lệnh (Instruction, Statement)
• Khái niệm:
• Phân loại:
– Câu lệnh đơn giản: là lệnh không chứa các lệnh khác.
– Ví dụ: phép gán, lời gọi hàm loại void, lệnh nhảy không
điều kiện goto
– Câu lệnh có cấu trúc: khối lệnh, lệnh rẽ nhánh, lệnh lặp
Lưu ý:
– Lệnh kết thúc bằng dấu ;
– Khối lệnh luôn nằm trong cặp dấu { }

10/04/23 Cơ sở lập trình 31


2.4.1 Lệnh gán
• Cú pháp: <biến> = <biểu_thức> ;
• Ý nghĩa:
• Ví dụ:
int x=5;
int y;
y=(x*x-2)/(x-1);
• Lưu ý:
– Giá trị gán phải phù hợp với kiểu dữ liệu của biến.

10/04/23 Cơ sở lập trình 32


2.4.1 Lệnh gán
• Lệnh gán mở rộng: Áp dụng đối với các phép toán
số học và dịch bit
x=x+y ↔ x+=y x=x-y ↔ x-=y
• Phép tăng giảm giá trị đi 1
i=i-1 ↔ i--; --i
i=i+1 ↔ i++; ++i
• Sự khác nhau:
• Ví dụ:
a=5; b=a++;
a=5; b=++a;
10/04/23 Cơ sở lập trình 33
2.4.2 Lệnh vào ra dữ liệu
• Hàm vào ra chuẩn: printf/scanf
• Hàm nhập một kí tự: getch, getche
• Hàm nhập một xâu: gets
• Hàm in một kí tự: putch
• Hàm in một xâu kí tự: puts
• Thư viện: stdio.h, conio.h

10/04/23 Cơ sở lập trình 34


Hàm printf
• Chức năng:
• Cú pháp: int printf(const*format, [para_values]);
• Trong đó:
– Format: là một hằng xâu kí tự hoặc có cả các định dạng để in
ra các kiểu dữ liệu khác nhau của các giá trị trong
para_values.
– para_values là danh sách các giá trị cần in, nó có thể là giá trị
của hằng, giá trị của biến, hoặc là giá trị trả về của hàm thông
qua một lời gọi hàm v.v.
Lưu ý: Các giá trị được in cách nhau bởi toán tử dấu phẩy , và có
thể có nhiều hơn các đặc tả kí tự định kiểu  các giá trị cuối
cùng thừa ra sẽ bị bỏ qua.

10/04/23 Cơ sở lập trình 35


Hàm printf
• Định dạng để in theo quy cách:
%[-][n][.m]<ki_tu_dinh_kieu>
• Trong đó:
– n, m là các số nguyên dương qui định: n là độ dài phần thông
tin in ra, m là số chữ số cho phần thập phân
– [-]: căn trái hay phải . Khi giá trị được in ra màn hình, nếu độ
rộng thực sự nhỏ hơn độ rộng xác định bởi n, thì ngầm định là
căn phải. Có dấu – là căn trái
– ki_tu_dinh_kieu là các kí tự qui định kiểu dữ liệu sẽ được in ra.

10/04/23 Cơ sở lập trình 36


Bảng kí tự định kiểu
Kí tự định kiểu Kiểu dữ liệu
c kiểu kí tự char, có thể dùng cho kiểu short và int
d Kiểu nguyên int, có thể dùng cho kiểu char
u Kiểu số nguyên không dấu (unsigned char, unsigned short)
ld Long
lu unsigned long
X, x Kiểu số nguyên viết dưới dạng số hexa (cơ số 16)
o Kiểu số nguyên viết dưới dạng số octal ( cơ số 8)
lo unsigned int ( cơ số 8)
i long, int (cơ số 10, 8,16)
f Kiểu số thực với phần thập phân có 6 chữ số, float, double
E, e Kiểu số thực dưới dạng kí pháp khoa học
G, g Kiểu số thực không chứa các số 0 vô nghĩa
s Xâu ký tự
10/04/23 Cơ sở lập trình 37
Các kí tự điều khiển
Chú ý: Kí tự điều khiển là kí tự đặc biệt, bắt đầu bằng kí tự \ tiếp
theo là một kí tự dùng để điều khiển và sẽ không hiện ra màn
hình.

Kí hiệu Ý nghĩa
\n Ký tự xuống dòng
\t Ký tự nhảy tab
\b Ký tự xóa trái
\a Tiếng kêu bíp

10/04/23 Cơ sở lập trình 38


Hàm printf
• Ví dụ:
Const float pi=3.14;
int x=6;
int y;
y=x*pi*pi;
printf(“gia tri cua x la:”);
printf(“%d”,x);
printf(“gia tri cua x là:%d\n”,x);
printf(“gia tri cua x=%5d, cua y=%8.3f ”,x,y);
printf(“Day la vi du ham printf co xoa ki tu trai:\b\b ”);
10/04/23 Cơ sở lập trình 39
Hàm scanf
 Chức năng: Nhập (Đọc) dữ liệu từ bàn phím theo khuôn dạng cho
biến
 Cú pháp: int scanf(const char*format, pointer_list);
 Trong đó:
format: là xâu có dạng %[*][n]<kí_tự_định_kiểu>.
 Khi xâu có xuất hiện dấu * trước kí tự định kiểu thì trình biên dịch
sẽ bỏ qua thành phần dữ liệu được xác định bởi đặc tả này.
 Số nguyên n qui định số kí tự tối đa được nhập vào cho một thành
phần tương ứng trong poiter_list.
 Kí tự định kiểu cũng tương tự như trong hàm printf, tuy nhiên với
hàm printf có thể dùng một quy cách cho nhiều loại số nguyên còn
với hàm scanf mỗi loại số nguyên có một kí tự định dạng riêng.

10/04/23 Cơ sở lập trình 40


Kí tự định kiểu
Kí tự định kiểu Kiểu dữ liệu
c kiểu kí tự char
d Kiểu nguyên int
u unsigned int
hd short int
Ld long int
lu unsigned long
x Kiểu số nguyên viết dưới dạng số hexa
o Kiểu số nguyên viết dưới dạng số octal
f float (cả hai kiểu thông thường và khoa học)
lf double
e float (cả hai kiểu)
S Xâu ký tự không có dấu cách
10/04/23 Cơ sở lập trình 41
Hàm scanf
• poiter_list: danh sách các địa chỉ của biến hoặc là các con
trỏ. Đối với các biến thường phải có & trước tên biến, với
con trỏ chỉ cần viết tên con trỏ trong danh sách các tham
số.
• Lưu ý:
– Mỗi một đối số trong pointer_list phải có một định dạng tương
ứng ở xâu format.
– Khi đọc một số, máy sẽ nhảy qua các kí tự là dấu chấm câu
(enter, dấu cách, dấu tab,…) cho đến khi gặp kí tự là chữ số, sau
đó tiêp tục đọc cho đến khi gặp kí tự không phải là chữ số.
– Khi đọc một xâu ký tự, máy sẽ đọc đúng số ký tự mà ta yêu cầu
nó đọc.

10/04/23 Cơ sở lập trình 42


Hàm scanf – Ví dụ
• Ví dụ 1:
Int a,b;
scanf(“%d%d”,&a,&b); //nhập 5 8
scanf(“%3d%3d”,&a,&b); // nhap 21 4159
• Ví dụ 2:
Int n; char c;
scanf(“%c%d”,&c,&n); //nhập a 12
scanf(“%d%c”,&n,&c); //nhập 12 a

10/04/23 Cơ sở lập trình 43


Hàm - gets
• Chức năng:
• Hoạt động: Hàm đọc 1 xâu kí tự cho đến khi gõ
Enter, sau đó bổ sung mã kết thúc xâu kí tự \0 vào
cuối xâu.
• Ví dụ:
char str[20];
printf(“nhập xâu:”);
gets(str);
scanf(“%s”,str);

10/04/23 Cơ sở lập trình 44


2.4.3 Các lệnh điều khiển rẽ nhánh
• If … else
• Switch … case

10/04/23 Cơ sở lập trình 45


Cấu trúc if … else
• Chức năng: Cấu trúc rẽ nhánh if….else được dùng
trong trường hợp nếu một sự kiện là đúng thì có
các tập lệnh nào đó được thực hiện, ngược lại sự
kiện đó không đúng thì sẽ có một tập lệnh tương
ứng khác xảy ra.

10/04/23 Cơ sở lập trình 46


Cấu trúc if … else
Cú pháp: Sự hoạt động:

if <điều kiện> -Nếu biểu thức điều kiện là


{ // khối lệnh1 } đúng (có giá trị khác 0) thì
else thực hiện khối lệnh 1.
-Nếu biểu thức điều kiện là
{ // khối lệnh 2 }
sai (có giá trị bằng 0) thì
Trong đó: thực hiện khối lệnh 2.
<điều kiện> là một biểu
thức nhận giá trị nguyên
hoặc thực

10/04/23 Cơ sở lập trình 47


Cấu trúc if … else
• Ví dụ: Viết chương trình nhập giá trị của biến x
và tính giá trị của hàm f(x) biết
x*x-1 nếu x≠1
F(x) =
x+1 ngược lại

10/04/23 Cơ sở lập trình 48


Cấu trúc if …else
• Lưu ý:
– Cấu trúc khuyết của if … else
– Cú pháp :
if (biểu thức điều kiện)
{ // khối lệnh }
– Sử dụng cặp dấu { } với câu lệnh đơn và khối lệnh
– Ngôn ngữ C cho phép có nhiều câu lệnh if…else lồng
nhau  nguyên tắc hoạt động của else

10/04/23 Cơ sở lập trình 49


Câu lệnh if
• Ví dụ: Viết chương trình giải phương trình bậc
1/bậc 2.

10/04/23 Cơ sở lập trình 50


Cấu trúc switch … case
• Chức năng: Cấu trúc switch..case cho phép lựa
chọn một nhánh trong nhiều khả năng tuỳ thuộc
vào giá trị của một biểu thức.

10/04/23 Cơ sở lập trình 51


Cấu trúc switch … case
Cú pháp: Trong đó:
switch(bieu_thuc) - bieu_thuc là một biểu thức nhận
{ case n1: giá trị kiểu nguyên
khối lệnh 1; - n1, n2…… nk là các số nguyên,
break; hằng ký tự hoặc biểu thức hằng
case n2: khác nhau từng đôi một.
khối lệnh 2; - default, switch và case là các từ
break; khóa
….. - break là câu lệnh cho phép ra
case nk: khỏi câu lệnh switch và các lệnh
khối lệnh k; lặp for, while, do while và switch
break; mà không cần điều kiện kết thúc
[ default: [khối lệnh mặc định ]] chu trình
}
10/04/23 Cơ sở lập trình 52
Cấu trúc switch … case
• Sự hoạt động:
– Xác định giá trị của biểu thức.
– So sánh giá trị đó với các ni
– Nếu giá trị của biểu thức bằng giá trị của ni nào thì
khối lệnh sau nó được thực hiện và kết thúc câu lệnh
– Nếu giá trị của biểu thức khác với tất cả ni thì:
• Nếu có default thì khối lệnh đứng sau nó được thực hiện
• Nếu không có từ khóa default thì chương trình dịch thoát
khỏi câu lệnh switch.

10/04/23 Cơ sở lập trình 53


Cấu trúc switch … case
• Lưu ý:
– Nếu không có từ khóa break sau mỗi khối lệnh
chương trình sẽ thực hiện khối lệnh rồi đi tiếp xuống
nhánh case tiếp theo.
– Cấu trúc đặc biệt: Có thể có nhiều giá trị case cho
cùng một trường hợp.
– Câu lệnh switch có thể lồng nhau hoặc lồng với các
câu lệnh khác.

10/04/23 Cơ sở lập trình 54


Câu lệnh switch

• Ví dụ 2: viết chương trình nhập vào một tháng


trong năm và in ra mùa của tháng đó.
• Ví dụ 3: viết chương trình nhập một biểu thức đơn
giản a ∆ b với a, b là các số nguyên dương còn ∆ là
một trong các toán tử số học +,-,*,/, %. In ra kết
quả của biểu thức tương ứng với từng toán tử.
Khác với các toán tử này in ra thông báo toán tử
không hợp lệ.

10/04/23 Cơ sở lập trình 55


2.4.4 Các lệnh điều khiển chu trình (lệnh lặp)

• for
• while
• do … while

10/04/23 Cơ sở lập trình 56


b) Cấu trúc lặp:

Có 2 dạng cơ bản.
Dạng thứ nhất: Dạng thứ hai:

i=i1
S
ĐK lặp
i<= i2 S

Đ
Đ
CV lặp CV lặp

i=i+i3
CV tiếp theo

CV tiếp theo
Cấu trúc for
• Chức năng: for là cấu trúc lặp trong đó một khối lệnh sẽ được thực
hiện lặp đi lặp lại với số lần lặp được xác định.
• Cú pháp:
for ([khởi_tạo];[điều_kiện];[thay_đổi])
{ // khối lệnh }
Trong đó:
– khởi_tạo: có thể là biểu thức hoặc khai báo, dùng để khởi tạo giá
trị cho các biến điều khiển của vòng lặp
– điều_kiện: là một biểu thức logic, dùng để quyết định tiếp tục
hay dừng việc thực hiện khối lệnh.
– thay_đổi: thường là một biểu thức gán dùng để thay đổi ( tăng
hoặc giảm ) giá trị của các biến điều khiển.
10/04/23 Cơ sở lập trình 58
Cấu trúc for
• Sự hoạt động:
– Bước 1: Xác định giá trị biểu thức khởi_tạo
– Bước 2: Xác định giá trị của biểu thức điều_kiện.
– Bước 3: Nếu biểu thức điều_kiện có giá trị là sai thì trình biên
dịch sẽ thoát khỏi cấu trúc lặp for. Nếu biểu thức điều_kiện có
giá trị đúng (khác 0) thì khối lệnh sẽ được thực hiện và trình
biên dịch sẽ chuyển sang bước 4.
– Bước 4: Xác định giá trị của biểu thức thay_đổi và quay trở lại
bước 2.

10/04/23 Cơ sở lập trình 59


Cấu trúc for
Nhận xét:
- Biểu thức khởi_tạo chỉ được tính một lần, còn các biểu
thức điều_kiện, thay_đổi và khối lệnh có thể được thực
hiện lặp lại nhiểu lần.
- Do biểu thức điều_kiện được xác định trước khi thực hiện
khối lệnh nên có thể khối lệnh không bao giờ được thực
hiện.

10/04/23 Cơ sở lập trình 60


Cấu trúc for
• Ví dụ 1: Viết chương trình nhập vào số nguyên
dương và tính n!
• Ví dụ 2: viết chương trình nhập vào một số
nguyên n. Kiểm tra xem số đó có phải là số
nguyên tố hay không.
• Ví dụ 3: viết chương trình nhập vào một giá
trin nguyên dương n. Tính n! và kiểm tra tính
nguyên tố của n.

10/04/23 Cơ sở lập trình 61


Cấu trúc while
• Chức năng: while là cấu trúc lặp trong đó một khối lệnh
sẽ được thực hiện đi thực hiện lại khi điều kiện lặp vẫn
còn thỏa mãn.
• Cú pháp:
while(điều_kiện)
{ // khối lệnh }
Trong đó:
– điều_kiện là là một biểu thức nhận giá trị nguyên hoặc thực
– while là từ khóa

10/04/23 Cơ sở lập trình 62


Cấu trúc while
• Sự hoạt động:
– Bước 1: Tính giá trị của biểu thức điều_kiện
– Bước 2: Nếu biểu thức điều_kiện có giá trị sai
( bằng 0 ) thì trình biên dịch sẽ thoát khỏi cấu trúc
while. Nếu biểu thức điều kiện có giá trị đúng
( khác 0 ) thì khối lệnh sẽ được thực hiện và quay
trở lại bước 1.
Nhận xét:
- Khối lệnh của while có thể không được thực hiện
lần nào nếu biểu thức điều_kiện ngay từ đầu đã
sai

10/04/23 Cơ sở lập trình 63


Cấu trúc do … while
• Chức năng: do … while là cấu trúc lặp trong đó một khối
lệnh sẽ được thực hiện đi thực hiện lại khi điều kiện lặp
vẫn còn thỏa mãn.
• Cú pháp:
do
{ // khối lệnh }
while(dieu_kien);
Trong đó:
– do và while là hai từ khóa
– dieu_kien là biểu thức điều kiện nhận giá trị nguyên hoặc thực

10/04/23 Cơ sở lập trình 64


Cấu trúc do … while
• Sự hoạt động:
– Bước 1: Thực hiện khối lệnh
– Bước 2: Xác định giá trị của biểu thức
– Bước 3: Nếu biểu thức có giá trị đúng ( khác 0) thì trình biên
dịch sẽ quay lại bước 2. Nếu biểu thức có giá trị sai (bằng 0) thì
trình biên dịch sẽ thoát khỏi cấu trúc lặp do while.
• So sánh với cấu trúc while:
– Khối lệnh sẽ được thực hiện trước khi xác định giá trị của biểu
thức, vì vậy khối lệnh luôn được thực hiện ít nhất là một lần.

10/04/23 Cơ sở lập trình 65


Cấu trúc do … while
• Chú ý: giống như cấu trúc while

10/04/23 Cơ sở lập trình 66


Cấu trúc while
• Ví dụ 1: Tính tổng các số nhập vào từ bàn
phím khi tổng còn <100.
• Ví dụ 2: Xây dựng chương trình thể hiện thuật
toán Euclid để tìm UCLN của 2 số nguyên a và
b.
• Ví dụ 3: Viết chương trình nhập vào số nguyên
dương và tính n!

10/04/23 Cơ sở lập trình 67


Cấu trúc do … while
• Ví dụ 1:viết chương trình đọc một số cho đến khi số
đó là số dương.
• Ví dụ2: Viết chương trình cho phép người dùng nhập
một kí tự từ bàn phím in ra mã của kí tự cho đến khi
người dùng nhập phím Enter để thoát.
• Ví dụ 2: Viết chương trình nhập vào số nguyên
dương và tính n!

10/04/23 Cơ sở lập trình 68

You might also like