十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
#includestdio.h
福州网站建设公司成都创新互联,福州网站设计制作,有大型网站制作公司丰富经验。已为福州数千家提供企业网站建设服务。企业网站搭建\外贸营销网站建设要多少钱,请找那个售后服务好的福州做网站的公司定做!
int isRn(int num){
if((num%4==0num%400!=0)||num%400==0){
return 1;
}else{
return 0;
}
int monthDay(int year,int month){
if(month==1||month==3||month==5
||month==7||month==8||month==10
||month==12){
return 31;
}else if(month==4||month==6||month==9
||month==11)
{
return 30;
}else if(month==2){
if(isRn(int num)==1){
return 29;
}else{
return 28;
}
}
}
void main(){
int sum=0,year,month,day,i,temp,j;
printf("请输入年份:");
scanf("%d",year);
while(year1900){
printf("年份必须从1900年开始!\n\n");
printf("请输入年份:");
scanf("%d",year);
}
printf("请输入月份:");
scanf("%d",month);
while(month1||month12){
printf("月份必须是1到12之间!\n\n");
printf("请输入月份:");
scanf("%d",month);
}
printf("请输入日:");
scanf("%d",day);
while(daymonthDay(year,month)||day1){
printf("日必须从1开始,并且不能大于该月的天数!\n\n");
printf("请输入日:");
scanf("%d",day);
}
temp=month;
temp-=1;
for(i=1900;i=year;i++){
for(j=1;j=12;j++){
if(i==yearj==temp){
break;
}
sum+= monthDay(year,j);
}
}
sum+=day;
printf("%d年%d月%d日,是星期",year,month,day)
if(sum%7==0){
printf("日。\n");
}else if(sum%7==1){
printf("一。\n");
}else if(sum%7==2){
printf("二。\n");
}else if(sum%7==3){
printf("三。\n");
}else if(sum%7==4){
printf("四。\n");
}else if(sum%7==5){
printf("五。\n");
}else if(sum%7==2){
printf("六。\n");
}
}
C语言根据日期判断星期几(使用基姆拉尔森计算公式)
算法如下:
基姆拉尔森计算公式
W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7
在公式中d表示日期中的日数,m表示月份数,y表示年数。
注意:在公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。
以公元元年为参考,公元元年1月1日为星期一/PREPRE程序如下:
#include "stdio.h"
void CaculateWeekDay(int y,int m, int d)
{
if(m==1||m==2) {
m+=12;
y--;
}
int iWeek=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
switch(iWeek)
{
case 0: printf("星期一\n"); break;
case 1: printf("星期二\n"); break;
case 2: printf("星期三\n"); break;
case 3: printf("星期四\n"); break;
case 4: printf("星期五\n"); break;
case 5: printf("星期六\n"); break;
case 6: printf("星期日\n"); break;
}
}
void main()
{
int year=0,month=0,day=0;
printf("请输入日期:\n格式为:1900,1,1\n");
char temp = '1';
while (temp != '0')
{
scanf("%d,%d,%d",year,month,day);
scanf("%c",temp);
CaculateWeekDay(year,month,day);
printf("输入0退出,其他继续:");
scanf("%c",temp);
}
}
注意:本源码中,函数GetWeekDay的返回值仅仅表示输入参数是否“正确/有效”(例如前三个参数使用2001,2,29就是无效参数),能否得到预期的星期值;真正的星期值则是通过输出变量返回给主调函数的。
#include
time.h
#include
stdio.h
int
GetWeekDay(int
nYear,int
nMon,int
nDay,
int
*npWeekDay);
int
main()
{
int
nMyWeekDay;
int
nResult;
nResult
=
GetWeekDay(2007,1,10,nMyWeekDay);
return
0;
}
//输入日期,返回星期的C语言函数
int
GetWeekDay(int
nYear,int
nMon,int
nDay,
int
*npWeekDay)
{
int
nRetVal
=
0;
time_t
tMyDateTime;
struct
tm
tmMyDate,*tmpMyDate;
if((nYear1900||nYear=3000)
||
(nMon1
||
nMon12)
||
(nDay1||nDay31)
)
{
nRetVal
=
1;
*npWeekDay
=
-1;
return
nRetVal;
}
//memset(tmMyDate,0,sizeof(struct
tm));
tmMyDate.tm_year
=
nYear-1900;
tmMyDate.tm_mon
=
nMon-1;
tmMyDate.tm_mday
=
nDay;
tmMyDate.tm_hour
=16;
tmMyDate.tm_min
=30;
tmMyDate.tm_sec
=30;
tMyDateTime
=
mktime(tmMyDate);
if(tMyDateTime0)
{
nRetVal
=
1;
*npWeekDay
=
-1;
return
nRetVal;
}
tmpMyDate
=
localtime(tMyDateTime);
*npWeekDay
=
tmpMyDate-tm_wday;
return
nRetVal;
}
先做一个函数,计算1900年1月1日到该天的天数,然后用膜除求出星期几并输出。
具体代码如下:
#include stdio.h
#include stdlib.h
int Day(int y,int m,int d);
int main(int argc, char *argv[]) {
int i; //循环变量
int year,month,day; //读取用户输入的年月日
int days; //储存从1900-1-1到该天的天数
int week=0; //储存求余后的星期
//字符串组合输出星期
char b[]={"星期"};
char c[7][4]={"日","一","二","三","四","五","六"};
loop:printf("请输入年 月 日:(空格分隔)\n");
scanf(" %d%d%d",year,month,day);
days=Day(year,month,day);
//增强程序的健壮性
if(days==-1)
{
printf("输入格式有误,");
fflush(stdin); //防止用户输入字母等其他非数字字符
goto loop;
}
else
{
week=days%7; //用求余计算星期几
printf("%d年%d月%d日是%s%s\n",year,month,day,b,c[week]);
}
system("pause");
return 0;
}
//函数功能:输入年月日,输出1900-1-1到该天的天数,-1位输入不合法
int Day(int y,int m,int d)
{
int i;
int r=0; //储存1900到该天的闰年个数
int a[]={31,28,31,30,31,30,31,31,30,31,30}; //m给每出月的天数
if(y=1900 m0 m13 d0 d32)
{
for(i=1900;i=y;i++) //计算闰年的个数
{
if(i%400==0||i%100!=0i%4==0)
r++;
}
for(i=0;im-1;i++) //统计当年1月1日到当月的天数
{
d+=a[i];
}
if((y%400==0||y%100!=0y%4==0)m3) //如果当年是闰年但不到二月就不能算进去
r--;
return 365*(y-1900)+r+d;
}
else
return -1;
}
// 这定义的是一个二维数组(7行10列)
// 每一个字符串,比如:"星期天"就是一行,共七个字符。
// 汉字占两个字符,所以"星期天"就是7个字符(末尾应该还有一个'\0'结束符)。
// 这里的 10 确实是随便定义的数,但是要保证大于等于 7
char str[7][10]={"星期天","星期一","星期二","星期三","星期四","星期五","星期六"};
int year,month,day;
// 这是定义一个子函数,IsLeapYear也是随便取的,
// 但是要符合 C 语言的命名规范,并且最好有实际意义
int IsLeapYear()
{
if((year%4==0year%100!=0)||(year%400==0))
return 1;
else
return 0;
}
// 这和上面一样,定义子函数,名字是随便取的,
// 下划线也是符合c 语言命名规范的,所以可用
// int m 是一个参数,用来保存主函数传递过来的值
int month_day(int m)
{
// 这是数组初始化的一种格式,由于有初始值列表,
// 系统会自动根据初始化数据确定数组大小
// 比如这里相当于int mon_day[12]
int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
这些都是基础,还是看看书吧
#include stdio.h
#include time.h
int main() {
int year, month, day;
printf("Enter a date (yyyy-mm-dd): ");
scanf("%d-%d-%d", year, month, day);
struct tm tm = {0};
tm.tm_year = year - 1900;
tm.tm_mon = month - 1;
tm.tm_mday = day;
tm.tm_isdst = -1;
time_t t = mktime(tm);
char* weekday[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
printf("%s\n", weekday[localtime(t)-tm_wday]);
return 0;
}
在这段代码中,使用了 time 库中的 mktime 函数和 localtime 函数来将日期转换为时间戳,并使用 tm_wday 字段来计算日期是星期几。