1. Bài tập tìm ngày kế tiếp của một ngày trong C
Bài tập cơ bản này ta có thể có hướng giải quyết là sử dụng cấu trúc switch case trong ngôn ngữ lập trình C.
Đầu vào sẽ là một ngày(ngay, thang, nam), yêu cầu của bài toán là tìm ngày kế tiếp của ngày đó trong C.
2. Lời giải
Để giải được bài tập tìm ngày kế tiếp của một ngày trong C bạn phải có kiến thức về toán học cơ bản, có kiến thức về nhập xuất cơ bản và cách sử dụng cấu trúc switch case trong lập trình C cơ bản.
Các bước thực hiện bài toán như sau:
Bước 1: Khai báo biến int Thang, Nam, Ngay đùng để gán giá trị của tháng, năm và ngày; khai báo biến int NgayCuaThang được dùng để gán giá trị số ngày của tháng.
Bước 2: Nhập dữ liệu cho Thang và Nam; nếu Nam < 0 yêu càu nhập lại Nam; nếu Thang < 1 || Thang > 12 yêu cầu nhập lại Thang.
Bước 3: Sử dụng switch truyền vào biến Thang với các case 1, 3, 5, 7, 8, 10, 12 thì gán NgayCuaThang = 31; các case 4, 6, 9 , 11 sẽ có NgayCuaThang = 30; case 2 ta sử dụng điều kiện if nếu Nam % 4 = 0 && Nam % 100 != 0) || Nam % 400 = 0 thỏa mãn thì có NgayCuaThang = 29 còn ngược lại có NgayCuaThang = 28.
Bước 4: Nhập dữ liệu của Ngay với điều kiện nếu Ngay < 1 || Ngay > NgayCuaThang yêu cầu nhập lại.
Bước 5: Sử dụng if với điều kiện Ngay < NgayTrongThang (ngày vẫn nằm trong tháng) nếu thoản mãn Ngay tăng lên 1; ngược lại sử dụng if với điều kiện Thang < 12 (ngày là ngày cuối cùng của tháng và vẫn trong cùng 1 năm) nếu thoản mãn Ngay = 1 (ngày đầu tháng) , Thang tăng lên 1; Ngược lại ngày là ngày cuối cùng của năm thì Ngay=Thang = 1 , Nam tăng lên 1.
Bước 6: in kết quả Ngay, Thang, Nam ra màn hình.
Chương trình giải bài tập tìm ngày kế tiếp của một ngày trong C như sau :
#include<stdio.h> int main() { // khai bao bien Thang, Nam, Ngay int Thang, Nam, Ngay; // khai bao bien NgayTrongThang int NgayTrongThang; // Nhap du lieu cua Nam do { printf("\nNhap vao nam: "); scanf("%d", &Nam); if(Nam < 0 ) { printf("\nDu lieu nam khong hop le. Xin kiem tra lai!"); } }while(Nam < 0);//neu Nam < 0 yeu cau nhap lai // Nhap du lieu cua Thang do { printf("\nNhap vao thang: "); scanf("%d", &Thang); if (Thang < 1 || Thang > 12)// 1 nam co 12 thang printf("\nDu lieu thang khong hop le. Xin kiem tra lai!"); }while(Thang < 1 || Thang > 12); switch(Thang) { // thang 1, 3, 5, 6, 8, 10 , 12 có 31 ngay case 1: case 3: case 5: case 7: case 8: case 10: case 12: NgayTrongThang=31; break; // thang 4, 6, 9, 11 co 30 ngay case 4: case 6: case 9 : case 11: NgayTrongThang=30; break; // thang 2 có 28 ngay neu nam nhuan co 29 ngay case 2: if((Nam % 4 == 0 && Nam % 100 != 0) || (Nam % 400 == 0))//kiem tra nam nhuan { NgayTrongThang=29; } else { NgayTrongThang=28; } } // Nhap vao ngay do { printf("\nNhap vao ngay: "); scanf("%d",&Ngay); if(Ngay < 1 || Ngay > NgayTrongThang)//neu Ngay < 1 hoac Ngay > NgayTrongThang nhap lai { printf("\nDu lieu ngay khong hop le. Xin kiem tra lai!"); } }while(Ngay < 1 || Ngay > NgayTrongThang); if (Ngay < NgayTrongThang)// tang ngay len 1 { Ngay++; } else if (Thang < 12)// Ngay hien tai la cuoi thang { Ngay = 1; Thang++; } else// ngay hien tai la ngay cuoi thang 12 { Ngay = Thang = 1; Nam++; } printf("\nNgay ke tiep la: %d - %d - %d ", Ngay, Thang, Nam); }
Ví dụ tôi nhập Nam=2016, Thang = 2, Ngay = 29
Kết quả:
Nhap vao nam: 2016
Nhap vao thang: 2 Nhap vao ngay: 29 Ngay ke tiep la: 1 – 3 – 2016 |
3. Tổng kết