1. Bài tập tìm ngày trước đó 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 trước đó của ngày đó trong C.
2. Lời giải
Để giải được bài tập tìm ngày trước đó 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=1 thì Ngay = NgayTrongThang sử dụng if neu Thang = 1 thỏa mãn thì Thang = 12, Nam–(Ngày 1 tháng 1) ngược lại Thang giam 1 (ngày đầu của 1 tháng); ngược lại Ngay giảm 1(ngày trong 1 tháng).
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 trước đó 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 == 1)//Neu Ngay nhap là 1 { Ngay = NgayTrongThang;// Ngay truoc do la ngay trong thang truoc if(Thang == 1)//Thang 1 ngay 1 { Thang = 12; Nam--; } else//Thang khac 1 Thang--; } else{//Ngay khac 1 Ngay--; } printf("\nNgay truoc do la: %d - %d - %d ", Ngay, Thang, Nam); }
Ví dụ tôi nhập Ngay=26, Thang=2,Nam=2002
Kết quả:
Nhap vao nam: 2002
Nhap vao thang: 2 Nhap vao ngay: 26 Ngay truoc do la: 25 – 2 – 2002 |