学习C语言是的第一个程序(万年历C代码)

这是原来学习C语言时编写的一个小练习,代码比较垃圾,但是运行正常.高手进来指点一下关于写入文件的操作.谢谢!

//***************************************************万年历********************************
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

void Month(int y,int n,int x);
void CALENDAR(int y);

int WEEK(int y,int m);
char *x[]={"Su","Mo","Tu","We","Th","Fr","Sa"};
int a[31]={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};


void main()//主函数实现主菜单循环
{
 int b,Y,A,M=1,i,a[7]={0,1,2,3,4,5,6};//y是年份后两位,m是月份,d是日数。
 
 system("COLOR 17");
 printf("查询年历请输入~~~~~~~~~~~~~~~~1/n查询月历请输入~~~~~~~~~~~~~~~~2/n");
 scanf("%d",&b);
 switch(b)
 {
   case 1:
    printf("请输入想查询的年份:/n");
    scanf("%d",&Y);
    A=WEEK(Y,M);
    for(i=0;i<7;i++)
    printf("%s ",x[i]);
     printf("/n");
     CALENDAR(Y);
     break;
   case 2:
    printf("请输入想查询的年份和月份:/n");scanf("%d%d",&Y,&M);
    A=WEEK(Y,M);
    for(i=0;i<7;i++)
    printf("%s ",x[i]);
    printf("/n");
    Month(Y,M,A);
    break;
 }
 system("pause");
}


void Month(int y,int n,int x)//月内日期的打印
{
 int *p;
 int i,j,k,m;

 p=a;
 for (i=1;i<=x;i++)
  printf("** ");
 if (y/4==0&&y/100!=0||y/400==0)//判闰年分析二月
    {
         if(n==2)
    for(i=0;i<7-x;i++)
    printf("%2d ",*(p+i));
     printf("/n");
     j=i;
   do
   {
    printf("%2d ",*(p+j));
    if((j-i)%7==0)printf("/n");
   }while(j<29);
    printf("/n");
  }
 if(n==2)
 {
  for(i=0;i<7-x;i++)
   printf("%2d ",*(p+i));
  printf("/n");
  j=i;
  do
  {
   printf("%2d ",*(p+j++));
   if((j-i)%7==0)printf("/n");
  }while(j<28);
  printf("/n");
 }
 if(n==1||n==3||n==5||n==7||n==8||n==10||n==12)//三十天的月份
 {
  for(i=0;i<7-x;i++)
   printf("%2d ",*(p+i));
  printf("/n");
   j=i;
   do
   {
    printf("%2d ",*(p+j++));
    if((j-i)%7==0)printf("/n");
   }while(j<31);
  printf("/n");
 }
 if(n==4||n==6||n==9||n==11)//三十天的月份
 {
  for(i=0;i<7-x;i++)printf("%2d ",*(p+i));
   printf("/n");
 j=i;
 do
 {
  printf("%2d ",*(p+j++));
  if((j-i)%7==0)printf("/n");
 }while(j<30);
 printf("/n");
 }
}


int WEEK(int y,int m)//每月的第一天对应的星期
{
 int A,Y,M;

 Y=y;
 M=m;
 A = Y > 0 ? (5 + (Y + 1) + (Y - 1)/4 - (Y - 1)/100 + (Y - 1)/400) % 7 : (5 + Y + Y/4 - Y/100 + Y/400) % 7;
 A = M > 2 ? (A + 2*(M + 1) + 3*(M + 1)/5) % 7 : (A + 2*(M + 2) + 3*(M + 2)/5) % 7;
 if (((Y%4 == 0 && Y%100 != 0) || Y%400 == 0) && M>2)

 {

  A = (A + 1) % 7;

 }

 A = (A + 1) % 7;
 return A;

}


void CALENDAR(int y)//年历的打印
{
 int m,n,i=0,j,M[]={1,2,3,4,5,6,7,8,9,10,11,12};

 do
 {
   
    j=M[i];
    n=WEEK(y,j);
    if(i<12)
     printf("第【%d】个月",i+1);
    printf("/n");
    Month(y,j,n);
    if(i<11)
     for(m=0;m<7;m++)
     printf("%s ",x[m]);
    printf("/n");
 }while(i++<11);
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值