| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 874 人关注过本帖
标题:关于计算输入某年某月某日,并算出这是一年中的第几天的问题
只看楼主 加入收藏
z574262105
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-6-23
结帖率:0
收藏
已结贴  问题点数:20 回复次数:8 
关于计算输入某年某月某日,并算出这是一年中的第几天的问题
是这样的,源程序是这个
main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先计算某月以前月份的总天数*/
{
 case 1:sum=0;break;
 case 2:sum=31;break;
 case 3:sum=59;break;
 case 4:sum=90;break;
 case 5:sum=120;break;
 case 6:sum=151;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("data error");break;
}
sum=sum+day;  /*再加上某天的天数*/
 if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
  leap=1;
 else
  leap=0;
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("It is the %dth day.",sum);}




但是我感觉这个程序还是有漏洞的,假如日期不再范围之内怎么办?所以我自己“改良”了一下,就成了这个样子
#include<stdio.h>
main()
{
    int year,month,day,sum,i;
    printf("请输入日期:年,月,日");
    scanf("%d,%d,%d",&year,&month,&day);
    switch(month)
    {  
         case 1:sum=0;if(day>31|| day<1) {printf("日期输入错误请重新输入");scanf("%d,%d,%d",&year,&month,&day);}break;
         case 2:sum=30;if(day>29|| day<1){printf("日期输入错误请重新输入");scanf("%d,%d,%d",&year,&month,&day);}break;
     case 3:sum=59;if(day>31|| day<1){printf("日期输入错误请重新输入");scanf("%d,%d,%d",&year,&month,&day);}break;
     case 4:sum=90;if(day>30|| day<1){printf("日期输入错误请重新输入");scanf("%d,%d,%d",&year,&month,&day);}break;
     case 5:sum=120;if(day>31|| day<1){printf("日期输入错误请重新输入");scanf("%d,%d,%d",&year,&month,&day);}break;
     case 6:sum=151;if(day>30|| day<1){printf("日期输入错误请重新输入");scanf("%d,%d,%d",&year,&month,&day);}break;
     case 7:sum=181;if(day>31|| day<1){printf("日期输入错误请重新输入");scanf("%d,%d,%d",&year,&month,&day);}break;
     case 8:sum=212;if(day>31|| day<1){printf("日期输入错误请重新输入");scanf("%d,%d,%d",&year,&month,&day);}break;
     case 9:sum=243;if(day>30|| day<1){printf("日期输入错误请重新输入");scanf("%d,%d,%d",&year,&month,&day);}break;
         case 10:sum=273;if(day>31|| day<1){printf("日期输入错误请重新输入");scanf("%d,%d,%d",&year,&month,&day);}break;
         case 11:sum=304;if(day>30| day<1){printf("日期输入错误请重新输入");scanf("%d,%d,%d",&year,&month,&day);}break;
         case 12:sum=334;if(day>31|| day<1){printf("日期输入错误请重新输入");scanf("%d,%d,%d",&year,&month,&day);}break;
         default :printf("月份输入错误,请重新输入");scanf("%d,%d,%d",&year,&month,&day);break;
       }
   
    sum=sum+day;
    if(year %400 == 0 || (year%4==0&&year%100!=0))
        i=0;
    else
        i=1;
    if (i=0&&month>2)
        sum++;
printf("%d",sum);


但是程序好像运行不了是为什么呢?各位大神解答下啊,还有什么更简洁的程序吗?感觉太繁琐了
搜索更多相关主题的帖子: 源程序 
2015-09-15 03:08
小王KING
Rank: 2
等 级:论坛游民
威 望:1
帖 子:29
专家分:69
注 册:2015-9-9
收藏
得分:4 
main()
{
int day,month,year,sum,leap;
printf("\nplease input year,month,day\n");
if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
  leap=1;
 else
  leap=0;
while(1)
{
    scanf("%d,%d,%d",&year,&month,&day);
    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
        if(day>=1&&day<=31)
            break;
    if(month==4||month==6||month==9||month==11)
        if(day>=1&&day<=30)
            break;
    if(month==2)
        if(day>=1&&day<=28+leap)
            break;
    printf("输入错误,请重新输入");
}


switch(month)/*先计算某月以前月份的总天数*/
{
 case 1:sum=0;break;
 case 2:sum=31;break;
 case 3:sum=59;break;
 case 4:sum=90;break;
 case 5:sum=120;break;
 case 6:sum=151;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("data error");break;
}
sum=sum+day;  /*再加上某天的天数*/
 
if(month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum=sum+leap;
printf("It is the %dth day.",sum);}

[ 本帖最后由 小王KING 于 2015-9-15 04:46 编辑 ]
2015-09-15 04:11
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:4 
程序代码:
#include<stdio.h> 
main(){
int day,month,year,sum=0,days_of_month[13],days;
printf("\nplease input year\n");
scanf("%d",&year);
for(int i=1;i<=12;i++){
    switch(i){
        case 4:case 6:case 9:case 11:
        days=30;break;
        case 2:
        days=year%400==0||(year%4==0&&year%100!=0)?29:28;break;
        default:days=31;
    }
    days_of_month[i]=days;
}
printf("\nplease input month,day\n");
scanf("%d%d",&month,&day);
while(days_of_month[month]<day&&month>0&&month<13){
    printf("\nWrong! please input month,day\n");
    scanf("%d%d",&month,&day);
}
for(int i=1;i<month;i++)
    sum+=days_of_month[i];
sum+=day;
printf("It is the %dth day.",sum);
}


[ 本帖最后由 林月儿 于 2015-9-15 07:12 编辑 ]

剑栈风樯各苦辛,别时冰雪到时春
2015-09-15 07:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:4 
我写个demo给你(里面的数值可能有错误,主要让你看代码的架构、排版等)
程序代码:
#include <stdio.h>

int dayofyear( int year, int month, int day )
{
    static const int days[] = { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334 };
    static const int dayr[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

    _Bool isleap = year%400==0 || (year%4==0 && year%100!=0);
    if( month<1 || month>12 || day<1 || day>dayr[month-1]+(isleap&&month==2) )
        return -1;
    return days[month-1]+day+(isleap&&month>2);
}

int main( void )
{
    int year, month, day, sum;
    // 这一行就是完成你的“必须输入合法日期”,不需要关注
    for( printf("%s","Please input year,month,day: ");
        scanf("%d ,%d ,%d",&year,&month,&day)!=3 || (sum=dayofyear(year,month,day))==-1;
        scanf("%*[^\n]"), printf("%s","your date entered incorrectly ,please try again: ") );

    printf( "It is the %dth day.\n", sum );
    return 0;
}

2015-09-15 09:00
柳逸尘
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:131
注 册:2015-8-10
收藏
得分:4 
int year(int a)//判断是不是瑞年
{
    if(a%4==0&&a%100!=0||a%400==0)
        return 1;
    else
        return 0;
}

int mon(int y,int m,int d)//
{
    int sum=0,i;
    int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int b[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    if(year(y)==1)
    {
        for(i=0;i<m-1;i++)
            sum=sum+b[i];
    }
    else
    {
        for(i=0;i<m-1;i++)
            sum=sum+a[i];
    }//计算这天在这个月之前的月份中的天数
    sum=sum+d;//加上这个天在这个月的天数
    return sum;
}

main()
{
    int year,month,day,n;
    printf("请输入年月日(例:XX XX XX)\n");
    scanf("%d %d %d",&year,&month,&day);
    n=mon(year,month,day);
    printf("%d年%d月%d号是%d年的第%d天\n",year,month,day,year,n);
    return 0;
}
2015-09-15 14:59
z574262105
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-6-23
收藏
得分:0 
回复 2楼 小王KING
谢谢
2015-09-15 20:18
z574262105
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2014-6-23
收藏
得分:0 
回复 3楼 林月儿
谢谢
2015-09-15 20:38
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:4 
简单说说:
#include<stdio.h>

void main()
{
  int a=1900,b=03,c=01;
  
  int daysOfmonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  if((a&3)==0&&a%400!=0) daysOfmonth[1]=29;
  int daynumber=0;
  for(int i=0;i<b-1;i++)
  {
     daynumber+=daysOfmonth[i];
  }
  daynumber+=(c);
  printf("%d\n",daynumber);
}
2015-09-15 21:12
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:0 
再短点:
#include<stdio.h>
void main()
{
  int a=1901,b=12,c=31;
  int daysOfmonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  if((a&3)==0&&a%400!=0) daysOfmonth[1]=29;
  int daynumber=c;
  for(int i=0;i<b-1;i++) daynumber+=daysOfmonth[i];
  printf("%d\n",daynumber);
}
2015-09-15 21:20
快速回复:关于计算输入某年某月某日,并算出这是一年中的第几天的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024422 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved