《C语言及程序设计》实践参考——当年第几天

简介: 返回:贺老师课程教学链接  项目要求【项目5-当年第几天】定义一个函数,其参数为年、月、日的值,返回这一天为该年的第几天。要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果。#include<stdio.h>int days(int y, int m, int d);int main(){ int year, month, day;

返回:贺老师课程教学链接  项目要求


【项目5-当年第几天】
定义一个函数,其参数为年、月、日的值,返回这一天为该年的第几天。要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果。

#include<stdio.h>
int days(int y, int m, int d);
int main()
{
    int year, month, day;
    printf("输入年 月 日: ");
    scanf("%d %d %d", &year, &month, &day);
    printf("这是该年的第 %d 天\n", days(year, month, day));
    return 0;
}

int days(int y, int m, int d)
{   }

[参考解答]
解法1:
#include<stdio.h>
int days(int y, int m, int d);
int main()
{
    int year, month, day;
    printf("输入年 月 日: ");
    scanf("%d %d %d", &year, &month, &day);
    printf("这是该年的第 %d 天\n", days(year, month, day));
    return 0;
}

int days(int y, int m, int d)
{
    int sum=d;
    //下面要加上前m-1月的天数
    int i;
    for(i=1; i<m; i++)
    {
        switch(i)
        {
        case 2:
            sum+=((y%4==0&&y%100!=0)||y%400==0)?29:28;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            sum+=30;
            break;
        default:
            sum+=31;
            break;
        }
    }
    return sum;
}

解法2:
#include<stdio.h>
int days(int y, int m, int d);
int main()
{
    int year, month, day;
    printf("输入年 月 日: ");
    scanf("%d %d %d", &year, &month, &day);
    printf("这是该年的第 %d 天\n", days(year, month, day));
    return 0;
}

int days(int y, int m, int d)
{
    int sum=d;
    //加上前m-1月的天数
    int i;
    for(i=1; i<m; i++)
    {
        if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
            sum+=31;
        else if (i==4||i==6||i==9||i==11)
            sum+=30;
        else
            sum+=((y%4==0&&y%100!=0)||y%400==0)?29:28;
    }
    return sum;
}

解法3:后面要学习数组。然后就可以这样来了,30行之内解决问题(对数组充满期待吧):
#include<stdio.h>
int days(int y, int m, int d);
int main()
{
    int year, month, day;
    printf("输入年 月 日: ");
    scanf("%d %d %d", &year, &month, &day);
    printf("这是该年的第 %d 天\n", days(year, month, day));
    return 0;
}

int days(int y, int m, int d)
{
    int sum=d;
    int a[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int i;
    for(i=1; i<m; i++)
    {
        sum+=a[i];
    }
    if(m>2&&((y%4==0&&y%100!=0)||y%400==0)) //若闰年,且晚于2月,加一天
        sum++;
    return sum;
}

解法4:有同学写成下面的代码,结果对,但这样的程序的确不好:
#include<stdio.h>
int days(int y, int m, int d);
int main()
{
    int year, month, day;
    printf("输入年 月 日: ");
    scanf("%d %d %d", &year, &month, &day);
    printf("这是该年的第 %d 天\n", days(year, month, day));
    return 0;
}

int days(int year, int month, int day)
{
    int t;
    if(year%4==0&&year%100!=0||year%400==0)
    {
        switch(month)
        {
        case 1:
            t=day;
            break;
        case 2:
            t=day+31;
            break;
        case 3:
            t=day+31+29;
            break;
        case 4:
            t=day+31+29+31;
            break;
        case 5:
            t=day+31+29+31+30;
            break;
        case 6:
            t=day+31+29+31+30+31;
            break;
        case 7:
            t=day+31+29+31+30+31+30;
            break;
        case 8:
            t=day+31+29+31+30+31+30+31;
            break;
        case 9:
            t=day+31+29+31+30+31+30+31+31;
            break;
        case 10:
            t=day+31+29+31+30+31+30+31+31+30;
            break;
        case 11:
            t=day+31+29+31+30+31+30+31+31+30+31;
            break;
        case 12:
            t=day+31+29+31+30+31+30+31+31+30+31+30;
            break;
        }
        return t;
    }
    else
    {
        switch(month)
        {
        case 1:
            t=day;
            break;
        case 2:
            t=day+31;
            break;
        case 3:
            t=day+31+28;
            break;
        case 4:
            t=day+31+28+31;
            break;
        case 5:
            t=day+31+28+31+30;
            break;
        case 6:
            t=day+31+28+31+30+31;
            break;
        case 7:
            t=day+31+28+31+30+31+30;
            break;
        case 8:
            t=day+31+28+31+30+31+30+31;
            break;
        case 9:
            t=day+31+28+31+30+31+30+31+31;
            break;
        case 10:
            t=day+31+28+31+30+31+30+31+31+30;
            break;
        case 11:
            t=day+31+28+31+30+31+30+31+31+30+31;
            break;
        case 12:
            t=day+31+28+31+30+31+30+31+31+30+31+30;
            break;
        }
        return t;
    }
}



目录
相关文章
|
1月前
|
存储 C语言
C语言顺序结构:基础与实践
C语言,作为一种广泛使用的编程语言,其程序结构可以分为三种基本类型:顺序结构、选择结构和循环结构。在这篇文章中,我们将重点讨论顺序结构的概念、特点以及如何在C语言中实现顺序结构的程序设计。
39 1
|
1月前
|
C语言
C语言模块化程序设计
C语言模块化程序设计
21 0
|
1月前
|
C语言
【C语言】循环结构程序设计(第二部分 -- 习题讲解)
【C语言】循环结构程序设计(第二部分 -- 习题讲解)
C4.
|
1月前
|
程序员 C语言
C语言循环结构与程序设计
C语言循环结构与程序设计
C4.
23 0
|
1月前
|
存储 文件存储 C语言
《C语言程序设计》课程设计 -- 火车票票务管理系统
《C语言程序设计》课程设计 -- 火车票票务管理系统
23 1
|
1月前
|
存储 C语言
C语言顺序结构程序设计
C语言顺序结构程序设计
21 0
|
1月前
|
Unix Linux C语言
【C/C++ 跳转函数】setjmp 和 longjmp 函数的巧妙运用: C 语言错误处理实践
【C/C++ 跳转函数】setjmp 和 longjmp 函数的巧妙运用: C 语言错误处理实践
19 0
|
1月前
|
存储 C语言
C语言的顺序程序设计
C语言的顺序程序设计
11 2
|
1月前
|
存储 C语言
C语言的顺序程序设计
C语言的顺序程序设计
15 0
|
1月前
|
C语言
【C语言】用函数实现模块化程序设计
【C语言】用函数实现模块化程序设计