當前位置:首頁 » 編程語言 » C語言世紀怎麼算
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

C語言世紀怎麼算

發布時間: 2023-01-09 22:01:54

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、能整除4且不能整除100 2、能整除400

你的意思是:

每4年有個閏年1896是閏年,4年後1900也是閏年除以4就是閏年

但嚴格上講,"每4年一個閏年"這說法不嚴謹.應該是四年一閏,百年不閏,四百年再閏.

為什麼呢?

1、產生閏年原因:地球繞太陽運行周期為365天5小時48分46秒(合365.24219天)即一回歸年(tropical year).公歷的平年只有365日,比回歸年短約0.2422 日,所餘下的時間約為四年累計一天,故四年於2月加1天,使當年的歷年長度為366日,這一年就為閏年.

2、但是,上面演算法又有了一個問題.就是0.2422*4=0.9688,比一天還差0.0322天,每4年差0.0322天不算多,但每400年就會差了約3天.即是說,假如每4年一個閏年,那麼每400年就會有100個閏年,然後會多算了3天.

所以,就規定了每四百年中要減少三個閏年.公歷年份是整百數的,必須是400的倍數的才是閏年,不是400的倍數的,雖然是100的倍數,也是平年.

綜合以上2點,就有了現有的閏年判斷標准.

⑶ C語言編程(程序怎樣編寫):給定年、月、日,計算該日是該年的第幾天,然後計算該日是星期幾。

/**
程序描述:給定年、月、日,計算該日是該年的第幾天,然後計算該日是星期幾。
*/
#include<stdio.h>

intmon[]={31,28,31,30,31,30,31,31,30,31,30,31};

intleap_year(intn)
{
if(n%400==0||(n%4==0&&n%100!=0))
return1;
else
return0;
}
intcal_dayCount(intyear,intmonth,intday)
{
inti,sum;
for(i=0,sum=0;i<month-1;i++)
sum+=mon[i];
if(month>2)
sum+=day+leap_year(year);
else
sum+=day;
returnsum;
}
intcal_weekday(intyear,intmonth,intday)
{
/**
蔡勒(Zeller)公式
歷史上的某一天是星期幾?未來的某一天是星期幾?關於這個問題,有很多計算公式(兩個通用計算公式和
一些分段計算公式),其中最著名的是蔡勒(Zeller)公式。
即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

公式中的符號含義如下,
w:星期;
c:年的高兩位,即世紀-1
y:年的低兩位;
m:月(m大於等於3,小於等於14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月來計算,
比如2003年1月1日要看作2002年的13月1日來計算);
d:日;
[]代表取整,即只要整數部分。

算出來的W除以7,余數是幾就是星期幾。如果余數是0,則為星期日。
如果結果是負數,負數求余數則需要特殊處理:
負數不能按習慣的余數的概念求余數,只能按數論中的余數的定義求余。為了方便
計算,我們可以給它加上一個7的整數倍,使它變為一個正數,然後再求余數

以2049年10月1日(100周年國慶)為例,用蔡勒(Zeller)公式進行計算,過程如下:
蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
=49+[49/4]+[20/4]-2×20+[26×(10+1)/10]+1-1
=49+[12.25]+5-40+[28.6]
=49+12+5-40+28
=54(除以7餘5)
即2049年10月1日(100周年國慶)是星期5。
*/
inty,c,m,d;
intw;

if(month>=3)
{
m=month;
y=year%100;
c=year/100;
d=day;
}
else/*某年的1、2月要看作上一年的13、14月來計算*/
{
m=month+12;
y=(year-1)%100;
c=(year-1)/100;
d=day;
}
w=y+y/4+c/4-2*c+(26*(m+1))/10+d-1;

if(w<0)/*如果w是負數,則計算余數方式不同*/
{
w=7-(-w)%7;
}
else
{
w=w%7;//如果w等於0,表示為星期天
}
returnw;
}
intmain()
{
intyear,month,day;
intdayCount=0,i;
printf("請輸入當前的年,月,日:");
scanf("%d-%d-%d",&year,&month,&day);
printf("該日是該年的第幾天:%d ",cal_dayCount(year,month,day));
printf("該日是星期幾:%d ",cal_weekday(year,month,day));
return0;
}

示例運行結果:

⑷ 用c語言寫出一個求21世紀所有閏年的函數

main()
{float
a,b,c,s,temp;
scanf("%f%f%f",&a,&b,&c);
if(a+b<=c||a+c<=b||c+b<=a)
printf("輸入錯誤");
else
{
s=(a+b+c)/2;
temp=sqrt(s*(s-a)*(s-b)*(s-c));
printf("三角形的面積為:\t");
printf("%3.4f\n",temp);
}
int
i;
printf("21世界的閏年為:\n");
for(i=2000;i<2100;i=i+4)
printf("%d\n",i);
getch();
}

⑸ C語言,NOJ上有一道題,探索合數世紀,不會做,望指點

您好,1、當x=1時,a-b+c=0;
2、當x=-2時,4a+2b+c=1;
3、a+b=1/3;
4、(2)-(1),得3a+3b=1;
5、從上面各式,可以求出:b=1/3-a,c=1/3-2a;
6、原方程變為:ax^2-(1/3-a)x+1/3-2a=0;
7、解方程,x = (1/3-a)+-sqrt((1/3-a)^2-4a(1/3-2a))/(2a) = [1/3-a+/-(3a-1/3)]/(2a)
解得兩個根 x1 = 1(已知的);x2 = 1/(3a)-2

⑹ 如圖,C語言程序設計題目,求第一個合數世紀(輸入1),求指出錯誤在哪

提問程序問題強烈建議貼代碼而不是截圖,幾乎沒人願意對著一個截圖給你分析問題。

代碼是正確的,但是結果一時半會是出不來的,因為演算法時間復雜度太高,這個程序跑出結果,粗略估計需要半個小時左右。
主要是判斷質數的地方太麻煩,優化的方法非常多,可以看書或者網上搜。

如果只想解決n=1,只要把

for(i=2;i<c;i++)

改成

for(i=2;i*i<=c;i++)

這樣大概幾秒內就能出第一個結果了。

如果把素數存下來,只用素數試除,速度還能再提升一點。

⑺ C語言:計算某日期是公元世紀以來的第幾天

其實不用這樣判斷閏年,你把a=year-1,a/4就知道經過幾個閏年了,經過a/4*366+(a-(a/4))*365+這一年經過的天數,(若余數為3,year為閏年)