C语言实验:输入任意一个年份和月份,输出该月份的公历日历
2013-03-27 08:06
791 查看
利用吉姆拉尔森公式,详见初等数论,注意控制格式。
看不懂c++的童鞋,把所有cin理解为scanf,把cout理解为printf,这个程序是小时候写的,所有不想改了。
the results:
另一版本:
the result:
再一个版本:
the results:
看不懂c++的童鞋,把所有cin理解为scanf,把cout理解为printf,这个程序是小时候写的,所有不想改了。
#include "iostream" using namespace std; int main() { int m,d,monthmax,y; while(1) { cout<<"请输入年份:"; cin>>y; cout<<"请输入月份:"; cin>>m; cout<<endl; //判断年份和月份 if(y%4==0||(y%100==0&&y%400==0))//闰年 { if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) monthmax=31; if(m==2) monthmax=29; if(m==4||m==6||m==9||m==11) monthmax=30; } if(y%4!=0)//平年 { if(m==1||m==3||m==5||m==7||m==8||m==10||m==12) monthmax=31; if(m==2) monthmax=28; if(m==4||m==6||m==9||m==11) monthmax=30; } //基姆拉尔森计算公式取得一号周几 if(m==1||m==2) { m+=12; //一月算做上一年的十三月,二月算做上一年的十四月 y--; } d=(2+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;//算出这月一号周几 if(d==0) { d=7; } //输出日历 { { //标题模块 if(m==13) { cout<<" 公元"<<y+1<<"年 第1月日历"<<endl; } if(m==14) { cout<<" 公元"<<y+1<<"年 第2月日历"<<endl; } if(m!=13&&m!=14) { cout<<" 公元"<<y<<"年 第"<<m<<"月日历"<<endl; } } cout<<" 1 2 3 4 5 6 7 "<<endl<<"==========================="<<endl; for(int i=1; i<=d-1; i++) { cout<<" "; } for(int j=1; j<=monthmax; j++) { if(j<10) { cout<<" "<<j<<" "; } if(j>=10) { cout<<" "<<j<<" "; } if((j+d-1)%7==0) { cout<<endl; } if(j==monthmax) { cout<<endl; } } cout<<endl; } } }
the results:
另一版本:
#include <stdio.h> #include <stdlib.h> #define SIGN_WEEK 6 #define SIGN_YEAR 2000 using namespace std; void calendar(int week,int year) { int month_day[14]= {31,31,0,31,30,31,30,31,31,30,31,30,31,31}; char month_name[12][10]= {"January","February","March","Apirl","May","June","July","August","September","October","November","December"}; int i,j,n,m,num0=0,num1=31,nweek0=week,nweek1; if(year%4==0) { if(year%100!=0) month_day[2]=29; else { if(year%400==0) month_day[2]=29; else month_day[2]=28; } } else month_day[2]=28; printf("The calendar of the year %d\n\n",year); for(m=0; m!=12; m+=2) { if(m-1<0) { nweek0=week; nweek1=(week+num1%7)>7?(week+num1%7)-7:(week+num1%7); } else { num0=num0+month_day[m-1]+month_day[m]; nweek0=(week+num0%7)>7?(week+num0%7)-7:(week+num0%7); num1=num1+month_day[m]+month_day[m+1]; nweek1=(week+num1%7)>7?(week+num1%7)-7:(week+num1%7); } printf("%-10s %2d %-10s %2d\n=========================== ===========================\nSun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat\n",month_name[m],m+1,month_name[m+1],m+2); for(i=nweek0,j=nweek1,n=0; j!=nweek1-6*7; j--) { if(n<7) { if(i>0) printf("%3d ",month_day[m]-i+1); else if(i<=0) { if(i>-month_day[m+1]) printf("%3d ",-i+1); else printf("%3d ",-i-month_day[m+1]+1); } i--; j+=1; n++; } else { if(j>0) printf("%3d ",month_day[m+1]-j+1); else if(j<=0) { if(j>-month_day[m+2]) printf("%3d ",-j+1); else printf("%3d ",-j-month_day[m+2]+1); } n++; } if(n==14) { printf("\n"); n=0; } } printf("=========================== ===========================\n\n"); } } void startWeek(int year) { int start_week,days; if(year>SIGN_YEAR) { days=(year-SIGN_YEAR)*365+(year-SIGN_YEAR)/4-(year-SIGN_YEAR)/100+(year-SIGN_YEAR)/400+(((year-SIGN_YEAR)%4)+3)/4+((year-SIGN_YEAR)%400==0?0:((year-SIGN_YEAR)%100==0?1:0)); start_week=(SIGN_WEEK+days%7)>7?(SIGN_WEEK+days%7)-7:(SIGN_WEEK+days%7); } else { days=(SIGN_YEAR-year)*365+(SIGN_YEAR-year)/4-(SIGN_YEAR-year)/100+(SIGN_YEAR-year)/400; start_week=(SIGN_WEEK-days%7)>0?(SIGN_WEEK-days%7):(SIGN_WEEK-days%7+7); } calendar(start_week,year); } int main() { int year; printf("Enter year:"); scanf("%d",&year); startWeek(year); return 0; }
the result:
再一个版本:
#include <stdio.h> long int f(int year,int month) { if(month<3) return year-1; else return year; } long int g(int month) { if(month<3) return month+13; else return month+1; } long int n(int year,int month,int day) { return 1461L*f(year,month)/4+153L*g(month)/5+day; } int w(int year,int month,int day) { return(int) ((n(year,month,day)%7-621049L%7+7)%7); } int date[12][6][7]; int day_tbl[ ][12]= {{31,28,31,30,31,30,31,31,30,31,30,31},{31,29,31,30,31,30,31,31,30,31,30,31}}; int main() { int sw,leap,i,j,k,wd,day; int year; char title[]="SUM MON TUE WED THU FRI SAT"; printf("Please input the year whose calendar you want to know:\n"); scanf("%d%*c",&year); sw=w(year,1,1); leap=year%4==0&&year%100||year%400==0; for(i=0; i<12; i++) for(j=0; j<6; j++) for(k=0; k<7; k++) date[i][j][k]=0; for(i=0; i<12; i++) for(wd=0,day=1; day<=day_tbl[leap][i]; day++) { date[i][wd][sw]=day; sw=++sw%7; if(sw==0) wd++; } printf("\n|================== The Calendar of Year %d==================|\n|",year); for(i=0; i<6; i++) { for(wd=0,k=0; k<7; k++) wd+=date[i][5][k]+date[i+6][5][k]; wd=wd?6:5; printf(" %2d %s %2d %s|\n|",i+1,title,i+7,title); for(j=0; j<wd; j++) { printf(" "); for(k=0; k<7; k++) if(date[i][j][k]) printf("%4d",date[i][j][k]); else printf(" "); printf(" "); for(k=0; k<7; k++) if(date[i+6][j][k]) printf("%4d",date[i+6][j][k]); else printf(" "); printf("|\n|"); } } puts("==============================================================|"); }
the results:
相关文章推荐
- C语言实验:输入任意一个年份和月份,输出该月份的公历日历
- 输入任意一个年份和月份,输出该月份的公历日历
- C语言实验:输入一个整数的小写金额值,转化为大写金额值并输出
- C语言实验:输入任意一个日期的年、月、日的值,求出从公元1年1月1日到这一天总共有多少天,并求出这一天是星期几。
- java——从键盘上输入一个年份,并输入一个月份(数字),输出该月份有多少天
- [置顶] C语言实验:输入任意一个日期的年、月、日的值,求出从公元1年1月1日到这一天总共有多少天,并求出这一天是星期几。
- 输入一个年份和一个月份,输出这月有多少天
- 通过输入的年份和月份输出对应的日历
- 汇编实验(输入一个数输出其平方值)
- 编写一个程序,输入月份号,输出该月的中文名和英文名。
- 计161_Problem Y: C语言实验--字符变量的输入输出
- C语言实验——输入数字星期,输出英文(switch语句)
- java 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
- C#--第2周实验--任务2(1)--用户输入一个字符,并用Console类的Readkey()方法读取该字符,并在控制台上输出该字符
- C#--第2周实验--任务三--编写一个控制台应用--输入x计算并输出分段函数F(x)的值
- 在控制台输入一个年份和月份,打印该月份的月历。
- 编程:用java 语言实现,输入一个数,就相应地输出的几维数组!||用1、2、2、3、4、5这六个数字,用java写一个函数,打印出所有不同的排列,要求:"4"不能在第三位,"3"与"5"不能相连
- 通过用户输入的年份与月份来算显示当月的日历
- 日历系统——控制台输入年份和月份,打印该月的日历
- C语言实验——输入数字星期,输出英文(switch语句)