C语言实验(十二):函数(输入年份输出日历、闰年判断、元旦星期几)

一、判断闰年和某年元旦星期几的函数

1. 编写一个函数,输入年份,判断是否为闰年;
1、闰年:年份是4的倍数,但不是100的倍数的年份;以及年份是400的倍数的年份。
2、有闰年的定义,用代码实现即可。用取模运算判断是否是x的倍数。
2. 编写一个函数,输入年份,判断当年元旦所对应的星期数;
1、求出从1900年开始的闰年及平年数量。依此计算出共多少天,然后根据一周七日,用天数对7做取模运算。
2、结合1990年元旦为星期一,可推断出要求年份元旦是星期几。

二、输入日期(年、月、日),输出他是该年的第几天、星期几。

1、根据年份判断是否是闰年;根据月份和日期可以计算是该年第几天。
2、将该年第几天和与1900年间隔年份天数相加得到至1900年元旦的天数,对7做取模运算可推断得这一日期是星期几。

实验代码

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int y,m,d;
   printf("请输入日期(示例:2000.3.9)\n");
   scanf("%d.%d.%d",&y,&m,&d);
   Xingqi(y,m,d);
   Dijitian(y,m,d);
   return 0;
}


int Runnian(int year)//判断year年是否是闰年
{
   if (year%4 == 0 && year%100!=0 || year%400==0)
       return 1;
   else
       return 0;
}


int Xingqi(int year,int month,int day)//判断year年month月day日是星期几
{
   int i,s=0,n,a[13];
   for(i=1990;i<year;i++)
   {
       if(Runnian(i))
           n = 366;
       else
           n = 365;
       s+=n; //结果为与1900年间隔的年总天数
   }

   if(Runnian(year))
       a[2] = 29;
   else
       a[2] = 28;

   for(i=1;i<=12;i++)
       if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
           a[i]=31;
       else if(i==4||i==6||i==9||i==11)
           a[i]=30;

   for(i=1;i<month;i++)
       s+=a[i]; //加上这年过去的月份共多少天
   s+=day;//加上这是本月第几天

   switch(s%7)
   {
       case 0:printf("星期日");break;
       case 1:printf("星期一");break;
       case 2:printf("星期二");break;
       case 3:printf("星期三");break;
       case 4:printf("星期四");break;
       case 5:printf("星期五");break;
       case 6:printf("星期六");break;
   }
   return 0;
}

int Dijitian(int year,int month,int day) //判断year年month月day日是这年第几天
{
   int i,s=0,n,a[13];
   if(Runnian(year))
       a[2] = 29;
   else
       a[2] = 28;

   for(i=1;i<=12;i++)
       if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
           a[i]=31;
       else if(i==4||i==6||i==9||i==11)
           a[i]=30;

   for(i=1;i<month;i++)
       s+=a[i];//这年过去的月份共多少天
   s+=day;//加上这是本月第几天
   printf("今年的第%d天\n",s);
}

运行结果
在这里插入图片描述
在这里插入图片描述

三、打印年历,要求输入年份(1900以后),输出每个月的月历构成年历。即每天对应的星期。

1、要打印年历,需要输入年份。年历的输出,需要用到两个循环:每个月一个循环及每周一个循环。

2、首先需要知道该年元旦是星期几(调用函数2),将之前的位置都空出来。然后每周一个循环,去填充月历。在此之前,应该判断该年是否是闰年(调用函数1),依此判断2月份的天数。

3、将步骤2填充月历的过程循环12次即可,输出年历。根据控制台输出结果,适当调整代码,可以使年历清晰展示。

实验代码

#include <stdio.h>
#include <stdlib.h>
int Xingqi_yuandan(int year);

int main()
{
    int m,i,l,d,t,year;
    printf("请输入某年年份:");
    scanf("%d",&year);
    t = Xingqi_yuandan(year);
    printf("%d年\n",year);
    for (m=1;m<=12;m++)
    {
        printf("                    %2d 月                     \n",m);
        printf("-------------------------------------------------\n");
        printf(" 星期日 星期一 星期二 星期三 星期四 星期五 星期六\n");
        printf("-------------------------------------------------\n");
        for(i=0;i<t;i++)//把元旦之前星期X空出来
            printf("       ");
        if(m==2) //判断二月多少天
        {
            if(Runnian(year))
                l = 29;
            else
                l = 28;
        }
        else if(m==4||m==6||m==9||m==11)
            l = 30;
        else
            l = 31;
        for(d=1;d<=l;d++)
        {
            printf("     %2d",d);
            t++;
            if(t==7) //周日换行
            {
                t = 0;
                printf("\n\n");
            }
        }
        printf("\n\n\n");//与下一月之间隔开
    }
    return 0;
}


int Runnian(int year) //判断year年是不是闰年
{
    if (year%4 == 0 && year%100!=0 || year%400==0)
        return 1;
    else
        return 0;
}


int Xingqi_yuandan(int year)//判断year年元旦是星期几
{
    int m,n;
    m = (year-1900)/4-(year-1900)/100+(year-1900)/400;
    n = ((year-1900)*365 + m)%7+1;
    return n;
}

运行结果
在这里插入图片描述
在这里插入图片描述

  • 15
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值