PTA 使用结构体计算第几天,程序比较

这两个程序有差吗?
为什么第一个就满分,第二个就差一点点儿
定义 结构体变量(包括 年、月、日),编程序实现以下功能:
输入 年 月 日 后,程序计算出该日期在本年中是第几天
输入格式:
输入一年中的年 月 日,格式详见样例
输出格式:
输出该日期在本年度是第几天,格式详见样例
输入样例:
2001 8 1
输出样例:
213

#include<stdio.h>
#include"math.h"
#include"string.h"

    struct Date
    {
        int year;
        int month;
        int day;
    };

int main()
{
    struct Date p;
    scanf("%d%d%d",&p.year,&p.month,&p.day);
    int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
    int sum,i;
    sum=p.day;//当前月的天数先算入总数
    for(i=0;i<p.month-1;i++)//之前所有月份总天数累加
        sum+=m[i];
    //考虑闰年2月多一天
    if(((p.year%4==0&&p.year%100!=0)||p.year%400==0)&&p.month>2)
        printf("%d", sum+1);
    else
        printf("%d", sum);
    return 0;
}


#include<stdio.h>
int main()
{
struct dayliy
{
    int year;
    int month;
    int day;
}a={0,0,0};

int m=0,i=0,t=0,k=0,b[12]={0};
    scanf("%d %d %d",&a.year,&a.month,&a.day);
    m=a.month;
for(;i<m-1;i++)
    {   k=i+1;
        switch (k)
        {
        case 2: b[i]=28;break;
        case 4:
        case 6:
        case 9: b[i]=30;break;
        default:b[i]=31;break;
        }
    }
t=b[0]+b[1]+b[2]+b[3]+b[4]+b[5]+b[6]+b[7]+b[8]+b[9]+b[10]+b[11]+a.day;
  if((a.year/4==0&&a.year/100!=0||a.year/100&&a.year/400==0)&&a.month>2)
      t=t+1;
printf("%d",t);
return 0;
}

第二个的if语句判断闰年的条件写错了,导致错误。

个人感觉没什么区别,换了种写法,知道思路即可,考的就是分支、循环控制的语法