ELIAUK,., 2022-09-04 16:35 采纳率: 66.7%
浏览 42
已结题

这个程序怎么写?初学者等

本来写了一个,但是运行有问题,所以重新求一个,月份之间老是少一天,然后改程序之后,月份第一天是0,但是其他日期是对的,不太理解

img

  • 写回答

3条回答 默认 最新

  • a5156520 2022-09-04 18:06
    关注

    参考下面的链接,修改了了一下,可以打印出题目所需要的日历。
    参考链接:
    c语言编写程序“输入任意一个年份和月份,打印当月日历。”_zhao_miao的博客-CSDN博客

    #define _CRT_SECURE_NO_WARNINGS 1
    #include<stdio.h>
    #include<stdlib.h>
    //https://ask.csdn.net/questions/7782335?spm=1005.2025.3001.5141
    int mon[2][13] = { { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
    { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 } };
    //判断闰年
    int isleap(int year)
    {
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
            return 1;
        else
            return 0;
    }
    //年份的第一天
    int first_day_of_year(int year)
    {
        int base_year = 2000;  //定义一个基准年2000年
        int first_day = 6;     //基准天:200011号是星期6
        int i = 2000;
        int total = 0;          //天数总和
        for (i = base_year; i < year; i++)
        {
            total = total + 365 + isleap(i);  //isleap函数用于判断年份是否是闰年,如果是返回1,不是返回0
        }
        return (total+first_day)%7;
    }
    //月份第一天
    int first_day_of_month(int year, int month, int first_year)
    {
        int total = 0;  //天数和
        int i = 0;
        for(i = 1; i < month; i++)
        {
            total = total + mon[isleap(year)][i];
        }
        return (total + first_year) % 7;
    }
    //展示日历
    void show(int year,int  month, int first_month)
    {
        int i = 0;
        printf("SUN  MON  TUE  WED  THU  FRI  SAT\n");  //修改了这里 
        for (i = 0; i < first_month; i++)   //修改了这里 
        {
            printf("     ");     //月份第一天是从first_month开始的,所以首先打印first_month-1个空格
        }
        
       // int firstLine = 0;
        for (i = 1; i <= mon[isleap(year)][month]; i++) //修改了这里 
        {
            printf("%-5d", i);
            if ((first_month+i) % 7 ==0) //如果(数字+空格数)%7==0,则换行
            {
                //printf("i=%d,first_month=%d,mon[isleap(year)][month]=%d\n",i,first_month,mon[isleap(year)][month]);
                printf("\n");
            //    firstLine=1;
            }
            
    //        if(i==mon[isleap(year)][month]-1){
    //            
    //        }
    //        if(firstLine==1&&((first_month-1+i) % 7 ==0)){
    //            printf("\n");
    //        }
                
        }
        printf("\n");
    }
    int main()
    {
        int year, month;
        printf("年-月:");  //输入你想打印的年份
        scanf("%d-%d", &year, &month);
        int first_year = first_day_of_year(year);//年份第一天
        int first_month = first_day_of_month(year, month, first_year);//月份第一天
        show(year, month, first_month);
        system("pause");
        return 0;
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月12日
  • 已采纳回答 9月4日
  • 创建了问题 9月4日

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用