c语言万年历(源代码)

/**

*c语言万年历,dev c++运行通过

*参数输入格式eg:

*显示这一天是星期几:2013/01/01  2013.01.01 

*显示这个月的整个日历:2013.01.  2013/01/

*控制台下运行

*/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int x,char* date[])
{
void wrong();//参数错误处理函数 
void line();//输出横线格式函数 
int week,t=0,k,i,year,month,day=0,flag1,flag2;
/**
*week:计算给定的时间是星期几 
*t:计算与标定时间(公元1年1月1日星期一)相差的星期差。平年差一天,闰年差两天
*i是循环控制变量
*year,month,day分别是输入时间的年月日
*flag1记录有无精确日期输入,有day,输出这一天是星期几,没day输出这一整月 
*flag2分别是判断平年闰年的记录 
*/ 
int common_day_of_the_month[12]={31,28,31,30,31,30,31,31,30,31,30,31};//平年年份每月天数 
int leap_day_of_the_month[12]={31,29,31,30,31,30,31,31,30,31,30,31};//闰年年份每月天数 
char c[20];//储存输入日期的字符串 
if(x==1){//输入参数错误,没有给日期,退出 
wrong(); 
}
strcpy(c,date[1]);//把输入的日期拷贝到c数组 
if(c[0]!=0&&c[1]!=0&&c[2]!=0&&c[3]!=0&&c[4]!=0&&c[5]!=0&&c[6]!=0&&c[7]!=0){//数据安全性检查
for(i=0;i<4;i++){//检查年份 
if(c[i]>='0'&&c[i]<='9');
else wrong();
}
for(i=5;i<7;i++){//检查月份 
if(c[i]>='0'&&c[i]<='9');
else wrong();
}
flag1=0;
}
if(c[8]!=0&&c[9]!=0&&c[10]=='\0'){
for(i=9;i<10;i++){//检查日期day 
if(c[i]>='0'&&c[i]<='9');
else wrong();
}
flag1=1;
}
year=(c[0]-'0')*1000+(c[1]-'0')*100+(c[2]-'0')*10+(c[3]-'0');//年月日的处理由char转换成int 
month=(c[5]-'0')*10+(c[6]-'0');
if(flag1==1)day=(c[8]-'0')*10+(c[9]-'0');//如果有日就转换 
if(flag1==0){//输出整月 
line();
printf("\n一    二    三    四    五    六    日\n");
for(i=1;i<year;i++){//年的星期差 
if(i%400==0||(i%4==0&&i%100!=0))t+=2;
else t+=1;

if(year%400==0||((year%4==0)&&(year%100!=0))){//月的星期差 
for(i=1;i<month;i++){
t+=leap_day_of_the_month[i-1];
}
flag2=0;//闰年 
}
else{
for(i=1;i<month;i++){
t+=common_day_of_the_month[i-1];
}
flag2=1;//平年 
}
t+=day;
week=t%7;//计算某月的第一天是星期几 
for(i=0;i<week;i++)printf("      ");
if(flag2==0){
for(i=0;i<leap_day_of_the_month[month-1];i++){
printf("%-6d",i+1);
week++;
if(week%7==0)printf("\n");
}

if(flag2==1){
for(i=0;i<common_day_of_the_month[month-1];i++){
printf("%-6d",i+1);
week++;
if(week%7==0)printf("\n");
}

printf("\n");
line();



else{//输出星期几 
for(i=1;i<year;i++){
if(i%400==0||(i%4==0&&i%100!=0))t+=2;
else t+=1;

if(year%400==0||((year%4==0)&&(year%100!=0))){
for(i=1;i<month;i++){
t+=leap_day_of_the_month[i-1];
}
}
else{
for(i=1;i<month;i++){
t+=common_day_of_the_month[i-1];
}
}
t+=day;
week=t%7;//计算给定的那一天是星期几 
printf("%s是星期",date[1]);
switch(week)
{
case 0:printf("日");break;
case 1:printf("一");break;
case 2:printf("二");break;
case 3:printf("三");break;
case 4:printf("四");break;
case 5:printf("五");break;
case 6:printf("六");break; 

}
printf("\n\n\nfinished!!");

void line()
{
printf("---------------------------------------");
return;
}
void wrong()
{
printf("参数传递错误,请重试!!"); 
exit(0);
}
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值