Tài liệu bổ trợ 50 lỗi thường gặp thực hành THĐC IT1110

58 109 0
Tài liệu bổ trợ 50 lỗi thường gặp thực hành THĐC IT1110

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

50 LỖI THƯỜNG GẶP TRONG THỰC HÀNH TIN HỌC ĐẠI CƯƠNG - IT1110 Nhóm GVHD TA Viện Cơng nghệ Thông tin Truyền thông Đại học Bách Khoa Hà Nội Giới thiệu chung •Tài liệu bổ trợ Thầy Cô giáo hướng dẫn thực hành đội ngũ Trợ giảng (TA) xây dựng •Tài liệu gồm 50 lỗi (đánh số #1-#50) thường gặp liên quan đến lập trình C lỗi nộp lên hệ thống CodeForces •Tài liệu giúp tăng tính chủ động cho sinh viên trình tự học thực hành học phần IT1110 ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang Danh sách lỗi Nội dung # Lỗi Trang Kiểu liệu biểu thức C Vào liệu C #1 - #13 – 17 Cấu trúc điều khiển C #14 - #32 19 - 37 Mảng Xâu ký tự #33 - #47 39 - 53 Nộp hệ thống CodeForces #48 - #50 55 - 57 ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang Kiểu liệu biểu thức C Vào – Ra liệu C ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang #1 Lỗi xuất Giải thích lỗi Cách xử lý Lỗi xảy thực phép cộng vượt phạm vi kiểu liệu (char) dẫn đến tràn số, tương tự cho kiểu liệu khác (chú ý với phép cộng nhân số lớn gây tràn số ) Khai báo biến có kiểu liệu có kích thước lớn kiểu liệu chẳng hạn int, ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang #2 Lỗi xuất Giải thích lỗi Biến số (constant) không phép thay đổi ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Cách xử lý Chỉ sử dụng constant với biến cố định, khơng thay đổi suốt q trình thực thi code Với biến có thay đổi giá trị, không sử dụng kiểu biến constant Trang #3 Lỗi xuất Giải thích lỗi Lỗi xảy thực kiểm tra a = b hay không Tuy nhiên ví dụ b=4 giá trị trả phép gán (khác 0) nên chương trình rẽ vào nhánh if(a=b) in 'true’ ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Cách xử lý Thay toán tử ‘=’ toán tử ‘==’ để kiểm tra giá trị biến a b có hay khơng Trang #4 Lỗi xuất Nhập vào số thực x, xuất kết x+1 Giải thích lỗi Cách xử lý Tốn tử x++ có nghĩa thực cụm lệnh chứa x trước, sau tăng giá trị x lên đơn vị Ngược lại ++x có nghĩa tăng x lên trước sau thực lệnh Sửa lại x++ thành ++x bổ sung lệnh tăng x lên đơn vị sau xuất x hình ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang #5 Lỗi xuất Nhập vào số nguyên x y Xuất trung bình cộng số Giải thích lỗi Đây lỗi sai ép kiểu liệu Do x y số nguyên, nên x+y số nguyên Mẫu số số nguyên, nên kết (x+y)/2 số nguyên, sau giá trị nguyên gán vào biến thực float f xuất hình ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Cách xử lý Thực ép kiểu lại phép chia cho tử số mẫu số số thực: (float)(x+y)/2 (x+y)/2.0 Trang #6 Lỗi xuất Nhập vào 02 số thực, xuất tổng 02 số thực với độ xác chữ số sau dấu phẩy Giải thích lỗi Cách xử lý Chương tình có lỗi Cú pháp khai báo cú pháp khai báo thư viện là: thư viện #include Ngoài chương trình yêu cầu in đầu với độ xác chữ số kết sai (%f mặc định đưa chữ số sau dấu phẩy) ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Nếu chương trình yêu cầu đưa độ xác x chữ số cần chuyển định dạng %.xf (tuân theo quy tắc làm tròn Ở cần sửa lại thành %.4f) Trang 10 #38 Lỗi xuất Giải thích lỗi Cách xử lý Mặc dù khai báo mảng array với kích cỡ phần tử, sử dụng array[5], array[6]… không báo lỗi Do địa array[5], array[6]… tồn tiếp nối sau array[4], chứa giá trị “rác” Chú ý khai báo kích cỡ mảng Chú ý mục index sử dụng phần tử mảng ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 44 #39 Lỗi xuất Giải thích lỗi Cách xử lý Bài toán thêm phần tử vào mảng thường bị lỗi vượt q kích cỡ mảng Như ví dụ mảng bị tràn nên giá trị Khai báo mảng với kích cỡ lớn Hoặc kiểm tra mảng đầy chưa, lần thêm phần tử phải nới rộng kích cỡ mảng ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 45 #40 Lỗi xuất Giải thích lỗi Cách xử lý Mảng nhiều chiều - mảng hai chiều Khai báo ma trận hàng cột in ma trận lại hàng cột Ma trận in bị số giá trị lại có thêm số giá trị lạ (Lệnh in ma trận bị nhầm: i chạy từ đến n j chạy từ đến m) Chú ý lập trình khơng để nhầm lẫn kích cỡ chiều mảng ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 46 #41 Lỗi xuất Giải thích lỗi Cách xử lý So sánh xâu với Lỗi xảy sử dụng == Mặc dù chương trình compile chương trình in sai kết Cụ thể đây, mong muốn in Yes chương trình lại in No Lý lỗi: chương trình so sánh địa mảng str1 str2 Khi so sánh xâu sử dụng hàm strcmp() để so sánh ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 47 #42 Lỗi xuất Giải thích lỗi Cách xử lý Nhập xâu sử dụng scanf Khi in hình nhận phần xâu nhập vào Cụ thể phần xâu trước dấu Space (“tin”) thay tồn xâu (“tin hoc dai cuong hoc ky 20192”) Lý lỗi: hàm scanf() dừng tổng hợp ký tự gặp dấu xuống dòng, dấu cách Sử dụng hàm gets() Tuy nhiên hàm gets() bị xóa phiên C11 Gợi ý sử dụng hàm fgets() thay ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 48 #43 Lỗi xuất Giải thích lỗi Cách xử lý Xâu s không nhập vào Do hàm scanf kết thúc kí tự \n, kí tự lưu đệm Lệnh fgets() chạy nhận kí tự từ đệm kết thúc nhập Xóa đệm trước nhập xâu Sử dụng lệnh fflush() ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Thêm lệnh fflush(stdin) trước lệnh fgets() Trang 49 #44 Lỗi xuất Giải thích lỗi Sai thứ tự tham số sử dụng hàm strcpy() ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Cách xử lý Kiểm tra lại thứ tự chuỗi nguồn, chuỗi đích sử dụng hàm strcpy() Trang 50 #45 Lỗi xuất Giải thích lỗi Cách xử lý Lỗi sử Sửa lại cách dụng sai ‘ ‘ biểu diễn “ ” Lưu ý chuỗi ‘ ‘ dùng cho ký tự “ “ dùng cho chuỗi ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 51 #46 Lỗi xuất Giải thích lỗi Lỗi names mảng nhiều chuỗi nên dùng printf với %s in chuỗi mảng thay tất chuỗi mảng ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Cách xử lý Tìm hiểu thêm phương pháp in danh sách chuỗi (gợi ý dùng vòng for) Trang 52 #47 Lỗi xuất Giải thích lỗi Cách xử lý Nhập xâu sử dụng %c, biến lưu trữ kí tự nhập vào Xem lại dòng 9, sửa %c thành %s (dùng để đọc vào chuỗi kí tự khơng có khoảng trắng) ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 53 Nộp lên hệ thống CodeForces ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 54 #48 Lỗi xuất Giải thích lỗi Cách xử lý Lỗi limit submit hệ thống codeforces: Lỗi báo time limit test Với lỗi này, thường sinh viên sử dụng lệnh làm chương trình “đợi” thuật toán chưa tối ưu dẫn đến thời gian chạy Trong ảnh bên dùng hàm getch() Hàm getch() đợi input từ bàn phím sau chạy tiếp, thế, đọc tới lệnh này, chương trình đứng “đợi” suốt dòng lệnh Với lỗi dùng hàm getch() Xoá bỏ lệnh thư viện conio.h tương ứng Với lỗi thuật toán chưa tối ưu, kiểm tra lại tối ưu lại thuật tốn ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 55 #49 Lỗi xuất Giải thích lỗi Cách xử lý Biên dịch lỗi submit lên CodeForces thường lỗi cú pháp (thiếu ngoặc, chấm phẩy…) Kiểm tra lại xem lỗi cú pháp code Với lỗi cú pháp, sinh viên chạy lại code Dev C++, trình biên dịch Dev C++ báo vị trí lỗi Lỗi xảy ra: ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 56 #50 Lỗi xuất Giải thích lỗi Cách xử lý Lệnh fflush(stdin) xố nhớ đệm stdin codeforces Vì thế, chương trình chạy output sai submit CodeForces Trên máy tính, input nhập vào tuần tự, fflush xoá nhớ tạm ký tự nhập trước đó, ký tự sau tiếp tục nhập bình thường Còn Codeforces, input stdin tạo sẵn, lệnh xoá bỏ nhớ đệm input làm cho chương trình chạy sai không ý muốn Không sử dụng lệnh fflush(stdin) phải submit lên Codeforces Tìm hiểu phương pháp khác để nhận liệu từ stdin cho Sinh viên thử kiểm nghiệm code với chức custom invocation CodeForces ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang 57 ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 ... Tài liệu bổ trợ Thầy Cô giáo hướng dẫn thực hành đội ngũ Trợ giảng (TA) xây dựng Tài liệu gồm 50 lỗi (đánh số #1- #50) thường gặp liên quan đến lập trình C lỗi nộp lên hệ thống CodeForces Tài. .. CodeForces Tài liệu giúp tăng tính chủ động cho sinh viên trình tự học thực hành học phần IT1110 ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang Danh sách lỗi Nội dung # Lỗi Trang Kiểu liệu biểu... 3.0 Trang Kiểu liệu biểu thức C Vào – Ra liệu C ©2020 - HUST- SoICT- IT1110 - Debug - Ver 3.0 Trang #1 Lỗi xuất Giải thích lỗi Cách xử lý Lỗi xảy thực phép cộng vượt phạm vi kiểu liệu (char) dẫn

Ngày đăng: 14/05/2020, 22:45

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan