解题思路:整个程序的思路是先确定那一年的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 人评分
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:1314 |
C语言训练-大、小写问题 (C语言代码)浏览:792 |
【排队买票】 (C语言代码)浏览:944 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:468 |
C语言程序设计教程(第三版)课后习题9.1 (C语言代码)浏览:710 |
DNA (C语言代码)浏览:440 |
1054题解浏览:516 |
Tom数 (C语言代码)浏览:581 |
IP判断 (C++代码)浏览:787 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:672 |