C语言的问题:根据输入的年月日,输出该日为该年度的第几周、第几天、星期几。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言的问题:根据输入的年月日,输出该日为该年度的第几周、第几天、星期几。相关的知识,希望对你有一定的参考价值。
C语言的问题:日历计算(不得使用C语言的日期库函数)
根据输入的年月日,输出该日为该年度的第几周、第几天、星期几。
如输入: 2007,12,1
则输出: 48z,335t,6xq
//如输入: 2007,12,1
//则输出: 48z,335t,6xq
int date[12]=31,28,31,30,31,30,31,31,30,31,30,31;
#include<stdio.h>
int Check(int a,int b,int c);//判断输入的合法性
int CountWeek(int a,int b,int c);//判断第几周
int CountDay(int a,int b,int c);//计算第几天
int CountWeekday(int a,int b,int c);//计算星期几
int LeapYear(int a)int x=(!(a%4)&&(a%100)||!(a%400))?1:0;return x;
int main(void)
int year,month,day;
do
printf("请输入年,月,日:");
scanf("%d%d%d",&year,&month,&day);
//printf("%d\n",Check(year,month,day));
if(Check(year,month,day)!=0)
printf("你输入错误,请重新输入.\n");
while(Check(year,month,day)!=0);
printf("第%d周 第%d天 星期%d\n",CountWeek(year,month,day),CountDay(year,month,day),CountWeekday(year,month,day));
return 0;
int Check(int a,int b,int c)//如果输入的日期不合法,则返回1,否则返回0
if(a<=0||a>9999) return 1; //年输入不合法
else
if(b<=0||b>12) return 1; //月输入不合法
else
date[1]=(!(a%4)&&(a%100)||!(a%400))?29:28;
if(c<=0||c>date[b-1])
return 1;
else return 0;
int CountDay(int a,int b,int c)
int x=c;
int IsLeapYear=(!(a%4)&&(a%100)||!(a%400))?1:0;
if(IsLeapYear==1) date[1]=29;
for(int i=0;i<b-1;i++)
x+=date[i];
return x;
int CountWeek(int a,int b,int c)
int x;
if(CountDay(a,b,c)%7==0) x=CountDay(a,b,c)/7;
else x=CountDay(a,b,c)/7+1;
return x;
int CountWeekday(int a,int b,int c)
int i,x1,x2,y;
if(a<2007)
x1=LeapYear(a)?(366-CountDay(a,b,c)):(365-CountDay(a,b,c));
for(x2=0,i=a+1;i<2007;i++)
x2+=CountDay(i,12,31);
y=6-(x1+x2+1)%7;
if(y<0) y+=7;
else
x1=CountDay(a,b,c);
for(i=2007,x2=0;i<a;i++)
x2+=CountDay(i,12,31);
y=6+(x1+x2+1)%7;
if(y>7) y-=7;
return y;
本回答被提问者采纳
C语言 定义一个结构体变量(包括年月日),计算该日在本年中是第几天
#include <stdio.h>
struct
int year;
int month;
int day;
date;
int main()
int days;
printf("input year,month,day:");
scanf("%d,%d,%d",&date.year,&date.month,&date.day);
switch(date.month)
case 1:days=date.day; break;
case 2:days=date.day+31; break;
case 3:days=date.day+59; break;
case 4:days=date.day+90; break;
case 5:days=date.day+120; break;
case 6:days=date.day+151; break;
case 7:days=date.day+181; break;
case 8:days=date.day+212; break;
case 9:days=date.day+243; break;
case 10:days=date.day+273; break;
case 11:days=date.day+304; break;
case 12:days=date.day+334; break;
if((date.year%4==0&&date.year%100!=0||date.year%400==0)&&date.month>=3)
days+=1;
printf("%d/%d is the %dth day in %d.",date.month,date.day,days,date.year);
return 0;
以上是关于C语言的问题:根据输入的年月日,输出该日为该年度的第几周、第几天、星期几。的主要内容,如果未能解决你的问题,请参考以下文章
C语言 定义一个结构体变量(包括年月日),计算该日在本年中是第几天