数据结构:
建议用结构体链表,不过全局变量也行,反正不大,没记忆功能无所谓
(1)必须要有
(2)必须要有
年份、月份、闰年标志以及日期临时变量、星期临时变量
算法:
(1)判断年份输入是否正确y>0&&y<=2011?对的继续,错的重输
(2)判断月份输入是否正确m>0&&m<13?对的继续,空的直接转到输出一年日历,错的重输
(3)判断日起输入是否正确d>0&&d<32?错的重输,对的继续判断
if(m!=2){
if((m==4||m==6||m==9||m==11))&&d>30)printf(错误重输)
}
else{
if(y不是闰年&&d>28)
printf(错误重输)
else
i=1;//这个i应该是闰年标志flag把
}
(4)计算星期几
(5)循环输出
while(需要输出整年日历&&没有输出完毕){
输出当月日历;
月份++;
最后一天是30?31?28?29?确定;
第一天是星期几确定(以及前面空几格);
}
主要函数:
(1)年月日判断
(2)星期判断
(3)日历循环输出
分开来是因为这样干净看得清楚,全放在一块儿,到时候有很多重复的程序段,调试起来你会崩溃的……
注意:
(1)注意题目要求,输入年份就要输出一年份的日历,就是说你在判断月份的时候是不是还要加个空条件判断?用int
的话最好先全初始化为0,不然不好判断。
(2)后边那个while(1);一点用都没有,这程序是你写的还是程序改错题要你改的?
方法有两种:一种是自己写,一种是系统计算。
方法一:(自己写,附思路)
1、设定一个对比日期,例如设2016/10/24是周一。
2、建立保存月份的数组
3、计算设定日期到输入日期总共经历多少天
4、(天数+bias)%7==输入日期的周,bias就是偏移值,碰巧设定日期是周一,所以bias为零
方法二:(附代码,VS2012_debug通过)
#include<iostream>#include<atltimeh>
using namespace std;
int main()
{
int year;
int month;
int day;
cout << "Input year,month,day" << endl;
cin >> year >> month >> day;
CTime t(day,month-1,year);
switch(tGetDayOfWeek())
{
case 1:cout << "周日" << endl;
break;
case 2:cout << "周一" << endl;
break;
case 3:cout << "周二" << endl;
break;
case 4:cout << "周三" << endl;
break;
case 5:cout << "周四" << endl;
break;
case 6:cout << "周五" << endl;
break;
case 7:cout << "周六" << endl;
break;
}
return 0;
}
显示当月日历:(思路)
1、设上面方法二的month为当前月,year为当前年。
2、建立一个保存月份日数的int数组。int a={31,28,31,30};
3、建立一个函数计算是否为润年
bool leapYear(int year){
if(year % 4 == 0 && year%100!=0 || year % 400 ==0)
return true;
else
return false;
}
4、if(year)a[1]+=1;
5、通过for循环输出日子
for(int i=0;i!=a[month-1];i++)
{
if(i%7==0)
cout << endl;
cout << i << " ";
}
以上就是关于编写一个程序,输入年月日,就能回答那天是星期几。全部的内容,包括:编写一个程序,输入年月日,就能回答那天是星期几。、关于Visual studio中用C++语言编写程序的一个问题。说要输入几几年几月,然后如何输出该月1日是星期几、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)