请帮我看看我写的程序到底那里逻辑错误了,我看了好久了。感谢。题目是《输入年和月输出该年该月的月历,见输出样历。》
输入年和月输出该年该月的月历,见输出样历。提示公式1: w=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7,是计算y年1月1日星期几。 w值是0~6分别表示星期日~星期六
提示公式2:w1=(w+n-1)%7,是计算y年第n天是星期几。
编程提示:
void main()
{
int i,y,m,n; //n值表示正在处理的某天是该年的第几天
int w,w1,n,n1; //w存储该年的1月1号的星期值,w1存储该年第n天的星期值,n1是该月的天数
1. 输入年月y、m
2. 计算该月1号是这年第几天 n
3. 计算该年1月1号星期几 w
4. 计算该月1日是星期几 w1
5. 计算该月有几天 n1
6. 输出月份表头“Sun Mon Tue Wen Thu Fri Sat”
7. 根据w1,输出若干空格,为每月第一天确定输出的位置,月份表头中的星期几对齐
8. 内循环处理输出该月1到n1天
{
输出某天
计算该天是y年的第几天
计算该天是星期几
如果是星期六,则输出换行
}
}
输入描述输入两个整数,分别表示年月
输出描述输出月历
输入样例
2011 11
输出样例
Sun Mon Tue Wen 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
#include<stdio.h>
int fun(int i);
int fun1(int j);
void main()
{
int w,w1,n,n1;
int y,m,i=0,j,k,l;
scanf("%d %d",&y,&m);
n=fun(i);
w=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7;
w1=(w+n-1)%7;
n1=fun1(j);
printf("Sun Mon Tue Wen Thu Fri Sat\n");
for(k=1;k<=w1;k++)
printf(" ");
for(l=1;l<=n1;l++){
printf("%3d",l);
w1++;
if(w1==6){
w1=0;
printf("\n");}
}
}
int fun(int i)
{
int m,y;
switch(m-1)
{
case 11: i=i+30;
case 10: i=i+31;
case 9: i=i+30;
case 8: i=i+31;
case 7: i=i+31;
case 6: i=i+30;
case 5: i=i+31;
case 4: i=i+30;
case 3: i=i+31;
case 2: if((y%400==0)||(y%4==0)&&(y%100!=0)) i=i+29;
else i=i+28;
case 1: i=i+31;
}
i=i+1;
return i;
}
int fun1(int j)
{
int m,y;
switch(m)
{
case 12: j=31;break;
case 11: j=30;break;
case 10: j=31;break;
case 9: j=30;break;
case 8: j=31;break;
case 7: j=31;break;
case 6: j=30;break;
case 5: j=31;break;
case 4: j=30;break;
case 3: j=31;break;
case 2: if((y%400==0)||(y%4==0)&&(y%100!=0)) j=29;
else j=28;break;
case 1: j=31;break;
}
return j;
}