30/09/2018, 20:23
Anh chi coi dung em bài tập này code như vậy được chưa
Một điểm Karaoke tính tiền khách hàng theo công thức sau:
• Mỗi giờ trong 3 giờ đầu tiên tính 30000đ/giờ
• Mỗi giờ tiếp theo có đơn giá giảm 30% so với đơn giá trong 3 giờ đầu tiên
Ngoài ra, nếu thời gian thuê phòng 8 – 17 giờ thì được giảm giá 10%. Viết chương trình nhập vào giờ bắt đầu, giờ kết thúc và in ra số tiền khách phải trả, biết rằng 8 ≤ giờ bắt đầu ≤ giờ kết thúc ≤ 24
và đây là cách làm của em
int a,b,c,d,tien;
do{
printf("ban hay nhap gio bat dau:
");
scanf("%i",&a);
printf("ban hay nhap gio ket thuc:
");
scanf("%i",&b);
}while(a<=8 && b>=24);
c=b-a;
if(a>=17 && b<=24 && c<3)
{
tien=c*30000;
printf("so tien ban phai tra :%i",tien);
}
if(c<=3 && a>=8 && b<=17 )
{
tien=c*30000*90/100;
printf("so tien phai tra :%i",tien);
}
else if(c>3 && a>=8 && b<=24)
{
d=c-3;
tien=(d*30000*70/100*10/100)+(3*30000*10/100);
printf("so tien phai chi tra %i",tien);
}else if(a>=8 && b<=17 &&c<=3)
{
tien=c*30000*90/100;
printf("so tien phai chi tra:%i",tien);
}else if(a>=8 && b<=17 && c>3)
{
tien=(c*30000*60/100);
printf("so tien phai tra tien: %i",tien);
}
Bài liên quan
a, b, c, d
nên đặt tên để dễ kiểm soát. Vd:a
đổi thànhgio_bat_dau
,b
đổi thànhgio_ket_thuc
…Điều kiện nhiều nên có ngoặc để không mất công phải nhớ đến thứ tự thực hiện phép tính và đôi khi tránh hiệu ứng lề (side effect), tóm lại là tránh bug.
(a<=8 && b>=24)
đổi thành((a<=8) && (b>=24))
if
vàelse if
dùng không cẩn thận dẫn đến bug, test thử 1 trường hợp nhậpa=18
vàb=17
đã bị lỗi ngay.Luôn phải có
else
ngay cả khi nó không làm gì cả.…
Nên gán giá trị cho biến tien = 0;
int tien = 0
Không cần phải chia nhiều trường hợp, chỉ cần lồng các trường hợp vào nhau là được. Xét 2 trường hợp
C <=3
vàC > 3
. Sau đó lồng thêm trường hợpa >=8 && b <=17
là được.Chỉ cần tính giá trị của biến
Tien
, sau khi hết các if else thì mới cho printf ra, không cần cứ mỗi trường hợp là phải in lẻ tẻ. VD:em cám ơn betapcode anh co thể giải thích cho em biết hiệu ứng lề và bug là gì không
em cam ơn nhiều trần đại lợi
bug
trong văn nói haydefect
trong văn viết là những lỗi trong code dẫn đến chương trình không thực hiện những việc nó cần thực hiện hoặc thực hiện nhưng cho ra kết quả ngoài mong đợi.Side Effect (hiệu ứng lề) trong trường hợp này mình muốn đề cập là Hidden Side Effect, thường đi với khái niệm Sequence Points (bạn google thêm nhé) để chỉ những hành xử bất qui tắc hoặc vô định của compiler tại các điểm thực thi của chương trình.
Ví dụ với đoạn code:
Nếu bạn in ra giá trị của
i
thì giá trị đó không thể xác định được vì không chắc được compiler sẽ thực hiện gán trước hay ++ trước hay chỉ làm một trong hai.Và như vậy cách viết trên là dẫn đến lỗi, dòng
i=i++
là bug.