跪求万年历的C语言源程序~

求万年历的C语言源程序,要用VC的。
事后必重谢~~

#include <stdio.h>

void main()
{
printf("该程序求某天星期几和打印本年年历,不合法输入便自动退出:\n");
printf("请输入年 月 日:");
while(1)
{
loop:
// printf("请输入年 月 日:");
int o,p,q;
int w,y,m,d,c,yy,xingqi;
scanf("%d%d%d",&o,&p,&q); //参数对应年,月,日

if(o<0||p>12||p<0||q<0||q>31) //不合法输入判断

{
printf("输入不合法请按任意键退出\n"); //不合法则退出
break;
}

y=o;
m=p;
d=q;

if(m==1||m==2)
m=m+12;

if(m>12)
y=y-1;

yy=y%100;
c=(y/100);
w=yy+(yy/4)+(c/4)-2*c+(26*(m+1)/10)+d-1; //星期计算
xingqi=w%7;

if(xingqi<0)
xingqi=7+xingqi; //星期纠正

if(xingqi==0) printf("这天是星期天\n"); //打印星期
if(xingqi==1) printf("这天是星期一\n");
if(xingqi==2) printf("这天是星期二\n");
if(xingqi==3) printf("这天是星期三\n");
if(xingqi==4) printf("这天是星期四\n");
if(xingqi==5) printf("这天是星期五\n");
if(xingqi==6) printf("这天是星期六\n");
//printf("press any key to continue:\n");
//if((n=getchar())='\n') break;
//goto loop;
// return();
// printf("erro");
int uu ; //判
if((y%4==0&&y%100!=0)||y%400==0) //断
uu=1; //闰
else //年
uu=0;
if(uu==1) //打
printf("%d年是闰年:\n",y); //印
else //是
printf("%d年不是闰年\n",y); //否
//闰年
printf("%d年年历打印如下:\n",y); //打印年历

int i,j,k,pp;
for(i=1;i<13;i++)
{

if(i==1||i==3||i==5||i==7||i==8||i==10||i==12) //打印大月份
{ printf("\n %d月:\n\n",i);
printf(" 日 一 二 三 四 五 六 \n");
printf(" "); //20空格
pp=(yy+(yy/4)+(c/4)-2*c+(26*(i+1)/10))%7; //算本月1号星期几
if(pp<0)
pp=7+pp;
for(j=0;j<6*pp;j++) //1号前空空
printf(" ");
for(j=1;j<32;j++)
{
printf("%-6d",j); //%-6d为左对齐
if((pp+j)%7==0)
{ //换行判断
printf("\n");
printf("\n");
printf(" "); //转行前的空格
}

}
}

if(i==4||i==6||i==9||i==11) //打印中月份
{ printf("\n %d月:\n\n",i);
printf(" 日 一 二 三 四 五 六 \n");
printf(" ");
pp=(yy+(yy/4)+(c/4)-2*c+(26*(i+1)/10))%7;
if(pp<0)
pp=7+pp;
for(j=0;j<6*pp;j++)
printf(" ");
for(j=1;j<31;j++)
{
printf("%-6d",j);
if((pp+j)%7==0)
{
printf("\n");
printf("\n");
printf(" ");
}

}
}

if(i==2) //打印平月份
{ printf("\n %d月:\n\n",i);
printf(" 日 一 二 三 四 五 六 \n");
printf(" ");
pp=(yy+(yy/4)+(c/4)-2*c+(26*(i+1)/10))%7;
if(pp<0)
pp=7+pp;
for(j=0;j<6*pp;j++)
printf(" ");
if(uu==1)
for(j=1;j<30;j++)
{
printf("%-6d",j);
if((pp+j)%7==0)
{
printf("\n");
printf("\n");
printf(" ");
}

}
if(uu==0)
for(j=1;j<29;j++)
{
printf("%-6d",j);
if((pp+j)%7==0)
{
printf("\n");
printf("\n");
printf(" ");
}

}
}
printf("\n"); //每月打印完后换行
}
printf("\n");
//printf("press any key to continue:\n");
printf("请输入年 月 日继续:");
goto loop;
//system("PUUSE");

}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-05-03
#include <stdio.h>
#include <stdlib.h>
int leap(int); /*判断是否为闰年*/
int md(int m,int y); /*返回本月的天数*/
void prtweek(void); /*输出表头*/
int fw(int m,int y); /*返回本月一号是星期几*/
void prtmonth(int m); /*输出月份表头*/
int main(void)
{
int y,m,i,test,week;
printf("please import year of you want to select : ");
scanf("%d",&y);
for (m=1; m<=12; m++) {
test=1;
prtmonth(m);
prtweek();
week=fw(m,y);
if (week!=6)
for (i=0; i<=week; i++) {
putchar('\t');
test++;
}
for (i=1; i<=md(m,y); i++,test++) {
printf("%d\t",i);
if (test%7==0) {
putchar('\n');
}
}
putchar('\n');

system("pause");//暂停,以便观察输出
}
return 0;
}
int leap(int y)
{
return (y%4==0&&y%100||y%400==0)?1:0;
}
int md(int m,int y)
{
int d;
switch (m) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:d=31;break;
case 4:
case 6:
case 9:
case 11:d=30;break;
case 2:d=leap(y)?29:28;break;

}
return d;
}
void prtweek(void)
{
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n","Sun","Mon","Tue","Wed","Thur","Fri","Sat");
}
int fw(int m,int y)
{
int f;
if (m<3) {
m+=12;
y--;
}
f=(1+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
return f;
}
void prtmonth(int m)
{
switch (m) {
default:
case 1:puts("===January===");break;
case 2:puts("===February===");break;
case 3:puts("===March===");break;
case 4:puts("===April===");break;
case 5:puts("===May===");break;
case 6:puts("===June===");break;
case 7:puts("===July===");break;
case 8:puts("===August===");break;
case 9:puts("===September===");break;
case 10:puts("===October===");break;
case 11:puts("===November===");break;
case 12:puts("===December===");break;
}
}
我也是引用的 原来是拿来学习的
要感谢原作者!本回答被提问者采纳
第2个回答  2008-05-03
之前写的,不过是用c++写的,懒得改成c了,应该也看得懂的。
#include<iostream>
#include<iomanip>
using namespace std;
int main ()
{
int year,d,i,j,k,day,ddd;
cout<<"**************************************************"<<endl;
cout<<"** 电子万年历 **"<<endl;
cout<<"**************************************************"<<endl;
do{cout<<"请输入年份:";
cin>>year;}while(year<0);
int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(year%4==0&&year%100||year%400==0) a[1]=29;
int b[12][6][7]={0};
d=year-1+(year-1)/4-(year-1)/100+(year-1)/400+1;
for(i=0,day=d%7;i<12;i++)
for(j=0,k=1;j<6&&k<=a[i];j++)
for(day=day%7;k<=a[i]&&day<7;day++)
b[i][j][day]=k++;
cout<<"\n|=============================="<<year<<"年================================|\n";
for(i=0;i<6;i++)
{cout<<"||"<<i+1<<"月 日 一 二 三 四 五 六\t "<<(i+7>9?" ":" ")<<i+7<<"月 日 一 二 三 四 五 六 ||\n";
for(j=0;j<6;j++)
{ cout<<"|| ";
for(k=0;k<7;k++)
{
if(b[i][j][k]) cout<<setw(3)<<b[i][j][k];
else cout<<setw(3)<<' ';}
for(k=0,cout<<"\t\t ";k<7;k++)
{
if(b[i+6][j][k]) cout<<setw(3)<<b[i+6][j][k];
else cout<<setw(3)<<' ';}
cout<<" ||"<<endl;
}
}
cout<<"|=========================珍爱生命=====把握时间=====================|\n";
system("pause");
return 0;
}
相似回答