请大神用 用户定义函数 还有switch case if else if函数 。最基本的东西。
用户输入 年份 和 那一年的多少天。 求输出 那一天是几月几号星期几 和它的上一周 是几月几号星期几。
求出它的上一个周日 是几月几日。
例如:
请输入 年份:2014
请输入 天数: 47
输入年份为:2014年2月18日 星期一。
上一个周日为 : 2014年2月16日。
以前编写的求生日以后的天数,是几号,改一下就可以使用了。
例如:
输入:2014,47
输出:2014-2-16 // 推算出的日期
2014-3 // 推算出的当年1月1日的星期几
7 // 求的星期几,
2014-2-9 // 上周日的时间
用户输入2014 年份 和 那一年的47天。 求输出 那一天是2月16号星期7 和它的上周7 是2月9号
特殊的:
输入:2014,2
输出:2014-1-2
2014-3
4
2013-12-29
输入:2017,2
输出:2017-1-2
2014-7
1
2014-1-1
。。。。。。。。。。。。。。。。。。。。。。。
还有待测试,
这是我在以前编写计算出生后多少天后是几号修改的。直接调用里面的计算函数,
思路明确就简单了。主要是一些日期接缝的计算比较麻烦,需要仔细看会出现几种情况。
本回答被提问者采纳看了下,前面的问题都不大,关键是输出上个周日的日期,虽然很简单,但是写起来很是繁琐,要考虑到是1月几号的上个周日可能是上一年的情况,还要考虑到每月前几号的上个周日可能是上个月的情况,总之除了最后一句,代码如下:
#include<stdio.h>#include <stdio.h>
#include <string.h>
int getDayOfYear(int year, int day);
int getWenOfYear(int sumDay);
char* getMonOfYear(int year, int day);
int main()
{
int year, day;
scanf("%d%d", &year, &day);
int sumDay = getDayOfYear(year,day);
int wekend = getWenOfYear(sumDay);
char *pMonth = getMonOfYear(year,day);
printf("%d年 %s 星期%d\n ", year, pMonth, wekend);
delete pMonth;
return 0;
}
int getDayOfYear(int year, int day)
{
//year ==1970
if (1970 == year)
{
return day;
}
//计算到year这年的天数
int sumDay = day ;
for(int i=1970;i<year;i++)
{
//是否闰年
int flag =(i%4==0 && i%100!=0) || i%400 == 0 ? 1 : 0;
if (flag==1)
{
sumDay += 366;//闰年
}else
{
sumDay += 365;//平年
}
}
return sumDay;//1970年1月1日到现在的天数
}
int getWenOfYear(int sumDay)
{
//1970年 1月 1 日是星期四
int temp = sumDay%7;
//printf(" %d, %d", sumDay, temp);
int wek = 0;
switch(temp)
{
case 0:
wek = 3;
break;
case 1:
wek = 4;
break;
case 2:
wek = 5;
break;
case 3:
wek = 6;
break;
case 4:
wek = 7;
break;
case 5:
wek = 1;
break;
case 6:
wek = 2;
break;
}
return wek;
}
char* getMonOfYear(int year, int day)
{
int days[2][13] = {
// 0 1 2 3 4 5 6 7 8 9 10 11 12
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, //平年 365
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} //闰年 366
};
int flag =(year%4==0 && year%100!=0) || year%400 == 0 ? 1 : 0;
int iMon = 1;
int iDay = day;
char *cMonth = new char[100];
memset(cMonth, 100,'\0');
for ( iMon = 1;iMon<13; iMon++)
{
sprintf(cMonth, "%d月%d日", iMon, iDay);
if ((iDay = iDay-days[flag][iMon])<0)
break;
}
return cMonth;
}
求加分