當前位置:首頁 » 編程語言 » c語言程序設計萬年歷
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言程序設計萬年歷

發布時間: 2022-01-14 19:06:27

c語言課程設計-萬年歷

1.系統封面設計
內容:題目名稱(中英文)、進入(中英文)、作者:***、時間:****-**-**
2.輸入界面
內容:(1)密碼口令輸入及容錯(3次)
(2)年份的輸入及容錯(3次)
3.日歷計算設計
(1)求某月某日實行奇跡的函數(邱每月一號的星期數)。演算法:(y-1)+(y-1)/4-(y-1)/100+(y-1)/400+c 得出S (y為年份,c為某月某日是這一年的第幾天,S為總的天數)
(2)邱某月某日至這一年第幾天的函數(求c) 閏年的演算法: y/400==0 ?或y/400==0&&y/100!=0
根據(1)(2)求出每個月的日期
4、日歷格式顯示設計
要求:每屏顯示4個月。
-------------------------------

⑵ 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語言程序設計~~~萬年歷

#include<stdio.h>
int leap (int year)
{
if(year%4==0&&year%100!=0||year%400==0)
return 1;
else
return 0;
}
int days_month (int month,int year) {
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
return 31;
if(month==4||month==6||month==9||month==11)
return 30;
if(month==2&&leap(year)==1)
return 29;
else
return 28;
}
int firstday(int month,int year)
{
int w;
w=(1+2*month+3*(month+1)/5+year+year/4+year/400-year/100)%7+1;
return w;
}
void main()
{
int i,j=1,k=1,a,b,month,year;
printf("input month and year:");
scanf("%d%d",&month,&year);
b=days_month(month,year);
a=firstday (month,year);
printf("\n******************************\n");
printf(" 公元%d年%2d月",year,month); printf("\n******************************\n");
printf(" Sun Mon Tue Wed Thu Fri Sat \n");
if(a==7)
{
for(i=1;i<=b;i++)
{
printf("%4d",i);
if(i%7==0)
{
printf("\n");
}
}
}
if(a!=7)
{
while (j<=4*a)
{
printf(" ");
j++;
}
for(i=1;i<=b;i++)
{
printf("%4d",i);
if(i==7*k-a)
{
printf("\n");
k++;
}
}
}
printf("\n");
}

⑷ C語言程序設計萬年歷

int GetDays (int year,int month,int day)
{
int sum=0;
if (DateCheck(year,month,day)==0)
{
return -1;//日期有誤
}
if(year>=1901)
{
int X=(int)(year/100);//世紀數
int Y=X-(int)(X/4);//如果按4年一閏來算,Y指的是比實際上多算的天數,在下面需要減去
if (month<=2&&month>0)
{
year--;//把1月、2月視為上一年的13月、14月(純粹為了計算需要)
month+=12;
}
sum=(int)(365.25*(year-1900))+(int)(30.6*(month+1))+day-Y-49;//以365.25(本來實際太陽年是365.2425天)來計算是為了計算按4年一閏的整數年總天數,加上月份天數再加上餘下天數,減掉多閏天數,再減掉一個偏差值(多加的)
//月份以30.6天的平均值計算。最後減去的49,是多加的一個月以及其餘相差天數的和,可得到1900年1月1日的積日為0
}
return sum;//返回距離1900年1月1日的總天數(積日)
}

⑸ C語言程序設計 萬年歷列印設計

以下程序來源《C精粹(第2版)》 #include "stdio.h" #include "stdlib.h" long int f(int year,int month) {/*f(年,月)=年-1,如月<3;否則,f(年,月)=年*/ if(month<3) return year-1; else return year; } long int g(int month) {/*g(月)=月+13,如月<3;否則,g(月)=月+1*/ if(month<3) 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<=w<7)*/ 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(); system("cls"); printf("Please input the year whose calendar you want to know: ");/*輸入年*/ scanf("%d%*c",&year);/*輸入年份值和掠過值後的回車*/ sw=w(year,1,1); leap=year%4==0&&year%100||year%400==0;/*判閏年*/ for(i=0;i<12;i++) for(j=0;j<6;j++) for(k=0;k<7;k++) date[i][j][k]=0;/*日期表置0*/ for(i=0;i<12;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;i<6;i++) {/*先測算第i+1月和第i+7月的最大星期數*/ for(wd=0,k=0;k<7;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;j<wd;j++) { printf(" ");/*輸出四個空白符*/ /*左欄為第i+1月,右欄為第i+7月*/ for(k=0;k<7;k++) if(date[i][j][k]) printf("%4d",date[i][j][k]); else printf(" "); printf(" ");/*輸出十個空白符*/ for(k=0;k<7;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語言程序設計 萬年歷報告書

#include <stdio.h>
void main()
{
int year,month,day,days,sum,i,n=0,a;
char c;
redo: printf("請輸入年/月/日(例如:2010/1/1):\n");
scanf("%d/%d/%d",&year,&month,&day);
if(month==1&&(day>=32||day<=0))
{
printf("輸入有誤!1月只能有31天!\n");
goto redo;
}
if(month==2)
{
if((year%400==0)||(year%4==0&&year%100!=0))
{
if(day>=30||day<=0)
{
printf("輸入有誤!%d年是閏年,二月只能有29天!\n",year);
goto redo;
}
}
else if(day>=29||day<=0)
{
printf("輸入有誤!%d年是平年,二月只能有28天!\n",year);
goto redo;
}
}
if(month==3&&(day>=32||day<=0))
{
printf("輸入有誤!3月只能有31天!\n");
goto redo;
}
if(month==4&&(day>=31||day<=0))
{
printf("輸入有誤!4月只能有30天!\n");
goto redo;
}
if(month==5&&(day>=32||day<=0))
{
printf("輸入有誤!5月只能有31天!\n");
goto redo;
}
if(month==6&&(day>=31||day<=0))
{
printf("輸入有誤!6月只能有30天!\n");
goto redo;
}
if(month==7&&(day>=32||day<=0))
{
printf("輸入有誤!7月只能有31天!\n");
goto redo;
}
if(month==8&&(day>=32||day<=0))
{
printf("輸入有誤!8月只能有31天!\n");
goto redo;
}
if(month==9&&(day>=31||day<=0))
{
printf("輸入有誤!9月只能有30天!\n");
goto redo;
}
if(month==10&&(day>=32||day<=0))
{
printf("輸入有誤!10月只能有31天!\n");
goto redo;
}
if(month==11&&(day>=31||day<=0))
{
printf("輸入有誤!11月只能有30天!\n");
goto redo;
}
if(month==12&&(day>=32||day<=0))
{
printf("輸入有誤!12月只能有31天!\n");
goto redo;
}
if(month>=1&&month<=12)
{
if(year%400==0||(year%4==0&&year%100!=0))
printf("%d年是閏年。\n",year);
else printf("%d年是平年。\n",year);
}
if(year>=1901) goto loop1;
else goto loop2;
loop1: for(i=1901;i<year;i++)
{
if(i%400==0||(i%4==0&&i%100!=0))
n++;
}
days=(year-1901-n)*365+n*366;
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("一年內只能有12個月!請重新輸入!\n");goto redo;
}
a=sum+day+days;
if((year%400==0||(year%4==0&&year%100!=0))&&(month>=3))
a++;
if(a%7==1) printf("%d年%d月%d日是星期二。\n",year,month,day);
if(a%7==2) printf("%d年%d月%d日是星期三。\n",year,month,day);
if(a%7==3) printf("%d年%d月%d日是星期四。\n",year,month,day);
if(a%7==4) printf("%d年%d月%d日是星期五。\n",year,month,day);
if(a%7==5) printf("%d年%d月%d日是星期六。\n",year,month,day);
if(a%7==6) printf("%d年%d月%d日是星期天。\n",year,month,day);
if(a%7==0) printf("%d年%d月%d日是星期一。\n",year,month,day);
goto label;
loop2: for(i=1900;i>year;i--)

{
if(i%400==0||(i%4==0&&i%100!=0))
n++;
}
days=(1900-year-n)*365+n*366;
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=58;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("一年內只能有12個月!請重新輸入!\n");goto redo;
}
if(year%400==0||(year%4==0&&year%100!=0))
a=366-(day+sum)+days;
else a=365-(day+sum)+days;
if((year%400==0||(year%4==0&&year%100!=0))&&(month>=3))
a--;
if(a%7==0) printf("%d年%d月%d日是星期一。\n",year,month,day);
if(a%7==1) printf("%d年%d月%d日是星期天。\n",year,month,day);
if(a%7==2) printf("%d年%d月%d日是星期六。\n",year,month,day);
if(a%7==3) printf("%d年%d月%d日是星期五。\n",year,month,day);
if(a%7==4) printf("%d年%d月%d日是星期四。\n",year,month,day);
if(a%7==5) printf("%d年%d月%d日是星期三。\n",year,month,day);
if(a%7==6) printf("%d年%d月%d日是星期二。\n",year,month,day);
label: printf("Do you want to continue?Y/N:");
getchar();
c=getchar();
if(c=='Y'||c=='y')
{
n=0;
goto redo;
}
}

⑺ c語言程序設計題 一萬年歷系統

/*
翻頁我就不做了
*/

#include"stdio.h"

main( )
{
int year, N ,m,d,y,c,Wd,month;
int i,maxday;

printf("please input year: ");
scanf("%d",&year);
printf("please input month: ");
scanf("%d",&month);

if(month>=13||month<=0)
{
printf("HAVE WRONG!");
return -1;
}

m=month;
printf("\n============%d,%2d============\n",year,month);

switch(m)
{
case 1:maxday=31;break;
case 2:
if( (year%4==0&&year%100!=0) || (year%400==0) )
maxday=29;
else
maxday=28;
break;
case 3:maxday=31;break;
case 4:maxday=30;break;
case 5:maxday=31;break;
case 6:maxday=30;break;
case 7:maxday=31;break;
case 8:maxday=31;break;
case 9:maxday=30;break;
case 10:maxday=31;break;
case 11:maxday=30;break;
case 12:maxday=31;break;
}

if(0<m&&m<=2)
{
N=year-1;
m=m+12-2;
}
else
{
N=year;
m=m-2;
}
c=N/100;
y=N%100;
//這是一個著名的是蔡勒(Zeller)公式。具體原理請網上搜索一下。
Wd=((1+(13*m-1)/5+y+y/4+c/4-2*c)%7+7)%7;

printf(" SUN MOU TUE WED TUR FRI SAT\n");
for(i=0;i<Wd;i++)
printf("%4c",' ');
for(d=1;d<=maxday;d++)
{
printf("%4d",d);
Wd=(Wd+1)%7;
if(Wd==0)
printf("\n");
}
printf("\n");

}

⑻ 求C語言程序(萬年歷)講解

你的代碼一共有如下幾個問題:
1.
你使用scanf("%c",&a)來接收用戶輸入的一個字元時,會將回車符也接收下來。C語言在處理時,會將用戶輸入放在鍵盤緩沖區,使用scanf來接收%c時,編譯器從鍵盤緩沖區讀取一個char字元,但是並不清空後面的字元,所以導致下一次scanf("%c",&a)時,將剩下的回車符先給讀進來,並進行處理了。
要解決這個問題,可以使用getch()或者getche()函數。
但是:
getch()介面,接收字元後不會將字元回顯到顯示器,所以用戶看不到自己輸入的字元。
而getche()介面就沒有這個問題,所以應該使用getche()。
2.
循環計數錯誤,多循環一次。
這個你仔細推算一下就出來了。
一般解決這種問題的話,使用do/while循環較多,因為do/while循環可讀性好一些。
以下是改過以後的代碼,已經編譯運行確認:
#include
<stdio.h>
#include
<conio.h>
main()
{
char
a;
int
i=3;
a=getche();//這里使用getche()來接收用戶輸入,既可以回顯,也不會接收回車
do
{
i--;//將i--放在這里,防止出現可以輸入4次的情況
if(a!='b'&&i>0)
{
printf("錯誤\n");
a=getche();//這里使用getche()來接收用戶輸入,既可以回顯,也不會接收回車
}
else
break;
}while(1);
if(a=='b')
{
printf("正確");
}
else
getch();
}

⑼ C語言程序設計 萬年歷查詢程序。

實驗名稱:萬年歷的查詢及列印
【內容】:設計一個查詢並列印萬年歷的程序。
【步驟】:
1.
畫出程序流程圖;
2.
編寫程序;
3.
調試程序,對調試過程中出現的問題進行分析,找出錯誤的原因並予改正;
4.
寫出通過調試並修改正確的原程序。
【要求】:
1.
程序運行後,首先在屏幕上顯示主菜單:
1.
查詢某年某月某日是星期幾
2.
查詢某年是否是閏年
3.
列印某年的全年日歷
4.
退出
2.
在主菜單中輸入1後,顯示:

「請輸入年月日(XXXX,XX,XX)」

運行後輸出:XXXX年XX月XX日是星期X,是否繼續查詢(Y/N)?

如果輸入Y,則重新顯示
「請輸入年月日(XXXX,XX,XX)」,否則回到主菜單。
3.
在主菜單中輸入2後,顯示:

「請輸入要查哪一年?(XXXX)」


運行後輸出:XXXX年是(否)是閏年,是否繼續查詢(Y/N)?

如果輸入Y,則重新顯示,「請輸入要查哪一年?(XXXX)」,否則回到主菜單。
4.
在主菜單中輸入3後,顯示:

「請輸入要列印的年份(XXXX)」


運行後輸出XXXX年的日歷,格式為:
XXXX

X(月數)

0
1
2
3
4
5
6

S
M
T
W
T
F
S

x
x
x
x
x
x
x

x
x
x
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
X(月數)
0
1
2
3
4
5
6

S
M
T
W
T
F
S

x
x
x
x

x
x
x
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
.
.
.
.
.

運行完後顯示:「是否繼續列印(Y/N)?」

如果輸入Y,則重新顯示,「請輸入要列印的年份(XXXX)」,否則回到主菜單。
5.
在主菜單中輸入4後,顯示:「是否要真的退出(Y/N)?」


如果輸入Y,結束程序運行,否則重新顯示主菜單。
【提示】:
1.
閏年計算:滿足下列二者之一,是閏年:
能被4整除,但不能被100整除;
能被4整除,且能被400整除。
2.閏年的二月是29天,平年的二月是28天
3.星期幾的計算:

S=X-1+(X-1)/4+(X-1)/100+(X-1)/400+C

X是年份,C是該年從元旦開始到到這一日的天數。

S/7的余數既是星期數
例1:1982年12月26日

由於1982年不是閏年(不能被4整除),所以該年的二月是28天。

C=31+28+31+30+31+30+31+31+30+31+30+26=360
(1月到11月的天數+12月的實際天數)
S=1982-1+(1982-1)/4+(1982-1)/100+(1982-1)/400+360=2821.3925

S/7=2821/7=403
余數為0,所以該日是星期天。
例2:2000年3月8日

由於2000年是閏年(能被4整除,又能被100和400整除),所以該年的二月是29天。

C=31+29+8=68
(1月到2月的天數+3月的實際天數)
S=2000-1+(2000-1)/4+(2000-1)/100+(2000-1)/400+68=2551.757

S/7=2551/7=364
余數為3,所以該日是星期三。

⑽ C語言程序設計萬年歷怎麼編寫

#include <stdio.h>

int IsLeapYear(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;
}