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语言万年历程序
#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语言课程设计万年历一、课程目标知识目标: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语言的万年历
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 语言课程设计报告设计题目:万年历学生姓名:学生学号:专业班级:数学与应用数学一班学院名称:数学与计量经济学院同组人姓名:指导老师: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语言-万年历
#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语言课程设计万年历 完整版
目录一引言 (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语言程序 万年历编程
{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;
(完整版)C语言万年历
说明部分
在TC或VC6.0中编译程序,编译成功后,通过命令行向编译生成的可执行文件(.exe)传递参数,在命令行中输入该执行文件的路径名称,然后再输入传入的参数,回车,就会显示出运行结果,效果如图1.1所示。
图1.1万年历运行界面
代码部分
#include <stdio.h>
main(int a,char **date)
}
if (day<0||day>month)
{
printf ("\n ERROR! the entered DAY is invalid\n");
exit (0);
}
week=(dy+dm+day-1+6)%7;
if(week<0)
week+=7;
if (day>0) /***判定查看类型***/
{
if (d==-1) year=year*10+(date[1][i]-'0');
if (d==0) month=month*10+(date[1][i]-'0');
if (d==1) day=day*10+(date[1][i]-'0');
i++;
}
if (month<1||month>12)/*若月份传入错误数字*/
else
d=(year-2000)/4-(year-2000)/100+(year-2000)/400;
dy=(year-2000)+d; /***该年1月1号到2000年1月1号的"星期差" ***/
(2023)C语言万年历设计报告(一)
(2023)C语言万年历设计报告(一)C语言万年历设计报告这份报告是针对 2023 年度 C 语言万年历设计而准备的。
设计目的该万年历的设计目的是为了让用户能够快速地查看任意公历年份的日历,同时还能够显示节气、万年历和日历信息。
设计思路该万年历的主要思路是通过用户输入任意公历年份,在程序中计算并显示该年的日历信息。
具体实现思路如下:1.用户输入年份信息。
2.程序判断该年份是否为闰年,并计算该年的总天数。
3.根据该年第一天是星期几,排列该年每个月的天数。
4.标记国历节日,如元旦、劳动节等。
5.计算并标记该年的节气,如立春、清明等。
6.计算并标记该年的重要万年历信息,如“三伏”、“四季”等。
设计要点在实现该万年历的过程中需要注意以下几个要点:1.为了代码的可维护性,尽量将每个功能模块拆分成函数的形式。
2.程序中需要处理日期的加减运算,可以使用标准库中的<time.h>。
3.节气和万年历的计算应该基于一些公式而不是硬编码。
设计结果经过实现,该万年历已经能够正常运行,并能够正确地显示各种信息。
用户输入任意公历年份后,程序可以迅速计算并展示该年的万年历、节气和重要节日信息。
结论通过本次 C 语言万年历的设计,我们不仅深入地了解了日期处理等相关知识,还提升了编码的能力。
在日常开发中,我们也可以根据这些基础知识,设计更为实用的应用程序。
可改进之处尽管该万年历已经能够满足基本的需求,但仍有一些改进空间。
例如:1.目前仅支持公历,可以添加其他历法的支持,如农历、阴阳历等。
2.界面可以进一步美化,增加更多交互性的组件,如按钮、下拉菜单等。
3.可以添加更多的功能,如查询特定日期的天气、星座运势等。
总结本次 C 语言万年历设计,使我们更好地理解了日期处理的相关知识,提高了我们的编码水平。
同时,我们也意识到在实际项目中,需要更多的功能和优化,才能更好地服务于用户的需求。
通过持续不断的学习和实践,我们可以不断提升自己的编程技能。
c语言万年历课程设计报告
本次课程设计的主题为“C语言万年历”,旨在通过设计和实现一个简单的万年历程序,深入了解C语言程序设计的基本方法和技巧。
通过本课程设计的学习,我对C语言程序设计的各个方面进行了深入的了解和掌握,同时也提高了自己的编程思维和实践能力。
一、设计思路。
本次课程设计的主要功能是实现万年历。
在设计程序之前,我首先对万年历的基本功能进行了分析和思考,包括输入年月日,输出当月的日历和星期几等。
同时,考虑到用户友好性,我还增加了一些额外的功能,如输入错误时的提示,具体日历同时附带节假日等。
在分析了功能需求之后,我便开始考虑程序设计的具体实现。
首先,我选择了C语言作为实现程序的语言,因为C语言广泛应用于各类软件工程和移动计算等领域,适用性强,易于学习和掌握。
接着,我根据分析需求,确定了程序的基本框架和主要模块,包括输入年月日模块、求解该日是星期几模块、绘制当月日历模块和判断节日等模块。
二、程序实现。
在程序实现过程中,我遵循了模块化编程的原则,把整个程序划分成几个独立的模块,并在模块之间进行数据交互和函数调用。
具体来说,我分别实现了以下几个模块:1.输入年月日模块:该模块负责接收用户输入的年月日信息,并检查输入格式是否正确。
在输入不合法时,该模块能够给用户相应的提示信息,并要求用户重新输入。
2.求解该日是星期几模块:该模块根据给定年月日,求出该日是星期几。
该模块采用基姆拉尔森计算公式来实现。
3.绘制当月日历模块:该模块负责绘制给定月份的日历,并标注当日及节假日等信息。
在绘制日历时,该模块能够考虑各种特殊情况,如闰年、月初不为星期一等。
4.判断节日等模块:该模块能够根据给定年月日信息,判断当日是否为节假日、纪念日等特殊日子,如春节、圣诞节等,并在日历上作出相应标注。
以上四个模块构成了整个程序的主要功能。
在实现过程中,我还遇到了一些问题,如求解闰年的问题、绘制多行日历的问题等。
针对这些问题,我通过查找资料、借鉴其他同学的代码等方式进行了解决。
万年历c语言编程代码
#include <stdio.h>// 函数声明int is_leap_year(int year);int get_first_day_of_year(int year);// 主函数int main() {int year, month, first_day_of_year, first_day_of_month, days_in_month;int i, j, k;printf("请输入年份(例如:2022):");scanf("%d", &year);first_day_of_year = get_first_day_of_year(year);for (month = 1; month <= 12; month++) {printf("%d 年%d 月\n", year, month);printf("日一二三四五六\n");if (month == 2) {if (is_leap_year(year)) {days_in_month = 29;} else {days_in_month = 28;}} else if (month == 4 || month == 6 || month == 9 || month == 11) { days_in_month = 30;} else {days_in_month = 31;}first_day_of_month = (first_day_of_year + (month-1)*28)%7;for (i = 1; i <= first_day_of_month; i++) {printf(" ");}for (j = 1; j <= days_in_month; j++) {printf("%2d ", j);k = (i + j - 1) % 7;if (k == 0) {printf("\n");}}printf("\n");}}// 判断是否闰年int is_leap_year(int year) {return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);}// 计算年份第一天是星期几int get_first_day_of_year(int year) {int first_day = (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;first_day = (first_day + 1) % 7;return first_day;}这是一个简单的万年历示例代码,但它不是完整的代码。
C语言万年历程序
#include<stdio.h>#include<math.h>int fun(int a,int tianshu) //定义一个月份日期和星期几并显示的子函数{int i,k;{ for(i=0;i<a;i++) printf(""); //通过改变i和k的值改变循环次数和输出的日期for(i=a+1,k=1;i<tianshu+a;i++){ if(k<10) printf("%d ",k);else printf("%d ",k);k++;if(i%7==0) printf("\n");} //当i为7时,换行printf("\n");}a=(i-1)%7; //a为该月份结束时最后一个日期是星期几return a;}void shuchu(char a[8]) //定义一个显示月份和分割线的子函数{printf("----------------------------------------\n");printf("%s\n",&a[0]);printf("Sun Mon Tue Wed Thu Fri Sat\n");}void panduan(int dd,int yuefen,int ri,int year){int i,j=0,sum=0,k[]={31,29,31,30,31,30,31,31,30,31,30,31};int b;int a[]={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<yuefen;i++,j++)sum=sum+k[j];}else {for(i=1;i<yuefen;i++,j++)sum=sum+a[j];}sum=sum+ri;b=(sum+dd-1)%7;if(b==0) printf("\n%d年%d月%d日是星期日",year,yuefen,ri);if(b==1) printf("\n%d年%d月%d日是星期一",year,yuefen,ri);if(b==2) printf("\n%d年%d月%d日是星期二",year,yuefen,ri);if(b==3) printf("\n%d年%d月%d日是星期三",year,yuefen,ri);if(b==4) printf("\n%d年%d月%d日是星期四",year,yuefen,ri);if(b==5) printf("\n%d年%d月%d日是星期五",year,yuefen,ri);if(b==6) printf("\n%d年%d月%d日是星期六",year,yuefen,ri);}void main(){int year,month,i=0,j=0,k=1,a=0,m;int aa,bb,cc,dd;char n[]="Feb 2",b[]="Mar 3",c[]="Apr 4",d[]="May 5",e[]="Jun 6",f[7]="Jul 7",g[7]="Aug 8",h[7]="Sep 9",p[7]="Oct 10",q[7]="Nov 11",s[7]="Dec 12";printf("****************************************\n");printf("input the year:");scanf("%d",&year);shuruyue: printf("\ninput the month:");scanf("%d",&month);if(month>=13) goto error1;shururi:printf("\ninput the day:");scanf("%d",&aa);if(year%4==0&&year%100!=0||year%400==0){if(month==2&&aa>=30)goto error2 ;}else {if(month==2&&aa>=29)goto error2;}if(month==1&&aa>=32)goto error2 ;if(month==3&&aa>=32)goto error2 ;if(month==4&&aa>=31)goto error2 ;if(month==5&&aa>=32)goto error2 ;if(month==6&&aa>=31)goto error2 ;if(month==7&&aa>=32)goto error2 ;if(month==8&&aa>=32)goto error2 ;if(month==9&&aa>=31)goto error2 ;if(month==10&&aa>=32)goto error2 ;if(month==11&&aa>=31)goto error2 ;if(month==12&&aa>=32)goto error2 ;dd=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7;panduan(dd,month,aa,year);printf("\n****************************************\n");printf("\nTHE CALENDER OF THE YEAR %d\n",year);printf("\n****************************************\n");printf("Jan 1\n");printf("Sun Mon Tue Wed Thu Fri Sat\n");dd=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7; //判断该年的第一天是星期几a=fun(dd,32);shuchu(n);if(year%4==0&&year%100!=0||year%400==0) //判断该年是闰年还是平年a=fun(a,30);else a=fun(a,29);shuchu(b); //调用显示月份和分割线的函数a=fun(a,32); //调用显示月份全部排版的子函数shuchu(c);a=fun(a,31);shuchu(d);a=fun(a,32);shuchu(e);a=fun(a,31);shuchu(f);a=fun(a,32);shuchu(g);a=fun(a,32);shuchu(h);a=fun(a,31);shuchu(p);a=fun(a,32);shuchu(q);a=fun(a,31);shuchu(s);a=fun(a,32);goto jieshu;error1: printf("\nERROR INPUT MONTH.\n");printf("****************************************\n");printf("input the year:%d\n",year);goto shuruyue;error2: printf("\nERROR INPUT DAY.\n");printf("****************************************");printf("\ninput the year:%d\n",year);printf("\ninput the year:%d\n",month);goto shururi;jieshu:return 0;}。
C语言程序设计,万年历
C语言程序设计*万年历HPU chang目录:1.设计任务书1.1题目与要求1.2本系统涉及的知识点2.功能设计:2.1算法设计2.2 部分模块流程图3.程序代码设计3.1输入模块3.2输出模块4.程序设计总结:5.致谢;6.参考文献:7.附:程序1设计任务书:1.1题目与要求本人计划编写一个万年历系统,用来查询任意一天的星期、任意年月的月历、任意年年历。
具体要求如下:(1)当输入数字“1”时,显示“请输入年月日(XXXX,XX,XX)”运行后输出:XXXX 年XX月XX日是星期X,是否继续查询(Y/N)?如果输入Y,则重新显示“请输入年月日(XXXX,XX,XX)”,否则回到主菜单.(2)在主菜单中输入2后,显示:“请输入要打印的月份(XXXX)”运行后输出X月的日历,格式为:XXXX年XX月S M T W T F SX X X X X X XX X X X X X XX X X X X X XX X X X X X XX X运行完成后显示:“是否继续打印(Y/N)?” 如果输入Y,则重新显示“请输入要打印的月份(XXXX年XX月)”,否则回到主菜单。
(3)在主菜单中输入3后,显示:“请输入要打印的年份(XXXX)”运行后输出XXXX年的日历,XXXXX(月数)S M T W T F SX X X X X X XX X X X X X XX X X X X X XX X X X X X Xx x……S M T W T F SX X X X XX X X X X X XX X X X X X XX X X X X X XX X X X X运行完成后显示:“是否继续打印(Y/N)?” 如果输入Y,则重新显示“请输入要打印的年份(XXXX)”,否则回到主菜单。
(4)在主菜单中输入4后,显示:“是否要真的退出(Y/N)?” 如果输入Y,结束程序运行,否则重新显示主菜单。
1.2本系统涉及的知识点本系统涉及的知识点有: for语句、do-while语句、switch语句、break语句、if-else 语句、还有sizeof、return 、default、char、printf 、scanf 等,包含了课本上的很多知识。
c语言万年历并判断是否为闰年课程设计程序
【导言】C语言是一门被广泛使用的计算机编程语言,它的应用范围涵盖了各个领域。
而在计算机程序设计课程中,常常会有关于时间和日期的相关内容。
今天我们将讨论一个关于C语言编程的课程设计题目——C 语言万年历并判断是否为闰年程序设计。
【一、问题描述】1. 万年历的定义:所谓万年历,是指能够展示任意年份的日历,并且准确反映该年的月份和日期分布。
2. 闰年的定义:闰年是指公历中普通年份为365天,而闰年为366天的年份。
闰年有特定的判断规则。
【二、程序设计目标】1. 设计一个C语言程序,能够根据用户输入的年份,打印出该年的日历。
2. 在打印日历的判断该年份是否为闰年,并给出判断结果。
【三、程序设计思路】1. 确定程序的输入和输出:输入:用户输入一个年份输出:打印该年的日历,并给出是否为闰年的判断结果2. 了解计算闰年的规则:- 能被4整除但不能被100整除的年份为闰年- 能被400整除的年份也为闰年3. 设计程序的逻辑:- 首先根据输入的年份计算该年的日历,并以直观的形式输出- 然后根据闰年的判断规则,判断该年份是否为闰年,并给出判断结果【四、程序设计实现】以下是C语言程序的设计实现:```c#include <stdio.h>// 判断闰年的函数int isLeapYear(int year) {return (year 4 == 0 year 100 != 0) || (year 400 == 0);}// 打印日历的函数void printCalendar(int year) {// 实现日历打印的逻辑// 省略具体实现细节printf("这里是d年的日历\n", year);}int m本人n() {// 用户输入年份int year;printf("请输入年份:");scanf("d", year);// 打印该年的日历printCalendar(year);// 判断该年是否为闰年if (isLeapYear(year)) {printf("d年是闰年\n", year);} else {printf("d年不是闰年\n", year);}return 0;}```【五、程序设计测试】接下来我们对设计的C语言程序进行测试,例如输入2020年,程序将输出2020年的日历,并给出判断结果。
c语言课程设计简易万年历
/**湖北师范学院信息工程1203班朱文峰**简易万年历* 1、输入年份,判断是否为闰年*2、输入年月日,判断改日为星期几*3、输入年份,打出12个月历,输入月份,打出该月的日历* 4、要求用多个函数实现*/#include<stdio.h>#include<stdlib.h>#include<windows.h>//每月的天数,闰年二月要加1int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};//判断是否位闰年int isLeapYear(int year){if(year%4 == 0 && year%100 != 0 || year%400 == 0)return 1;elsereturn 0;}//判断某天为星期几int whichWeekday(int year, int month, int day){int weekday;//公式中要把1月和2月换成是上一年的13月和14月if (month == 1 || month == 2){month += 12;year -= 1;}//公式weekday=(day+2*month+3*(month+1)/5+year+year/4-year/100+year/400)%7;return weekday+1;}//打印某年某月的月历void yearMonth(int year, int month){int i,j=0;int weekday;//计算这个月第一天是星期几weekday = whichWeekday(year, month, 1);printf("\n%d年%d月\n",year,month);printf("------------------------------------------------\n");printf("星期一星期二星期三星期四星期五星期六星期天\n");if(isLeapYear(year) && month == 2)days[1] = days[1] + 1;printf("");for(i = 1; i < weekday; i ++)printf(" ");for(i = 0; i < 8 - weekday; i ++){printf("%6d", i+1);printf(" ");}printf("\n");for(i = 9-weekday; i <= days[month-1]; i ++,j++){if(j == 7){j = 0;printf("\n");}printf("%6d ", i);}printf("\n------------------------------------------------\n");}//输入年份,打出12个月历,输入月份,打出该月的日历void monthDay(int year){int i;char c;int month;for(i = 0; i < 12; i ++)yearMonth(year,i+1);printf("\n\n");printf("是否查看日历(y/n):");getchar();scanf("%c",&c);if(c == 'y'){printf("请输入月份:");scanf("%d", &month);yearMonth(year,month);}elseexit(0);}//主菜单void menu(){printf("-----------------------------------------------\n");printf(" ");printf("c语言课程设计-万年历\n\n");printf("***********************************************\n\n");printf("1、输入年份,判断是否为闰年\n");printf("2、输入年月日,判断该日为星期几\n");printf("3、输入年份,打出12个月历,输入月份,打出该月的日历\n\n");printf("***********************************************\n\n");}//判断是否继续void isContinue(){char c;printf("是否继续(y/n):");getchar();scanf("%c", &c);if(c == 'y')return;else{printf("");exit(0);}}//主函数void main(){int num;int year;int month;int day;int weekday;while(1){system("CLS");//清屏menu();printf("请输入对应操作:");scanf("%d", &num);switch(num){case 1:{printf("请输入年份:");scanf("%d", &year);if(isLeapYear(year))printf("%d年是闰年\n",year);elseprintf("%d年不是闰年\n");isContinue();break;}case 2:{printf("请输入年月日,以空格隔开:");scanf("%d%d%d", &year,&month,&day);weekday = whichWeekday(year, month, day);printf("这天是星期%d\n",weekday);isContinue();break;}case 3:{printf("请输入年份:");scanf("%d", &year);monthDay(year);isContinue();break;}default:{printf("您的输入有误");Sleep(1000);//延时一秒钟break;}}}}。
万年历c语言课程设计
万年历c语言课程设计一、课程目标知识目标:1. 让学生掌握C语言中结构体和指针的基本概念及应用。
2. 使学生理解万年历的核心算法,包括日期的存储、计算及显示。
3. 帮助学生掌握如何使用C语言进行简单的文件操作。
技能目标:1. 培养学生运用结构体和指针进行数据组织的能力。
2. 培养学生利用循环和判断语句进行逻辑处理的能力。
3. 提高学生利用C语言解决实际问题的编程能力。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,增强其学习动力。
2. 培养学生团队协作和沟通能力,使其在合作中共同解决问题。
3. 培养学生面对问题时的耐心和毅力,树立正确的价值观。
课程性质:本课程为C语言程序设计实践课,强调理论与实践相结合,培养学生的编程能力和实际应用能力。
学生特点:学生已经具备一定的C语言基础,了解基本语法和编程思路,但对结构体、指针等高级概念掌握不牢,需要通过实践加深理解。
教学要求:教师应注重引导学生运用所学知识解决实际问题,关注学生个体差异,提供个性化指导,确保学生在课程中学有所得。
通过本课程的学习,将目标分解为具体的学习成果,为后续的教学设计和评估提供依据。
二、教学内容1. 结构体和指针的概念与应用- 结构体定义和使用- 指针的基本概念和操作- 结构体指针及用法2. 万年历核心算法- 日期的存储与计算- 判断闰年的方法- 星期计算算法3. C语言文件操作- 文件的打开与关闭- 文件读写操作- 文件错误处理4. 万年历程序设计- 界面设计及用户交互- 功能模块划分与实现- 程序调试与优化教材章节关联:1. 结构体与指针:参考教材第3章“复合数据类型”和第4章“指针”。
2. 核心算法:结合教材第6章“控制语句”和第7章“函数”。
3. 文件操作:参考教材第8章“文件”。
4. 程序设计:综合运用教材第1章至第8章的知识点。
教学进度安排:1. 结构体和指针(2课时)2. 万年历核心算法(3课时)3. C语言文件操作(2课时)4. 万年历程序设计(4课时)三、教学方法本课程采用以下教学方法,旨在激发学生学习兴趣,提高教学效果:1. 讲授法:- 对于结构体、指针等基本概念和理论,采用讲授法进行教学。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
}。