C语言程序设计万年历

合集下载

C语言实现万年历程序

C语言实现万年历程序
scanቤተ መጻሕፍቲ ባይዱ("%d",&y); for(i=1;i<y;i++) sum+=year(i);
week=(sum+1)%7; //表示该年1月1日为星期几
if(year(y)==366) days[1]=29;
printf("\n%d年日历如下:\n\n",y);
for(i=0;i<12;i++) { printf(" %d月 \n",i+1); printf(" 7 1 2 3 4 5 6\n"); printf("=====================\n"); begin=1; for(j=0;j<week;j++) printf(" "); while(begin<=days[i]) { printf("%3d",begin); begin++; week=(week+1)%7; if(week%7==0) printf("\n"); } printf("\n\n");
这篇文章主要介绍了visualstudio2000系列版本安装opengl的图文教程本文通过图文并茂的形式给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值需要的朋友可以参考下
C语 言 实 现 万 年 历 程 序
本文实例为大家分享了C语言实现万年历程序,供大家参考,具体内容如下
#include <stdio.h>
}
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 语言课程设计报告设计题目:万年历学生姓名:学生学号:专业班级:数学与应用数学一班学院名称:数学与计量经济学院同组人姓名:指导老师: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语言课程设计 万年历

计算机基础课程设计C语言设计报告题目:万年历学院:电气与电子工程学院专业:自动化班级:070304姓名:于洋指导教师:周丽娟设计日期:一、设计题目及来源万年历,来自网上搜索。

二、功能isLeap()判断输入数据是否是闰年;maxDay()判断某年某月最多天数;eachYearTotal ()判断这一天是该年的第几天;week判断某年某月某日的编号;output()输出该天星期几;display()显示月历;check()检查有效性;display1()输出年历;display2()输出月历;display3()输出日历;getMenu()调菜单;三、流程图#include<stdio.h>#include<stdlib.h>int isLeap(int year);int maxDay(int year,int month);int eachYearTotal(int year,int month,int day); int week(int year,int month,int day);char *chineseWeek(int number);void output(int year,int month,int day);void display(int year,int month);int check(int year,int month,int day);void display1(int year);void display2(int year,int month);void display3(int year,int month,int day); void getMenu();void main(){int year,month,day,flag,select;while(1){getMenu();printf("shu ru xuan ze: ");fflush(stdin);scanf("%d",&select);fflush(stdin);switch(select){case 1:do{printf("shu ru nian: ");scanf("%d",&year);flag=check(year,1,1);if(flag==0){printf("shu ru wu xiao\n");}}while(flag==0);display1(year);break;case 2:do{printf("shu ru nian yue: ");scanf("%d%d",&year,&month);flag=check(year,month,1);if(flag==0){printf("shu ru wu xiao\n");}}while(flag==0);display2(year,month);break;case 3:do{printf("shu ru nian yue ri: ");scanf("%d%d%d",&year,&month,&day);flag=check(year,month,day);if(flag==0){printf("shu ru wu xiao\n");}}while(flag==0);display3(year,month,day);break;case 4:exit(0);default:printf("shu ru you wu!\n\n");}}}int isLeap(int year){if(year%4==0&&year%100!=0||year%400==0) return 1;elsereturn 0;}int maxDay(int year,int month){int a[]={31,28,31,30,31,30,31,31,30,31,30,31};if(isLeap(year))a[1]=29;return a[month-1];}int eachYearTotal(int year,int month,int day){int i,sum=0;for(i=1;i<month;i++){sum+=maxDay(year,i);}sum+=day;return sum;}int week(int year,int month,int day){intnumber=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachYearTotal(year,month,d ay);number%=7;return number;}char *chineseWeek(int number){switch(number){case 0:return "Sunday";case 1:return "Monday";case 2:return "Tuesday";case 3:return "Wednesday";case 4:return "Thursday";case 5:return "Friday";case 6:return "Saturday";default:return "error";}}void output(int year,int month,int day){int number=week(year,month,day);printf(" gong yuan%d nian%d ue%d ri%10s\n\n",year,month,day,chineseWeek(number)); }void display(int year,int month){int max,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf("%4s%4s%4s%4s%4s%4s%4s\n"," Sunday "," Monday "," Tuesday "," Wednesday "," Thursday "," Friday "," Saturday ");for(i=0;i<number;i++){printf(" ");}while(j<=max){printf("%4d",j);if(i%7==6){printf("\n");}i++;j++;}printf("\n\n");}int check(int year,int month,int day){if(year<0||month<1||month>12||day<1||day>maxDay(year,month))return 0;elsereturn 1;}void display1(int year){int i;printf("\n");for(i=1;i<=12;i++){printf(" gongyuan%d nian%d yue\n\n",year,i); display(year,i);}}void display2(int year,int month){printf("\n gongyuan%d nian%d yue\n\n",year,month); display(year,month);}void display3(int year,int month,int day){printf("\n");output(year,month,day);display(year,month);}void getMenu(){printf("1.nianli\t2.yueli\t3.rili\t4.tuiqu\n");}。

C语言程序设计报告《万年历》

C语言程序设计报告《万年历》

《“万年历”》—C语言程序设计报告专业:计算机科学与技术班级:姓名:指导教师:年月日目录1.设计的任务 (3)2.对问题的分析理解 (3)3. 采用的算法(流程图) (5)4. 算法中涉及的知识点 (6)5.设计用的计算机环境 (6)6 结论 (6)7.源代码 (7)1.设计的任务1.1设计编写一个C程序—“万年历”。

1.2输入任一年将显示出该年的所有月份日期,对应的星期。

1.3 下一行显示星期,从周日到周六,中英文都可以。

1.4 下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐。

1.5 月份:中文英文都可以,注意闰年情况。

2.对问题的分析理解2.1 要输入任一年显示出该年的所有月份日期,应该先设计具体的输出格式,如下:the calendar of the year2008.JanuarySun Mon Tue Wed Thu Fri Sat1 2 3 4 56 7 8 9 10 11 1213 14 15 16 17 18 1920 21 22 23 24 25 2627 28 29 30 31FebruarySun Mon Tue Wed Thu Fri Sat1 23 4 5 6 7 8 910 11 12 13 14 15 1617 18 19 20 21 22 2324 25 26 27 28 29=============================================…………2.2 判断是不是闰年 (year%4!=0||year%100==0&&year%400!=0)满足条件就是平年,把一年中的所有月份分为四类(28,29,30,31)。

2. 3 求出一年中的第一天是周几(year +(year-1)/4-(year-1)/100+(year-1)/400)%7。

2.4 有指针数组存放十二个月的英文和星期的英文缩写。

2.5 用FOR循环输出各月份的日历3. 采用的算法(流程图)开始定义整型变year,i=0,j=0,a,n,m=1,k=0和函数judge 定义一个指针变量**p定义两个字符型数组,month,week输入年份,yeara=(year+(year-1)/4-(year-1)/100+(year-1)/400)%7i++,i<4n=judge(year,i+1),p=month+i输出月份回车Nj++,j<7输出星期回车k++,k<a输出六个空格m++,m<3输出占六个字节的天数(a+m)%7==0YY N输出回车n==2&&m==28YYn==3&&m==29break,退出本次循环break,退出本次循环n==4&&m==30break,退出本次循环Na=(a+m)%7回车输出”==============”结束NYYY Y4.算法中涉及的知识点4.1 定义整型,字符型,指针变量,字符型数组和指针数组。

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语言完整版

实验十九:编写一个万年历系统1.设计目的:从实验的角度来看,这次课程设计一方面可以让自己巩固并加深对C语言程序设计知识的理解,掌握和提高C语言编程和程序的基本调试的基本技能,进一步理解和运用结构化程序的思想和方法;另一方面,可以让自己在面对一个全新的问题时,学会如何思考,如何寻找问题的关键,从而提升自己的能力。

2.总体设计:1.、当前页以系统当前日期的月份为准,显示当前月的每一天(显示出日及对应的星期几);2、当系统日期变到下一个月时,系统自动翻页到下一月。

3.调试与测试:4.源程序清单和执行结果:#include <stdio.h>#include <conio.h>#include <stdlib.h>#include <time.h>int leap(int year ){if ((year %4 == 0) && (year % 100 != 0)|| (year % 400 == 0)){return 1;}return 0;}void show(int year,int month,int date,int sec,int mini,int hour) {const char month_str[][4]={"","Jan","Feb","Mar","Apl", "May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};const int month_day[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int i,j,wdays,mdays,days;for(i=1,days=0;i<year;i++){if(leap(i)){days += 366;}else{days += 365;}}for(i=1;i<month;i++){if(i==2 && leap(year)){days+=29;}else{days+=month_day[i];}}printf(" %s.%d.%d %d:%d:%d \n",month_str[month],date,year,hour,mini,sec);printf(" 一二三四五六日\n");wdays = days % 7;for( j = 0; j < wdays; j++){printf(" ");}if(month == 2 && leap(year)){mdays=29;}else{mdays= month_day[month];}for(i=1;i<=mdays;i++){if( i > 1 && days % 7 == 0 ){Printf(“\n”);printf("\n");}printf("%4d",i);days=days+1;}printf("\n---------------------------\n\n\n");}void main(){time_t rawtime;struct tm *info;int year,month,date,sec,mini,hour; char ch;time ( &rawtime );info = localtime ( &rawtime );year =info->tm_year + 1900; month =info->tm_mon + 1;date =info->tm_mday;hour =info->tm_hour;mini =info->tm_min;sec =info->tm_sec;while(1){show(year,month,date,sec,mini,hour); printf("↑......上一年\n\n");printf("↓......下一年\n\n");printf("←....前一个月\n\n");printf("→....后一个月\n\n");printf("Esc.......退出\n\n");ch=getch();switch(ch){case 27://Ecsexit(0);case -32://Navigatorch=getch();if(ch==77){//Rightyear+=(month==12)?1:0;month=month%12+1;}else if(ch==75){//Leftyear-=(month==1)?1:0;month=(month-2+12)%12+1;}else if(ch==72) {//Upyear--;}else if(ch==80) {//Downyear++;}system("cls"); }}}。

万年历c语言课程设计

万年历c语言课程设计

万年历 c语言课程设计一、课程目标知识目标:1. 学生能够理解万年历的基本概念,掌握日期与星期之间的转换关系。

2. 学生能够运用C语言中的数据类型、运算符和函数实现日期的计算。

3. 学生掌握结构体在C语言中的应用,并能利用结构体数组存储和管理大量日期数据。

技能目标:1. 学生能够运用所学知识,设计并编写一个简单的万年历程序,实现日期的输入、输出及查询功能。

2. 学生能够在编写程序的过程中,运用结构化编程思想,使代码具有可读性和可维护性。

3. 学生能够通过调试和修改程序,解决实际问题,提高编程解决问题的能力。

情感态度价值观目标:1. 学生培养对计算机编程的兴趣和热情,增强学习C语言的自信心。

2. 学生在团队合作中,学会互相帮助、沟通与协作,培养团队精神。

3. 学生通过编程实践,体会计算机科学在生活中的应用,认识到编程对解决实际问题的价值。

本课程针对高中年级学生,结合C语言编程知识,设计具有实用性和趣味性的万年历项目。

课程旨在让学生在实际编程过程中,掌握C语言的基本语法和编程技巧,提高解决问题的能力,同时培养团队协作和沟通能力。

通过本课程的学习,为学生奠定扎实的编程基础,激发他们对计算机科学的兴趣。

二、教学内容1. C语言基础语法复习:变量、数据类型、运算符、控制语句(条件语句、循环语句)。

2. 函数的定义与调用:重点复习函数的定义格式、参数传递、返回值。

3. 结构体的定义与应用:介绍结构体的概念、定义方法以及如何使用结构体数组。

4. 日期与星期的计算方法:讲解日期与星期之间的转换公式,引导学生理解算法。

5.万年历程序设计:a. 界面设计:设计简洁明了的用户界面,方便用户输入和查看日期。

b. 功能实现:实现日期的输入、输出、查询(按年月查询、按日期查询)。

c. 程序优化:讨论如何优化代码,提高程序运行效率。

d. 错误处理:学习如何处理用户输入错误、日期有效性验证等。

教学内容参考教材相关章节,按照以下进度安排:1. 第一课时:C语言基础语法复习,引入结构体概念。

用c语言编写万年历

用c语言编写万年历
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;
else goto loop2;
loop1: for(i=1901;i<year;i++)
{
if(i%400==0||(i%4==0&&i%100!=0))
n++;
}
days=(year-1901-n)*365+n*366;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("一年内只能有12个月!请重新输入!\n");goto redo;
case 3:printf("\t 五月 %d\t\t 六月 %d\n",year,year);break;
case 4:printf("\t 七月 %d\t\t 八月 %d\n",year,year);break;
goto redo;
}
if(month==6&&(day>=31||day<=0))
{
printf("输入有误!6月只能有30天!\n");
goto redo;
}
if(month==7&&(day>=32||day<=0))
{
printf("输入有误!7月只能有31天!\n");

万年历c语言编程代码

万年历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语言课程设计--万年历

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

万年历系统题目:万年历系统姓名:黄炼军学号:20070810505学院:计算机与通信学院专业:计算机科学与技术0705班指导老师:何英完成时间:2009年11月10日一、问题描述模仿Windwos的日历.1)日历显示功能。

能根据系统日期进行初始化,如果没有任何输入,则显示系统日期所在月份的月历。

2)日历查询、闰年判断功能。

输入日期进行查询,显示查询日期所在月份的月历,还将显示所在年份是否为闰年。

3)参数检查功能。

如果输入日期不合法,查询将被拒绝,并显示提示信息。

4)选做:通过键盘操作(如:光标上、下、左、右移动键,pageup、pagedown键)调整年份、月份和日期,并显示调整后的日期及月历。

二、问题分析对于要求1:难点在于判断星期,但根据蔡勒公式,可以很容易地有年月日推断出星期:nDay=year-1+(year-1)/4-(year-1)/100+(year-1)/400+nday;w=nDay%7;其中year:要查询的年份nday:从该年的一月一日起到该天的天数w:得出的星期数,w==0表示星期天。

在打印月历时,只要知道第一天的星期,就可以依次输入后面的日期,通过定长度输出日期,在遇到某天时星期六时,就换行输出,因此可以按照月历的格式输出。

对于初始输入当前月历,可以通过<time.h>中的time 和localtime函数取出系统时间进行初始化。

time_t timer;struct tm* gmt;time(&timer);gmt=localtime(&timer);gmt就是一个时间结构体,可以从中取出年月日。

对于要求2:闰年的判断,能被4整除但不能被100整除,或者能被400整除的年份为闰年,否则为平年。

日期的查询,就是直接打印改天所在月份的月历。

对于要求3:判断日期是否合法,可以先判断年月日是否有小于0的值,月和日是否有超出最大值12和31 ,如果通过此判断合法,再判断是否时闰年,如果时闰年,则判断二月份是否满足要求,闰年二月份不能超过29天,平年二月份不能超过28天。

c语言课程设计万年历范例

c语言课程设计万年历范例

C语言课程设计计算机科学与技术专业****班学号:******姓名:******目录序言 (1)说明 (2)流程图 (3)源代码 (4)小结 (5)序言1. 经过上一个学期对《C程序设计》的学习,同学们都认为真正的学到了有用知识,可能有一些人学的不够理想,但无论如何,这些知识都为我们的下一步学习打下了坚实的基础。

做这么一个课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。

本程序是一个万年历程序,可以输出公元一年一月以后任意月份的天数及每一天是星期几,只要在运行程序时按照要求输入年份再输入和月份,程序就会把这一月份的日历显示在屏幕上,使人一目了然。

该程序能与目前天文学研究中所采用的各种日历程序所能计算的范围相一致。

2 . 课程设计题目:万年历要求:输入年份和月份,自动输出该月的日历,清楚的显示每一天是星期几。

指导老师:翟海霞说明一.算法分析说明:1. 总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为355。

然后判断输入的年是否为定义年,若是,令总天数S=1,否则,用累加法计算出定义年到输入年之间的总天数,再把输入年的一月到要输出的月份之间的天数累加起来,若该月是闰年中的月份并且该月还大于二月,再使总天数加1,否则,不加,既算出从定义年一月一日到输出年的该月一日的总天数。

2. 输出月份第一天为星期几的算法:使总天数除以7取余加2得几既为星期几,若是7,则为星期日。

3. 算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。

二.要用到的函数和语句1.<stdio.h>,<conio.h>,<math.h> /*头文件*/2.main() /*主函数*/3.printf(),4.scanf()5.textbackground(),textcolor() /*定义背景和字体颜色*/6.if 语句7.for 语句8.printstar() /*调用函数*/9.int day_year() /*定义函数*/10.goto /*循环语句*/流程图1.图一输入的年份判断从定义年到输入的年份中每个年份是否为闰年是否每年为366天每年为365天返回该年的天数2.图二输入的年月判断输入年是否为定义年是否总天数S=1 总天数S为定义年到输入年的总天数把S加上该年一月到输入月份的天数,再加1判断输入的月份是否为闰年中的月份是否该月是否大于二月是否把S加上该年一月到输入月份的天数把S再加上该把S加上该年年一月到输入一月到输入月的月份的天数份的天数再加1总天数为S判断S的最后一天为星期几从这一天起依次输出输入月份的天数直到该月底为止源代码#include<conio.h>#include<stdio.h>#include <math.h>main(){long s=1;int a[14]={0,0,31,28,31,30,31,30,31,31,30,31,30,31}; int y,m,p,i,j,k,n,leap;int day_year(int y);textbackground(RED);textcolor(YELLOW);clrscr();printf("please input the year:");scanf("%d",&y);printf("\n");printf("please input the month:");scanf("%d",&m);printf("\n");textbackground(3);clrscr();printf("\tYear:%d Month:%d\n",y,m);printf("\n");if(y==1)s=1;for(i=1;i<y;i++)s=s+day_year(y-1);if(y%4==0&&y%100!=0||y%400==0)leap=1;else leap=0;for(i=0;i<=m;i++)s=s+a[i];if(leap==1&&m>2)s=s+1;else s=s+0;p=s%7+3;printf(" Sun Mon Tue Wed Thu Fri Sat\n"); printstar();if(p<=7)n=4*(p-1);else n=4*(p-8);for(j=1;j<=n;j++)printf(" ");if(leap==1&&m==2)a[3]=a[3]+1;else a[3]=a[3]+0;for(j=1;j<=a[m+1];j++){printf("%4d",j);if((j+n/4)%7==0)printf("\n");}printf("\n");printstar();printstar();s=1;printf("do you want contintue(y/n)");scanf("%c",&q);for(;;){int k;k=bioskey(0);if(k==0x316e) break;if(k==0x1579) goto loop;}}printstar(){printf("******************************\n"); }int day_year(int y){if(y%4==0&&y%100!=0||y%400==0)return(366);else return(365);}小结经历了这次课程设计的设计和制作的整个过程,我才发现我知识的贫乏和知识面的狭窄,原本以为不就是一个小小的课程设计,小case,很容易就可以搞定,可是到了后来实际的操作的时候可是花费了我九牛二虎之力,不说其他的,只说时间上面,我在宿舍里面熬了三个通宵,更不用说白天的时间了。

C语言课程设计实验报告(万年历)

C语言课程设计实验报告(万年历)

C语言课程设计一、题目及功能描述题目:万年历的设计利用C语言设计出万年历,使其实现如下要求1、输入一个年份,在屏幕上输出该年的年历(包括每月的天数和所对应的星期几),并且在每月的左上角或右上角打印出相应的年份和月份,要求输出界面尽可能整齐、美观,符合年历显示规范。

假定输入的年份在1-9999年之间。

2、输入年月,输出该月的月历。

3、输入年月日,输出距今天还有多少天,是星期几,是否是公历节日。

:4、指定键盘的某些键,用于控制变换不同年、月、日的显示。

即:当前若正在显示2011年的年历,按下键盘“←”方向键后,年历变为2010年的。

二、使用的所有变量的说明变量说明:(以下均为整型变量)year 表示年份的变量month 表示月份的变量day 表示日期的变量select 表示菜单选择的变量i 表示月份的变量j 表示一个月中的某一天的变量sum 判断某天是一年中的第几天的变量number判断某天离公元1年1月1日还有几天的变量a[] 表示每月天数的数组变量year1 系统时间年份的变量month1 系统时间月份的变量day1 系统时间日期的变量三、程序清单及其说明#include "time.h" /*包含的头文件*/#include "stdio.h"#include "math.h"#include "windows.h"#include "conio.h"#define KEYNUMUp 0x48 /*宏定义*/#define KEYNUMDown 0x50#define KEYNUMLeft 0x4b#define KEYNUMRight 0x4d#define KEYNUMPageUp 0x49int eachyeartotal(int year,int month,int day); /*函数声明*/int counterdays(int year,int month,int day);int nowtime(int year,int month,int day);int week(int year,int month,int day);int maxDay(int year,int month);int isleap(int year);void whatweek(int year,int month,int day);void display(int year ,int month);void display2(int year,int month);void display3(int year,int month,int day) ;void setDay1(int year,int month,int day);void setDay2(int year,int month,int day);void setDay3(int year,int month,int day);void jieri(int month,int day);void display1(int year);void getmenu();void main() /*主函数*/{int year,month,day,select;while(1){getmenu();printf(" 请输入相应数字:"); /*菜单选择*/scanf("%d",&select);system("cls");switch(select){case 1: /*当选择为1时显示年历*/printf(" 年历显示:输入年(如2011):");scanf("%d",&year);if(year>0&&year<10000) /*显示年份从0-10000 */{display1(year); /*调用函数*/printf(" 提示按↑:上一年按↓:下一年按其他键:返回菜单\n\n");setDay1( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 2: /*当选择为2显示月历*/printf(" 月历显示:输入年月(如2011,6):");if(year>0&&year<10000&&month>=1&&month<=12){display2(year,month);printf(" 提示按←:上个月按→:下个月按其他键:返回菜单\n\n");setDay2( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 3: /*当选择为3时显示日期*/printf(" 日期显示:输入年月日(比如2011,6,23):");scanf("%d,%d,%d",&year,&month,&day);if(year>0&&year<10000&&month>=1&&month<=12&&day>=1&&day<=maxDay(year,month) ){display3(year,month,day);printf(" 提示按PageUp:前一天按PageDown:后一天按其他键:返回菜单\n\n");setDay3( year,month, day);}elsesystem("cls");printf(" 输入无效,重新输入!\n");break;case 4:exit(0);default: /*当输入其他数字时,输入无效,重新输入*/system("cls");printf(" 输入无效,重新输入!\n");}}}int isleap(int year) /*判断是否为闰年*/{if(year%4==0&&year%100!=0||year%400==0)return 1;elsereturn 0;int maxDay(int year,int month) /*每月的天数*/{int a[]={31,28,31,30,31,30,31,31,30,31,30,31}; /*每个月中的天数*/ if(isleap( year))a[1]=29; /*闰年2月份有29天*/ return a[month-1];}int eachyeartotal(int year,int month,int day) /*判断某天是一年中的第几天*/ {int i,sum=0;for(i=1;i<month;i++)sum+=maxDay(year,i);sum+=day;return sum;}int week(int year,int month,int day) /*对天数进行判断确定是星期几*/ {int number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);number=number%7 ;return number;}void display(int year ,int month) /*输出年月*/{int max,number,i,j=1;max=maxDay(year,month);number=week(year,month,1);printf(" %4s %4s %4s %4s %4s %4s %4s\n","Sun","Mon","Tue","Wed", "Thu","Fri","sat");for(i=0;i<number;i++)printf(" "); /*1号前的星期补空格*/ while(j<=max){printf("%6d",j);if (i%7==6)printf("\n"); /* 每7格换一行*/i++;j++;printf("\n\n");}void display1(int year) /*输出年历*/{int i;printf("\n");for(i=1;i<=12;i++){printf("%d 年%d 月\n\n ",year,i);display(year,i);}}void display2(int year,int month) /*输出月历*/{printf("\n%d 年%d 月\n ",year,month);display(year,month);}void display3(int year,int month,int day) /*输出日历*/{whatweek( year,month,day);jieri(month,day);counterdays(year,month, day);}int counterdays(int year,int month,int day) /*判断今天距特定日期的天数*/{int year1, days0,days1,month1,days, day1;time_t timep;struct tm *p;time(&timep);p=gmtime(&timep);year1=(1900+p->tm_year) ;month1=(1+p->tm_mon) ;day1=(p->tm_mday); /*获取系统时间year1、month1、day1分别为年、月、日*/days0=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day);days1=(year1-1)*365+(year1-1)/4-(year1-1)/100+(year1-1)/400+eachyeartotal(year1,month1,daydays=days0-days1; /*计算出两个日期之间的时间差*/printf("\n 今天距%d年%d月%d日还有%d天\n\n",year,month,day,days);return days;}void whatweek(int year,int month,int day) /*判断是星期几*/{int number;number=(year-1)+(year-1)/4-(year-1)/100+(year-1)/400+eachyeartotal(year,month,day); number=number%7 ;switch( number){case 0:printf( "\n %d年%d月%d日是星期日",year,month,day);break;case 1:printf( "\n %d年%d月%d日是星期一",year,month,day);break;case 2:printf( "\n %d年%d月%d日是星期二",year,month,day);break;case 3:printf( "\n %d年%d月%d日是星期三",year,month,day);break;case 4:printf( "\n %d年%d月%d日是星期四",year,month,day);break;case 5:printf( "\n %d年%d月%d日是星期五",year,month,day);break;case 6:printf( "\n %d年%d月%d日是星期六",year,month,day);break;default:system("cls");printf(" 出现错误!\n" );}}void jieri(int month,int day) /*判断是否公历节日*/{if(month==1)switch(day){case 1:printf(",这天是元旦");}if(month==2)switch(day){case 14:}if(month==3)switch(day){case 8:printf(",这天是妇女节");break;case 12:printf(",这天是植树节");}if(month==4)switch(day){case 1:printf(",这天是愚人节");}if(month==5)switch(day){case 1:printf(",这天是劳动节");break;case 4:printf(",这天是青年节");}if(month==6)switch(day){case 1:printf(",这天是儿童节");}if(month==7)switch(day){case 1:printf(",这天是建党节");}if(month==8)switch(day){case 1:printf(",这天是建军节");}if(month==9)switch(day){printf(",这天是教师节");}if(month==10)switch(day){case 1:printf(",这天是国庆节");}}void setDay1(int year,int month,int day) /*通过键盘“↑”“↓”控制年历的变换*/ { char k;getch();k=getch();switch(k){case KEYNUMUp: /*“↑”年份减小*/ if(year<2){system("cls");printf(" 警告!超出范围!\n");break;}year--;display1(year);setDay1(year,month,day);break;case KEYNUMDown:/*“↓”年份变大*/ year++;display1(year);setDay1(year,month,day);break;default:system("cls");}}void setDay2(int year,int month,int day) /*通过键盘“←”“→”控制月历的变换*/char k;getch();k=getch();switch(k){case KEYNUMLeft: /*“←”月份变小*/if(month<2){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}month--;display2(year , month);setDay2(year,month,day);break;case KEYNUMRight:/*“→”月份变小*/if(month>11){month-=12;year++;}if(year<9999);month++;display2(year , month);setDay2(year,month,day);break;default:system("cls");;}}void setDay3(int year,int month,int day) /*通过键盘“PageUp”“PageDown”控制日期的变换*/{char k;getch();switch(k){case KEYNUMPageUp: /*“PageUp”日期变小*/ if(day<2){month--;day=maxDay(year,month);}if(month<1){month+=12;year--;}if(year<1){system("cls");printf(" 警告!超出范围!\n");break;}day--;display3(year , month,day);setDay3(year,month,day);break;case KEYNUMPageDown: /*“PageDown”日期变大*/ day++;if(day>maxDay(year,month)){day=1;month++;}if(month>12){month-=12;year++;}if(year<10000);display3(year , month,day);setDay3(year,month,day);break;default:system("cls");;}}{printf(" ************主菜单************\n\n");printf(" * 欢迎进入万年历系统*\n\n");printf(" * 1、年历显示*\n\n");printf(" * 2、月历查询*\n\n");printf(" * 3、日期查询*\n\n");printf(" * 4、退出系统*\n\n");printf(" ******************************\n\n"); }四、运行结果清单打开软件,进入如下菜单界面,输入数字进行选择1年历的显示(1)输入数字1进入年历的显示(2)输入年份2011,显示2011年的年历如下(3)按↑键盘显示上一年(2010年)的年历,显示如下(4)按↓键盘显示上一年(2012年)的年历,显示如下2、月历的显示(1)在菜单中选择2,进入月历的显示,输入2011,6,显示2011年6月份的月历,显示效果如下(2)按←键盘显示上一个月(5月)的月历,显示效果如下(3)按→键盘显示上上个月(7月)的月历,显示效果如下3、日历的显示(1)输入选择3进入日历的显示,如图输入2011,10,1显示这天的星期,是否为公历节日,距离现在还有多少天(2)按PagDown显示前一天的日历,显示如下(3)按PagUp显示后一天的日历,显示如下4 退出程序输入选择4,显示如下界面,按任意键退出程序五、总结和体会。

C语言程序设计,万年历

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语言编程的课程设计题目——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语言程序设计报告―“万年历”

C语言程序设计报告―“万年历”

C语言程序设计报告―“万年历”一、程序实现的功能“万年历”,也叫做历法及历历,是一种用于计算日期及节假日的日历,它可以帮助我们计算一些特定的日期及其所属的节日。

本程序通过C语言实现了一款传统的“万年历”的功能,它可以根据用户输入的年份和月份,打印出当月的日历表格,以及当月的公历及节假日。

二、程序的功能结构及总体设计本程序的功能结构如下:(1)输入年份及月份,计算出当月有多少天;(2)根据此判断出当月的第一天是星期几;(3)将前面算出的信息用表格形式打印出来;(4)计算当月的节假日及其所属的日期;(5)将节假日打印到表格中,形成一张完整的月历表。

程序的总体设计,主要由两部分组成:(1)调用函数实现实际的打印功能;(2)实现主函数的调用以控制程序的流程。

1. 程序结构:程序的核心是对日历表的生成,其结构如下:主函数:负责主函数的调用,以控制程序的流程。

日历表生成函数:调用该函数以生成日历表;在调用该函数之前,首先运行“getfirstday”函数,以计算当月的第一天是星期几;然后调用“dayOut”函数,将当月的日期和节日打印出来。

“getfirstday”函数:该函数用来计算某年某月的第一天是星期几,实现的核心思想是以1900年为基准,计算出某年某月离1900年相差多少天,然后根据求出的和1900年的差值,计算出当月的第一天是星期几;此外,还进行了考虑闰年等特殊情况的特别处理,以进一步检查结果。

2. algorithm:(1) 从键盘输入年份及月份,将年份及月份保存在相应的变量中;(2) 调用“getfirstday”函数,计算出当月的第一天是星期几;(3) 调用日历表生成函数,生成当月的日历表;(4) 输出生成的日历表,完成程序的运行。

四、程序的测试为了验证本程序的可行性,我进行了严格的测试,并与电子版的日历比较,测试结果表明,本程序的结果完全一致,能够满足正确的要求,用户可以使用该程序进行相应的日历计算。

万年历c语言课程设计

万年历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. 讲授法:- 对于结构体、指针等基本概念和理论,采用讲授法进行教学。

C语言-万年历

C语言-万年历
d=d+b[i-1];
}
week=(year-1)*365+(year-1)/4-(year-1)/100+(year-1)/400+d;//判断这个月的第一天是星期几
week=week%7;
printf("\n\n\t这是%d年的%d月的日历\n",year,month);
Today(year,month,day);
Tomonth(year,month);
printf("\n\t\t输 入 Y 或 者 y 键 继 续。。。");
for(;getch()=='y'||getch()=='Y';)
{
printf("\n\n 请 输 入 您 所 想 要 的 功 能:\n");
scanf("%d",&x);
switch(x)
{
case 1:
{
system("cls");
search();
printf("\n\t\t 按 Y 或 者 y 继 续 ...");
break;
}
case 2:
{
system("cls");
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;

万年历的c语言实现源程序

万年历的c语言实现源程序

万年历的C语言编程实现源程序:#include<stdio。

h>#include<stdlib.h>int Isleapyear(int y)/*判断是否是闰年*/{if((y%4==0&&y%100!=0)||(y%400==0))return 1;elsereturn 0;}int Getdaysofmonth(int y,int m)/*确定某个月的天数*/{int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};if(Isleapyear(y))/*如果是闰年则2月份的天数改变为29*/ months[2]=29;return months[m];}int Gettotaldays(int y,int m)/*计算从1901年1月开始到给定年月的天数*/{int months[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};int days=0;int i,j;if((Isleapyear(y)))months[2]=29;for(i=1901;i<y;i++)/*从1901年1月开始计算,累加y 年之前的天数*/{if(Isleapyear(i))days+=366;elsedays+=365;}for(j=1;j〈m;j++)/*累加m月之后的天数*/days+=months[j];return days;}int Getfirstdayintable(int y,int m)/*计算给定年月的第一天在日历表中的位置*/{int d;d=Gettotaldays(y,m);d=d+3;/*1901年1月1日是星期二,在日历中星期二是第三个位置*/d=d%7;return d;}void Showdate(int y,int m)/*显示日历*/{int first;int d;int i,k;first=Getfirstdayintable(y,m);/*得到第一天在日历中的第一个位置*/d=Getdaysofmonth(y,m);/*得到这个月的天数*/k=0;printf(”——-—--—-——-—--————-—--——--——-—------—\n”);printf(” SUN MON TUE WEN THU FRI STA\n”);for(i=1;i<first;i++)/*打印第一天之前的空格*/{printf(” ");k++;/*k用于确定日历中是否回车*/}for(i=1;i<=d;i++){printf(”%5d",i);/*每个具体的日期占5个字符的宽度*/k++;if(k==7)/*每行打印7个日期数字后回车*/{printf("\n”);k=0;}}printf("\n-—--—————---——-—-—--———--—-———-——-——-\n");}int main(){int y,m;printf("Input year:");scanf(”%d",&y);printf("Input month:”);scanf("%d”,&m);Showdate(y,m);return 0;}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言课程设计报告题目:万年历系统设计者:吕阳 110703112胡杰 110703111卢太林 110703110专业班级:动物生物技术1101班指导教师:刘立俊2012年6月7日武汉工业学院动物科学与营养工程学院目录一、C语言课程设计任务书 (3)1、C语言课程设计目的和要求 (3)1.1目的: (3)1.2要求: (3)二、本组课题及本人任务 (3)三、程序功能简介 (4)四、主题内容 (4)1、题目与要求 (4)1.1 问题提出 (4)1.2 本系统涉及的知识点 (5)1.3 功能要求 (5)2、功能设计 (6)2.1 算法设计 (6)3、程序流程图.. (8)4、程序代码设计 (9)4.1输入及年份平润确定模块 (9)4.2求星期天数模块 (9)4.3求月份天数模块 (11)4.4查询模块 (11)4.5输出及验证模块 (12)4.6说明: (12)5、C程序设计总结 (12)6、结束语 (13)参考文献 (13)一、C语言课程设计任务书1、C语言课程设计目的和要求1.1目的:1)复习、巩固C语言的基础知识,进一步加深对C语言的理解和掌握;2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。

提高学生适应实际,实践编程的能力;3)培养学生在项目开发中团队合作精神、创新意识及能力。

1.2要求:1)、对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;2)、系统设计要实用,编程简练,可用,功能全面3)、说明书、流程图要清楚4)、记录设计情况(备查,也为编写设计说明书作好准备);5)、要求采用模块化程序设计方法,及锯齿型书写格式,要求上机调试通过和按设计报告格式。

6)、设计上交内容:设计报告一份(按格式书写);源程序盘一张(能编译成可执行文件并能正常运行,可一个班交一张光盘)。

二、本组课题及本人任务经考虑及尝试,本人决定选择题目2.2编写一个万年历系统,完成对日期的查询输出。

1设计编写一个C程序—“万年历”。

2输入任一年将显示出该年的所有月份日期,对应的星期。

3 下一行显示星期,从周日到周六,中英文都可以。

4 下一行开始显示日期从1号开始,并按其是周几实际情况与上面的星期数垂直对齐。

5 月份:中文英文都可以,注意闰年情况。

三、程序功能简介模仿现实生活中的挂历.当前页以系统当前日期的月份为准显示当前月的每一天(显示出日及对应的星期几).当系统日期变到下一月时,系统自动翻页到下一月.四、主题内容1、题目与要求1.1 问题提出本人计划编写一个万年历查询系统,模仿现实生活中的挂历,实现多日期的变更了解。

1.2 本系统涉及的知识点1. 程序的三种基本结构:顺序,选择,循环。

if语句的嵌套,for语句的嵌套。

2. 定义整型,字符型,指针变量,字符型数组和指针数组。

数组的初始化和引用和指针的使用。

3. 函数的定义、声名、调用以及函数的返回值。

4. 赋值语句的使用。

5. 输入(scanf)输出(printf)函数的应用。

6. 算术运算符、关系运算符和逻辑运算符的应用。

1.3 功能要求1、建立日历基础信息,输入当前日期时间为本系统时间基数;2、根据年份平润规律得出所要了解年份的平润;3、以每七天为一个循环的规律得出星期天数;4、根据月份天数规律得出所要了解月份天数;5、输入日期查询;6、输出。

2、功能设计2.1 算法设计1、本系统需要实现的功能要求:利用switch语句设计如图1所示的主菜单:请输入选项编号(1~7)图1 日历查询系统主菜单2、选择3后,调用排序函数,进入函数后利用switch语句实现一个如图2所示的菜单,该菜单中每个选项调用一个函数。

图2 排序子菜单3、根据所选菜单编写相应模块图1)通过switch 函数求出星期天数;2)通过switch 函数求出月份天数;3)输入日期查询;4)输出及验证。

3、程序流程图(成立)(不成立)4、程序代码设计4.1输入及年份平润确定模块1)函数原形:void count(int year, int month)2)功能:利用if循环语句和count、leap函数完成对基数日期的输入和对所要了解的日期所在年份的平润。

3)模块源代码:#include <stdio.h>#define YEAR 365int leap(int year){int n;n=(year%4==0&&year%4!=0||year%400==0);return(n);}void count(int year, int month) /*基:2000年1月*/{int i,day,first_day,flag,year1,year2,temp=6;flag=leap(year);year1=year/100; /*相差几百年*/year2=year%100; /*中间几十年*/if(year>=2000) /*大于2000年*/{year1-=20;day=year1/4; /*百闰年数*/day+=(YEAR+24)*year1+YEAR*year2+(year2-1)/4; /*2000年至现年总天数*/if(year>2000)day++; /*加上2000年闰年2月的29天*/4.2求星期天数模块1)函数原型:switch(month)2)功能:利用switch语句完成万年历中对星期天数的求解。

3)模块源代码:switch(month){case 1:day+=0;break;case 2:day+=31;break; /*加上月份天数*/case 3:day+=59+flag;break;case 4:day+=90+flag;break;case 5:day+=120+flag;break;case 6:day+=151+flag;break;case 7:day+=181+flag;break;case 8:day+=212+flag;break;case 9:day+=243+flag;break;case 10:day+=273+flag;break;case 11:day+=304+flag;break;case 12:day+=334+flag;break;}day+=temp; /*加上2000年1月1号是星期六*/ first_day=day%7; /*对7取余,为1号星期*/}else /*以下25行,计算<2000年,算法同上*/ {year1=20-1-year1;year2=100-year2-1; /*倒减,应多减1*/day=year1/4;day+=36524*year1+365*year2+year2/4; switch(month){case 12:day+=31;break;case 11:day+=61;break;case 10:day+=92;break;case 9:day+=122;break;case 8:day+=153;break;case 7:day+=184;break;case 6:day+=214;break;case 5:day+=245;break;case 4:day+=275;break;case 3:day+=306;break;case 2:day+=334+flag;break;case 1:day+=365+flag;break;}day-=temp; /*减去1号的6天*/day=day%7;first_day=(7-day)%7; /*反对称*/}4.3求月份天数模块1)函数原型:switch(month)2)功能:利用switch、fot循环语句实现万年历中对每月天数的求解以及万年历基本信息的输出。

3)模块源代码:switch(month){case 1:case 3:case 5:case 7:case 8:case 10:case 12:month=31;break;case 4:case 6:case 9:case 11:month=30;break;case 2:month=28+flag;}printf(" SUN MON TUE WED THU FRI SAT\n");for(i=1;i<=4*first_day;i++) /*输出空格*/printf(" ");for(i=0;i<month;i++){printf("%4d",i+1); /*输出日历*/if((first_day+i)%7==6)printf("\n");}printf("\n");}4.4查询模块1)函数原型:void main()2)功能:利用main函数实现对输入日期的查询。

3)模块源代码:void main(){int year,i;printf("please input year :\n");4.5输出及验证模块1)函数原型:void main()2)功能:利用for、while语句和for、count函数实现查询结果的输出及验证。

3)模块源代码:while(scanf("%d",&year)!=1){printf("输入错误,请重新输入");fflush(stdin);}for(i=1;i<13;i++){printf("month:%d\n",i);count(year,i);}getch();}4.6说明:执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。

5、C程序设计总结1.程序调试情况;程序经过多次调试,最终运行正常。

输入数据,得出正确结果。

2.本人在程序设计中感想,收获:通过本次试验设计,我对C语言在编写程序时的用处有了更明确的认识,懂得了编写C程序的一般法方步骤。

最大的收获是,编写程序时一定要有信心和勇气,要相信自己一定可以把这个程序编写出来。

分析问题做出算法,想好思路,在心里有个大致的框架,然后按部就班的记下自己想到的每一点内容,把写下的东西认真整理,查缺补漏,把一些细节的地方补上,就这样一个貌似很难的程序就写出来了(其实编程并不难,关键是要投入,要钻到里面去)。

下一步就是读程序了,读程序时一定要小心仔细,一条语句一条语句的读,看是否能输出自己想要输出的结果,如果发现错误要马上改过来,再接着向下读,直到把程序调试的完美无缺为至。

相关文档
最新文档