标题:万年历 c语言 两月一行
只看楼主
wh2100133
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-6-25
结帖率:0
已结贴  问题点数:20 回复次数:4 
万年历 c语言 两月一行
万年历在打印输出的时候怎么才能做到两月一行
搜索更多相关主题的帖子: c语言 万年历 
2017-06-25 10:24
wh2100133
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-6-25
得分:0 
#include <stdio.h>

int year(int y)
{
    if ((y%4==0) && (y%100!=0) || y%400==0)
        return 366;
    else
        return 365;
}

int main()
{
    int y;
    int i,j,sum=0,t=0;
    int begin,week;
    int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};

    scanf("%d",&y);
    for(i=1;i<y;i++)
        sum+=year(i);

    week=(sum+1)%7;     //表示该年1月1日为星期几

    if(year(y)==366)
        days[1]=29;

    printf("\n%d年日历如下:\n\n",y);

    for(i=0;i<12;i++)
    {
        printf("       %d月            \n",i+1);
        printf("  7  1  2  3  4  5  6  \n");
        printf("=======================\n");
        begin=1;
        for(j=0;j<week;j++)
            printf("   ");
        while(begin<=days[i])
        {
            printf("%3d",begin);
            begin++;
            week=(week+1)%7;
            if(week%7==0)
                printf("\n");
        }
        printf("\n\n");

    }



    return 0;
}
2017-06-25 10:25
Flustered
Rank: 2
等 级:论坛游民
帖 子:4
专家分:14
注 册:2017-6-20
得分:10 
厉害啦
2017-06-25 14:09
qszy
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2017-6-25
得分:10 
#include<stdio.h>
int main(void)
{
    int n,rn,xq,rs;
    int y,k,r;
    puts("请输入年份:");
    scanf("%d",&n);
    rn=(n-1)/4-(n-1)/100+(n-1)/400;
    xq=(n*365+rn-1)%7;
    printf("             %d年\n",n);
    for(y=1;y<=12;y++)
    {
        rs=31;
        if(y==2)
            {
                if(n%4==0&&(n%100!=0||n%400==0))
                {
                    rs=rs-2;
                }
                else
                {
                    rs=rs-3;
                }
            }
            if(y==4||y==6||y==9||y==11)
            {
                rs=rs-1;
            }
        printf("              %d月\n",y);
        puts("天   一   二   三   四   五   六");
        puts("—————————————————");
        for(k=0;k<xq;k++)
        {
            printf("     ");
        }
        for(r=1;r<=9;r++)
        {
            if(xq==7)
            {
                puts("");
                xq=0;
            }
            printf("0%d   ",r);
            xq=xq+1;
        }
        for(r=10;r<=rs;r++)
        {
            if(xq==7)
            {
                puts("");
                xq=0;
            }
            printf("%d   ",r);
            xq=xq+1;
        }        
        puts("");
        puts("");
        if(xq==7)
            {
                xq=0;
            }
    }
}
2017-06-25 20:10
qszy
Rank: 2
等 级:论坛游民
帖 子:2
专家分:10
注 册:2017-6-25
得分:0 
#include<stdio.h>
int main(void)
{
    int n,rn,xq,rs;//n:年   rn:闰年   xq:星期   rs:天数
    int y,k,r;//y:月   k:空的格数   r:日
    puts("请输入年份:");
    scanf("%d",&n);//6~7 输入年份
    puts("");
    puts("");
    puts("");//8~10 空三行
    rn=(n-1)/4-(n-1)/100+(n-1)/400;
    xq=(n*365+rn-1)%7;//11~12 算出这年的1月1日是星期几
    printf("             %d年\n",n);//13 打印年份
    for(y=1;y<=12;y++)
    {
        rs=31;
        if(y==2)
            {
                if(n%4==0&&(n%100!=0||n%400==0))
                {
                    rs=rs-2;
                }
                else
                {
                    rs=rs-3;
                }
            }
            if(y==4||y==6||y==9||y==11)
            {
                rs=rs-1;
            }//14~31 确定每个月的天数
        printf("              %d月\n",y);//32 打印月份
        puts("一   二   三   四   五   六   日");
        puts("—————————————————");//33~34 打印开头
        for(k=0;k<xq;k++)
        {
            printf("     ");
        }//35~38 打印开头空的数量
        for(r=1;r<=9;r++)
        {
            if(xq==7)
            {
                puts("");
                xq=0;
            }//41~45 每到星期日换行
            printf("0%d   ",r);
            xq=xq+1;
        }//39~48 打印0~9日
        for(r=10;r<=rs;r++)
        {
            if(xq==7)
            {
                puts("");
                xq=0;
            }//51~55 每到星期日换行
            printf("%d   ",r);
            xq=xq+1;
        }//49~58 打印10~最后一日
        puts("");
        puts("");//59~60 空两行
        if(xq==7)
            {
                xq=0;
            }
    }//61~65 防止上月最后一天是星期日的一个月开头多空一行
    return 0;
}
2017-06-25 20:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-478917-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.755352 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved