C语言题目求教

来源:百度知道 编辑:UC知道 时间:2024/06/22 15:11:57
程序设计题一: 打印日历
【问题描述】
该课题要求学生会读取系统时间,利用系统库文件中所给的数据结构,得到自己解决问题所要的数据,设计算法求解问题,再进行一些输出格式上的控制,实现根据系统时钟输出当月日历、当年日历的功能。
编写一个程序,输出当前月的日历。
【基本功能】
(1)本课题不需要从键盘读入数据。
(2)读系统时间,计算生成当天的日期。
(3)计算生成当月的日历,打印当月的日历,输出到以自己学号命名的文件中(如:thismonth_B05070122.txt),同时也在屏幕显示。输出的格式如下(假设当天日期为2005年12月20日):
Calendar
December
________________________________
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
今天是: 2005年12月20日,星期二
当前时间是:22时40分43秒
(4)计算生成当年的日历,打印当年的日历,以每行两个月的形式输出(如下),向屏幕输出,也写入文件中(calendar_2005_ B05070122.txt)。
Calendar
2005
Jan Feb
________________________________ ________________________________
Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed

//随便写了一下,实现了其中一些功能,给楼主参考一下吧,不过代码的可读性很差...
#include <stdio.h>
#include <time.h>
int leap(int year)
{
if(year%4 == 0 && year %100 != 0)
return 1;
else
{
if(year % 400 == 0)
return 1;
else
return 0;
}
return 0;
}
//将当前时间保存在数组中,total为天数(到那个月为止),1970.1.1为星期四
void getcl(int a[])
{
int start = 1970;
int total = 0;
time_t t = time(NULL);
t += 8*3600;//时区
int sum = 0, tem = 0,i = 1,flag = 0;
while(start)
{
if(leap(start))
{
flag = 1;
t -= 366*24*3600;
}
else
{
flag = 0;
t -= 365*24*3600;
}
if(t < 0)
break;
if(flag)
total += 366;
else
total += 365;
sum = t;
start++;
}
t = sum;
a[0] = start;
for(; ; i++)
{
if(i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i