C语言程序设计 万年历程序

合集下载

C语言编写万年历

C语言编写万年历

C语言编写万年历程序实现万年历的查询功能,根据使用者输入的年份与月份输出本月的日历。

可以查询1950年之后的日期,查询范围可以在junde函数中进行修改。

源代码:#include<stdio.h>#include<windows.h>void input(int *p1,int *p2){printf("请输入年份:\n");scanf("%d",p1);printf("请输入月份:\n");scanf("%d",p2);}int caculate(int year,int month){int sum;if((year % 4 == 0&&year % 100 != 0)||year % 400 == 0){switch (month){case 1:sum = 31;break;case 2:sum = 29;break;case 3:sum = 31;break;case 4:sum = 30;break;case 5:sum = 31;break;case 6:sum = 30;break;case 7:sum = 31;break;case 8:sum = 31;break;case 9:sum = 30;break;case 10:sum = 31;break;case 11:sum = 30;break;case 12:sum = 31;break;default:break;}}else{switch (month){case 1:sum = 31;break;case 2:sum = 28;break;case 3:sum = 31;break;case 4:sum = 30;break;case 5:sum = 31;break;case 6:sum = 30;break;case 7:sum = 31;break;case 8:sum = 31;break;case 9:sum = 30;break;case 10:sum = 31;break;case 11:sum = 30;break;case 12:sum = 31;break;default:break;}}return sum;}int junde(int year,int month){int week;int a = 0,b = 0,i = 1950,sum = 0;if(year<1950){printf("输入错误!");return -1;}if(month<0||month>12){printf("输入错误!");return -1;}if(year == 1950){switch (month){case 1:b = 1;break;case 2:b = 1 + 31;break;case 3:b = 1 + 31 + 29;break;case 4:b = 1 + 31 + 29 + 31;break;case 5:b = 1 + 31 + 29 + 31 + 30;break;case 6:b = 1 + 31 + 29 + 31 + 30 + 31;break;case 7:b = 1 + 31 + 29 + 31 + 30 + 31 + 30;break;case 8:b = 1 + 31 + 29 + 31 + 30 + 31 + 30 + 31;break;case 9:b = 1 + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31;break;case 10:b = 1 + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30;break;case 11:b = 1 + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;break;case 12:b = 1 + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;break;default:break;}sum = b;week = (sum + 6) % 7;return week;}else if(year != i){for(i = 1950;i<year;i++){if(i % 4 == 0){a = 366;}if(i % 4 != 0){a = 365;}sum += a;}}if(year == i){if(year % 4 == 0){switch (month){case 1:b = 1;break;case 2:b = 1 + 31;break;case 3:b = 1 + 31 + 29;break;case 4:b = 1 + 31 + 29 + 31;break;case 5:b = 1 + 31 + 29 + 31 + 30;break;case 6:b = 1 + 31 + 29 + 31 + 30 + 31;break;case 7:b = 1 + 31 + 29 + 31 + 30 + 31 + 30;break;case 8:b = 1 + 31 + 29 + 31 + 30 + 31 + 30 + 31;break;case 9:b = 1 + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31;break;case 10:b = 1 + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30;break;case 11:b = 1 + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;break;case 12:b = 1 + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;break;default:break;}sum = sum + b;}if(year % 4 != 0){switch (month){case 1:b = 1;break;case 2:b = 1 + 31;break;case 3:b = 1 + 31 + 28;break;case 4:b = 1 + 31 + 28 + 31;break;case 5:b = 1 + 31 + 28 + 31 + 30;break;case 6:b = 1 + 31 + 28 + 31 + 30 + 31;break;case 7:b = 1 + 31 + 28 + 31 + 30 + 31 + 30;break;case 8:b = 1 + 31 + 28 + 31 + 30 + 31 + 30 + 31;break;case 9:b = 1 + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;break;case 10:b = 1 + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;break;case 11:b = 1 + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;break;case 12:b = 1 + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;break;default:break;}sum = sum + b;}}week = (sum + 6) % 7;return week;}void output(int days,int week){int num[50] = {0};int i;if(week == -1){exit(1);}printf("星期天\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");for(i = 0;i<week;i++){printf("\t");}for(i = 1;i<=days;i++){printf(" %d\t",i);if((i + week) % 7 == 0){printf("\n");}}printf("\n");}int main(){int year,month;int *p1,*p2;int days,week;p1 = &year,p2 = &month;while (1){input(p1,p2);days = caculate(year,month);week = junde(year,month);output(days,week);}return 0;}运行结果截图:。

c语言万年历程序

c语言万年历程序

#include <stdio.h>#include <stdlib.h>#include <ctype.h>int leap (int year) ;//判断是否为闰年int days_month (int month,int year) ;//判断这个月的天数int menu_select();/*void f(){int day,month,year,sum,leap,S;printf("\n请输入年月日\n");scanf("%d%d%d",&year,&month,&day);switch(month){case 1:sum=0;break;case 2:sum=31;break;case 3:sum=59;break;case 4:sum=90;break;case 5:sum=120;break;case 6:sum=151;break;case 7:sum=181;break;case 8:sum=212;break;case 9:sum=243;break;case 10:sum=273;break;case 11:sum=304;break;case 12:sum=334;break;default:printf("data error");break;}sum=sum+day;if(year%400==0||(year%4==0&&year%100!=0))leap=1;else leap=0;if(leap==1&&month>2)sum++;S=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+sum)%7; //X表示年份,C是该年份元旦开始到这一日的天数//S/7的系数就是星期数//01printf("%d",S);switch(S){case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;case 4:printf("星期四\n");break;case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 0:printf("星期日\n");break;}}*/int Leap(int year){ int leap;if(year%400==0||(year%4==0&&year%100!=0))leap=1;else leap=0;return leap;}int SU(int sum,int year){int S;S=(year-1+(year-1)/4-(year-1)/100+(year-1)/400+sum)%7;return S;}int Sum(int year,int month,int day=1){int sum,leap;switch(month){case 1:sum=0;break;case 2:sum=31;break;case 3:sum=59;break;case 4:sum=90;break;case 5:sum=120;break;case 6:sum=151;break;case 7:sum=181;break;case 8:sum=212;break;case 9:sum=243;break;case 10:sum=273;break;case 11:sum=304;break;case 12:sum=334;break;default:printf("data error");break;}sum=sum+day;leap=Leap(year);if(leap==1&&month>2)sum++;return sum;}void Print(int S){switch(S){case 1:printf("星期一\n");break;case 2:printf("星期二\n");break;case 3:printf("星期三\n");break;case 4:printf("星期四\n");break;case 5:printf("星期五\n");break;case 6:printf("星期六\n");break;case 0:printf("星期日\n");break;}}void Fun1(){int day,month,year,sum,S;printf("\n请输入年月日\n");scanf("%d%d%d",&year,&month,&day);sum=Sum(year,month,day);S=SU(sum,year);Print(S);}void Fun2(){int i,j=1,k=1,a,b,month,year,sum;printf("\n 输入年月:\n");scanf("%d%d",&year,&month);b=days_month(month,year);sum=Sum(year,month);a=SU(sum,year);printf("*************************************\n");printf(" Sun Mon Tue Wed Thu Fri Sat \n");if(a==7){for(i=1;i<=b;i++){printf("%4d",i);if(i%7==0){printf("\n");}}}if(a!=7){while (j<=4*a){printf(" ");j++;}for(i=1;i<=b;i++){printf("%4d",i);if(i==7*k-a){printf("\n");k++;}}}printf("\n*************************************\n");printf("\n");}int days_month (int month,int year){if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) return 31;if(month==4||month==6||month==9||month==11)return 30;if(month==2&&Leap(year)==1) return 29;else return 28;}void main(){for(;;){switch(menu_select()){case 1:printf("输入年月日计算该月第一天是星期几\n");Fun1();break;case 2:printf("打印任意日历\n");Fun2();break;case 3:printf("谢谢使用!\n");exit(0);}}}int menu_select(){ system("cls");char s;int cn;printf("1. 输入年月日计算该月第一天是星期几\n");printf("2. 打印任意日历\n");printf("3.谢谢使用! \n");printf("input 1-3:");do {s=getchar();cn=(int)s-48;}while(cn<0||cn>6);return cn;}。

c语言课程设计万年历

c语言课程设计万年历

c语言课程设计万年历一、课程目标知识目标:1. 理解C语言中结构体、数组、函数等基本概念,并能运用这些知识实现万年历的基本功能;2. 学会使用循环、判断等控制结构,实现对日期的有效处理;3. 了解并掌握C语言中模块化编程的方法,将万年历功能划分为独立的功能模块。

技能目标:1. 能够独立编写C语言程序,实现万年历的日期显示、查询、切换等功能;2. 学会使用调试工具,对程序进行调试和优化,提高程序的稳定性;3. 学会在团队协作中发挥个人优势,与他人共同完成程序设计。

情感态度价值观目标:1. 培养学生积极思考、勇于探索的精神,增强学生对编程的兴趣和热情;2. 培养学生良好的编程习惯,遵循编程规范,注重代码的可读性和可维护性;3. 培养学生的团队协作意识,学会与他人沟通、分享、互助,共同进步。

课程性质:本课程为实践性较强的课程,要求学生在掌握C语言基本知识的基础上,运用所学知识完成万年历的设计与实现。

学生特点:学生具备一定的C语言基础,对编程有一定了解,但实践经验不足。

教学要求:结合学生特点,注重理论与实践相结合,引导学生主动参与,培养学生的编程能力和团队协作能力。

通过课程学习,使学生能够独立完成万年历的设计与实现,提高学生的编程水平和实际操作能力。

二、教学内容1. C语言基本语法复习:回顾结构体、数组、函数等基本概念,确保学生能够熟练运用;相关教材章节:第一章至第四章。

2. 控制结构:讲解循环、判断等控制结构在万年历中的应用;相关教材章节:第五章。

3. 模块化编程:引导学生将万年历功能划分为独立的功能模块,讲解模块之间的调用关系;相关教材章节:第六章。

4. 程序调试与优化:介绍调试工具的使用,教授学生如何找出并解决程序中的错误;相关教材章节:第七章。

5. 项目实践:指导学生按照教学大纲,分阶段完成万年历的设计与实现;相关教材章节:全书综合应用。

教学进度安排:1. 第一周:C语言基本语法复习;2. 第二周:控制结构;3. 第三周:模块化编程;4. 第四周:项目实践(第一阶段:功能设计);5. 第五周:项目实践(第二阶段:功能实现);6. 第六周:项目实践(第三阶段:调试与优化)。

C语言的万年历

C语言的万年历

int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int day1=0,m1=0;
if(m>1&&m<=12) {
for(m1=1;m1<m;m1++) day1+=month[m1];
day1=day1+d; } else if(m=1)
} d1=y*Y+count; eek(int d) { switch(d%7) { case 0: printf("Sunday\n");break; case 1: printf("Monday\n");break; case 2: printf("Tuesday\n");break; case 3: printf("Wednesday\n");break; case 4: printf("Thursday\n");break; case 5: printf("Friaday\n");break; case 6: printf("Saturday\n");break; }
最近准备毕业设计,难啊。一时无聊,用 C 写了一个万年历,放到这来,让喜爱编程的朋友交流下, 希望大家多指点! 此万年历只供大家交流,请勿为了应付作业直接 COPY!
这个万年历的主要思想就是找到输入年份的距离公元 0 年 1 月 1 日的天数,我将这一天定义为了 被认为是一周的开始——星期天,如果你不喜欢这么定义,可以自己更改!不过貌似现在的电子日 历都是讲公元 0 年 1 月 1 日定为星期天的,为了和世界接轨,还是别改了!哈哈!

C语言课程设计--万年历

C语言课程设计--万年历

C 语言课程设计报告设计题目:万年历学生姓名:学生学号:专业班级:数学与应用数学一班学院名称:数学与计量经济学院同组人姓名:指导老师:2011年6月15 日1 需求分析1.1问题描述我们需要实现万年历的功能,那么如何实现这个功能呢?我们都很清楚,普通年份和闰年是有区别的,那么该怎么区分这种一天的差别对于万年历日期现实的影响呢?而且已知一个日期,那么我们怎么能够知道它是星期几?是不是需要一个参照物来比较呢?而且还有很多关于万年历的美化问题,占位符的考虑等等。

另外我们还必须判断输入的万年历是否合法,这也需要一个子函数来实现。

好吧,至于基础的判断闰年也是不在话下了。

1.2输入数据要求我们要考虑三种情况,这三种情况下是不能够实现这个万年历的功能的:/*如果给定的日期中年份部分为非正数*/if(date.year<=0)printf("年份不符合要求!\n"printf("请重新输入)/*如果给定的日期中月份部分为负数,为0或者大于12*/if(date.month>12||date.month<1)printf("月份不符合要求!\n");printf("请重新输入");getchar();exit(0);/*如果给定的日期中天数部分为非正数,或者大于31*/a[2]=28+leap(date.year);if(date.day>a[date.month]||date.day<1)printf("日期不符合要求!\n");printf("请重新输入");getchar();exit(0);1.3输出数据要求根据输入数据,输出数据必须严格的按照占位符进行逻辑的策划,然后得知一行万年历的日期的占位符是38个占位符,于是空格占位符和字符显示出来的那些占位符就需要有一个限定使得其不凌乱特别应该注意空格符的占位。

C语言-万年历

C语言-万年历

#include <stdio.h>#include<time.h> //调用当前时间的头文件#include <stdlib.h>//调用清屏函数的头文件//这是一个万年历的c程序。

void Today(int year,int month,int day)//输出是星期几的函数。

{int d=0,i;int week;int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};if(year%4==0&&year%100!=0||year%400==0)//判断是否是闰年。

{for(i=1;i<month;i++)d=d+a[i-1];}else{for(i=1;i<month;i++)d=d+b[i-1];}d=d+day;week=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+d;//判断这一天是星期几的公式。

week=week%7;//判断这一天是星期几的公式。

当week=0,表示星期日。

//下面是输出星期。

switch(week){case 1:printf("\t%d 年%d 月%d 日是星期: 一",year,month,day);break;case 2:printf("\t%d 年%d 月%d 日是星期: 二",year,month,day);break;case 3:printf("\t%d 年%d 月%d 日是星期: 三",year,month,day);break;case 4:printf("\t%d 年%d 月%d 日是星期: 四",year,month,day);break;case 5:printf("\t%d 年%d 月%d 日是星期: 五",year,month,day);break;case 6:printf("\t%d 年%d 月%d 日是星期: 六",year,month,day);break;case 0:printf("\t%d 年%d 月%d 日是星期: 日",year,month,day);break;}printf("\n\n");}void Tomonth(int year,int month)//输入日历的函数{int week;int t=1;int d=0,i;int a[12]={31,29,31,30,31,30,31,31,30,31,30,31};int b[12]={31,28,31,30,31,30,31,31,30,31,30,31};//这个if和for是计算d的值,d表示到今天为止总共的天数。

C语言课程设计万年历 完整版

C语言课程设计万年历  完整版

目录一引言 (2)二系统功能和数据说明 (3)一)功能简介 (3)二)程序中的数据说明 (3)三程序总体设计及流程图 (4)一)应用到的c语言 (4)二)程序的总框架 (5)四功能模块设计及调试 (5)一)算法说明 (5)1.总天数的算法 (5)2.计算输入日期是星期几 (6)3.对输入信息的汇总 (8)4..界面的控制 (10)二)调试结果 (11)五程序清单 (12)六结束语 (17)一引言通过大一上学期对C语言的学习,了解到了很多C语言的相关知识。

学习的过程有很多困惑但是当自己能够独立的看懂,能过独立的完成一个简单的程序时,心中就会收获无限的喜悦和成就感。

我可以里哟哦那个它看懂一些简单的程序,编写一些简单的计算程序,更多的是学会了一种思想——编程,它让我在去思考很多日常生活中的事物是怎么样通过一个个小小的函数实现功能的,激发我对探究的兴趣。

C语言是近年在国内外得到迅速推广应用的一种语言。

C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。

因此,C语言特别适合于编写各种软件。

在这次的课程设计中我将把日常生活中最经常接触的——日期的查询利用C语言的程序编成一个简单的日历。

通过这个小小的日历可以实现很多功能。

在程序中你能看到很多熟悉的C语言关键字,同时也加入了很多自己课外了解到的一些关键字。

在不断的调试中最终才获得最为完整的程序。

接下来就是我的C 语言课程设计的具体内容来了二系统功能和数据说明(一)功能简介在我们的日常生活中能接触到很多不同类型的日历,在日历上我们通常希望它能简介明了的给我们最想要的日期信息。

在我的万年历当中,就是将日历,月历做的简单明了,很方便我们的使用。

下面是它要实现的一些基本功能:用C语言编写万年历1、输入年份,判断是否为闰年2、输入年月日,判断改日为星期几3、输入年份,打出12个月历,输入月份,打出该月的日历4、要求用多个函数实现[名称]万年历[修改]1、对输入的日期进行容错处理2、增加和修改为英文的月份和星期显示3、采用指针形式的weeks和month数组(二)程序中的数据说明①int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};这是定义的关于每个月天数的数组,根据大小月以及二月分的特殊情况将每个月的天数最为数组中的元素存入数组当中。

C语言程序 万年历编程

C语言程序 万年历编程
{if (a%100==0)
{if (a%400==0)
ya=1;
}
else ya=1;
}
else ya=0;
}
if (ya==1||b==2)
c=28;
else c=29;
switch (b)
{
case 1:case 3:case 5:case 7:case 8:case 12:c=31;break;
case 2:x=29;break;
case 4: case 6: case 9: case 10: case 11:x=30;break;
}
wa=week(y,a,1);
if (wa=="星期日") j=0;
else if (wa=="星期一") j=1;
else if (wa=="星期二") j=2;
#include<math.h>
#include<stdio.h>
//求某个日期对应的星期
char w[][7]={"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
int i,j,m,d,y;
char week(int a,int b,int c) //定义星期函数
else if (wa=="星期三") j=3;
else if (wa=="星期四") j=4;
else if (wa=="星期五") j=5;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include"stdio.h"
int mon_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
int judge(int year,int month)
{
if(month==1||month==3||month==5||month==7||month==8||month==10||month ==12)
return(1);
else if(month==2)
{
if(year%4!=0||year%100==0&&year%400!=0)
return(2);
else return(3);
}
else return(4);
}
void show2()
{
int year,i,j,a,n,m,k;
char ** p;
char * week[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
char*month[]={"January","February","March","April","May","June","July","Augu st","September","October","November","December"};
printf("please inter the year:");
scanf("%d",&year);
printf("\n");
printf("the calendar of the year%d.",year);
printf("\n");
a=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7;
for(i=0;i<12;i++)
{
n=judge(year,i+1);
p=month+i;
printf("%s\n",*p);
printf("\n");
for(j=0;j<7;j++)
{p=week+j;
printf("%6s",*p);}
printf("\n");
for(k=0;k<a;k++)
printf(" ");
for(m=1;m<32;m++)
{
printf("%6d",m);
if((a+m)%7==0)
printf("\n");
if(n==1&&m==31) break;
else if(n==2&&m==28) break;
else if(n==3&&m==29) break;
else if(n==4&&m==30) break;
}
a=(a+m)%7;/*计算出下个月的第一天是星期几*/
printf("\n");
printf("**************************************************");
printf("\n");
}
}
void show()
{
printf("******************************\n");
printf("1.某年某月某日是星期几\n2.是否闰年\n3.某年某月的最大天数\n4.打印该月日历\n5.退出\n");
printf("******************************\n");
}
int show1(int y,int m,int d)
{int i,R,sum=0;
for(i=0;i<m-1;i++)
sum=sum+mon_day[i];
sum=sum+d;
if((y%4 == 0 &&y%100 != 0)||(y%400 == 0)&&m>2)
sum=sum+1;
R=(5+(y+1)+(y-1)/4-(y-1)/100+(y-1)/400+sum)%7;
if(R==0)
R=7;
return R;
}
int leap(int y)
{
if((y%4 == 0 &&y%100 != 0)||(y%400 == 0))
return 1;
else
return 0;
}
int max_day(int y,int m)
{int X;
if(leap(y)==1&&m==2)
X=29 ;//printf("该年该月最大天数:29");
else
X=mon_day[m-1];//printf("%d",mon_day[m-1]);
return X;
}
void main()
{
int year,month,day,i;
F:
show();
printf("请选择:");
scanf("%d",&i);
switch(i)
{
case 1:
printf("请输入年、月,日:");
scanf("%d%d%d",&year,&month,&day);
printf("%d-%d-%d是星
期%d\n",year,month,day,show1(year,month,day));break;
case 2:
printf("请输入年份:");
scanf("%d",&year);
if(leap(year)==1)
printf("该年是闰年.\n");
else
printf("该年不是闰年\n");break;
case 3:
printf("请输入年、月:");
scanf("%d%d",&year,&month);
printf("该月最大天数:%d",max_day(year,month)); printf("\n");break;
case 4:show2();break;
case 5:return 0;break;
}
goto F;
}。

相关文档
最新文档