zl程序教程

您现在的位置是:首页 >  大数据

当前栏目

习题 7.18 给出年、月、日,计算该日是该年的第几天。

计算 习题 给出 第几天
2023-09-14 09:06:56 时间

C程序设计(第四版) 谭浩强 习题7.18 个人设计

习题 7.18 给出年、月、日,计算该日是该年的第几天。

代码块:

方法1:(顺序结构)

#include <stdio.h>
int main()
{
    int m[13], year, month, day, i, d, leap;
    for (i=1; i<=12; i++){                                //月份赋值
        if (i==1||i==3||i==5||i==7||i==8||i==10||i==12)
            m[i]=31;
        else if (i!=2)
            m[i]=30;
        else
            m[i]=0;
    }
    //输入年月日
    printf("Input year:");
    scanf("%d", &year);
    printf("Input month:");
    scanf("%d", &month);
    printf("Input day:");
    scanf("%d", &day);
    //判断年份是否为闰年,同时判断2月的天数
    if (year%4==0){
        if (year%100==0){
            if (year%400==0)
                leap=1;
            else
                leap=0;
        }
        else
            leap=1;
    }
    else
        leap=0;
    if (leap)
        m[2]=29;
    else
        m[2]=28;
    for (i=1, d=0; i<month; i++)
        d+=m[i];
    d+=day;
    printf("Today is the No.%d day!\n", d);        //输出结果
    return 0;
}

方法2:(利用函数的模块化设计)

#include <stdio.h>
void date(int y, int m, int d);                    //定义天数判断函数
int main()
{
    int year, month, day;
    printf("Please enter Year Month Day: ");       //输入年月日
    scanf("%d %d %d", &year, &month, &day);
    date(year, month, day);                        //调用天数函数
    return 0;
}
//天数判断函数
void date(int y, int m, int d)
{
    int mon[12], day_sum, i;
    //以下是判断输入错误,重新输入
    for (i=0; m<1||m>12||(m==2&&d>29)||d<1||d>31; i++){
        printf("Error!\nPlease enter Year Month Day: ");
        scanf("%d %d %d", &y, &m, &d);
    }
    //以下是月份天数赋值
    for (i=0; i<12; i++){
        if (i==1) ((!(y%4))&&y%100!=0)||!(y%400) ? mon[i]=29 : mon[i]=28;
        else if (i==0||i==2||i==4||i==6||i==7||i==9||i==11) mon[i]=31;
        else mon[i]=30;
    }
    for (i=0, day_sum=0; i<m-1; day_sum+=mon[i++]);
    day_sum+=d;
    printf("%d is No.%d day in %d\n", d, day_sum, y);
}