C语言判断某年某月某日,判断这一天是这一年的第几天

    xiaoxiao2023-11-17  145

    傻瓜式的各种函数调用 划水向

    整段代码主要思路 数据测试主函数思路code 函数1 输入月份并判断是否正确思路code 函数2 根据月份选择该月份之前的天数总和思路code 函数3 判断闰年思路code 函数4 输入日期思路code 函数5 判断日期是否正确思路code

    整段代码

    (代码很长……下面有分段的~)

    主要思路

    将年份、月份和日期分开输入判断月份和日期的输入直到正确计算天数:该月之前的天数加上这个月的日期,若为闰年再+1(如2000年3月14日就是:31+28=59,59+14=73,73+1=74)输出结果 #include<stdio.h> int fun1(); int fun2(int l); int fun3(int y); int fun4(int y2,int m2); int fun5(int y3,int m3,int d3); int main() { int year,month,day,sum1; printf("请输入需要判断的日期:\n"); printf("年份:\n"); scanf("%d",&year); month=fun1(); day=fun4(year,month); sum1=fun2(month); if(fun3(year)) { if(month>=3) sum1=sum1+1; } printf("%d年%d月%d日是这一年的第%d天。\n",year,month,day,sum1+day); return 0; } int fun1() //判断月份直到正确函数;fun1 { int n; do { printf("月份:\n"); scanf("%d",&n); if(n<1||n>12) printf("请输入正确的月份!\n"); }while(n<1||n>12); return n; } int fun2(int l) //得出sum的函数;fun2 { int sum; switch(l) //判断并计算这个月之前的天数; { case 1:sum=0;break; case 2:sum=31;break; case 3:sum=59;break; //31+28 case 4:sum=90;break; //59+31 case 5:sum=120;break; //90+30 case 6:sum=151;break; //120+31 case 7:sum=181;break; //151+30 case 8:sum=212;break; //181+31 case 9:sum=243;break; //212+31 case 10:sum=273;break; //243+30 case 11:sum=304;break; //273+31 case 12:sum=334;break; //304+30 default:break; } return sum; } int fun3(int y) //判断闰年的函数;fun3 { int flag=0; if(y%400==0||(y%100!=0&&y%4==0)) flag=1; return flag; } int fun4(int y2,int m2) //判断日期直到正确函数;fun4 { int d2; do { printf("日期:\n"); scanf("%d",&d2); if(fun5(y2,m2,d2)) printf("请输入正确的日期!\n"); }while(fun5(y2,m2,d2)); return d2; } int fun5(int y3,int m3,int d3) //判断日期函数;fun5 { int flag1=0,flag2; flag2=fun3(y3); if(m3==1||m3==3||m3==5||m3==7||m3==8||m3==10||m3==12) //1、3、5、7、8、10、12月; { if(d3<1||d3>31) flag1=1; } if(m3==4||m3==6||m3==9||m3==11) //4、6、9、11月; { if(d3<1||d3>30) flag1=1; } if(m3==2) //2月; { if(d3<1||d3>28+flag2) flag1=1; } return flag1; }

    数据测试

    主要是测试一下闰年的2月有没有错~

    主函数

    思路

    输出一些提示语引用各种函数根据是否为闰年判断3月以后的天数要不要+1输出结果

    code

    int main() { int year,month,day,sum1; printf("请输入需要判断的日期:\n"); printf("年份:\n"); scanf("%d",&year); month=fun1(); day=fun4(year,month); sum1=fun2(month); if(fun3(year)) { if(month>=3) sum1=sum1+1; } printf("%d年%d月%d日是这一年的第%d天。\n",year,month,day,sum1+day); return 0; }

    函数1 输入月份并判断是否正确

    思路

    用到的语句有:条件语句(if)、循环语句(do while)输入月份判断月份是否在1月到12月之间,若不是就重新输入月份退出循环后,将月份的值返回到month

    code

    int fun1() //判断月份直到正确函数;fun1 { int n; do { printf("月份:\n"); scanf("%d",&n); if(n<1||n>12) printf("请输入正确的月份!\n"); }while(n<1||n>12); return n; }

    函数2 根据月份选择该月份之前的天数总和

    思路

    用到的语句有:选择语句(switch)根据月份得出该月之前的总天数(均按非闰年算,如:3月之前的月份是1月、2月,天数总和为31+28=59)返回值到sum1

    code

    int fun2(int l) //得出sum的函数;fun2 { int sum; switch(l) //判断并计算这个月之前的天数; { case 1:sum=0;break; case 2:sum=31;break; case 3:sum=59;break; //31+28 case 4:sum=90;break; //59+31 case 5:sum=120;break; //90+30 case 6:sum=151;break; //120+31 case 7:sum=181;break; //151+30 case 8:sum=212;break; //181+31 case 9:sum=243;break; //212+31 case 10:sum=273;break; //243+30 case 11:sum=304;break; //273+31 case 12:sum=334;break; //304+30 default:break; } return sum; }

    函数3 判断闰年

    思路

    就是最基础的判断闰年函数语句有:条件语句(if)需要知道的是闰年是能整除400或不能整除100但能整除4的年份(非常重要)判断 返回值到flag

    code

    int fun3(int y) //判断闰年的函数;fun3 { int flag=0; if(y%400==0||(y%100!=0&&y%4==0)) flag=1; return flag; }

    函数4 输入日期

    思路

    输入日期直到日期正确(不溢出范围) 思路与输入月份同理调用函数5来判断是否正确

    code

    int fun4(int y2,int m2) //判断日期直到正确函数;fun4 { int d2; do { printf("日期:\n"); scanf("%d",&d2); if(fun5(y2,m2,d2)) printf("请输入正确的日期!\n"); }while(fun5(y2,m2,d2)); return d2; }

    函数5 判断日期是否正确

    思路

    只有条件语句傻瓜式的 简洁明了的判断若错误就返回值1

    code

    int fun5(int y3,int m3,int d3) //判断日期函数;fun5 { int flag1=0,flag2; flag2=fun3(y3); if(m3==1||m3==3||m3==5||m3==7||m3==8||m3==10||m3==12) //1、3、5、7、8、10、12月; { if(d3<1||d3>31) flag1=1; } if(m3==4||m3==6||m3==9||m3==11) //4、6、9、11月; { if(d3<1||d3>30) flag1=1; } if(m3==2) //2月; { if(d3<1||d3>28+flag2) flag1=1; } return flag1; }

    到这里就结束啦~ 第一次写可能会有一些错误欢迎指正 其实就是做个小小的分享~ 就酱

    最新回复(0)