您的位置:首页 > 编程语言 > C语言/C++

1100: C语言程序设计教程(第三版)课后习题11.1--定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天。【两种方法】

2018-01-22 09:43 701 查看


题目描述

定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天,注意闰年问题。


输入

年月日


输出

当年第几天


样例输入

2000 12 31


样例输出

366


提示

来源

两种方法:

第一种方法理解起来比较容易,但是代码好像比较长,具体实现起来就是把截止到每一个月份末的天数都保存在一个数组里,然后用switch语句进行分支判断。

#include<stdio.h>

struct

{

    int y;

    int m;

    int d;

}d;

void main()

{

    int a[11]={31,59,90,120,151,181,212,243,273,304,334};//非闰年

    int b[11]={31,59+1,90+1,120+1,151+1,181+1,212+1,243+1,273+1,304+1,334+1};//闰年

    scanf("%d %d %d",&d.y,&d.m,&d.d);

    if(d.y%100==0)

    {

        if(d.y%400==0)

        {

            switch(d.m)

            {

                case 1:printf("%d",d.d);break;

                case 2:printf("%d",d.d+b[0]);break;

                case 3:printf("%d",d.d+b[1]);break;

                case 4:printf("%d",d.d+b[2]);break;

                case 5:printf("%d",d.d+b[3]);break;

                case 6:printf("%d",d.d+b[4]);break;

                case 7:printf("%d",d.d+b[5]);break;

                case 8:printf("%d",d.d+b[6]);break;

                case 9:printf("%d",d.d+b[7]);break;

                case 10:printf("%d",d.d+b[8]);break;

                case 11:printf("%d",d.d+b[9]);break;

                case 12:printf("%d",d.d+b[10]);break;

            }

        }

        else

        {

            switch(d.m)

            {

                case 1:printf("%d",d.d);break;

                case 2:printf("%d",d.d+a[0]);break;

                case 3:printf("%d",d.d+a[1]);break;

                case 4:printf("%d",d.d+a[2]);break;

                case 5:printf("%d",d.d+a[3]);break;

                case 6:printf("%d",d.d+a[4]);break;

                case 7:printf("%d",d.d+a[5]);break;

                case 8:printf("%d",d.d+a[6]);break;

                case 9:printf("%d",d.d+a[7]);break;

                case 10:printf("%d",d.d+a[8]);break;

                case 11:printf("%d",d.d+a[9]);break;

                case 12:printf("%d",d.d+a[10]);break;

            }

        }

    }

    else

    {

        if(d.y%4==0)

        {

            switch(d.m)

            {

                case 1:printf("%d",d.d);break;

                case 2:printf("%d",d.d+b[0]);break;

                case 3:printf("%d",d.d+b[1]);break;

                case 4:printf("%d",d.d+b[2]);break;

                case 5:printf("%d",d.d+b[3]);break;

                case 6:printf("%d",d.d+b[4]);break;

                case 7:printf("%d",d.d+b[5]);break;

                case 8:printf("%d",d.d+b[6]);break;

                case 9:printf("%d",d.d+b[7]);break;

                case 10:printf("%d",d.d+b[8]);break;

                case 11:printf("%d",d.d+b[9]);break;

                case 12:printf("%d",d.d+b[10]);break;

            }

        }

        else

        {

            switch(d.m)

            {

                case 1:printf("%d",d.d);break;

                case 2:printf("%d",d.d+a[0]);break;

                case 3:printf("%d",d.d+a[1]);break;

                case 4:printf("%d",d.d+a[2]);break;

                case 5:printf("%d",d.d+a[3]);break;

                case 6:printf("%d",d.d+a[4]);break;

                case 7:printf("%d",d.d+a[5]);break;

                case 8:printf("%d",d.d+a[6]);break;

                case 9:printf("%d",d.d+a[7]);break;

                case 10:printf("%d",d.d+a[8]);break;

                case 11:printf("%d",d.d+a[9]);break;

                case 12:printf("%d",d.d+a[10]);break;

            }

        }

    }

}

/**************************************************************

    Problem: 1100

    User: 171530425

    Language: C

    Result: 正确

    Time:0 ms

    Memory:1092 kb

****************************************************************/

我们也可以对上面的if判断做下优化,把所有闰年的情况放在一个if判断语句的判断体中,这样的话代码就少了一点儿

#include<stdio.h>

struct

{

    int y;

    int m;

    int d;

}d;

void main()

{

    int a[11]={31,59,90,120,151,181,212,243,273,304,334};//非闰年

    int b[11]={31,59+1,90+1,120+1,151+1,181+1,212+1,243+1,273+1,304+1,334+1};//闰年

    scanf("%d %d %d",&d.y,&d.m,&d.d);

    if((d.y%100==0&&d.y%400==0)||(d.y%4==0&&d.y%100!=0))

    {

        switch(d.m)

        {

            case 1:printf("%d",d.d);break;

            case 2:printf("%d",d.d+b[0]);break;

            case 3:printf("%d",d.d+b[1]);break;

            case 4:printf("%d",d.d+b[2]);break;

            case 5:printf("%d",d.d+b[3]);break;

            case 6:printf("%d",d.d+b[4]);break;

            case 7:printf("%d",d.d+b[5]);break;

            case 8:printf("%d",d.d+b[6]);break;

            case 9:printf("%d",d.d+b[7]);break;

            case 10:printf("%d",d.d+b[8]);break;

            case 11:printf("%d",d.d+b[9]);break;

            case 12:printf("%d",d.d+b[10]);break;

        }

    }

    else

    {

        switch(d.m)

        {

            case 1:printf("%d",d.d);break;

            case 2:printf("%d",d.d+a[0]);break;

            case 3:printf("%d",d.d+a[1]);break;

            case 4:printf("%d",d.d+a[2]);break;

            case 5:printf("%d",d.d+a[3]);break;

            case 6:printf("%d",d.d+a[4]);break;

            case 7:printf("%d",d.d+a[5]);break;

            case 8:printf("%d",d.d+a[6]);break;

            case 9:printf("%d",d.d+a[7]);break;

            case 10:printf("%d",d.d+a[8]);break;

            case 11:printf("%d",d.d+a[9]);break;

            case 12:printf("%d",d.d+a[10]);break;

        }

    }

}

第二种实现方法可能不太好理解,但是却实现起来却比较简单,我们不用提前算截至每一月末的天数了,并且代码也比较短

#include<stdio.h>

struct ri

{

    int y,m,d;

}p;

int main()

{

    int i,j,s=0,a=31,b=30,c=29;

    scanf("%d%d%d",&p.y,&p.m,&p.d);

    for(i=1;i<p.m;i++)//注意这里一定是小于p.m,因为我们要算的是截止上个月末的天数,当前月还没过完呢,并且给的有当前月的天数,保存在p.d中

    {

        if(i==1||i==3||i==5||i==7||i==8||i==10)

        {

            s+=a;

        }

        else if(i==4||i==6||i==9||i==11)

        {

            s+=b;

        }

        else if(i==2)

        {

            s+=c;

        }

    }

    s=s+p.d;

    if((p.y%4==0&&p.y%100!=0)||(p.y%400==0&&p.y%100==0))

    {

        if(p.m==1)

        {

            printf("%d",p.d);

        }

        else

        {

            printf("%d",s);

        }

    }

    else

    {

        if(p.m==1)

        {

            printf("%d",p.d);

        }

        else

        {

            printf("%d",s-1);

        }

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐