C语言OJ项目参考(1915) 第几天

简介: (1915) 第几天 Description 给定一个日期,输出这个日期是该年的第几天。 Input 输入数据有多组,每组占一行,数据格式为YYYY-MM-DD组成,具体参见Sample Input,另外,可以向你确保所有的输入数据是合法的。 Output 对于每组输入数据,输出一行,表示该日期是该年的第几天。 Sample Input 2000-01-01 Samp

(1915) 第几天
Description
给定一个日期,输出这个日期是该年的第几天。
Input
输入数据有多组,每组占一行,数据格式为YYYY-MM-DD组成,具体参见Sample Input,另外,可以向你确保所有的输入数据是合法的。
Output
对于每组输入数据,输出一行,表示该日期是该年的第几天。
Sample Input
2000-01-01
Sample Output
1

[参考解答]
(1)

#include "stdio.h"
int main()
{
    int y,m,d; //分别代表年月日
    int days;  //计算得到的天数
    while (scanf("%d-%d-%d",&y,&m,&d)!=EOF)
    {
        days=d;
        //下面要加上前m-1月的天数
        int i;
        for(i=1; i<m; i++)
        {
            switch(i)
            {
            case 2:
                days+=((y%4==0&&y%100!=0)||y%400==0)?29:28;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                days+=30;
                break;
            default:
                days+=31;
                break;
            }
        }
        printf("%d\n",days);
    }
    return 0;
}

(2)

#include "stdio.h"
int main()
{
    int y,m,d; //分别代表年月日
    int days;  //计算得到的天数
    int i;
    while (scanf("%d-%d-%d",&y,&m,&d)!=EOF)
    {
        days=d;
        //下面要加上前m-1月的天数
        for(i=1; i<m; i++)
        {
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                days+=31;
            else if (i==4||i==6||i==9||i==11)
                days+=30;
            else
                days+=((y%4==0&&y%100!=0)||y%400==0)?29:28;
        }
        printf("%d\n",days);
    }
    return 0;
}

(3)后面要学习数组。然后就可以这样来了(对数组充满期待吧)

#include "stdio.h"
int main()
{
    int y,m,d; //分别代表年月日
    int days;  //计算得到的天数
    int i;
    int a[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
    while (scanf("%d-%d-%d",&y,&m,&d)!=EOF)
    {
        days=d;
        //下面要加上前m-1月的天数
        for(i=1; i<m; i++)
        {
            days+=a[i];
        }
        if(m>2&&((y%4==0&&y%100!=0)||y%400==0)) //若闰年,且晚于2月,加一天
            days++;
        printf("%d\n",days);
    }
    return 0;
}

(4)有同学写成下面的代码,结果对,但这样的程序的确不好

#include "stdio.h"
int main()
{
    int y,m,d; //分别代表年月日
    int days;  //计算得到的天数
    while (scanf("%d-%d-%d",&y,&m,&d)!=EOF)
    {
        if(((y%4==0)&&(y%100!=0))||(y%400==0))
        {
            switch(m)
            {
            case 1:
                days=d;
                break;
            case 2:
                days=d+31;
                break;
            case 3:
                days=d+31+29;
                break;
            case 4:
                days=d+31+29+31;
                break;
            case 5:
                days=d+31+29+31+30;
                break;
            case 6:
                days=d+31+29+31+30+31;
                break;
            case 7:
                days=d+31+29+31+30+31+30;
                break;
            case 8:
                days=d+31+29+31+30+31+30+31;
                break;
            case 9:
                days=d+31+29+31+30+31+30+31+31;
                break;
            case 10:
                days=d+31+29+31+30+31+30+31+31+30;
                break;
            case 11:
                days=d+31+29+31+30+31+30+31+31+30+31;
                break;
            case 12:
                days=d+31+29+31+30+31+30+31+31+30+31+30;
                break;
            }
        }
        else
        {
            switch(m)
            {
            case 1:
                days=d;
                break;
            case 2:
                days=d+31;
                break;
            case 3:
                days=d+31+28;
                break;
            case 4:
                days=d+31+28+31;
                break;
            case 5:
                days=d+31+28+31+30;
                break;
            case 6:
                days=d+31+28+31+30+31;
                break;
            case 7:
                days=d+31+28+31+30+31+30;
                break;
            case 8:
                days=d+31+28+31+30+31+30+31;
                break;
            case 9:
                days=d+31+28+31+30+31+30+31+31;
                break;
            case 10:
                days=d+31+28+31+30+31+30+31+31+30;
                break;
            case 11:
                days=d+31+28+31+30+31+30+31+31+30+31;
                break;
            case 12:
                days=d+31+28+31+30+31+30+31+31+30+31+30;
                break;
            }
        }
        printf("%d\n",days);
    }
    return 0;
}
目录
相关文章
|
4天前
|
算法 C语言 C++
【C语言实战项目】三子棋游戏
【C语言实战项目】三子棋游戏
33 1
|
4天前
|
程序员 C语言
【C语言实战项目】猜数字游戏
【C语言实战项目】猜数字游戏
32 0
【C语言实战项目】猜数字游戏
|
4天前
|
存储 算法 C语言
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
C语言进阶:顺序表(数据结构基础) (以通讯录项目为代码练习)
|
4天前
|
程序员 C语言
【C语言实战项目】通讯录(动态增容版)
【C语言实战项目】通讯录(动态增容版)
23 0
|
4天前
|
存储 编译器 C语言
【C语言实战项目】通讯录
【C语言实战项目】通讯录
29 0
|
4天前
|
编译器 定位技术 C语言
【C语言实战项目】扫雷游戏
【C语言实战项目】扫雷游戏
28 0
|
4天前
|
存储 关系型数据库 MySQL
C语言/C++实战项目雷霆飞机(代码改进)
C语言/C++实战项目雷霆飞机(代码改进)
|
4天前
|
人工智能 C语言
C语言实战项目(AI代码)
C语言实战项目(AI代码)
|
4天前
|
存储 关系型数据库 MySQL
经典C语言/C++项目,雷霆战机
经典C语言/C++项目,雷霆战机
|
4天前
|
数据可视化 C语言
【C语言】实战项目——通讯录
学会创建一个通讯录,对过往知识进行加深和巩固。 文章很长,要耐心学完哦!
32 0