Ⅰ 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語言編寫萬年歷,要求輸出任意一年的某月,能顯示出這個月的日歷
1、首先要判斷一個年份是閏年還是平年,用一個子程序來做。

Ⅲ 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語言編寫 年歷顯示程序
此題不是很難,我會前三個
關鍵是算那一年的第一天是周幾
給你個基本演算法,一年是365天,閏年366天
364是7的倍數,這樣一年多出一天,中間多少個閏年,在加上相應的天數即可
400年多出來的天數是400+97=497也是7的倍數,那麼400年一輪回,這樣就算400年以內的即可
一個子函數,返回這一年的第一天是周幾,咐猛輪很好做
int ye(int year)
{
  int y=year%400;
  int day=y;
  int i;
  for(i=0;i<y;i++)
    if(閏年判斷)
         day++;
  return day%7;
}
做一個月份天數的全局數組
int mo[12]={31,28,31,30,31,30,31,31,30,31,30,31};
需要時用一個if判斷閏年改變m0[1]的值是28還是29
列印子函數,有一個小技巧,就是每個月前面的空缺部分,這個1月份是ye子函數的返回值,後面的你看和前面月份是不是重合啊,吧這知頌個記錄下來在下一月份用即可
1 2
3 4
這樣月份排列更好列印一些,你的那個截圖有點麻煩
int pr(int year)
{
   int k=ye(year);
   int i,j,;
   if(閏年判斷)
      mo[1]=29;
  else
     mo[1]=28;
  for(i=0;i<12;i++)
  {
      printf("周幾英文的列印");
      for(j=0;j<k;j++)
         printf("一般是四個空格,就是月份前面空缺的列印");
     for(j=1;j<=mo[i];j++)
     {
        printf("%4d",j);
        k++;
        if((k+j)%7==0)
           printf("\n");
    }
    k%=7;
    if(k!=0)
       printf("\n");     
  }
}
如果像你那樣,感覺需要賦值一個大一點的數組,在衡信吧數組列印出來更好,呵呵
Ⅳ C語言編程日歷顯示
#include <stdio.h> 
#include <stdlib.h> 
int leap(int); //判斷是否為閏年 
int md(int m,int y); //返回頌含本月的天數 
void prtweek(void); //輸出表頭 
int fw(int m,int y); //返回本月一號是星期幾 
void prtmonth(int m); //輸出月份表頭 
int main(int argc, char* argv[]) 
{ 
int y,m,i,test,week; 
printf("Year:"); 
scanf("%d",&y); 
for (m=1; m<=12; m++) { 
test=1; 
prtmonth(m); 
prtweek(); 
week=fw(m,y); 
if (week!=6) 
for (i=0; i<=week; i++) { 
putchar('\含禪t'); 
test++; 
} 
for (i=1; i<=md(m,y); i++,test++) { 
printf("%d\t",i); 
if (test%7==0) { 
putchar('\n'); 
} 
} 
putchar('\n'); 
system("pause");//暫停,以便觀察輸出 
} 
return 0; 
} 
int leap(int y) 
{ 
return (y%4==0&&y%100||y%400==0)?1:0; 
} 
int md(int m,int y) 
{ 
int d; 
switch (m) { 
case 1: 
case 3: 
case 5: 
case 7: 
case 8: 
case 10: 
case 12:d=31;break; 
case 4: 
case 6: 
case 9: 
case 11:d=30;break; 
case 2:d=leap(y)?29:28;break; 
} 
return d; 
} 
void prtweek(void) 
{ 
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n","Sun","Mon","Tue","Wed","Thur","Fri","Sat"); 
} 
int fw(int m,int y) 
{ 
int f; 
if (m<3) { 
m+=12; 
y--; 
} 
f=(1+2*m+3*(m+1)/5+y+y/野老笑4-y/100+y/400)%7; 
return f; 
} 
void prtmonth(int m) 
{ 
switch (m) { 
default: 
case 1:puts("===January===");break; 
case 2:puts("===February===");break; 
case 3:puts("===March===");break; 
case 4:puts("===April===");break; 
case 5:puts("===May===");break; 
case 6:puts("===June===");break; 
case 7:puts("===July===");break; 
case 8:puts("===August===");break; 
case 9:puts("===September===");break; 
case 10:puts("===October===");break; 
case 11:puts("===November===");break; 
case 12:puts("===December===");break; 
} 
}
Ⅵ 如何用c語言做個日歷表
1、功能要求 :
 1)輸入任一年將顯示出該年的所有月份日期,對應的星期
2)注意閏年情況
其顯示格式要求如下:
1)份:中文英文都可以,
2)下一行顯示星期,從周日到周六,中英文都可以
3)下一行開始顯示日期從1號開始,並按其是周幾實際情況與上面的星期數垂直對齊
2、常式:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
intIsLeapYear(int);//聲明頭文件和函數
voidmain()
{
inti;
intday;
intyear;
inttemp;
inttemp_i;
longintYear_days=0;
intYear_Start=1;
intPer_Year_Days;
intmonth_day[]={31,28,31,30,31,30,31,31,30,31,30,31,29};//每個月的天數,最後一個是閏年2月
printf("Pleaseentertheyear:");
scanf("%d",&year);//輸入年份
while(Year_Start<year)//計算從公元1年1月1日到你所查詢年份前一年的天數,是為了以後確定這一年的第一天是星期幾
{
if(IsLeapYear(Year_Start))//確定一年的天數,閏年為366天,一般為365天
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)
{
case1:
printf("January(%d) ",year);//如January(2008)
break;
case2:
printf("February(%d) ",year);
break;
case3:
printf("March(%d) ",year);
break;
case4:
printf("April(%d) ",year);
break;
case5:
printf("May(%d) ",year);
break;
case6:
printf("June(%d) ",year);
break;
case7:
printf("July(%d) ",year);
break;
case8:
printf("August(%d) ",year);
break;
case9:
printf("September(%d) ",year);
break;
case10:
printf("October(%d) ",year);
break;
case11:
printf("November(%d) ",year);
break;
case12:
printf("December(%d) ",year);
break;
}
i=Year_days%7;//計算這個月第一天是星期幾
printf("MonTueWedThuFriSatSun ");
if(i!=0)
for(temp_i=0;temp_i<i;temp_i++)//第一天不是星期一,在前面補空格,本來的空格少了,我加了兩個
printf("");
day=1;
if(IsLeapYear(year)&&temp==2)//閏年的2月
while(day<=month_day[12])
{
if(day>1)
if(Year_days%7==0)//如果不是1號且昨天是星期天,輸入回車,換行
printf(" ");
if(day>=10)//如果大於或等於10號則輸出日期並加2個空格,小於10號輸出日期並加3個空格
printf("%d",day);//開始沒想到這幾行是幹嘛用的,只要一個輸出就好嘛,後來才想到是用來調整格式的
else//只是他並沒有調整好,我做了下修改,現在很整齊了
printf("%d",day);
Year_days++;
day++;
}
else//不是閏年2月的
while(day<=month_day[temp-1])//輸出,同上
{
if(day>1)
if(Year_days%7==0)
printf(" ");
if(day>=10)//理由同上
printf("%d",day);
else
printf("%d",day);
Year_days++;
day++;
}
printf(" ");
if(getch()=='q')//輸入q退出程序
exit(0);
}
getch();
}
intIsLeapYear(intyear)//判斷是否為閏年
{
if((year%4==0)&&(year%100!=0)||//年份能被4整除且不能被100整除或者能被400整除的為閏年
(year%400==0))
return1;
else
return0;
}
