
const char WEEK_DAYS_NAME[7][10]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"}
/*
设定一个最小的系统日期,并且指定改天是星期几
*/
/*最小的系统日期年份,默认是 2000 年*/
const int START_YEAR = 2000
/*日最小的系统日期月份,默认是 1 月*/
const int START_MONTH = 1
/*最小的系统日期,默认是 1 号*/
const int START_DAY = 1
/*最小的系统日期所在的星期,默认是星期六(2000年1月1日是星期六)*/
const int START_WEEK_DAY = 6
/*
功能:
计算指定的 year 年 month 月的天数
*/
int getDaysOfMonth(int year ,int month)
{
const int daysOfMonth[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}
// 闰年的二月份
if( month == 2 &&( (year%4==0 &&year%100!=0) || year %400==0 ))
{
return daysOfMonth[month] +1
}
else
{
return daysOfMonth[month]
}
}
/*
功能:
计算 year 年 month 月 day 日
距离
START_YEAR 年 START_MONTH 月 START_DAY 日
的天数
*/
int getDiffDays(int year ,int month , int day)
{
int diffDays = 0
int y,m,d
if(year == START_YEAR)
{
if(month == START_MONTH)
{
diffDays = day - START_DAY
}
else
{
/*加上当月剩余天数*/
diffDays += getDaysOfMonth(START_YEAR,START_MONTH) - START_DAY + 1
/*加上整月的天数*/
for(m = START_MONTH + 1 m <month m ++)
{
diffDays += getDaysOfMonth(START_YEAR,m)
}
/*加上当月剩余天数*/
diffDays += day -1
}
}
else
{
/*加上当月剩余天数*/
diffDays += getDaysOfMonth(START_YEAR,START_MONTH) - START_DAY + 1
/*加上整月的天数*/
for(m = START_MONTH + 1 m <= 12 m ++)
{
diffDays += getDaysOfMonth(START_YEAR,m)
}
/*加上整年的天数*/
for(y = START_YEAR+1 y <year y ++)
{
/*如果是闰年*/
if((y%4==0%y%100!=0) || y%400==0)
{
diffDays += 366
}
else
{
diffDays += 365
}
}
/*加上整月的天数*/
for(m = 1 m <month m ++)
{
diffDays += getDaysOfMonth(year,m)
}
/*加上当月的天数*/
diffDays += ( day - 1 )
}
return diffDays
}
/*
功能:
计算 year 年 month 月 day 日
距离
START_YEAR 年 START_MONTH 月 START_DAY 日
已经过了多少周
*/
int getDiffWeeks(int year ,int month , int day)
{
int diffDays ,diffWeeks
// 距离系统最小时间已经过去的天
diffDays= getDiffDays(year,month,day)
diffWeeks = diffDays/7
// 修正已经过去的周
if((START_WEEK_DAY + diffDays % 7 )>7)
{
diffWeeks++
}
// debug
//printf("%d %d %d\n",diffDays,diffWeeks,(START_WEEK_DAY + diffDays % 7 ) % 7)
return diffWeeks
}
/*
功能:
计算 year 年 month 月 day 日 是星期几
星期一 = 1
星期二 = 2
...
星期六 = 6
星期天 = 0
*/
int getWeekDay(int year ,int month , int day)
{
int diffDays= getDiffDays(year,month,day)
return (START_WEEK_DAY + diffDays % 7 ) % 7
}
int main(int argc, char *argv[])
{
// 设定的开始计算单双周的第一天
int firstWeekYear,firstWeekMonth,firstWeekDay
// 要查询天
int queryYear,queryMonth,queryDay
// 相差的天数
int diffDays
// 相差的周数
int diffWeeks
printf("输入要设为第一周的日期:")
scanf("%d-%d-%d",&firstWeekYear,&firstWeekMonth,&firstWeekDay)
// 输入要查询的天,按 ctrl + z 退出
printf("输入要查询所在周的日期:")
while(scanf("%d-%d-%d",&queryYear,&queryMonth,&queryDay)!=EOF)
{
diffDays = getDiffDays(queryYear,queryMonth,queryDay) - getDiffDays(firstWeekYear,firstWeekMonth,firstWeekDay)
diffWeeks = getDiffWeeks(queryYear,queryMonth,queryDay) - getDiffWeeks(firstWeekYear,firstWeekMonth,firstWeekDay) + 1
printf("%4d-%02d-%02d【%s】 是【%s周,第%3d周】。距离 %4d-%02d-%02d【%s】 已经过去了【%3d天】!\n",
queryYear,queryMonth,queryDay,
WEEK_DAYS_NAME[getWeekDay(queryYear,queryMonth,queryDay)],
(diffWeeks%2==1)?"单":"双",
diffWeeks,
firstWeekYear,firstWeekMonth,firstWeekDay,
WEEK_DAYS_NAME[getWeekDay(firstWeekYear,firstWeekMonth,firstWeekDay)],
diffDays
)
}
return 0
}
/*
输入要设为第一周的日期:2011-9-1
输入要查询所在周的日期:2011-9-1
2011-09-01【星期四】 是【单周,第 1周】。距离 2011-09-01【星期四】 已经过去了【 0天】!
输入要查询所在周的日期:2011-9-2
2011-09-02【星期五】 是【单周,第 1周】。距离 2011-09-01【星期四】 已经过去了【 1天】!
输入要查询所在周的日期:2011-9-3
2011-09-03【星期六】 是【单周,第 1周】。距离 2011-09-01【星期四】 已经过去了【 2天】!
输入要查询所在周的日期:2011-9-4
2011-09-04【星期日】 是【单周,第 1周】。距离 2011-09-01【星期四】 已经过去了【 3天】!
输入要查询所在周的日期:2011-9-5
2011-09-05【星期一】 是【双周,第 2周】。距离 2011-09-01【星期四】 已经过去了【 4天】!
输入要查询所在周的日期:2011-9-11
2011-09-11【星期日】 是【双周,第 2周】。距离 2011-09-01【星期四】 已经过去了【 10天】!
输入要查询所在周的日期:2011-9-15
2011-09-15【星期四】 是【单周,第 3周】。距离 2011-09-01【星期四】 已经过去了【 14天】!
输入要查询所在周的日期:2011-10-1
2011-10-01【星期六】 是【单周,第 5周】。距离 2011-09-01【星期四】 已经过去了【 30天】!
输入要查询所在周的日期:2011-10-15
2011-10-15【星期六】 是【单周,第 7周】。距离 2011-09-01【星期四】 已经过去了【 44天】!
输入要查询所在周的日期:2011-10-30
2011-10-30【星期日】 是【单周,第 9周】。距离 2011-09-01【星期四】 已经过去了【 59天】!
输入要查询所在周的日期:2011-11-1
2011-11-01【星期二】 是【双周,第 10周】。距离 2011-09-01【星期四】 已经过去了【 61天】!
输入要查询所在周的日期:2011-12-1
2011-12-01【星期四】 是【双周,第 14周】。距离 2011-09-01【星期四】 已经过去了【 91天】!
*/
楼上用的是函数指针的方法,但貌似LZ是用指针函数应该是int *fun()这种
如下给出指针函数周几的翻译功能
#include <stdio.h>
#include <string.h>
char *translate(char a[],int num)//指针函数声明
void main()
{
int num
char a[10]
printf("请输入周几:阿拉伯数字(1~7)\n")
while(scanf("%d",&num))
printf("%s\n",translate(a,num))
}
char *translate(char a[],int num)
{
switch(num)
{
case 1:
strcpy(a,"Monday")break
case 2:
strcpy(a,"Tuesday")break
case 3:
strcpy(a,"Wednesday")break
case 4:
strcpy(a,"Thursday")break
case 5:
strcpy(a,"Friday")break
case 6:
strcpy(a,"Saturday")break
case 7:
strcpy(a,"Sunday")break
default:
strcpy(a,"InputErr!")break
}
return a
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)