解题思路:整个程序的思路是先确定那一年的1月1号是星期几,用k记录 ,然后再从那一年的一月推到指定月份的一号是星期几,依然用k记录 k的范围大小是0-6,0代表星期天
注意事项:
参考代码:
#include<iostream> #include<iomanip> using namespace std; bool cmp(int x){ if(x%4==0&&x%100!=0) return true; else if(x%400==0) return true; else return false; } int cmp2(int x){ if(x==1||x==3||x==5||x==7||x==8||x==10||x==12) return 1; else if(x==2) return 2; else return 0; } int main(){ int year,month,k=1,z=1,days; //整个程序的思路是先确定那一年的1月1号是星期几,用k记录 ,然后再从那一年的一月推到指定月份的一号是星期几,依然用k记录 k的范围大小是0-6,0代表星期天 cin>>year>>month; for(int i=2007;i<year;++i){ if(cmp(i)) k+=2; // 如果成立就代表着那一年为闰年,闰年366天,366余7=2,意味着下一年的一月一号是上一年的往后推两天。 else k++; //否则为平年365天,365余7=1,下一年的一月一号是上一年往后推一天 if(k>6) k-=7; //k代表者星期,若k'大于6等于7时,那么就让k等于0,意味着改天为星期天 } //这个for循环结束后,就可以得到该年的一月一号是星期几 for(int j=1;j<month;++j){ //同理由一月推到指定月份时,看是星期几 if(cmp2(j)==1) k+=3; //如果是奇数月则一个月有31天,31余7等于3,下个月一号星期就是这个月一号星期往后推三天。同理判断出偶数月和闰年2月和平年2月的变化情况 else if(cmp2(j)==2&&cmp(year)) k++; //闰年2月 else if(cmp2(j)==0) k+=2; //除二月的偶数月,平年的二月有28天,余7等于0,不用做变化。 if(k>6) k-=7; } if(cmp2(month)==1) days=31; //这四行语句判断这月有多少天 else if(cmp2(month)==2&&cmp(year)) days=29; else if(cmp2(month)==0) days=30; else days=28; cout<<"---------------------"<<endl; cout<<" Su Mo Tu We Th Fr Sa"<<endl; cout<<"---------------------"<<endl; for(int i=0;i<k;++i) //根据k值知道该月一号为星期几,注意空格大小,前面直接输出几个 空格就好 cout<<" "; for(int z=1;z<=days;++z){ if(k>6){ k-=7; cout<<endl; //当k大于6等于7时,输出回车 } cout<<" "<<setw(2)<<z; //每次输出前输入一个空格,且控制两个空间输出且向右靠齐输出 k++; } cout<<endl<<"---------------------"; return 0; }
0.0分
4 人评分
格式错误一万年,,有没有过了的来看看(终于过了)浏览:918 |
求圆的面积 (C++代码)这里推荐使用宏定义浏览:1903 |
【偶数求和】 (C语言代码)记得sum的归零时机浏览:924 |
C语言程序设计教程(第三版)课后习题8.9 (C++代码)浏览:844 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:495 |
模拟计算器 (C语言代码)浏览:882 |
字符串输入输出函数 (C++代码)(都当成字符串吧hhhhhhhh)浏览:493 |
简单的a+b (C语言代码)浏览:759 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:624 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1143 |