Professional Documents
Culture Documents
Tài Liệu Bổ Trợ - 50 Lỗi Thường Gặp - Thực Hành - THĐC - IT1110 - Ver 3.0
Tài Liệu Bổ Trợ - 50 Lỗi Thường Gặp - Thực Hành - THĐC - IT1110 - Ver 3.0
Tài Liệu Bổ Trợ - 50 Lỗi Thường Gặp - Thực Hành - THĐC - IT1110 - Ver 3.0
Nhó m GVHD và TA
Viện Cô ng nghệ Thô ng tin và Truyền thô ng
Đạ i họ c Bá ch Khoa Hà Nộ i
Giới thiệu chung
Mả ng #33 - #47 39 - 53
Xâ u ký tự
Nộ p bà i trên hệ thố ng CodeForces #48 - #50 55 - 57
Biến hằ ng số Chỉ sử dụ ng
(constant) constant vớ i cá c
khô ng đượ c biến cố định,
phép thay khô ng thay đổ i
đổ i. trong suố t quá
trình thự c thi
code.
Vớ i cá c biến có
thay đổ i giá trị,
khô ng đượ c sử
dụ ng kiểu biến
constant.
Lỗ i xảy ra khi
thự c hiện kiểm Thay toá n tử ‘=’
tra a = b hay bằ ng toá n tử
khô ng. Tuy ‘==’ để kiểm tra
nhiên trong ví giá trị 2 biến a
dụ này thì b=4 và b có bằ ng
và giá trị trả về nhau hay khô ng.
củ a phép gá n sẽ
là 4 (khá c 0) nên
chương trình sẽ
rẽ và o nhá nh
if(a=b) rồ i in ra
'true’.
Đây là lỗ i sai về ép
Nhậ p và o 2 số nguyên x và y. Xuấ t ra trung bình cộ ng
kiểu dữ liệu. Do x và Thự c hiện ép
củ a 2 số đó .
y là số nguyên, nên kiểu lạ i phép
x+y cũ ng là số chia sao cho
nguyên. Mẫ u số tử số hoặ c
cũ ng là 1 số nguyên, mẫ u số là số
nên kết quả củ a thự c:
(x+y)/2 sẽ là số (float)(x+y)/2
nguyên, sau đó giá hoặ c
trị nguyên này mớ i (x+y)/2.0
đượ c gá n và o biến
thự c float f và xuấ t
ra mà n hình.
Lỗ i logic
Sử dụ ng sai Sử a lạ i đú ng cấ u trú c:
cú phá p củ a <điều kiện> ?
lệnh viết tắ t <Đú ng> : <Sai>
if else Vớ i bà i này cầ n sử a
thà nh:
var>10?”True”:”False”
Bài toán: Nhập vào số thực x, xuất kết quả ra mà hình giá trị
hàm số sau: Đây là lỗ i sai về Sử a lạ i điều
logic. kiện là :
Điều kiện trong -1<=x && x<=1
lệnh if chưa chính
xá c, giả sử vớ i đầ u
và o là -3 thì:
-1 <= -3 Sai = 0
0 <= 1 Đú ng.
Do đó , biểu thứ c
trong lệnh if sẽ
đượ c thự c hiện vớ i
đầ u và o này.
Bài toán: Nhập vào số nguyên n, xuất ra màn hình chữ số lớn
nhất của số đó. Chương trình lặ p vô Bổ sung cặ p
hạ n, thiếu cặ p { } bao bọ c
{…} cho cá c lệnh cá c dò ng lệnh
bên trong vò ng lặ p 7, 8 và 9.
while.
Nếu khô ng có {…} thì
chương trình sẽ chỉ
xét dò ng đầ u tiên
ngay bên dướ i while
là thuộ c vò ng lặ p,
cá c dò ng dướ i nữ a là
ngoà i vò ng lặ p.
Yêu cầu: Nhập vào số nguyên dương n (sử dụng do-while để kiểm
tra). In ra màn hình các số nguyên dương nhỏ hơn n.
Yêu cầu: Nhập vào số nguyên n khác 0 (sử dụng do-while để kiểm
tra). In ra màn hình n. Đây là lỗ i thiếu Bổ sung thêm
dấ u “(“ trướ c “!”. “(“ và “)”
Lưu ý cú phá p do- đú ng vị trí để
while: sử a lỗ i.
do
{
Câ u lệnh;
}
while (biểu thứ c
điều kiện);
Yêu cầu: Nhập vào số nguyên dương n < 20 (sử dụng do-while
để kiểm tra). In ra màn hình n.
Đây là lỗ i sai về Vớ i đề bà i n <
logic. Lưu ý vớ i do- 20 thì cầ n viết
while: lệnh trong lạ i lệnh trong
do sẽ tiếp tụ c thự c while như thế
hiện khi điều kiện nà o.
trong while là
đú ng. Như vậy, câ u
lệnh trong while
phả i kiểm tra số
nhậ p và o có nằ m
ngoà i khoả ng giá
trị yêu cầ u hay
khô ng.
Đây là lỗ i về khở i tạ o
giá trị cho mả ng vượ t Khai bá o
quá số phầ n tử khai x[6], hoặ c
bá o. Tuy mả ng x khai lớ n hơn
bá o có 5 phầ n tử , hoặ c sử
nhưng lưu ý chuỗ i sẽ dụ ng khai
luô n kết thú c vớ i ký bá o sau:
tự ‘\0’ cuố i cù ng. Vớ i char x[]
ví dụ minh họ a thì
chuỗ i sẽ là
“12345\0”, nhưng ký
tự ‘\0’ sẽ khô ng hiển
thị ra mặ c dù nó vẫ n
chiếm 1 phầ n tử .
Mả ng khai bá o Khai bá o lạ i mả ng
vớ i kích thướ c mớ i hoặ c Kiểm
8 phầ n tử nhưng soá t số lượ ng
sử dụ ng vượ t phầ n tử mả ng khi
quá số phầ n tử viết code
ban đầ u khiến 1
số vù ng nhớ
khá c bị ghi đè
Đây là lỗ i hay Mộ t cá ch xử
gặ p. trong C lý hay đượ c
khô ng thể so dù ng là sử
sá nh 2 mả ng dụ ng vò ng
bằ ng cá ch so lặ p duyệt
sá nh tên mả ng, từ ng phầ n tử
Vì tên mả ng chỉ trong 2
chứ a địa chỉ củ a mả ng rồ i so
phẩ n tử đầ u sá nh chú ng
tiên trong vớ i nhau.
mả ng.
So sá nh 2 xâ u vớ i Khi so sá nh 2
nhau. Lỗ i xảy ra khi xâ u sử dụ ng
sử dụ ng ==. Mặ c dù hà m strcmp()
chương trình có thể để so sá nh
compile đượ c nhưng
chương trình sẽ in
sai kết quả . Cụ thể ở
đây, mong muố n in
ra Yes nhưng ở
chương trình lạ i in
ra No.
Lý do lỗ i: chương
trình đang so sá nh 2
địa chỉ củ a 2 mả ng
str1 và str2
Nhậ p xâ u sử dụ ng Sử dụ ng hà m
scanf. Khi in ra mà n gets(). Tuy
hình chỉ nhậ n mộ t nhiên hà m
phầ n xâ u nhậ p và o. gets() này đã
Cụ thể là phầ n xâ u bị xó a trong
trướ c dấ u Space phiên bả n C11.
(“tin”) thay vì toà n Gợ i ý sử dụ ng
bộ xâ u (“tin hoc dai hà m fgets()
cuong hoc ky thay thế.
20192”).
Lý do lỗ i: hà m
scanf() sẽ dừ ng
tổ ng hợ p ký tự khi
gặ p dấ u xuố ng dò ng,
dấ u cá ch.
Xâ u s khô ng Xó a bộ đệm
đượ c nhậ p và o. trướ c khi nhậ p
Do hà m scanf xâ u. Sử dụ ng
kết thú c bằ ng kí lệnh fflush().
tự \n, kí tự này
đượ c lưu trong Thêm lệnh
bộ đệm. Lệnh fflush(stdin)
fgets() khi chạy trướ c lệnh
sẽ nhậ n kí tự fgets()
này từ bộ đệm
và kết thú c
nhậ p.
Lỗ i do sử Sử a lạ i cá ch
dụ ng sai ‘ ‘ biểu diễn
và “ ”. Lưu ý chuỗ i.
‘ ‘ dù ng cho
ký tự cò n “ “
dù ng cho
chuỗ i.
Nhậ p xâ u Xem lạ i dò ng
sử dụ ng 9, sử a %c
%c, biến sẽ thà nh %s
chỉ lưu trữ (dù ng để đọ c
1 kí tự đầ u và o chuỗ i kí
tiên đượ c tự khô ng có
nhậ p và o khoả ng
trắ ng)
Lỗi limit khi submit trên hệ thống codeforces: Lỗ i bá o time limit ở test 1. Vớ i lỗ i do dù ng hà m
Vớ i lỗ i này, thườ ng do sinh getch(). Xoá bỏ lệnh
viên sử dụ ng cá c lệnh là m này và thư viện
chương trình “đợ i” hoặ c conio.h tương ứ ng.
thuậ t toá n chưa tố i ưu dẫ n Vớ i lỗ i do thuậ t toá n
đến quá thờ i gian chạy. chưa tố i ưu, kiểm tra
Trong ả nh bên là do dù ng lạ i và tố i ưu lạ i thuậ t
hà m getch(). toá n.
Hà m getch() sẽ đợ i 1 input
bấ t kỳ từ bà n phím sau đó
mớ i chạy tiếp, vì thế, khi
đọ c tớ i lệnh này, chương
trình sẽ đứ ng “đợ i” suố t tạ i
dò ng lệnh đó .