求问QAQ如何用C语言实现: 计算任何一个日期对应的教学周,以及星期几。从键盘输入某学期第1周周一的

求问QAQ如何用C语言实现: 计算任何一个日期对应的教学周,以及星期几。从键盘输入某学期第1周周一的日期,以及该学期中的某个日期,输出这个日期对应的教学周,以及星期几。学期可能跨年,全年的任何一个周一都可能是第1周,学期教学周长度不限,需要考虑闰年的问题。

教学周一般都是由系统设置好的吧,关于日期计算给你一段代码参考一下:

#include <stdio.h>
#include <stdlib.h>
 
int Day(int y,int m,int d);
 
int main(int argc, char *argv[]) {
    int i;  //循环变量
    int year,month,day;  //读取用户输入的年月日
    int days;  //储存从1900-1-1到该天的天数
    int week=0;  //储存求余后的星期
    //字符串组合输出星期
    char b[]={"星期"};
    char c[7][4]={"日","一","二","三","四","五","六"};
     
loop:printf("请输入年 月 日:(空格分隔)\n");
    scanf(" %d%d%d",&year,&month,&day);
    days=Day(year,month,day);
    //增强程序的健壮性
    if(days==-1)
    {
        printf("输入格式有误,");
        fflush(stdin);  //防止用户输入字母等其他非数字字符
        goto loop;
    }
    else
    {
        week=days%7;  //用求余计算星期几
        printf("%d年%d月%d日是%s%s\n",year,month,day,b,c[week]);
    }
    system("pause");
    return 0;
}
 
//函数功能:输入年月日,输出1900-1-1到该天的天数,-1位输入不合法
int Day(int y,int m,int d)
{
    int i;
    int r=0;  //储存1900到该天的闰年个数
    int a[]={31,28,31,30,31,30,31,31,30,31,30}; //m给每出月的天数
 
    if(y>=1900 && m>0 && m<13 && d>0 && d<32)
    {
        for(i=1900;i<=y;i++)  //计算闰年的个数
        {
            if(i%400==0||i%100!=0&&i%4==0)
                r++;
        }
        for(i=0;i<m-1;i++)  //统计当年1月1日到当月的天数
        {
            d+=a[i];
        }
        if((y%400==0||y%100!=0&&y%4==0)&&m<3)  //如果当年是闰年但不到二月就不能算进去
            r--;
        return 365*(y-1900)+r+d;
    }
    else
        return -1;
}