编写一个程序,实现功能:输入某个年份,打印出该年的日历(含星期信息
如果有能力解答的话,请用少少的时间来解答一下吧~ 关于我期末考试上机的成绩呀! 谢啦!
用Turbo C来实现,请把源码文件发到 niclao@163.com 邮件主题请注明 解答C语言. 谢谢!
编写一个程序,实现功能:输入某个年份,打印出该年的日历(含星期信息)。
要求输出时,每栏输出两个月的日历,每屏输出两栏(四个月),按任意键后输出下一屏。
提示计算某年的第一天是星期几的公式如下:
[(year-1)+ (year-1)/4-(year-1)/100+(year-1)/400+1]%7
问题点数:0、回复次数:8Top
1 楼mostideal(三甲)回复于 2005-06-04 15:34:43 得分 0
既然时间还早,,我可以慢慢试试。。Top
2 楼ltc_mouse(野地芳菲)回复于 2005-06-10 08:44:52 得分 0
在论坛里搜索一下,有人问过,有人给过答案...Top
3 楼iamltlb(流沙)回复于 2005-06-11 21:20:19 得分 0
这样也可以?Top
4 楼andy_bin(乐逍遥)回复于 2005-06-12 10:18:59 得分 0
//C++版写的
//调了半天,好像还有一点点问题~~~
#include<iostream.h>
#include<iomanip.h>
int FirstDayOfYear(int y);
int DayOfMonth(int m);
void PrintMonth(int m);
void PrintHead(int m);
bool IsLeapYear(int y);
//-----------------------------
int weekDay;
int year;
void main()
{
cerr<<"请输入你想要打印的年份:";
cin>>year;
if(year<1)
{
cerr<<"ERROR YEAR!"<<endl;
return ;
}
weekDay=FirstDayOfYear(year);
cout<<"\n\n"<<year<<" 年\n" ;
cout<<"\n========================================================";
for(int i=1;i<=12;i++)
PrintMonth(i);
}
void PrintMonth(int m)//打印天数
{
PrintHead(m);
int days=DayOfMonth(m);
for(int i=1;i<=days;i++)
{
cout<<setw(7)<<i;
weekDay=(weekDay+1)%7;
if(weekDay==0)
{
cout<<endl;
cout<<" ";
}
}
cout<<endl;
}
void PrintHead(int m)//打印表头
{
cout<<"\n"<<setw(6)<<m<<"月 日 一 二 三 四 五 六\n";
cout<<" ";
for(int i=0;i<weekDay;i++)
cout<<" ";
}
int DayOfMonth(int m)//计算每月的天数
{
switch(m){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: return 31;//
case 4:
case 6:
case 9:
case 11: return 30;//
case 2:
if(IsLeapYear(year))
return 29;
else return 30;
}
return 0;
}
bool IsLeapYear(int y)//是否闰年
{
return ((y%4==0&&y%100!=0)||y%400==0);
}
int FirstDayOfYear(int y)//计算一年的第一天星期几
{
long n;
n=y*365;
for(int i=0;i<y;i++)//补上闰年的天数
n+=IsLeapYear(i);
return n=n%7;
}
Top
5 楼zhangsong1238(C++ fans)回复于 2005-06-12 10:46:24 得分 0
这个程序主要是算每一个月的开始一天是星期几。。
#include<iostream.h>
#include<iomanip.h>
class Day
{
public:
Day();
Day(int,int);
void SetYear(int);
void SetMonth(int);
int GetYear();
int GetMonth();
void Display(int,int);
friend int firstDay(Day&);
friend int allDay_f(Day&);
~Day();
protected:
int year,month;
};
Day::Day():year(1900),month(0){}
Day::Day(int y,int m)
{
year=y;
month=m;
}
void Day::SetYear(int y)
{
year=y;
}
void Day::SetMonth(int m)
{
month=m;
}
int Day::GetYear()
{
return year;
}
int Day::GetMonth()
{
return month;
}
void Day::Display(int weekday,int allday)
{
// int weekday,allday;
// allday=allDay_f();
// weekday=firstDay();
cout<<" "<<year<<"年"<<endl;
cout<<" "<<month<<"月"<<endl;
cout<<" "<<"日 一 二 三 四 五 六"<<endl;
// cout<<" ";
for(int j=1;j<=weekday;j++)
cout<<" ";
for(int i=1;i<=allday;i++)
{
cout<<setw(6)<<i;
weekday=(weekday+1)%7;
if(weekday==0)
cout<<endl;
}
cout<<endl;
}
Day::~Day(){}
#include<iostream.h>
#include"day_1.h"
//int fd,ad;
int firstDay(Day&d);
int allDay_f(Day&d);
void main()
{
Day day1;
int m1,y1,firstday_1,allday_1;
char char1,char2;
cout<<"请输入要查询的年_月_"<<endl;
cin>>y1>>char1>>m1;
day1.SetMonth(m1);
day1.SetYear(y1);
firstday_1=firstDay(day1);
allday_1=allDay_f(day1);
day1.Display(firstday_1,allday_1);
cin>>char2;
}
int firstDay(Day&d)
{
int fd;
long n;
n=d.year*365;
for(int i=1;i<d.year;i++)
if(i%4==0&&i%100!=0||i%400==0)
n=n+1;
switch((d.month-1))
{
case 0:return fd=n%7;
case 1:return fd=(n+31)%7;
case 2:if(d.year%4==0&&d.year%100!=0||d.year%400==0)
return fd=(n+31+29)%7;
else return fd=(n+31+28)%7;
case 3:if(d.year%4==0&&d.year%100!=0||d.year%400==0)
return fd=(n+31+29+31)%7;
else return fd=(n+31+28+31)%7;
case 4:if(d.year%4==0&&d.year%100!=0||d.year%400==0)
return fd=(n+31+29+31+30)%7;
else return fd=(n+31+28+31+30)%7;
case 5:if(d.year%4==0&&d.year%100!=0||d.year%400==0)
return fd=(n+31+29+31+30+31)%7;
else return fd=(n+31+28+31+30+31)%7;
case 6:if(d.year%4==0&&d.year%100!=0||d.year%400==0)
return fd=(n+31+29+31+30+31+30)%7;
else return fd=(n+31+28+31+30+31+30)%7;
case 7:if(d.year%4==0&&d.year%100!=0||d.year%400==0)
return fd=(n+31+29+31+30+31+30+31)%7;
else return fd=(n+31+28+31+30+31+30+31)%7;
case 8:if(d.year%4==0&&d.year%100!=0||d.year%400==0)
return fd=(n+31+29+31+30+31+30+31+31)%7;
else return fd=(n+31+28+31+30+31+30+31+31)%7;
case 9:if(d.year%4==0&&d.year%100!=0||d.year%400==0)
return fd=(n+31+29+31+30+31+30+31+31+30)%7;
else return fd=(n+31+28+31+30+31+30+31+31+30)%7;
case 10:if(d.year%4==0&&d.year%100!=0||d.year%400==0)
return fd=(n+31+29+31+30+31+30+31+31+30+31)%7;
else return fd=(n+31+28+31+30+31+30+31+31+30+31)%7;
case 11:if(d.year%4==0&&d.year%100!=0||d.year%400==0)
return fd=(n+31+29+31+30+31+30+31+31+30+31+30)%7;
else return fd=(n+31+28+31+30+31+30+31+31+30+31+30)%7;
}
}
int allDay_f(Day&d)
{
int ad;
switch(d.month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: return ad=31;
case 4:
case 6:
case 9:
case 11: return ad=30;
case 2:if(d.year%4==0&&d.year%100!=0||d.year%400==0)
return ad=29;
else return ad=28;
}
}
我自已写的,可能有点乱的。因为以前用习惯了用C,一下子用C++来写没能体会出C++的优点来,反而写乱了Top
6 楼Disky(Dsky)回复于 2005-06-14 23:05:49 得分 0
这条问题是要用C语言来写的,要在Turbo C里面编写实现! 各位高手能不能想想呀!有一个难题就是
要求输出时,每栏输出两个月的日历,每屏输出两栏(四个月)
最重要解决这个问题呀~!Top
7 楼cugwei(伟~~~盈)回复于 2005-06-14 23:51:32 得分 0
来个简单的
用了C++的cin和cout,直接改用scanf,和printf就可以了
#include<iostream>
using namespace std;
const int mon[2][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31};
int Is_Leap(int year){
if(year%400==0||(year%4==0&&year%100!=0)) return 1;
return 0;
}
void output(int fir,int n){
int i,j;
cout<<endl;
for(i=1;i<=12;i++){
cout<<i<<"月↓"<<endl<<"----------------------------"<<endl<<" 一 二 三 四 五 六 日"<<endl;
for(j=1;j<fir;j++) printf(" ");
for(j=1;j<=mon[n][i-1];j++){
printf("%4d",j);
fir++;
if(fir==8){
cout<<endl;
fir=1;
}
}
if(fir!=1) cout<<endl;
cout<<"----------------------------"<<endl;
}
cout<<endl;
}
int main()
{
int year,t;
while(cout<<"请输入要查询的年号(input 0 to end): "&&cin>>year&&year>0){
t=year-1;
t=(1+t+t/4-t/100+t/400)%7;
if(t==0) t=7;
output(t,Is_Leap(year));
}
return 0;
}Top
8 楼cugwei(伟~~~盈)回复于 2005-06-14 23:52:45 得分 0
结果如下:
请输入要查询的年号(input 0 to end): 1985
1月↓
----------------------------
一 二 三 四 五 六 日
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
----------------------------
2月↓
----------------------------
一 二 三 四 五 六 日
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
----------------------------
3月↓
----------------------------
一 二 三 四 五 六 日
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
----------------------------
4月↓
----------------------------
一 二 三 四 五 六 日
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
----------------------------
5月↓
----------------------------
一 二 三 四 五 六 日
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
----------------------------
6月↓
----------------------------
一 二 三 四 五 六 日
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
----------------------------
7月↓
----------------------------
一 二 三 四 五 六 日
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
----------------------------
8月↓
----------------------------
一 二 三 四 五 六 日
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
----------------------------
9月↓
----------------------------
一 二 三 四 五 六 日
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
----------------------------
10月↓
----------------------------
一 二 三 四 五 六 日
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
----------------------------
11月↓
----------------------------
一 二 三 四 五 六 日
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
----------------------------
12月↓
----------------------------
一 二 三 四 五 六 日
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
----------------------------
Top




