C语言程序,输入年月日算出当天星期几

C语言程序,输入年月日算出当天星期几
做一个程序,先输入年Y,再输入月M,判断大月小月并显示输入范围,在输入日D,利用公式计算余数,显示该余数对应的星期几。
公式:{Y+Y/4-Y/100+Y/400+(13xM+8)/5+D}/7。
1、余数=0时是星期日,余数=1时是星期一……余数6时是星期六。
2、闰年的1月2月当作前一年的13月、14月代入计算。
条件:1、Y的输入范围1900~2050,M:1~12,D:1~31,输入的值在范围外时提示错误重新输入。
2、2月、4、6、9、11月没有31号,闰年2月有29号,程序能判断大月、小月和闰年2月,并且显示输入范围。

先做一个函数,计算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 && m>0 && m<13 && d>0 && d<32)
{
for(i=1900;i<=y;i++)  //计算闰年的个数
{
if(i%400==0||i%100!=0&&i%4==0)
r++;
}
for(i=0;i<m-1;i++)  //统计当年1月1日到当月的天数
{
d+=a[i];
}
if((y%400==0||y%100!=0&&y%4==0)&&m<3)  //如果当年是闰年但不到二月就不能算进去
r--;
return 365*(y-1900)+r+d;
}
else
return -1;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-22
#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("星期一 "); break;
case 1: printf("星期二 "); break;
case 2: printf("星期三 "); break;
case 3: printf("星期四 "); break;
case 4: printf("星期五 "); break;
case 5: printf("星期六 "); break;
case 6: printf("星期日 "); break;
}
}
void main()
{
int year=0,month=0,day=0;
printf("请输入日期: 格式为:1900,1,1 ");
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);
}
}

望采纳本回答被网友采纳
相似回答