输入年月日,编写函数就算该日是该年的第几天

我的代码好多问题,有没有人可以帮我运行一下找一下问题?我运行了有问题但是不会解决,困扰了好久了,好难!


#include<stdio.h>
int H(int x,int y,int z);
int main()
{
    int nian,yue,ri;
    printf("请依次输入年、月、日:");
    scanf("%d %d %d",&nian,&yue,&ri);
    if(nian%4!=0&&nian%100==0||nian%400!=0)
    printf("%d",H(nian,yue,ri)-1);
    else
    printf("%d",H(nian,yue,ri));
}
int H(int a,int b,int c)
{
    int sum=0,i;
    if(a%4==0&&a%100!=0||a%400==0)
    {
        for(i=0;i<b;i++)
        {
            i=i-1;
            if(i==2)
            {
                sum=sum+29;
            }
            else if(i==4||i==6||i==9||i==11)
            {
                sum=sum+30;
            }
            else
            {
                sum=sum+31;
            }
        }
        return sum;
    }
}

if(a%4==0&&a%100!=0||a%400==0)
如果是平年呢?输入2022 5 31,压根没运行这个if里面的语句
所以返回的值是错的

【有帮助请采纳】

第10行,判断为闰年后并不是立刻就能得出天数要减一,因为闰年和非闰年在1、2月大部分没有区别,所以还要判断月份是否大于2
第17行不用判断是否为闰年了,在前面已经判断过了

#include<stdio.h>
int H(int x,int y,int z);
int main() {
    int nian,yue,ri;
    printf("请依次输入年、月、日:");
    scanf("%d %d %d",&nian,&yue,&ri);
    if((nian%4==0&&nian%400!=0)&&yue>2)//判断是否为闰年以及月份是否大于2
        printf("%d",H(nian,yue,ri)+1);//闰年2月有29天
    else
        printf("%d",H(nian,yue,ri));
}
int H(int a,int b,int c) {
    int sum=0;
    for(int i=1; i<b; i++) {
        if(i==2)sum=sum+28;
        else if(i==4||i==6||i==9||i==11)sum=sum+30;
        else sum=sum+31;
    }
    return sum+c;//月份天数加上日期
}

【有帮助请采纳】

修改如下,供参考:

#include<stdio.h>
int H(int x, int y, int z);
int main()
{
    int nian, yue, ri;
    printf("请依次输入年、月、日:");
    scanf("%d %d %d", &nian, &yue, &ri);
    //if (nian % 4 != 0 && nian % 100 == 0 || nian % 400 != 0)
    //printf("%d", H(nian, yue, ri) - 1);
    //else
    printf("%d", H(nian, yue, ri));
    return 0;
}
int H(int a, int b, int c)
{
    int sum = 0, i;
    //if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0)
    //{
    for (i = 1; i < b; i++)  //for (i = 0; i < b; i++)
    {
        //i = i - 1;
        if (i == 2)
        {
            if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0)
                sum = sum + 29;
            else
                sum += 28;
        }
        else if (i == 4 || i == 6 || i == 9 || i == 11)
        {
            sum = sum + 30;
        }
        else
        {
            sum = sum + 31;
        }
    }
    return sum += c;
    //}
}