| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1288 人关注过本帖
标题:求高手看下这个程序!
取消只看楼主 加入收藏
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
结帖率:88.24%
收藏
已结贴  问题点数:20 回复次数:12 
求高手看下这个程序!
万年历:
程序代码:
#include <stdio.h>

void PrintMonth(int year, int month)//定义函数(有两个参数)
{
int preDays, preMonth, preYears, monthDays, i;//声明。。
           前一月份,前一年份,一个月的天数
    char Leap;//声明变量  闰年
    
    preYears = year - 1;//计算前一年份
    preDays = preYears * 365 + preYears / 4 - preYears / 100 + preYears / 400;//从公元元年到之前一年结束时的总天数
    Leap = ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) ? 1 : 0;//判断是否是闰年,是Leap=1否Leap=0
    preMonth = month - 1;//前一月份
    switch(preMonth)
    {//这部分是计算从公元元年到今年这个月的前一个月末总的天数(平年)
        case 1: preDays += 31; break;
        case 2: preDays += 59; break;
        case 3: preDays += 90; break;
        case 4: preDays += 120; break;
        case 5: preDays += 151; break;
        case 6: preDays += 181; break;
        case 7: preDays += 212; break;
        case 8: preDays += 243; break;
        case 9: preDays += 273; break;
        case 10: preDays += 304; break;
        case 11: preDays += 334; break;
    }
    if(preMonth >= 2 && Leap) preDays++;//由于上面是以平年算的一般情况,而此处月份(year)为3月份以上又为闰年所以2月有29天少加了一天
    switch(month)
    {//根据输入的月份给出这个月的天数(平年)
        case 1: monthDays = 31; break;
        case 2: monthDays = 28; break;
        case 3: monthDays = 31; break;
        case 4: monthDays = 30; break;
        case 5: monthDays = 31; break;
        case 6: monthDays = 30; break;
        case 7: monthDays = 31; break;
        case 8: monthDays = 31; break;
        case 9: monthDays = 30; break;
        case 10: monthDays = 31; break;
        case 11: monthDays = 30; break;
        case 12: monthDays = 31; break;
    }
    if(month == 2 && Leap) monthDays++;//闰年2月29天
    switch(month)
    {//输出月份
        case 1: printf("1月"); break;
        case 2: printf("2月"); break;
        case 3: printf("3月"); break;
        case 4: printf("4月"); break;
        case 5: printf("5月"); break;
        case 6: printf("6月"); break;
        case 7: printf("7月"); break;
        case 8: printf("8月"); break;
        case 9: printf("9月"); break;
        case 10: printf("10月"); break;
        case 11: printf("11月"); break;
        case 12: printf("12月"); break;
    }
    printf(" %d", year);//输出年份
    if(Leap) printf(" 闰年");//输出闰年,平年为一般情况
    printf("\n日 一 二 三 四 五 六\n");
    preDays %= 7;//开始是星期几
    if(preDays < 6) for(i = 0; i <= preDays; i++) printf("   ");//在之前的空着的星期下打空格
    
for(i = 1; i <= monthDays; i++)
    {
        printf("%2d  ", i);
        if((i + preDays) % 7 ==6) printf("\n");//一行满7个数就换行
    }
    printf("\n");
}

int main()//主函数
{
    int year, month;//声明年和月
    for(;;)        //死循环,查完一个年份后,还可继续查
    {
        scanf("%d %d", &year, &month);  //输入年份和月份
        if(year <= 0 || month <= 0) break;//判断输入的年份和月份是否符合要求
        PrintMonth(year, month);//调用函数PrintMonth()
    }
    return 0;
}
                            为什么当换行的时候是除以6而不是除以7啊!有点郁闷!还有一点小瑕疵!见图,为什么第一行不是对齐的啊?                                                                                           以后再查询就是很规整的那样的啊?什么情况啊?
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 唏嘘草 于 2011-6-5 21:43 编辑 ]
搜索更多相关主题的帖子: color 
2011-06-05 21:42
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 6楼 bccn_2012
你有没有测试过啊!错的一踏糊涂
2011-06-06 11:26
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 8楼 bccn_2012
没错就是空格的问题
,我经过不断的修正与摸索,终于把这个给解决了!貌似开始小完美了!
2011-06-06 16:41
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 10楼 voidx
我现在真不知到是不是空个的问题了!把这个对齐了,别的又错位了!我在加空格,。。。最后还是不能对齐。怎么回事啊
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-06-06 17:18
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 12楼 voidx
我%2d %3d %4d 全试过了没用,你看图6,7,8三个月的,6月的第一行没对齐,七月没对齐了,8对齐了,可是不是对应的(往前移了)
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 唏嘘草 于 2011-6-6 18:43 编辑 ]
2011-06-06 18:42
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 14楼 voidx
学习了!
2011-06-07 07:57
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 14楼 voidx
大哥啊,不行啊
图片附件: 游客没有浏览图片的权限,请 登录注册
2011-06-07 08:05
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 17楼 beyondyf
说实话有点晕啊,半角拳脚的不是太清除,关键这个是什么样的组合啊,你能形象的表示一下吗?有劳,顺便解释一下啊占几个宽度的问题
2011-06-07 08:47
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 21楼 voidx
我试过了不行的?
2011-06-07 16:27
唏嘘草
Rank: 2
等 级:论坛游民
帖 子:128
专家分:93
注 册:2011-6-4
收藏
得分:0 
回复 23楼 voidx
就是上面的 有图片的就是
2011-06-07 22:40
快速回复:求高手看下这个程序!
数据加载中...
 
   



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

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