C语言 一年中的第几天

目标:

输入一个日期,如“ 2017 6 15 ”,计算这一天是这一年的第几天(1月1日是第一天)并输出。假设输入的都是合法的日期,但别忘了考虑闰年的情况。

程序实现:

我们可以用这种switch()嵌套的方法,但是代码量较大

#include <stdio.h>
#include <iostream>
int main()
{
    int y, m, d, n;
    int a,b,c;
    c=d;
    scanf("%d %d %d",&y,&m,&d);
    a = y%400==0 || y%100!=0 && y%4==0 ?1:0;
    switch (a){
    	case 1:for(b=1;b<=m;b++)
    	{
    		n=n+c;
    		switch (b){
    			case 0:c=0;break;
    			case 1:c=31;break;
    		    case 2:c=29;break;
    		    case 3:c=31;break;
    		    case 4:c=30;break;
    		    case 5:c=31;break;
    		    case 6:c=30;break;
    		    case 7:c=31;break;
    		    case 8:c=31;break;
    		    case 9:c=30;break;
    		    case 10:c=31;break;
    		    case 11:c=30;break;
    		    case 12:c=31;break;
    		}
    	}break;	
    	case 0:for(b=1;b<=m;b++)
    	{
    		n=n+c;
    		switch (b){
    			case 0:c=0;break;
    			case 1:c=31;break;
    		    case 2:c=28;break;
    		    case 3:c=31;break;
    		    case 4:c=30;break;
    		    case 5:c=31;break;
    		    case 6:c=30;break;
    		    case 7:c=31;break;
    		    case 8:c=31;break;
    		    case 9:c=30;break;
    		    case 10:c=31;break;
    		    case 11:c=30;break;
    		    case 12:c=31;break;
    		}
    	}break;	
    }
    n=n+d;
    printf("%d-%d-%d是第%d天\n",y,m,d,n);
    return 0;
}

改进以上代码之后

#include<stdio.h>
int main()
{
int y,m,d,n=0;
int c,b=0;
scanf("%d %d %d",&y,&m,&d);
while(b<m){
    switch(b){
    case 0:c=d;break;
    case 1:c=31;break;
    case 2:c=29;break;
    case 3:c=31;break;
    case 4:c=30;break;
    case 5:c=31;break;
    case 6:c=30;break;
    case 7:c=31;break;
    case 8:c=31;break;
    case 9:c=30;break;
    case 10:c=31;break;
    case 11:c=30;break;
    case 12:c=31;break;
    }
    n=n+c;
    b++;
}
if((y%400==0||(y%4==0&&y%100!=0))&&m>2)  //是闰年且月份大于2方加一 
n++;
printf("%d-%d-%d是第%d天\n",y,m,d,n);
return 0;
}

也可以写成这样 

#include<stdio.h>
int main(){
	int y,m,d;
	int b,n;
	int a[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	scanf("%d %d %d",&y,&m,&d);
	b=(y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)?1:0;
    n= d;
	for(int i = 1; i <= m-1; i++){
	    n+= a[i];
	}
	if(m >= 3 && b==1){
	    n ++;//如果是闰年,且超过了2月,则多加一天
	}
	printf("%d-%d-%d是第%d天\n",y,m,d,n);
	return 0;
}

运行结果为:

输入:2017 6 15 
输出:2017-6-15是第166天

输入:2000 10 1 
输出:2000-10-1是第275天

猜你喜欢

转载自blog.csdn.net/m0_66411584/article/details/127542756