傻瓜式的各种函数调用 划水向
整段代码主要思路
数据测试主函数思路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()
{
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
)
{
int sum
;
switch(l
)
{
case 1:sum
=0;break;
case 2:sum
=31;break;
case 3:sum
=59;break;
case 4:sum
=90;break;
case 5:sum
=120;break;
case 6:sum
=151;break;
case 7:sum
=181;break;
case 8:sum
=212;break;
case 9:sum
=243;break;
case 10:sum
=273;break;
case 11:sum
=304;break;
case 12:sum
=334;break;
default:break;
}
return sum
;
}
int
fun3(int y
)
{
int flag
=0;
if(y
%400==0||(y
%100!=0&&y
%4==0))
flag
=1;
return flag
;
}
int
fun4(int y2
,int m2
)
{
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
)
{
int flag1
=0,flag2
;
flag2
=fun3(y3
);
if(m3
==1||m3
==3||m3
==5||m3
==7||m3
==8||m3
==10||m3
==12)
{
if(d3
<1||d3
>31)
flag1
=1;
}
if(m3
==4||m3
==6||m3
==9||m3
==11)
{
if(d3
<1||d3
>30)
flag1
=1;
}
if(m3
==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()
{
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
)
{
int sum
;
switch(l
)
{
case 1:sum
=0;break;
case 2:sum
=31;break;
case 3:sum
=59;break;
case 4:sum
=90;break;
case 5:sum
=120;break;
case 6:sum
=151;break;
case 7:sum
=181;break;
case 8:sum
=212;break;
case 9:sum
=243;break;
case 10:sum
=273;break;
case 11:sum
=304;break;
case 12:sum
=334;break;
default:break;
}
return sum
;
}
函数3 判断闰年
思路
就是最基础的判断闰年函数语句有:条件语句(if)需要知道的是闰年是能整除400或不能整除100但能整除4的年份(非常重要)判断 返回值到flag
code
int
fun3(int y
)
{
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
)
{
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
)
{
int flag1
=0,flag2
;
flag2
=fun3(y3
);
if(m3
==1||m3
==3||m3
==5||m3
==7||m3
==8||m3
==10||m3
==12)
{
if(d3
<1||d3
>31)
flag1
=1;
}
if(m3
==4||m3
==6||m3
==9||m3
==11)
{
if(d3
<1||d3
>30)
flag1
=1;
}
if(m3
==2)
{
if(d3
<1||d3
>28+flag2
)
flag1
=1;
}
return flag1
;
}
到这里就结束啦~ 第一次写可能会有一些错误欢迎指正 其实就是做个小小的分享~ 就酱