當前位置:首頁 » 編程語言 » 簡單c語言萬年歷

簡單c語言萬年歷

發布時間: 2025-06-27 05:11:35

c語言萬年歷程序,要求輸入一個年份,列印出該年年歷,要求三個月並排輸出,最好加上注釋,謝謝啦。

#include<stdio.h>
#include<windows.h>
int menu()
{
char ch;
int x;
system("cls");
printf("請選擇相應的菜單:\n");
printf("***********************************\n");
printf("查詢某年某月某日是星期幾,輸入1回車:\n");
printf("查詢某年是否是閏年,輸入2回車:\n");
printf("列印某年的全年日歷,輸入3回車:\n");
printf("退出,輸入0回車:\n");
printf("***********************************\n");
scanf("%d",&x);
if(x==0)
{
printf("確認退出? Y/N ");
ch=getchar();
scanf("%c",&ch);
if(ch=='Y')
exit(0);
else
main();
}
return x;
}

int judge_week(year,mon,day)
{
int sum,i,flag=0;
if(year%400==0)
flag=1;
else if(year%4==0 && year%100!=0)
flag=1;
sum=30*(mon-1)+day;
for(i=1;i<=mon-1;i++)
{
if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
sum+=1;
if(i==2)
{
if(flag==1)
sum-=1;
if(flag==0)
sum-=2;
}
}
return sum;
}

look_week()
{
int year,mon,day,C,S,k;
char ch,week[7][3]={"日","一","二","三","四","五","六"};
system("cls");
printf("請輸入要查詢的年月日\nyear month day\n");
scanf("%d %d %d",&year,&mon,&day);
if(year<0 || mon<0 || mon>12 || day<0 || day>31)
{
system("cls");
printf("輸入的年月日不正確,請重新輸入!");
Sleep(3000);
look_week();
}
C=judge_week(year,mon,day);
S=year-1+(year-1)/4+(year-1)/100+(year-1)/400+C+2;
if(year<=2000 && year>=1901)
S=S+2;
else if(year<=1900)
S+=4;
k=S%7;
system("cls");
printf("\n%d年%d月%d日是星期%s.\n\n",year,mon,day,week[k]);
printf("是否要繼續查詢? Y/N ");
getchar();
ch=getchar();
if(ch=='Y')
look_week();
else
main();
}

look_runnian()
{
int flag=0,year;
char ch;
system("cls");
printf("請輸入要查詢的年份: ");
scanf("%d",&year);
if(year%400==0)
flag=1;
else if(year%4==0 && year%100!=0)
flag=1;
system("cls");
if(flag==1)
printf("%d是潤年\n",year);
else
printf("%d不是潤年\n",year);
printf("是否要繼續查詢? Y/N ");
getchar();
ch=getchar();
if(ch=='Y')
look_runnian();
else
main();
}

print_calendar()
{
int i,j=0,k,C,S,flag=0,m,year,mon,d[31];
char ch,week[7][3]={"日","一","二","三","四","五","六"};
system("cls");
printf("請輸入要列印日歷的年、月:\nyear month\n");
scanf("%d %d",&year,&mon);
C=judge_week(year,mon,1);
S=year-1+(year-1)/4+(year-1)/100+(year-1)/400+C+2;
if(year<=2000 && year>=1901)
S=S+2;
else if(year<=1900)
S+=4;
k=S%7;
if(year%400==0)
flag=1;
else if(year%4==0 && year%100!=0)
flag=1;
if(mon==1 || mon==3 || mon==5 || mon==7 || mon==8 || mon==10 || mon==12)
m=31;
else if(mon==2)
{
if(flag==1)
m=29;
if(flag==0)
m=28;
}
else
m=30;
for(i=1;i<=m;i++)
d[j++]=i;
system("cls");
printf("%d年%d月的日歷如下:\n\n",year,mon);
for(i=0;i<7;i++)
printf("%s\t",week[i]);
putchar(10);
for(i=0;i<k;i++)
printf("\t");
j=k;
for(i=0;i<m;i++)
{
printf("%d\t",d[i]);
j++;
if(j%7==0)
putchar(10);
}
printf("\n\n是否要繼續查詢? Y/N ");
getchar();
ch=getchar();
if(ch=='Y')
print_calendar();
else
main();
}

main()
{
int a;
a=menu();
switch(a)
{
case 1:look_week();break;
case 2:look_runnian();break;
case 3:print_calendar();break;
default:
{
printf("輸入有誤,請重新選擇相應的菜單:\n");
Sleep(3000);
main();
}
}

}
//2012年12月20日楊東平寫於北京交通大學

② 萬年歷查詢程序. C語言代碼

除了天數差計算,基本上是完成了你所提出的功能(天數差計算其實已經提供了年內序數計算方方法,可以在此基礎上完善即可)。包含星期計算、公歷轉農歷、農歷轉公歷、節氣查詢。數據與演算法均為原創,絕非網上復制而來。附消態瞎件中有源代碼,同時附帶農歷數據提取工具,可提取1600到7000年之間的任意年份區間,提取後的數據為壓縮數據,佔用空間小,同時數據包含數九、三伏、入梅和出梅,非常適合寫一份完整的萬年歷。

吧。提取碼:ooj7

③ 跪求萬年歷—公歷轉換器噶C語言程序代碼啊!!!

#include <stdio.h>
#include<conio.h>
#include<stdlib.h>
int IsLeapYear(int);
int main()
{
int i;
int day;
int year;
int temp;
int temp_i;
long int Year_days = 0;
int Year_Start = 1;
int Per_Year_Days;
int month_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29};

printf("Please enter the year: ");
scanf("%d",&year);

while(Year_Start < year)
{
if( IsLeapYear( Year_Start ) )
Per_Year_Days = 366;
else
Per_Year_Days = 365;

Year_days = Year_days + Per_Year_Days;
Year_Start++;
}

for( temp = 1; temp <=12; temp++ )
{
switch( temp )
{
case 1:
printf(" January(%d)\n",year);
break;
case 2:
printf(" February(%d)\n",year);
break;
case 3:
printf(" March(%d)\n",year);
break;
case 4:
printf(" April(%d)\n",year);
break;
case 5:
printf(" May(%d)\n",year);
break;
case 6:
printf(" June(%d)\n",year);
break;
case 7:
printf(" July(%d)\n",year);
break;
case 8:
printf(" August(%d)\n",year);
break;
case 9:
printf(" September(%d)\n",year);
break;
case 10:
printf(" October(%d)\n",year);
break;
case 11:
printf(" November(%d)\n",year);
break;
case 12:
printf(" December(%d)\n",year);
break;
}
i = Year_days % 7;
printf("Mon Tue Wed Thu Fri Sat Sun\n");
if( i != 0 )
for( temp_i = 0; temp_i < i; temp_i++)
printf(" ");
day = 1;
if( IsLeapYear(year) && temp == 2)
while( day <= month_day[12] )
{
if( day >1 )
if( Year_days % 7 == 0 )
printf("\n");
if( day >= 10 )
printf("%d ",day);
else
printf("%d ",day);
Year_days++;
day++;
}

else
while (day <= month_day[temp-1])
{
if( day > 1 )
if( Year_days % 7 == 0 )
printf("\n");
if( day >=10 )
printf("%d ",day);
else
printf("%d ",day);
Year_days++;
day++;
}
printf("\n");
if( getch() == 'q' )
exit(0);
}
getch();
}

int IsLeapYear( int year )
{
if ((year %4 == 0) && (year % 100 != 0) ||
(year % 400 == 0) )
return 1;
else
return 0;
}

④ C語言 萬年歷中 星期差的計算問題

這個星期差指的是每個月的1日的星期幾與這年1月1日星期幾間的差,不是跨年計算的,是同一年的月份的第1天的星期幾和1月1日的差。

程序里有:
case 5: dm=1+m2; month=31; break;

意思就是說如果1月1日是星期六,那麼同年5月1日就是星期六+(1+m2)。
如果是閏年,m2=1,否則m2=0。
2000年是閏年,所以2000年5月1日就是 星期六+(1+1)=星期一。
每月第n日就是第1日的(星期幾+(n-1))%7的值了:
所以,5月4日就是 星期(六+(1+1)+(4-1))%7=4,星期四。

熱點內容
婦科外傷應急演練腳本 發布:2025-06-27 10:36:47 瀏覽:255
壓縮機吹油 發布:2025-06-27 10:36:13 瀏覽:357
分享通信原始密碼多少 發布:2025-06-27 10:36:04 瀏覽:966
我的世界花雨庭伺服器北站 發布:2025-06-27 10:30:07 瀏覽:289
cad怎麼編程 發布:2025-06-27 10:27:17 瀏覽:718
天籟20t智享版多哪些配置 發布:2025-06-27 10:21:43 瀏覽:944
安全網關伺服器搭建 發布:2025-06-27 10:21:42 瀏覽:348
電腦伺服器怎麼清除 發布:2025-06-27 10:17:31 瀏覽:48
powermill編程難點 發布:2025-06-27 10:15:39 瀏覽:90
王者榮耀安卓蘋果哪個大神多 發布:2025-06-27 10:14:09 瀏覽:25