本篇文章给大家谈谈日历问题c语言,以及日历c语言程序2004对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、C语言日历问题,急2、C语言编程问题,求救【日历问题】!答复追加财富3、C语言~~~日历问题~~~~~~~~4、c语言问题–日历5、关于C语言编日历的一些问题6、C语言万年历问题
C语言日历问题,急
这是我自己写的源代码,你可以参考一下,但千万不能够简单的粘贴过去。。
望采纳。
#includestdio.h
int isleap(int);//用于判断输入的年份是否为闰年
int GetMonthDays(int, int);//用于返回year年month月的天数
int GetWeekDays(int, int, int);//用于返回year年month月day日式星期几
void PrintMonthCalender(int, int);//用于打印出日历表
main()
{
int year, month;//year用于保存输入的年份,month用于保存输入的月份
printf(“Please input year and month:”);
scanf(“%d %d”, year, month);
printf(“The result is:\n%28d-%d\n”, year, month );
PrintMonthCalender(GetWeekDays(year, month, 1), GetMonthDays(year, month));
system(“pause”);
return 0;
}
int isleap(int year)//函数定义
{
if(year%4==0(year%100)!=0||year%400==0)
return 1;//是闰年就返回1
else
return 0;//不是闰年就返回0
}
int GetMonthDays(int year, int month)//函数定义
{
if(isleap(year)==1month==2)
return 29;
else if(month==2)
return 28;
else if(month==4||month==6||month==9||month==11)
return 30;
else
return 31;
}
int GetWeekDays(int year, int month, int day)//函数定义
{
int sumDays=0, weekDay;
sumDays=30*(month-1);//先把每月都当30天来算,然后在后面再修正
switch(month)//现在days计算的是1年内month月1号前的总天数
{
case 2: case 6: case 7: sumDays+=1;break;//days+1修正2,6,7月前的总天数
case 9: case 10: sumDays+=3;break;//days+3修正 9,10月前的总天数
case 11: case 12: sumDays+=4;break;//days+4修正11,12月前的总天数
case 3: sumDays-=1;break;//days-1修正3月前的总天数
case 8: sumDays+=2;//days+2修正8月前的总天数
}
if(isleap(year)==1month2)
sumDays++;//如果是闰年且月份大于2则sumDays+1
sumDays+=(365*(year-1)+(year-1)/400+(year-1)/4-(year-1)/100);//计算总天数
weekDay=(sumDays+day)%7;
return weekDay;
}
void PrintMonthCalender(int startDay, int days)//函数定义
{
int i, j=startDay;
printf(“Sun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\n”);//打印出星期的格式
for(i=1;i=startDay;i++)
printf(“\t”);
for(i=1;i=days;i++)
{
printf(“%d\t”,i);
j++;
if(j%7==0)
printf(“\n”);
}
printf(“\n\n”);
}
C语言编程问题,求救【日历问题】!答复追加财富
#include stdio.h
int type(int );
char week[7][10]={“Saturday”, “Sunday”, “Monday”, “Tuesday”, “Wednesday”, “Thursday”,
“Friday”};
int year[2]={365,366}; //year[0]表示非闰年的天数,year[1]表示闰年的天数。
int
month[2][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};
//month[0]表示非闰年里每个月的天数,month[1]表示闰年里每个月的天数。
void main()
{
int days, dayofweek; //days 表示输入的天数,dayofweek 表示星期几。
int i = 0, j = 0;
while (scanf(“%d”, days) days != -1) {
dayofweek = days % 7;
for(i = 2000; days = year[type(i)]; i++)
days -= year[type(i)];
for(j = 0; days = month[ type(i) ][ j ]; j++)
days -= month[ type(i) ][ j ];
printf(“%d-%02d-%02d %s\n”, i, j + 1, days + 1, week[dayofweek]);
}
}
int type(int m){ //判断第 m年是否是闰年,是则返回 1,否则返回 0。
if(m % 4 != 0 || (m % 100 == 0 m % 400 != 0)) return 0; //不是闰年
else return 1; // 是闰年
}
C语言~~~日历问题~~~~~~~~
#include “stdio.h”
long int f(int year,int month)
{/*f(年,月)=年-1,如月3;否则,f(年,月)=年*/
if(month3) return year-1;
else return year;
}
long int g(int month)
{/*g(月)=月+13,如月3;否则,g(月)=月+1*/
if(month3) return month+13;
else return month+1;
}
long int n(int year,int month,int day)
{
/*N=1461*f(年、月)/4+153*g(月)/5+日*/
return 1461L*f(year,month)/4+153L*g(month)/5+day;
}
int w(int year,int month,int day)
{
/*w=(N-621049)%7(0=w7)*/
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}};
main()
{int sw,leap,i,j,k,wd,day;
int year;/*年*/
char title[]=”SUN MON TUE WED THU FRI SAT”;
clrscr();
printf(“Please input the year whose calendar you want to know: “);/*输入年*/
scanf(“%d%*c”,year);/*输入年份值和掠过值后的回车*/
sw=w(year,1,1);
leap=year%4==0year%100||year%400==0;/*判闰年*/
for(i=0;i12;i++)
for(j=0;j6;j++)
for(k=0;k7;k++)
date[i][j][k]=0;/*日期表置0*/
for(i=0;i12;i++)/*一年十二个月*/
for(wd=0,day=1;day=day_tbl[leap][i];day++)
{/*将第i+1月的日期填入日期表*/
date[i][wd][sw]=day;
sw=++sw%7;/*每星期七天,以0至6计数*/
if(sw==0) wd++;/*日期表每七天一行,星期天开始新的一行*/
}
printf(“\n|==================The Calendar of Year %d =====================|\n|”,year);
for(i=0;i6;i++)
{/*先测算第i+1月和第i+7月的最大星期数*/
for(wd=0,k=0;k7;k++)/*日期表的第六行有日期,则wd!=0*/
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;jwd;j++)
{
printf(” “);/*输出四个空白符*/
/*左栏为第i+1月,右栏为第i+7月*/
for(k=0;k7;k++)
if(date[i][j][k])
printf(“%4d”,date[i][j][k]);
else printf(” “);
printf(” “);/*输出十个空白符*/
for(k=0;k7;k++)
if(date[i+6][j][k])
printf(“%4d”,date[i+6][j][k]);
else printf(” “);
printf(” |\n|”);
}
/*scanf(“%*c”);/*键入回车输出下一个月的日历*/
}
puts(“=================================================================|”);
puts(“\n Press any key to quit…”);
getch();
}
c语言问题–日历
#includestdio.h
char month[12][10] = {
“January”,
“February”,
“March”,
“April”,
“May”,
“June”,
“July”,
“August”,
“September”,
“October”,
“November”,
“December”
};
int monthdy[12] = {
31, 28, 31,
30, 31, 30,
31, 31, 30,
31, 30, 31
};
char week[7][10] = {
“Monday”,
“Tuesday”,
“Wednesday”,
“Thursday”,
“Friday”,
“Saturday”,
“Sunday”
};
int leap(unsigned year)
{
if((year%4==0year%100!=0)||year%400==0)
return 1;
else return 0;
}
void printwk(unsigned year,unsigned wday)
{
int i,j;
if(leap(year)) monthdy[1]=29;
wday = wday – 1;
for(i=0;i12;i++)
{
for(j=0;jmonthdy[i];j++)
{
wday = wday++ % 7;
}
printf(“%s %d,%u is %s\n”,month[i],monthdy[i],year,week[wday-1]);
}
}
int main(void)
{
unsigned year,wday;
printf(“year,wday: “);
scanf(“%u%u”,year,wday);
putchar(10);
printwk(year,wday);
return 0;
}
WINTC中已编译通过,与LZ提供的答案相同。。。
关于C语言编日历的一些问题
首先,给你提个意见,统计星期几,不用从公元0年开始,一路递增到指定年来统计经过的天数,输个8000年,要做8000次循环,算法可简化为:
Year_days=year/4*(365*3+366)-(year%4==0?0:(4-(year%4))*365)
当输入非数字时,scanf对变量赋值将失败,即保留变量(Year)原来的值(初始化为0),即表示是输入显示为公元0年的日历(提问中说的是公元1年,应该是公元0年吧?),在你判断while(Year_Start
year)循环时自然不满足条件,即天数(Year_days)为0,明白了没有?
当输入大于32767时,八位二进制的整形数据的第一位变成1(表示是负数),则相当于负数以补码形式在内存中存储,即变量成为负数,在判断while(Year_Start
year)循环时自然不满足条件,即天数(Year_days)为0,所以结论同上。
只要在做统计天数前,在前面判断年份是否合法即可。
C语言万年历问题
#include stdio.h
int readYear();
int readMonth();
void printMonth(int year, int month) ;
void printMonthTitle(int year, int month) ;
void printMonthBody(int year, int month) ;
int getStartDay(int year, int month) ;
int getTotalNumberOfDays(int year, int month) ;
int getNumberOfDaysInMonth(int year, int month) ;
int isLeapYear(int year) ;
int main()
{
int year,month;
year=readYear();
month=readMonth();
printMonth(year,month);
getchar();
getchar();
return 0;
}
//读取用户输入的年份数据
int readYear()
{
int year;
printf(“请输入年份:”);
scanf(“%d”,year);
return year;
}
//读取用户输入的月份数据
int readMonth()
{
int month;
printf(“请输入月份:”);
scanf(“%d”,month);
return month;
}
//打印year年month月的日历表
void printMonth(int year, int month)
{
printMonthTitle(year,month);
printMonthBody(year,month);
}
//打印日历标题
void printMonthTitle(int year, int month)
{
printf(“%17d年%d月\n”,year,month);
printf(” ———————————-\n”);
printf(” 日 一 二 三 四 五 六\n”);
}
// 打印日历主体
void printMonthBody(int year, int month)
{
int weekday,day,ndays,i,n;
ndays=getNumberOfDaysInMonth(year,month); //获得每月天数
weekday=getStartDay(year,month); //确定该月1号周几
//for(i=0;in;i++) //这里多余了
// printf(” “);
for(day=1;day=ndays;day++)
{
printf(“%5d”,day);
if(weekday==6)//到周六换行
printf(“\n”);
weekday=(weekday+1)%7;
}
}
//获取year年month月的第一天的星期数
int getStartDay(int year, int month)
{
int i;
int weekday=getTotalNumberOfDays(year,month) ;
for(i=1;imonth;i++)
{
weekday=(getNumberOfDaysInMonth(year, i))%7;
}
return weekday;
}
//获取从1800年1月1日(星期三)到year年month月1日的相隔总天数
int getTotalNumberOfDays(int year,int month) //你写函数的时候写错了
{
int n=year-1800;
n=n+(n-1)/4+1;
n=n%7;
return n;
}
//获取year年month月的总天数
int getNumberOfDaysInMonth(int year, int month)
{
if(month==4||month==6||month==9||month==11||month==2)
{
if(month==2)
{
if(isLeapYear(year))
return 29;
else
return 28;
}
else
return 30;
}
else
return 31;
}
//判断year年是否为闰年(如果为闰年,则返回1,否则返回0)
int isLeapYear(int year)
{
if ((year%4==0year%100!=0)||year%400==0)
return 1;
}
你运行下对不,有啥问题你就说?
日历问题c语言的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于日历c语言程序2004、日历问题c语言的信息别忘了在本站进行查找喔。