




已阅读5页,还剩22页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
南昌航空大学科技学院计算机课程设计计算机课程设计题 目: 设计一个小日历程序设 计 人: 专 业:班 级: 指导教师:2011年7月4日目 录1 概述32 设计目的及要求42.1设计目的42.2设计要求42.3增加功能43 语言的选择44 开发环境的介绍和特点54.1 Visual C+ 6.0 开发环境54.2 C语言的特点115 程序设计125.1 设计过程和理论根据125.2 主要函数的说明和编程的流程图136 程序代码如下167 程序的运行结果238 程序调试心得239 课程设计心得体会261 概述C语言的历史 著名的计算机科学家丹尼斯里奇(Dennis Ritchie)创造的。1967年, Ritchie进入贝尔实验室工作。贝尔实验室是当时世界上最有创造力的地方之一,著名的C语言、C+语言和Unix操作系统都诞生于此。一开始, 里奇和他的同事肯汤普生开始研究DEC PDP-7机器,但是在这个机器上写程序很困难,只能用很底层很高深的汇编语言。于是汤普生设计了一种高级程序语言,并把它命名为B语言。但是由于B语言本身设计的缺陷,使他在内存的限制面前一筹莫展。1973年,里奇决定对B语言进行改良,他赋予了新语言强有力的系统控制方面的能力,并且新语言非常简洁、高效,里奇把它命名为C语言,意为B语言的下一代。 在开发C语言的同时,里奇和汤普生、布朗(贝尔实验室的另一名科学家)还接受了一个新任务,就是在DEC PDP-7上开发一个多任务、多用户的操作系统,1969年,他们用汇编语言完成了这个操作系统的第一个版本,里奇受一个更早的项目Multics的启发,将这个系统命名为Unix。 为了在全世界面前展现C语言强大的能力,里奇用C语言把Unix操作系统重写了一遍,这就是Unix第三版。而之前的第二版是用B语言开发的。1977年,为了推广贝尔实验室开发的Unix操作系统,里奇发表了不依赖于具体机器系统的C语言编译文本可移植的C语言编译程序,使C语言再向前跨出一大步,各种计算机都开始支持C语言。 1978年里奇和布朗一起出版了C语言一书,从而使C语言成为世界上应用最广泛的高级程序设计语言,而该书也成为计算机科学界最畅销的书籍之一。里奇把全部精力都放到Unix、C语言、C+语言的应用和推广上,曾在很多国家进行过教学和讲座活动。2000年,他来到了中国,在北京大学和复旦大学进行了题为贝尔实验室与操作系统的讲演,为推动中国Unix/Linux的应用和发展贡献了力量。 1983年,人们将计算机科学方面的最高荣誉图灵奖颁发给了里奇,以表彰他对计算机科学所做出的杰出贡献。2 设计目的及要求2.1设计目的:设计一个小日历程序2.2设计要求:1)日历包含在一个双线的窗口内。2)窗口的第一行显示内容为: 今天是2011年6月X号。3)第二行显示周一至周日。4)之后显示6月的每一天。2.3增加功能该系统主要包括四个大部分:日历显示功能、日历查询和闰年判断功能、参数检查功能、通过键盘操作查看日历。3 语言的选择C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。主要有以下特点:1. C是中级语言,它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。2. C是结构式语言.结构式语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C 语言是以函数形式提供给用户的, 这些函数可方便的调用, 并具有多种循环、条件语句控制程序流向, 从而使程序完全结构化。3. C语言功能齐全C 语言具有各种各样的数据类型, 并引入了指针概念, 可使程序效率更高。另外C 语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大, 可以实现决策目的编游戏,编3D游戏,做数据库,做联众世界,做聊天室,做PHOTOSHOP做FLASH,做3DMAX。4. C语言适用范围大C 语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。常用的C语言IDE(集成开发环境)有Microsoft Visual C+,Borland C+,Watcom C+ ,Borland C+ ,Borland C+ Builder,Borland C+ 3.1 for DOS,Watcom C+ 11.0 for DOS,GNU DJGPP C+ ,Lccwin32 C Compiler 3.1,Microsoft C,High C,Turbo C,Dev-C+,C-Free, win-tc 等等. 我选择C语言不仅是以上的一些,主要的是我们对C语言比较熟悉,在大一学过一个学期的C语言,接着又考过计算机二级,选择C语言能更好的完成本次课程设计的任务。4 开发环境的介绍和特点4.1 Visual C+ 6.0 开发环境 1、进入 VC 环境 图 1 VC 集成环境的主菜单窗口从“开始”“程序”“Microsoft Visual Studio6.0”“Microsoft Visual C+6.0”这时进入 VC 集成环境的主菜单窗口,屏幕显示如图 1 所示。2、VC 环境下C 程序的编辑、连接和运行 (1)新建一个工程项目 1)在 VC 环境中选择“文件”菜单,然后单击“新建”菜单项。如图 2 所示 图 2 选择文件菜单中“新建”2)在弹出的新建对话框中设置好相应的内容,如图 3 所示。要事先准备好保存文件的目录,如 d:program。选择“工程”选项卡中“Win 32 Console Application”,然后在“工程”下的文本框中输入”Example1”。 图 3 新建对话框3)单击“确定”按钮,出现如图 4所示界面。 图 4 新建工程项目界面4)单击“完成”,再单击“确定”,出现如图 5 界面。 图 5 Example1 工程界面(2)向空工程添加 C 语言文件 1)选择“文件”菜单,然后单击“新建”菜单项,出现如图 6 所示界面。单击“C+ Source File“,在右边“文件”标签下的文本框中输入新建的 C 语言文件名。设置好后,单击“确定”,就回到了 VC+的编辑界面,即将进行输入和编辑的源程序文件 Example1.c文件存放在 D盘的 program目录下。图 6 新建一个 C 语言文件对话框2)在图 7的工作区中,输入源程序。 图 7 输入、编辑 C 语言源程序3)输入源程序文件后可在主菜单栏中选择“文件”(FILE),并在其下拉菜单中选择“保存”(SAVE)。单击主菜单的“编译”(Build), 在其下拉菜单中选择“编译 Example1.c”(Compile Example1.c),或者单击工具栏上的“编译”按钮,如图 8 所示。 图 8 编译源程序4)编译完成后将如图9所示,此时注意编译窗口中的信息,如果有编译错误,将要对源程序进行修改,然后再重新编译,直到没有错误为止。 图9 编译信息对话框5)如图10 所示,单击主菜单的“编译”(Build), 在其下拉菜单中选择“构建Example1.exe”(build Example1.exe),或者单击工具栏上的“构建”按钮。 执行连接后,将在调试窗口中显示连接的信息,如图11 所示,如果连接有错误,将修改源程序,然后再编译、连接,直至没有错误为止。 图 10 生成可执行程序方式 图 11 生成可执行文件成功的信息(3)执行程序 完成了编译、连接后,就生成了可执行程序文件。如图12 所示,单击主菜单的“编译”(Build), 在其下拉菜单中选择“执行 Example1.exe”(Execute Example1.exe),或者单击工具栏上的“执行”按钮。执行后,将出现图 13 所示的结果。 图 12 执行程序方式 图 13 执行的结果4.2 C语言的特点 C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。具体来讲,C语言的特点 为:1. 简洁紧凑、灵活方便C语言一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C 语言可以象汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。2. 运算符丰富C的运算符包含的范围很广泛,共有种34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。3. 数据结构丰富C的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能, 支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。4. C是结构式语言结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。5. C语法限制不太严格、程序设计自由度大一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而C语言允许程序编写者有较大的自由度。6. C语言允许直接访问物理地址,可以直接对硬件进行操作因此既具有高级语言的功能,又具有低级语言的许多功能,能够象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可以用来写系统软件。7. C语言程序生成代码质量高,程序执行效率高一般只比汇编程序生成的目标代码效率低1020%。8. C语言适用范围大,可移植性好C语言有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。当然,C语言也有自身的不足,比如:C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数族下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。总之,C语言既有高级语言的特点,又具有汇编语言的特点;既是一个成功的系统设计语言,有时一个使用的程序设计语言;既能用来编写不依赖计算机硬件的应用程序,又能用来编写各种系统程序;是一种受欢迎、应用广泛的程序设计语言C语言版本 。5 程序设计5.1设计过程和理论根据1、理论根据经分析该题目要求我们熟练的掌握C语言的基本知识。其中包括数据类型(int、char);运算类型(算术运算、逻辑运算、自增运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构),进一步掌握各种函数的应用,包括时间函数等。任何一个程序的基本开发过程都是大同小异的。就算简单的只有几行的小程序,也需要完整的结构,一般包括:问题描述、需求分析、概要设计、详细设计、程序代码和调试运行6 个大的阶段。2、设计过程1)输入年份和月份,判断输入的年份是否为闰年。2)以1900 年1 月1 日星期一为标准,计算从1900 年到year 年1 月1 日的天数。3)判断每个月的天数days。4)计算year年month 月1 日距离1900 年1 月1 日的天数。5)确定year 年month月的第一天为周几。6)确定当月的日期ddd7)输出日历。5.2主要函数的说明和编程的流程图1、主要函数的说明语句来循环表示从1900 到year 年之间的时间段,用if 语句来判断是否为闰年。如果是闰年,每年366 天;如果不是闰年,每年365天。1)判断是否为润年判断某一年是否为闰年的条件只要满足下列二者之一即可:年份能够被4 整除,且不被100 整除;年份能够被4 整除,且能被400 整除。代码如下:int isRunNian(int y)return (y % 4 = 0 & y % 100 != 0 | y % 400 = 0) ? 1 : 0;2)以1900 年1 月1 日星期一为标准,计算从1900 年到year 年month 月1 日的天数。 计算从1900 年1月1 日到year 年1 月1 日的前一天的天数。在这一步中,需要定义整型变量作为循环变量、整型变量用来表示总天数。其中需要for计算从year 年1 月1 日到year 年month 月1日前一天的天数。这就需要对每个月的天数进行判断,天数需要用整型变量days 表示。大月31 天,小月30 天,闰年的2 月是29 天,非闰年的2 月是28 天,这需要用switch 语句来实现。将第一步、第二步中所计算的天数进行计算3)计算year 年month 月的第一天是周几 用整型变量days来表示。用计算得到的总天数除以7,用整型变量y 表示。如果结果为0,那么month 月的第一天是周日,如果结果不是0,那么month月的第一天y的数值。 4)确定当日的日期ddd =t.tm_mday5)输出日历2、编程的流程图开始 获得系统当前时间 清屏Ch=ESC?打印万年历Ch=0?Ch=输入查询时间Switch(ch)Year-Year+Month-Month+判断润平年函数打印某年日历函数打印带表格的万年历求星期几计算某个月的天数退出是是否否6 程序代码如下/* 程序名称: 万年历* 功能描述: 在字符界面下显示万年历的功能.* 设计编程: 江运豹* 时 间: 2011-6*/#include #include #include #include #include #define CURU 72#define CURD 80#define CURL 75#define CURR 77#define ESC 27void printWNL(int, int); /简单格式打印万年历void printWNL2(int, int,int); /打印带表格的万年历int Week(int,int,int); /求星期几int getDays(int, int); /计算某个月的天数int isRunNian(int); /判断是否闰年/*主函数,应用程序入口*/void main() int year,month,ddd; struct tm t; char ch; _getsystime(&t); /标准函数, 获得系统当前时间 year = t.tm_year + 1900; /得到当前年份 month = t.tm_mon + 1; /得到当前月份 ddd =t.tm_mday ; do system(cls); /调用DOS清屏命令 printWNL2(year,month,ddd); /自定义函数, 打印万年历 ch = getch(); /获得无回显控制台输入字符 if(ch = ESC) /ESC键,退出循环,结束程序 break; else if(ch = 0) /若值为零,则用户敲了功能键,继续获取后续代码。 ch = getch(); switch(ch) case CURL: year-; break; /左键减年 case CURR: year+; break; /右键加年 case CURU: /上键减月 month-; if(month = 0) month = 12; year-; break; case CURD: /下键加月 month+; if(month = 13) month = 1; year+; break; default:; while(1); printf(nnt谢谢使用,欢迎常来!再见。n);/*简单格式打印万年历*参数: y 整型,接收年份值; m 整型,接收月份值;*返回值: 无*/void printWNL(int y, int m, int ddd) int i,j; int day = 1 - Week(y,m,1); /天数初始值,定位1号的位置 int days = getDays(y,m); printf( 今天是 %4d年%2d月%d日n,y,m,ddd); printf( 日 一 二 三 四 五 六n); for(i = 1; i = 6; i+) for(j = 1; j = 7; j+) if(day days) printf( ); else printf(%3d,day); day+; printf(n); printf( 提示:【】减年 【】加年 【】减月 【】加月 【ESC】退出n);/*求星期几*参数: y 整型,接收年份值; m 整型,接收月份值; d 整型,接收天的号数*返回值: 整型, 是0,1-6七个数之间的一个数,0代表星期日,1-6代表星期一至星期六*/int Week(int y,int m,int d) int days = 0; /总天数 int i; for(i = 1; i y; i+) /累计1到y-1年的天数 days += isRunNian(i) ? 366 : 365; for(i = 1; i m; i+) /累计y年第1月到第m-1月的天数 days += getDays(y,i); days += d; /累计当月的天数。 return days % 7; /返回星期值/*判断是否闰年*参数: y 整型, 接收年份值*返回值: 整型, 只为0或1, 0代表假, 1代表真*/int isRunNian(int y) return (y % 4 = 0 & y % 100 != 0 | y % 400 = 0) ? 1 : 0;/*计算某个月的天数*参数: y 整型,接收年份值; m 整型,接收月份值;*返回值: 整型, 是0, 28, 29, 30, 31之间的一个数*注意: 返回值为0,表示你调用该函数时传递了不正确的年份值或月份值.*/int getDays(int y, int m) int days = 0; switch(m) case 1: case 3: case 5: case 7: case 8: case 10: case 12: days = 31; break; case 4: case 6: case 9: case 11: days = 30; break; case 2: days = isRunNian(y) ? 29 : 28; break; default:; return days;void printWNL2(int y, int m, int ddd) int i,j; int day = 1 - Week(y,m,1); /天数初始值,定位1号的位置 int days = getDays(y,m); printf(nt ); printf(nt万年历查询测控一班n); printf(t 今天是 %4d 年 %2d 月 %d 日 n,y,m,ddd); printf(tn); printf(t 日 一 二 三 四 五 六 n); for(i = 1; i = 6; i+) printf(tn); printf(t); for(j = 1; j = 7; j+) if(day days) printf( ); else printf( %2d ,day); j 7 ? printf() : i 6 ? printf() : printf(); day+; printf(n); printf(tn); printf( 提示:【】减年 【】加年 【】减月 【】加月 【ESC】退出n);7 程序的运行结果8 程序调试心得C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给我们留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对我们这些初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起,我通过这次编程,也积累了一些C编程时常犯的错误:1、书写标识符时,忽略了大小写字母的区别编译程序把a和A认为是两个不同的变量名,而显示出错信息。C语言认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。2、忽略了变量的类型,进行了不合法的运算%是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。3、将字符常量与字符串常量混淆混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:a和,而把它赋给一个字符变量是不行的。4、忽略了“=”与“=”的区别在C语言中,“=”是赋值运算符,“=”是关系运算符。5、忘记加分号分号是C语句中不可缺少的一部分,语句末尾必须有分号。 a=1 b=2编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。6、多加分号7、输入变量时忘记加地址运算符“&”8、输入数据的方式与要求不符。不能用逗号作两个数据间的分隔符 9、输入字符的格式与要求不一致在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。scanf(%c%c%c,&c1,&c2,&c3);如输入a b c 字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。10、输入输出的数据类型与所用格式说明符不一致11、C语言的变量一定要先定义才能使用12、输入输出的数据的类型与所用格式说明符不一致13、输入变量时忘记使用地址符14、输入时数据的组织与要求不符对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输入。15、对应该有花括弧的复合语句,忘记加花括弧16、括弧不配对while(c=getchar()!=#)putchar(c);17、在用标识时,忘记了大写字母和小写字母的区别int a,b,c;a=2;b=3;C=A+B;printf(“%d+%d=%D”,A,B,C);18、引用数组元素时误用发圆括弧int i,a(10);for(i=0;i10;i+)scanf(“%d”,&a(i);19、在定义数组时,将定义的”元素个数”误认为是”可使用的最大下标值int a10=1,2,3,4,5,6,7,8,9,10;int i;for(i=1;i=10;i+)printf(“%d”,ai);20、所调用的函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年专业解读仲裁委员会对仲裁员素质要求及面试预测题分析
- 2025年中小学教育心理学基础知识考试模拟题与答案详解
- 2025年中国注册生物工程师面试必-备知识与模拟题解答
- 2025年飞机翻修或D级检修合作协议书
- 2025年灌封胶项目合作计划书
- 2025年桨扇发动机项目合作计划书
- 抢救柜药品课件
- 2025年传染病防治兽药项目发展计划
- 辽宁省2025-2026学年高三上学期9月份联合考试物理试卷B版
- 2025年3-〔(4-氨基-3-甲氧苯基)偶氮〕苯磺酸项目发展计划
- 高中物理学科教学装备配置方案
- 初中物理科学家传记与贡献解读
- 安全生产责任制(模板)
- 高二班主任心理健康指导计划
- 安全防护文明施工措施
- 少儿跳绳培训班课程体系
- 教学质量分析与教学反思改进教学
- 碳纤维行业培训课件
- 2025至2030中国无针注射系统行业发展趋势分析与未来投资战略咨询研究报告
- 感染性休克护理
- 儿童过敏性紫癜饮食护理讲课件
评论
0/150
提交评论