① c语言年历显示程序设计
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
char* month[]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nev","Dec"};
char* week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int j_leapyear(int year) //定义函数检测输入年份是否为闰年
{
if((/*year%400==0*/year%4==0&&year%100!=0)||(year%400==0))
return (1);
// else if(year%4==0&&year%100!=0)
// return (1);
else return 0;
}
int month_day(int year,int month) //检测该年月份有多少天
{
int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(j_leapyear(year)&&month==2)
return 29;
else return (mon_day[month-1]);
}
int j_week(int year,int month,int day) //检测该天是星期几
{
int d=0,i; //d表示该天在该年份的累计天数
int w;
/* int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(j_leapyear(year)==1)
month_day[1]=29;
for(i=0;i<month;i++)
d+=month_day[i];
d=d+day;*/
for(i=1;i<month;i++)
d+=month_day(year,i);
d+=day;
w=(year-1)+(int)(year-1)/4-(int)(year-1)/100+(int)(year-1)/400+d;//网上公式
return ((int)w%7);
}
int allyear(int year) //输出全年日历
{
int i,j,b;
printf("\n%d 日历",year);
for(i=1;i<=12;i++)
{
printf("\n\n\t%s\n",month[i-1]);
// printf(" 7 1 2 3 4 5 6 \n");
printf(" S M T W T F S \n");
b=j_week(year,i,1);
for(j=1;j<=month_day(year,i)+b;j++)
{
if(j<=b)
printf(" ");
else if(j-b<10)
printf("%2d ",j-b);
else printf("%2d ",j-b);
//else printf("%2d ",j-b);
if(j%7==0)
putchar('\n');
}
putchar('\n');
}
return 0;
}
void month_print(int year,int month) //输入一个年月,输出这个月的日历
{
int i,c,d;
c=month_day(year,month);
printf("\n\n %d年%d月日历\n",year,month);
printf(" S M T W T F S \n");
d=j_week(year,month,1);
for(i=1;i<=c+d;i++)
{
if(i<=d)
printf(" ");
else printf("%2d ",i-d);
if(i%7==0)
putchar('\n');
}
putchar('\n');
}
int jisuan_day(int year,int month,int day,int x,int y,int z) //输入年月日,输出距x年y月z日有多少天,星期几,以及是否是公历节日
{
int i,a,b,c=0,d=0,days=0,m=0,n=0,t;
a=year>=x?year:x;
b=year<x?year:x;
if(a>b)
{
for(i=b+1;i<a;i++)
c+=j_leapyear(i);
}
else c=0;
if(year!=x)
d=a-b-1;
else d=0;
m=365*d+c;
if(year<x)
{
for(i=month;i<=12;i++)
n+=month_day(year,i);
days=m+n+z-day;
}
else if(year>x)
{
for(i=y;i<=12;i++)
n+=month_day(x,i);
for(i=1;i<month;i++)
n+=month_day(year,i);
days=m+n+day-z;
}
else
{
for(i=month>=y?y:month;i<(month>=y?month:y);i++)
n+=month_day(x,i);
days=abs(day-z)+n; //输出距离y月z日有多少天
}
printf("这天离%d年%d月%d号有%d天\n",x,y,z,days);
t=j_week(year,month,day);
if(t==0) //输出星期几
printf("这天星期日");
else if(t==1)
printf("这天星期一");
else if(t==2)
printf("这天星期二");
else if(t==3)
printf("这天星期三");
else if(t==4)
printf("这天星期四");
else if(t==5)
printf("这天星期五");
else if(t==6)
printf("这天星期六");
putchar('\n');
if(month==1&&day==1)
printf("这天是元旦节");
else if(month==2&&day==14)
printf("这天是情人节");
else if(month==3&&day==8)
printf("这天是妇女节");
else if(month==3&&day==12)
printf("这天是植树节");
else if(month==4&&day==1)
printf("这天是愚人节");
else if(month==4&&day==4)
printf("这天是清明节");
else if(month==5&&day==1)
printf("这天是劳动节");
else if(month==6&&day==1)
printf("这天是儿童节");
else if(month==8&&day==1)
printf("这天是建军节");
else if(month==9&&day==10)
printf("这天是教师节");
else if(month==10&&day==1)
printf("这天是国庆节");
else if(month==12&&day==25)
printf("这天是圣诞节");
else printf("这天不是特殊节日");
putchar('\n');
return days;
}
void fish_or_net(int year,int month,int day) //判断是打鱼还是晒网
{
int q;
int i,a,b,c=0,d=0,days=0,m=0,n=0;
a=year>=1990?year:1990;
b=year<1990?year:1990;
if(a>b)
{
for(i=b+1;i<a;i++)
c+=j_leapyear(i);
}
else c=0;
if(year!=1990)
d=a-b-1;
else d=0;
m=365*d+c;
if(year<1990)
{
for(i=month;i<=12;i++)
n+=month_day(year,i);
days=m+n+1-day;
}
else if(year>1990)
{
for(i=1;i<=12;i++)
n+=month_day(1990,i);
for(i=1;i<month;i++)
n+=month_day(year,i);
days=m+n+day-1;
}
else
{
for(i=month>=1?1:month;i<(month>=1?month:1);i++)
n+=month_day(1990,i);
days=abs(day-1)+n; //先确定这天离1990年1月1日有多少天
}
q=days%5+1;
if(q==1||q==2||q==3) //判断打鱼还是晒网
printf("渔人今天打鱼");
else printf("渔人今天晒网");
putchar('\n');
}
/*int main() //这部分内容用来校检
{
int j_leapyear(int year);
int month_day(int year,int month);
int j_week(int year,int month,int day);
int allyear(int year);
void month_print(int year,int month);
int jisuan_day(int year,int month,int day,int x,int y,int z);
void fish_or_net(int year,int month,int day);
int x,y,z,year,month,day;
// allyear(2015);
//month_print(2016,12);
printf("请输入今天的日期(按年,月,日输入,如2016,1,14表示2016年1月14日):");
scanf("%d,%d,%d",&x,&y,&z);
printf("\n请随便输入一个日期,格式同上:");
scanf("%d,%d,%d",&year,&month,&day);
jisuan_day(year,month,day,x,y,z);
// fish_or_net(x,y,z);
return 0;
} // 这部分内容是用来检测上述函数是否出错的
*/
int main()
{
int j_leapyear(int year);
int month_day(int year,int month);
int j_week(int year,int month,int day);
int allyear(int year);
void month_print(int year,int month);
int jisuan_day(int year,int month,int day,int x,int y,int z);
void fish_or_net(int year,int month,int day); //函数声明
int option,year,month,day,x,y,z;
char ny;
system("color 1f");
while (1)
{
printf("\n\n\t 欢迎来到由...编写的程序\n\n");
printf(" 请选择您需要的服务,输入编号回车结束\n");
printf(" 1.输入一个年份,输出该年的日历\n");
printf(" 2.输入年月,输出这个月的日历。\n");
printf(" 3.输入年月日,输出据今天还有多久,星期几,是否是公历节日。\n");
printf(" 4.某人自1990年1月1日开始打鱼,“三天打鱼,两天晒网”,输入一个1990年以后的日期,输出他这一天是打鱼还是晒网。\n");
printf(" 5.退出\n");
scanf("%d",&option);
switch(option) //switch分支结构
{
case 1:
while(1) //while循环,后面的1是常数,表示一直到break才结束循环
{
printf("请输入一个年份:");
scanf("%d",&year);
allyear(year);
printf("你想继续查询日历么?(y表示继续,n表示结束)");
scanf("%c",&ny);
if(ny=='n')
break;
}
break;
case 2:
while (1)
{
printf("输入年月:");
scanf("%d,%d",&year,&month);
month_print(year,month);
printf("你想继续查询日历么?(y表示继续,n表示结束):");
scanf("%c",&ny);
if(ny=='n')
break;
}
break;
case 3:
while (1)
{
printf("输入年月日:");
scanf("%d,%d,%d",&year,&month,&day);
printf("请输入今天的日期:");
scanf("%d,%d,%d",&x,&y,&z);
jisuan_day(year,month,day,x,y,z);
printf("你想继续查询么?(y表示继续,n表示结束):");
scanf("%c",&ny);
if(ny=='n')
break;
}
break;
case 4:
while (1)
{
printf("输入1990年1月1日以后的一个日期:");
scanf("%d,%d,%d",&year,&month,&day);
fish_or_net(year,month,day);
printf("你想继续查询渔人是打鱼还是晒网么?(y表示继续,n表示结束):");
scanf("%c",&ny);
if(ny=='n')
break;
}
break;
case 5:
while (1)
{
printf("确认么?y表示是的,n表示不是");
scanf("%c",&ny);
if(ny=='y')
exit(1); //表示退出程序
else if(ny=='n')
break;
}
break;
default:printf("对不起,暂时没有这个服务");
break;
}
}
return 0;
}
② C语言程序设计;"已知2000年1月1日为星期六,请输入任一年的年份后,打印该年的年历" 怎么设计啊,速求老师
C语言程序如下:
#include<stdio.h>
#defineYES1/*定义符号常数“是”*/
#defineNO0/*定义符号常数“否”*/
/*函数isleap():判断某年是否闰年*/
intisleap(intyear)
{
intleap=NO;
if((year%4==0&&year%100!=0)||year%400==0)
leap=YES;
returnleap;
}
/*函数week_of_newyears_day():求元旦是星期几*/
intweek_of_newyears_day(intyear)
{
intn=year-1900;
n=n+(n-1)/4+1;
n=n%7;
returnn;
}
intmain(intargc,char*argv[])
{
intyear,month,day,weekday,len_of_month,i;
printf(" 请输入某年年份:");
scanf("%d",&year);
printf(" 请输入某年1月1日:");
scanf("%d",&weekday);
/*因为你的要求是已知2000年1月1日是星期六,所以这里不用week_of_newyears_day去求星期六了*/
/*weekday=week_of_newyears_day(year);求元旦是星期几*/
printf(" %d年 ",year);/*打印年份*/
for(month=1;month<=12;month=month+1)/*打印12个月的月历*/
{
printf(" %d月份 ",month);
printf("------------------------------------------------------ ");
printf("星期日星期一星期二星期三星期四星期五星期六 ");
printf("------------------------------------------------------ ");
for(i=0;i<weekday;i=i+1)/*找当月1日的打印位置*/
printf("");
if(month==4||month==6||month==9||month==11)
len_of_month=30;
elseif(month==2)
{
if(isleap(year))
len_of_month=29;
else
len_of_month=28;
}
else
len_of_month=31;
for(day=1;day<=len_of_month;day=day+1)/*打印当月日期*/
{
printf("%2d",day);
weekday=weekday+1;
if(weekday==7)/*打满一星期应换行*/
{
weekday=0;
printf(" ");
}
}
printf(" ");/*打完一月应换行*/
}
return0;
}
运行效果如图
③ 用c语言编写万年历,要求输出任意一年的某月,能显示出这个月的日历
1、首先要判断一个年份是闰年还是平年,用一个子程序来做。
④ c语言设计万年历
/*不过除了没有查询某年某月某日是这一年的第几天。。和判断这一年的生肖外,都能满足你的要求。
加点金币帮你完善点!*/
#include<stdio.h>
int
Swiss(int
Years)
//判断是否是闰年
{
if(!(Years%100))
{
Years=Years/100;
}
if(Years%4)
{
return
0;
}
else
{
return
1;
}
}
int
Number(int
Yearsa,int
Yearsb)
//已知两个年份,求出两个年份之间闰年的个数
{
int
i=Yearsa+1;
int
mou=0;
do{
if(Swiss(i))
{
mou++;
}
i++;
}while(i<Yearsb);
return
mou;
}
int
Mvalue(int
Years,int
Month,int
Day)
//已知年月日,求出某年某月某日是星期几
{
int
M[12]={0,3,3,6,1,4,6,2,5,0,3,5};
//月值
int
N=6;
//年值初始化
int
a;
if(Years<2006)
//求年值,年值以2006年为基数
{
N=6-((2006-Years)%7)-Number(Years,2006);
if(Swiss(Years))
{
if(Month<3)
{
N--;
}
}
}
else
if(Years>2006)
{
N=((Years-2006)%7)-1+Number(2006,Years);
if(Swiss(Years))
{
if(Month>2)
{
N++;
}
}
}
a=(Day+M[Month-1]+N)%7;
//某年某月某日是星期几=(日值+月值+年值)%7
return
a;
}
int
Amonth(int
Month)
//已知月,求出这个月是大月还是小月
{
switch(Month)
{
case
1:
case
3:
case
5:
case
7:
case
8:
case
10:
//1,3,5,7,8,10,12是大月,没月31天
case
12:return
1;
case
4:
case
6:
case
9:
case
11:return
0;
//4,6,9,11是小月,每月30天
case
2:return
2;
//二月份
}
return
-1;
}
void
main
()
{
int
Dtable[7][7];
int
i,j;
int
Years=9999;
int
Month=12;
int
Day=1;
int
b;
for(i=0;i<7;i++)
//初始化数组
{
Dtable[0][i]=i;
}
for(i=1;i<7;i++)
{
for(j=0;j<7;j++)
{
Dtable[i][j]=0;
}
}
i=Mvalue(Years,Month,Day);
switch(Amonth(Month))
{
case
0:b=30;break;
case
1:b=31;break;
case
2:if(Swiss(Years))b=29;else
b=28;break;
//闰年2月29天,平年二月28天
default:b=-1;break;
}
for(;i<7;i++)
{
Dtable[1][i]=Day++;
}
for(i=2;i<7;i++)
{
for(j=0;j<7;j++)
//建造日历表
{
if(Day<=b)
{
Dtable[i][j]=Day++;
}
else
{
continue;
}
}
}
printf("%d:%d\n",Years,Month);
for(i=0;i<7;i++)
//输出日历表
{
for(j=0;j<7;j++)
{
printf("%3d",Dtable[i][j]);
}
printf("\n");
}
getch();
//完毕!
}
⑤ 用C语言制作万年历
TC 2.0
/* welcome to use the WanNianLi system!
Copyright @ 2005 KongXinCai All rights reserved!:):):)*/
#include<stdio.h>
#include<stdlib.h>
char* month_str[]={"January","February","March","April","May","June","July","August","September","October","November","December"};
char* week[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
int IsLeapYear(int year) /*find out the year is leap year or not*/
{
if((year%4==0&&year%100!=0)||(year%400==0))
return 1;
else
return 0;
}
int month_day(int year,int month)
{
int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(IsLeapYear(year)&&month==2)
return 29;
else
return(mon_day[month-1]);
}
int DaySearch(int year,int month,int day) /*search what day this day is*/
{
int c=0;
float s;
int m;
for(m=1;m<month;m++)
c=c+month_day(year,m);
c=c+day;
s=year-1+(float)(year-1)/4+(float)(year-1)/100+(float)(year-1)/400-40+c;
return ((int)s%7);
}
int PrintAllYear(int year)/*print the all year*/
{
int temp;
int i,j;
printf("\n\n%d Calander\n",year);
for(i=1;i<=12;i++)
{
printf("\n\n%s(%d)\n",month_str[i-1],i);
printf("0 1 2 3 4 5 6 \n");
printf("S M T W T F S \n\n");
temp=DaySearch(year,i,1);
for(j=1;j<=month_day(year,i)+temp;j++)
{
if(j-temp<=0)
printf(" ");
else if(j-temp<10)
printf("%d ",j-temp);
else
printf("%d ",j-temp);
if(j%7==0)
printf("\n");
}
}
return 0;
}
int main()
{
int option,da;
char ch;
int year,month,day;
printf("Copyright @ 2005 TianQian All rights reserved!:):):)");
printf("\n\nWelcome to use the WanNianLi system!\n");
while(1)
{
printf("\nPlease select the service you need:\n");
printf("\n1 Search what day the day is");
printf("\n2 Search whether the year is leap year or not");
printf("\n3 Print the calander of the whole year");
printf("\n4 Exit\n");
scanf("%d",&option);
switch(option)
{
case 1:
while(1)
{
printf("\nPlease input the year,month and day(XXXX,XX,XX):");
scanf("%d,%d,%d,%c",&year,&month,&day);
da=DaySearch(year,month,day);
printf("\n%d-%d-%d is %s,do you want to continue?(Y/N)",year,month,day,week[da]);
fflush(stdin);
scanf("%c",&ch);
if(ch=='N'||ch=='n')
break;
}
break;
case 2:
while(1)
{
printf("\nPlease input the year which needs searched?(XXXX)");
scanf("%d",&year);
if(IsLeapYear(year))
printf("\n%d is Leap year,do you want to continue?(Y/N)",year);
else
printf("\n%d is not Leap year,do you want to continue(Y/N)?",year);
fflush(stdin);
scanf("%c",&ch);
if(ch=='N'||ch=='n')
break;
}
break;
case 3:
while(1)
{
printf("\nPlease input the year which needs printed(XXXX)");
scanf("%d",&year);
PrintAllYear(year);
printf("\nDo you want to continue to print(Y/N)?");
fflush(stdin);
scanf("%c",&ch);
if(ch=='N'||ch=='n')
break;
}
break;
case 4:
fflush(stdin);
printf("Are you sure?(Y/N)");
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
exit(0);
break;
default:
printf("\nError:Sorry,there is no this service now!\n");
break;
}
}
return 0;
}