一年中的第几天
试题描述
给定一个具体的日期,请输出,这一天是当年的第几天?
输入
输入格式如下:
year-month-day
如:
1999-9-9
代表1999年9月9日。
输出
输出一个整数,代表这一天为那一年的第多少天。
输入示例
2000-1-31
输出示例
31
数据范围
输入为合法的日期
#include<stdio.h>
#include<stdlib.h>
int is_leap_year(int year)
{
(这一行正文内容不能输入,故删去)
{
return 1;
}
else
{
return 0;
}
}
int com(int year, int month, int day)
{
int mon_day[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
int ret = is_leap_year(year);
int mon = 0;
int i = 0;
if (ret)
{
mon_day[1] = 29;
}
for (i = 0; i < month - 1; i++)
mon += mon_day[i];
}
return mon + day;
}
int main()
{
int year = 0;
int month = 0;
int day = 0;
int num = 0;
scanf("%d*3", &year, &month, &day); (这里三个%d也不能输?好吧)
printf("%d", com(year, month, day));
system("pause");
return 0;
}
一直在报错
有没有更好的解决办法?
把你的代码稍作整理,Dev C++中能编译通过,且测试正确:
#include<stdio.h>
#include<stdlib.h>
int is_leap_year(int year)
{
if ((year%4==0 && year%100!=0) || (year%400==0))
{
return 1;
}
else
{
return 0;
}
}
int com(int year, int month, int day)
{
int mon_day[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int i, mon = 0;
if ( is_leap_year(year))
{
mon_day[1] = 29;
}
for (i = 0; i < month - 1; i++)
{
mon += mon_day[i];
}
return mon + day;
}
int main()
{
int year, month, day;
scanf("%d %d %d", &year, &month, &day);
printf("%d年%d月%d日是该年的第%d天。\n", year,month,day,com(year, month, day));
system("pause");
return 0;
}
#include <stdio.h>
int DayofYear(int year, int month, int day) {
int i,mm,days=0;
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
/*判断是否为闰年*/
if((year%4==0 && year%100!=0) || (year%400==0)){
mm=1;
}
else{
mm=0;
}
/*如果为闰年,则改变二月份的天数*/
if(mm==1){
a[1]=29;
}
/*因为数组第一个是由0开始,并由month-1个月遍历,所以为month-2*/
for(i=month-2;i>=0;i--){
day=a[i];
days+=day;
}
return days;
}
int main(){
int year,month,day;
printf("Please enter year, month, day:");
scanf("%d-%d-%d",&year,&month,&day);
day=day+DayofYear(year,month,day);
printf("yearDay = %d\n",day);
}
#include <stdio.h>
#define True 1
#define False 0
void main()
{
int year,month,day; //定义变量年月日。此行代码,不可修改!!!
int sum,flag;
printf("输入日期格式为yyyy-mm-dd:");
scanf("%d-%d-%d",&year,&month,&day); //接收输入的数据 此行代码,不可修改!!!
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=(31+28);break;
case 4:sum=(31+28+31);break;
case 5:sum=(31+28+31+30);break;
case 6:sum=(31+28+31+30+31);break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("输入有误");break;
}
sum+=day;
if(year%400==0||(year%4==0&&year%100!=0)) {
flag=True;
} else {
flag=False;
}
if(flag==True&&month>2) {
sum++;
}
printf("%d年%d月%d日是这一年的第%d天",year,month,day,sum);
printf("\n");
}