| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1133 人关注过本帖
标题:日历问题
只看楼主 加入收藏
爱的轩辕氏
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:157
注 册:2011-5-8
结帖率:93.75%
收藏
已结贴  问题点数:10 回复次数:4 
日历问题
日历,输入年份和月份,输出该月日历
搜索更多相关主题的帖子: 日历 
2011-07-13 13:37
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:10 
做过的练习题,供楼主参考。
程序代码:
#include <stdio.h>
#include <stdbool.h>

//Define Global Variables

int year,month,numberDays,weekFirstDay,lastDay;
int daysPerMonth[12]={ 31,28,31,30,31,30,31,31,30,31,30,31 };
bool leapFlag;

//Declare some Functions in the Program.

void space (void);
void dispcal (void);
bool leapYear (void);
int numbersOfMonth (void);
int weekOfFirstday (void);
int sumDay (int n);

//Main Program Start...

int main (void) {

    printf ("please date[year month]:");
    scanf ("%i%i",&year,&month);
    
    printf ("\n");

//Call Functions.
//weekOfFirstday():Get week of Current Month First day.
//numbersOfMonth():Get numbers of Current Month.
//dispcal(weekFirstDay):display Cureent month calendar.

    weekOfFirstday();
    numbersOfMonth();
    dispcal();

//Return OS.

    return 0;

}
//

int weekOfFirstday (void) {

    switch (month) {
    
    case 1:    numberDays=1;break;

    case 2:numberDays=sumDay(2);break;

    case 3:numberDays=sumDay(3);break;

    case 4:numberDays=sumDay(4);break;

    case 5:numberDays=sumDay(5);break;

    case 6:numberDays=sumDay(6);break;

    case 7:numberDays=sumDay(7);break;

    case 8:numberDays=sumDay(8);break;

    case 9:numberDays=sumDay(9);break;

    case 10:numberDays=sumDay(10);break;

    case 11:numberDays=sumDay(11);break;

    case 12:numberDays=sumDay(12);break;
    
    }

    if(leapYear()==true&&month>2) {

        numberDays+=1;

    }
    
    weekFirstDay=((year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+numberDays)%7;
    
    return weekFirstDay;

}
//
int sumDay (int n) {

    int i,sum=1;

    for(i=0;i<(n-1);i++) {

        sum += daysPerMonth[i];

    }
    
    return sum;

}
void space (void) {

    int i;

    for(i=0;i<weekFirstDay;i++) {

        printf ("\t");

    }

}
//
void dispcal (void) {

    int index,col,firstDay=1;
    printf ("---------------------------------------------------\n");
    printf ("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n\n");
    space();

    for(col=1;col<=7-weekFirstDay;col++,firstDay++) {

        printf ("%i\t",firstDay);

    }

    printf ("\n\n");

    for(index=1,col=firstDay;col<=lastDay;col++,index++) {

        printf ("%i\t",col);

        if(index%7==0) {

            printf ("\n\n");

        }

    }

    printf ("\n--------------------------------------------------\n");

}
//
bool leapYear (void) {

    if(((year%4==0&&year%100!=0)||year%400==0)&&month==2) {

        leapFlag=true;

    }else{

        leapFlag=false;

    }

    return leapFlag;

}
//
int numbersOfMonth (void) {

    if(leapYear()==true) {

        lastDay=daysPerMonth[month-1]+1;

    }else{

        lastDay=daysPerMonth[month-1];

    }

    return lastDay;

}


程序代码:
root@~/prog #./cale
please date[year month]:2011 7

---------------------------------------------------
Sun     Mon     Tue     Wed     Thu     Fri     Sat

                                        1       2

3       4       5       6       7       8       9

10      11      12      13      14      15      16

17      18      19      20      21      22      23

24      25      26      27      28      29      30

31
--------------------------------------------------
root@~/prog #

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-07-13 15:13
为我留住记忆
Rank: 4
来 自:北京
等 级:业余侠客
帖 子:130
专家分:226
注 册:2011-4-30
收藏
得分:0 
这是纯粹在求答案吧。。。。。
   



    还是自己思考。。。

学习c是为了自己更强大。。。
2011-07-13 16:02
爱的轩辕氏
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:157
注 册:2011-5-8
收藏
得分:0 
回复 3楼 为我留住记忆
NO  NO,  自己写的有缺陷,要多学别人的算法,
2011-07-13 16:27
爱的轩辕氏
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:71
专家分:157
注 册:2011-5-8
收藏
得分:0 
  晒晒自己的吧#include "stdafx.h"
/*声明函数GetWeekDay求某年某月某日是星期几*/

int GetWeekDay(int,int,int);

/*声明函数GetMonthDays求某年某月共有几天*/

int GetMonthDays(int,int);

/*声明函数PrintMonthCalender打印某月日历*/\

int PrintMonthCalender(int,int);

/*声明函数CheckLeap判断某年是否是闰年*/

int CheckLeap(int);



int _tmain(int argc, _TCHAR* argv[])
{
    /*定义变量,startDay为要求月的第一天的星期数,

    *days为要求月的天数

    */

    int year,month,startDay,days;

    printf("input the year and month(YYYY-MM):");

    scanf("%d-%d",&year,&month);

    printf("\n\t\t\t%d-%d\n",year,month);

    /*引用函数GetWeekDay求要求月的首天是星期几*/

    startDay=GetWeekDay(year,month,1);

    /*引用函数GetMonthDays求要求月有多少天*/

    days=GetMonthDays(year,month);

    PrintMonthCalender(startDay,days);

    return(0);

}

/*定义函数GetWeekDay求某年某月某日是星期几*/

int GetWeekDay(int year,int month,int day)

{

    int days,weekday,i;

    days=year*365+year/400+year/4-year/100;

    /*计算从0001年1月1日到该月为止的天数*/

    for(i=12;i>=month;i--)

        days=days-GetMonthDays(year,i);

    /*计算从0001年1月1日到该天为止的天数*/

    days=days+day;

    /*计算该天的星期数*/

    weekday=days%7;

    return weekday;

}


int GetMonthDays(int year,int month)

{

    if(month==4||month==6||month==9||month==11)

        return 30;

    else

    {



        if(month==2)

        {

            /*对闰年的判断*/

            if(CheckLeap(year))

                return 29;

            else

                return 28;

        }

        else

            return 31;

    }

}

int PrintMonthCalender(int startDay,int days)

{

    int num,count;

    num=-startDay;

    printf("\nSun.\tMon.\tTue.\tWed.\tThu.\tFri.\tSat.\n");

    /*控制输出的天数*/

    while(num<=days)

    {

        printf("\n");

        /*对一个星期七天的控制*/

        for(count=1;count<=7;count++)

        {

            num=num+1;

            /*控制输出的天数*/

            if(num>=1&&num<=days)

                printf("%d\t",num);

            else

                printf("\t");

        }

    }

    printf("\n");
    return 0;


}


int CheckLeap(int year)

{

    if((year%4==0&&year%100!=0)||(year%400==0))

        return 1;

    else

        return 0;

}
2011-07-13 16:34
快速回复:日历问题
数据加载中...
 
   



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

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