BÀI TẬP TỔNG HỢP CUỐI KHÓA ttBài 1: Tính tiền lương ngày cho công nhân, cho biết trước giờ vào ca, giờ ra ca... BÀI TẬP TỔNG HỢP CUỐI KHÓA ttBài 3: Nhập vào một số nguyên, đếm và in ra t
Trang 1LẬP TRÌNH C CHO NGƯỜI MỚI HỌC
Giảng viên: Thạc sĩ Trần Thanh Sơn
Trang 2BÀI TẬP TỔNG HỢP CUỐI KHÓA (tt)
Bài 1: Tính tiền lương ngày cho công nhân, cho biết trước giờ vào ca, giờ ra ca Giả sử rằng
tiền trả cho mỗi giờ trước 12 giờ là 6.000đ và mỗi giờ sau 12 giờ trưa là 7.500đ Giờ vào ca sớm nhất là 6 giờ sáng và giờ ra ca trễ nhất là 18 giờ.
Bảng ví dụ vài trường hợp
2
Giờ vào ca Giờ ra ca Số giờ làm sáng Số giờ làm chiều Tiền lương
7 16 12 - 7 = 5 16 - 12 = 4 5 * 6.000 + 4 * 7.500 = 60.000
Trang 3BÀI TẬP TỔNG HỢP CUỐI KHÓA (tt)
Giải pháp:
B1: Kiểm tra đk: Vào ca min ≤ giờ vào ca ≤ giờ ra ca ≤ Ra ca max ? Đúng => B2, sai => dữ liệu không hợp lệ
B2: Tính số giờ sáng, số giờ chiều, tiền lương.
Nếu giờ ra ca ≤ chuyển ca (12h) thì:
Số giờ chiều = 0;
Số giờ sáng = giờ ra ca – giờ vào ca;
Nếu giờ vào ca ≥ chuyển ca thì:
Số giờ sáng = 0;
Số giờ chiều = giờ ra ca – giờ vào ca;
(giờ vào ca ≤ chuyển ca) && (giờ ra ca ≥ chuyển ca) thì:
Số giờ sáng = chuyển ca – giờ vào ca;
Trang 4BÀI TẬP TỔNG HỢP CUỐI KHÓA (tt)
Bài 2: Tính số tiền lời thu được khi bán m kg hàng hóa (0< m ≤ 100), biết rằng:
• 0 < m ≤ 10 : Tiền lời là 5.000đ/kg
• 10 < m ≤ 20 : Tiền lời là 7.000đ/kg
• 20 < m ≤ 50 : Tiền lời là 9.000đ/kg và thêm 2% tổng số tiền lời
• 50 < m : Tiền lời là 10.000đ/kg và thêm 4% tổng số tiền lời nhưng không
quá 1.000.000 đ
4
Trang 5BÀI TẬP TỔNG HỢP CUỐI KHÓA (tt)
Giải pháp:
• B1: Cho người dùng nhập vào m
• B2: Xét các trường hợp của m để tính tiền lời:
•
0 < m ≤ 10: Tiền lời = 5.000 * m
10 < m ≤ 20: Tiền lời = 7.000 * m
20 < m ≤ 50: Tiền lời = 9.000 * m
Tiền lời = Tiền lợi + Tiền lời * 0,02
50 < m ≤ 100: Tiền lời = 10.000 * m
Tiền lời = Tiền lợi + Tiền lời * 0,04 Tiền lời > 1.000.000 thì Tiền lời = 1.000.000 Trường hợp khác Tiền lời = -1
Trang 6BÀI TẬP TỔNG HỢP CUỐI KHÓA (tt)
Bài 3: Nhập vào một số nguyên, đếm và in ra tất cả các ước số.
Giải pháp:
Định nghĩa: Ước số của một số n là số mà n chia hết.
B1: Khởi tạo biến Đếm = 0;
B2: Lặp lại: Duyệt các số từ 1 đến n, số i nào mà n % i =0 thì
• In i ra màn hình;
• Đếm ++;
B3: In biến đếm ra màn hình
6
Trang 7BÀI TẬP TỔNG HỢP CUỐI KHÓA (tt)
Bài 4: Nhập vào một số nguyên n, kiểm tra có phải là số hoàn chỉnh không?
Giải pháp:
Định nghĩa: số hoàn chỉnh n là số có tổng ước số = tích ước số (không kể số n)
B1: Khởi tạo biến Tổng_ước_số = 0; Tích_ước_số = 1
B2: Lặp lại: Duyệt các số từ 1 đến n-1, số i nào mà n % i =0 thì
• Tổng_ước_số = Tổng_ước_số + i;
• Tích_ước_số = Tích_ước_số * i;
B3:Kiểm tra Tổng_ước_số = Tích_ước_số ? Nếu đúng thì in là số hoàn chỉnh, ngược lại in không phải là số hoàn chỉnh
Trang 8BÀI TẬP TỔNG HỢP CUỐI KHÓA (tt)
Bài 5: Nhập vào một mảng số nguyên n phần tử Đếm số phần tử âm, dương, bằng 0 Cải
tiến xem mảng có sắp thứ tự tăng / giảm không?
Giải pháp:
B1:Nhập n phần tử như đã làm ở các bài trước.
B2: Khởi tạo dem_am = 0; dem_duong = 0, dem_0= 0;
B3:Lặp lại: Duyệt các phần tử a[0] đến a[n-1]
• dem_duong ++; nếu a[i]>0;
• dem_am ++; nếu a[i]<0;
• dem_0 ++ ; nếu a[i]=0;
In ra màn hình dem_duong, dem_am, dem_0.
8
Trang 9BÀI TẬP TỔNG HỢP CUỐI KHÓA (tt)
Phần cải tiến: Kiểm tra mảng có sắp thứ tự tăng/ giảm hay không?
Nhận xét:
• Mảng tăng a[0] ≤ a[1]… ≤ a[n-1], có n-1 phép so sánh “≤”
• Nếu n-1 phép so sánh ≤ này đều đúng => Mảng tăng
• Chỉ cần 1 phép so sánh ≤ sai thì mảng không tăng
Sử dụng biến dem_tang, kiểm tra dem_tang = n-1 không?
Tương tự cho mảng giảm
Trang 10BÀI TẬP TỔNG HỢP CUỐI KHÓA (tt)
Giải pháp:
B1: Khởi tạo dem_tang = 0; dem_giam = 0;
B2: Lặp lại: Duyệt các phần tử a[0] đến a[n-2] (n-1 lần)
• dem_tang ++ nếu a[i] ≤ a[i + 1];
• dem_giảm++ nếu a[i] ≥ a[i + 1];
B3: Kiểm tra các biến : dem_tang, dem_giam
• Nếu dem_tang = n-1 thì in mảng tăng
• Nếu dem_giam = n -1 thì in mảng giảm
• Trường hợp còn lại in mảng không tăng/ không giảm
10