根据日期求星期的问题

一道基础的根据日期求星期问题,各位

#include   
#include
 int main()  
 {  
  int year,month,date,days=0,out,flag=0,i; 
  scanf("%d %d %d",&year,&month,&date);
for(i=1900;i+28;break;
        case4:days+=31+28+31;break;
        case5:days+=31+28+31+30;break;
        case6:days+=31+28+31+30+31;break; 
        case7:days+=31+28+31+30+31+30;break; 
        case8:days+=31+28+31+30+31+30+31;break; 
        case9:days+=31+28+31+30+31+30+31+31;break; 
        case10:days+=31+28+31+30+31+30+31+31+30;break; 
        case11:days+=31+28+31+30+31+30+31+31+30+31;break; 
        case12:days+=31+28+31+30+31+30+31+31+30+31+30;break; 
    }
        if((year%400==0||(year%4==0&&year%100!=0))&&month>=3)
days++;
    days+=date-1;
    
}
    out=days%7;
    if(out==7){
        printf("%d\n",7-out);
    }else
    printf("%d\n",out);
 return 0;
 }  


麻烦看看哪里有问题

#include <stdio.h>  
#include<math.h>
int main()  
{  
      int year,month,date,days=0,out,flag=0,i; 
      scanf("%d %d %d",&year,&month,&date);
    for(i=1900;i<year;i++){
        if(i%400==0||(i%4==0&&i%100!=0))
            flag=1;
        if(flag==1)
            days+=366;
        else
            days+=365;
    }
    if(i==year){
        switch(month){
            case 1:days+=0;break;
            case 2:days+=31;break;
            case 3:days+=31+28;break;
            case 4:days+=31+28+31;break;
            case 5:days+=31+28+31+30;break;
            case 6:days+=31+28+31+30+31;break; 
            case 7:days+=31+28+31+30+31+30;break; 
            case 8:days+=31+28+31+30+31+30+31;break; 
            case 9:days+=31+28+31+30+31+30+31+31;break; 
            case 10:days+=31+28+31+30+31+30+31+31+30;break; 
            case 11:days+=31+28+31+30+31+30+31+31+30+31;break; 
            case 12:days+=31+28+31+30+31+30+31+31+30+31+30;break; 
        }
        if((year%400==0||(year%4==0&&year%100!=0))&&month>=3)
            days++;
        days+=date-1;
    }    
    out=days%7;
    if(out==7){
        printf("%d\n",7-out);
    }else
    printf("%d\n",out);
 return 0;
 }