Một số chú ý khi làm các bài tập C

Các lỗi logic hoặc điểm không tối ưu thường gặp đối với những người đang trong quá trình làm các bài tập để học ngôn ngữ lập trình C.

1. Bố trí các điều kiện không hợp lý

Với bài 2 này, nhiều người sẽ làm như sau:

if (dtb >= 0 && dtb < 4) ...;
else if (dtb >= 4 && dtb < 5) ...;
else if (dtb >= 5 && dtb < 6.5) ...;
else if (dtb >= 6.5 && dtb < 8) ...;
else if (dtb >= 8 && dtb < 9) ...;

else if (dtb >= 9 && dtb <=10) ...;
else ...;

Cách làm này không sai, tuy nhiên có thể rút gọn lại như sau:

if (dtb >= 0 && dtb < 4) ...;
else if (dtb < 5) ...; //ở đây không cần dtb>=4
else if (dtb < 6.5) ...;
else if (dtb < 8) ...;
else if (dtb < 9) ...;

else if (dtb <=10) ...;
else ...;

Chú ý, trong điều kiện if ở dòng 2 không cần dtb>=4. Kiểu như, ở dòng 1 đã yêu cần các học sinh có dtb đứng dậy thì ở dòng 2 khỏi cần phải kiểm tra những người đang ngồi có ai có dtb>=4 hay không (chắc chắn ai cũng thỏa mãn dtb>=4).

2. Thừa lệnh printf

Cũng với bài 2 này, nhiều người sẽ làm như sau:

if (dtb >= 0 && dtb < 4) printf("Hoc luc cua sinh vien nay la Kem");
else if (dtb < 5) printf("Hoc luc cua sinh vien nay la Yeu");
else if (dtb < 6.5) printf("Hoc luc cua sinh vien nay la Trung binh");
else if (dtb < 8) printf("Hoc luc cua sinh vien nay la Kha");
else if (dtb < 9) printf("Hoc luc cua sinh vien nay la Gioi");
else if (dtb <=10) printf("Hoc luc cua sinh vien nay la Xuat sac");
else printf("Diem nhap vao khong hop le!");

Cách làm này không sai, tuy nhiên nếu muốn sửa lại câu "Hoc luc cua sinh vien nay la ..." thành một câu khác, ví dụ "Sinh vien nay có hoc luc..." thì phải sửa 6 chỗ → có thể rút gọn lại như sau:

if (dtb < 0 || dtb > 10) printf("Diem nhap vao khong hop le!");
else 
{
   printf("Hoc luc cua sinh vien nay la ");
   if (dtb < 4) printf("Kem");
   else if (dtb < 5) printf("Yeu");
   else if (dtb < 6.5) printf("Trung binh");
   else if (dtb < 8) printf("Kha");
   else if (dtb < 9) printf("Gioi");
   else printf("Xuat sac");
}

3. Lệnh scanf cứ đọc dữ liệu đã nhập trước đó

Triệu chứng: như ví dụ phía dưới. Lý do: sau khi đọc xong x=2, trong bộ đệm bàn phím vẫn còn giá trị (4), nên khi gặp lệnh scanf để đọc y thì nó đọc ngay chứ không phải đợi người sử dụng nhập y. Cách xử lý: chỉ đơn giản thêm lệnh fflush(stdin) vào ngay sau lệnh scanf đọc x để xóa bộ đệm bàn phím (nếu còn dữ liệu thừa) rồi mới tiếp tục đọc y.

#include<stdio.h>
#include<conio.h>
void main()
{
	int x,y; 
	printf("Nhap x: "); scanf("%d",&x); //fflush(stdin);
	printf("Nhap y: "); scanf("%d",&y);
	printf("Ban vua nhap: x=%d, y=%d", x, y);
	getch();
}
Nhap x: 3 4
Nhap y:
Ban vua nhap: x=3, y=4

Bình luận (6)

Viết Bình luận
  • ho ten
    ???

    chu y thu nhat neu lam la else if <5... thi se co ca truong hop nho hon 0 vay lam sao co the rut gon nhu the duoc?

     

  • hals
    cấu trúc rẽ nhãnh swich

    Cú phap cấu trúc rẽ nhãnh swich

  • nguyễn thùy
    bài tập về kiểu mảng

    cho mảng A gồm n phần tử thuộc kiểu nguyên(n=<50)viết chương trình con thực hiện các yêu cầu sau:

    a,viết thủ tục nhập giá trị cho mảng A từ bàn phím?

    b,viết phần tử in ra màn hình các thủ tục âm trong mảng A?

  • singsong
    hihe

    he các chú ý rất hay, hướng dẫn ví dụ chi tiết nữa, thanks chủ thớt :D

  • bt
    bt

    bt

  • ngocvq
    Rất hay ;
    Vâng đúng ạ, em thích nhất là chỗ mục 2 ở trên -> cách viết một dòng lệnh mà dùng để in cho nhiều trường hợp.

Viết Bình luận

Họ tên Bắt buộc
Email Bắt buộc
Tiêu đề Bắt buộc
Kiểu bình luận
Nội dung
Nhập mã được hiển thị: