| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 628 人关注过本帖
标题:求助~~一道C语言题。。。
只看楼主 加入收藏
yjj598889481
Rank: 1
等 级:新手上路
帖 子:57
专家分:2
注 册:2011-4-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
求助~~一道C语言题。。。
.编写程序显示单月的日历。由用户指定这个月的天数和该月起始日是星期几:
Enter number of days in month:31
Enter starting day of the week (1=Sun, 7=Sat):3
------------------------------------------------------
Su    Mo   Tu   We   Th    Fr   Sa
------------------------------------------------------
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
搜索更多相关主题的帖子: C语言 日历 用户 
2011-04-04 23:05
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:7 
写过类似的, 楼主参考一下。
程序代码:

#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@~ #cd prog
root@~/prog #./cale
please date[year month]:2011 4

---------------------------------------------------
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


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

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-04-05 01:22
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:7 
好长哦  嘎嘎

                                         
===========深入<----------------->浅出============
2011-04-05 14:39
yjj598889481
Rank: 1
等 级:新手上路
帖 子:57
专家分:2
注 册:2011-4-4
收藏
得分:0 
谢谢哦   嘎嘎
2011-04-05 20:41
yjj598889481
Rank: 1
等 级:新手上路
帖 子:57
专家分:2
注 册:2011-4-4
收藏
得分:0 
回复 2楼 ansic
谢谢哦~~
2011-04-05 20:43
yjj598889481
Rank: 1
等 级:新手上路
帖 子:57
专家分:2
注 册:2011-4-4
收藏
得分:0 
回复 3楼 laoyang103
我刚学c语言,你发的太复杂 , 我把我写的程序给你打上去, 你看看   就有一个地方不对齐   你帮我看看好不好?看循环那还需要加个什么?
#include<stdio.h>
#include<conio.h>

void main()
{
 int a,b,i,j,k,m;
 clrscr();
 printf("Enter number of days in month:");
 scanf("%d",&a);
 printf("Enter starting day of the week:");
 scanf("%d",&b);
 printf("----------------------------------------------------");
 printf("\nSu\tMo\tTu\tWe\tTh\tFr\tSa\n");
 printf("----------------------------------------------------\n");
 for(i=1;i<b;i++)   printf("\t");
 for(j=1;j<=a;j++)   printf("%d\t",j);
 getch();
}
2011-04-05 21:14
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
收藏
得分:7 
程序代码:
 void month_day(int year,int yearday,int *pmonth,int *pdady)
{
    int k,leap;
    int tab[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}};
    leap=(year%4==0&&year%100!=0)||year%400==0;
    for(k=1;yearday>tab[leap][k];k++)yearday-=tab[leap][k];
    *pmonth=k;
    *pdady=yearday;
}
当我喜欢简洁后

[ 本帖最后由 pcbaichi 于 2011-4-5 21:25 编辑 ]

免费赠送河蟹一只
2011-04-05 21:24
yjj598889481
Rank: 1
等 级:新手上路
帖 子:57
专家分:2
注 册:2011-4-4
收藏
得分:0 
回复 7楼 pcbaichi
我刚开始学c语言  只会简单的
你的我有点看不懂。。  呵呵  你能看一下我写的程序里加点东西(在循环那加  让其每行都换行的那个)   让结果的数字都对齐吗? 谢谢哦~
#include<stdio.h>
#include<conio.h>

void main()
{
 int a,b,i,j,k,m;
 clrscr();
 printf("Enter number of days in month:");
 scanf("%d",&a);
 printf("Enter starting day of the week:");
 scanf("%d",&b);
 printf

("----------------------------------------------------");
 printf("\nSu\tMo\tTu\tWe\tTh\tFr\tSa\n");
 printf

("----------------------------------------------------\n");
 for(i=1;i<b;i++)   printf("\t");
 for(j=1;j<=a;j++)   printf("%d\t",j);
 getch();
}
2011-04-05 22:02
快速回复:求助~~一道C语言题。。。
数据加载中...
 
   



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

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