求高手急救!!!急!急!急!

XING灬 2012-12-30 08:00:40
给定一个日期,求出该日期星期几(已知2011年4月11日是星期一)要求结构体实现。
明天交作业!求急救!!!
...全文
210 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
XING灬 2012-12-31
  • 打赏
  • 举报
回复
谢谢!!!元旦快乐
码农写博客 2012-12-30
  • 打赏
  • 举报
回复

//拿去用吧,代码比较长,写得累!!!
#include <stdio.h>

struct DATE{
	int year;
	int month;
	int day;

};
bool isLeap(int year){//是否是闰年

	if (year%4!=0)return false; 
	else  if (year%100==0){    
	if(year%400==0)return true;   
	else return false;   
	}   
	else return true; 
}
bool beforeOrNot(int year,int month,int day){//比20110411要早还是晚
	if((year*10000+month*100+day-20110411)>=0)return true;
	return false;

}

int countDay(int year,int month,int day){//求解今天是星期几
	//2011年4月11日是星期一
	int count=day;
	int i=0;
	int yearCount=0;
	int temp=0;
	switch(month-1){
		case 12:
		case 11:count+=30;
		case 10:count+=31;
		case 9:count+=30;
		case 8:count+=31;
		case 7:count+=31;
		case 6:count+=30;
		case 5:count+=31;
		case 4:count+=30;
		case 3:count+=31;
		case 2:count+=29;
		case 1:count+=31;break;
		default:break;
	}



	if(beforeOrNot(year,month,day)){
		//> count
		//不是闰年
		if(!isLeap(year)){
			count--;		
		}
		yearCount=year-2011;
		i =0;
		for(i=1;i<=yearCount;i++){
			if(isLeap(year-i)){
				count+=366;
			}else{count+=365;}
		}
		return (count-101)%7+1;
		
		
	}else{
		if(!isLeap(year)){
			count--;		
		}
		yearCount = 2011-year;
		temp = count;
		count =0;
		for(i=0;i<yearCount;i++){
			if(isLeap(year+i)){
				count+=366;
			}else{count+=365;}
		}
		if(count==0){
			count = 101-temp;
		}else{
			count-=temp;
			count+=101;
		}
		return 7-(count%7)+1;
	}
	
}

bool inputTest(DATE date){//验证非法输入
	
	switch(date.month){
		case 12:if(date.day>31 ||date.day<1)return false;break;
		case 11:if(date.day>30 ||date.day<1)return false;break;
		case 10:if(date.day>31 ||date.day<1)return false;break;
		case 9:if(date.day>30 ||date.day<1)return false;break;
		case 8:if(date.day>31 ||date.day<1)return false;break;
		case 7:if(date.day>31 ||date.day<1)return false;break;
		case 6:if(date.day>30 ||date.day<1)return false;break;
		case 5:if(date.day>31 ||date.day<1)return false;break;
		case 4:if(date.day>30 ||date.day<1)return false;break;
		case 3:if(date.day>31 ||date.day<1)return false;break;
		case 2:if(date.day>29 ||date.day<1)return false;
				if(!isLeap(date.year) && date.day==29)return false;break;

		case 1:if(date.day>31 ||date.day<1)return false;break;
		default:printf("input month error!"); return false;
	}

	return true;


}

void main() {  
DATE data; 
printf("Input the year:\n"); 
scanf("%d",&(data.year)); 
printf("Input the month:\n"); 
scanf("%d",&(data.month)); 
printf("Input the day:\n"); 
scanf("%d",&(data.day)); 
if(!inputTest(data)){
	printf("input error!");
	return;
}

printf("星期%d\n",countDay(data.year,data.month,data.day));

}


XING灬 2012-12-30
  • 打赏
  • 举报
回复
救救我吧大神们

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧