题目
解决代码及点评
/************************************************************************/
/* 78. 打印年历。
要求:每行打印两个月日历。如下图: 一月 二月 三月 四月 . .
. .
. .
十一月 十二月 思考: 每行打印三个月日历。
*/
/************************************************************************/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int a, i, j, n, k, t, w, x, z;
static int DM[12][60];
int m[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
char wst[] = " Sun Mon Yue Wed Thu Fri Sat "; w = 2; //第一天星期二
for(i=0; i<12; i++)
{
a = 1;
for(j=0; j<6; j++)
{
for(k=0; k<=6; k++)
{
while(k<w) k=k+1;
DM[i][j*10+k] = a; /*计算i月的第j个星期的星期w的日期为a*/
a=a+1;
w = k+1;
if(w==7) w=0;
if(a>m[i]) break;
}
if(a>m[i]) break;
}
}
printf("input x(2,3): ");
scanf_s("%d", &x); //x 为每行显示个数 for(n=0; n<12/x; n++)
{
t = x*(n)+1;
printf("\n ");
for(z=1; z<=x; z++)
{
for(k=1; k<=15; k++)
printf(" ");
printf("%2d", t+z-1); /*打印月号*/
for(k=0; k<14; k++)
printf(" ");
}
printf("\n ");
for(z=0; z<x; z++) /*横排x个月*/
printf("%s", wst); /*星期标题*/
for(j=0; j<6; j++)
{
printf("\n ");
for(i=t-1; i<t+x-1; i++)
{
printf(" ");
for(k=0; k<=6; k++)
if(DM[i][j*10+k]==0) /*打印空格*/
printf(" ");
else
printf("%4d", DM[i][j*10+k]);/*日期*/
}
}
}
system("pause");
return 0;
}
代码编译以及运行
由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:
1)新建工程
2)选择工程
3)创建完工程如下图:
4)增加文件,右键点击项目
5)在弹出菜单里做以下选择
6)添加文件
7)拷贝代码与运行
程序运行结果
代码下载
http://download.csdn.net/detail/yincheng01/6681845
解压密码:c.itcast.cn