c语言设计课程实训报告

上传人:第*** 文档编号:56202518 上传时间:2018-10-10 格式:PDF 页数:12 大小:272.19KB
返回 下载 相关 举报
c语言设计课程实训报告_第1页
第1页 / 共12页
c语言设计课程实训报告_第2页
第2页 / 共12页
c语言设计课程实训报告_第3页
第3页 / 共12页
c语言设计课程实训报告_第4页
第4页 / 共12页
c语言设计课程实训报告_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《c语言设计课程实训报告》由会员分享,可在线阅读,更多相关《c语言设计课程实训报告(12页珍藏版)》请在金锄头文库上搜索。

1、昆明理工大学城市学院昆明理工大学城市学院课程设计报告课程设计报告课 程 名 称:C 语言设计课程设计课程设计题目:万年历姓名:系:信息工程系专业:计算机科学与技术年级:2012学号:指 导 教 师:2013 年7 月 12 日任 务 书实训的目标实训的目标1进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解。2针对 C 语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。3掌握 C 语言的编程技巧和上机调试程序的方法。4掌握程序设计中的常用算法。任务名称:万年历项目功能:1、能够显示当前月的日历以及标志出当前日期。2、 可以

2、翻页、翻年。3、 可以输入年月日查看输入的年月的日历。4、拥有记事本的功能。教师签名:目录目录一、实训要求:.41.掌握时间函数的运用。.42.掌握在 WinTC 下的动画制作。43.掌握 bioskey 和随机函数的运用。.44.学会边界的判断。.45.掌握链表和文件。.46.综合所学内容编写一个程序。.4二、实训题目:41.给出时间计算与几天的差值; 给出天数计算日期; 给出两个日期计算差值。42.让一个圆在屏幕上动起来;制作一个太阳、地球、月亮的动画。.43.区域内有障碍物使方块不能穿过;小球在区域内运动,碰到边界后随机改变方向继续运动。 44.创建一个结构体;创建链表并输出;删除已有链

3、表中的一个节点;在已有链表中增加一个节点。45.万年历.4三、实训过程:41.时间函数:.4思考过程:42.动画制作:.4思考过程:4障碍物(边界判断)4思考过程4链表及文件:4思考过程41.课程设计:万年历(带记事本功能).5 思考过程 5源代码:5 运行结果 10四、实训心得:11一、实训要求: 1.掌握时间函数的运用。 2.掌握在 WinTC 下的动画制作。 3.掌握 bioskey 和随机函数的运用。 4.学会边界的判断。 5.掌握链表和文件。 6.综合所学内容编写一个程序。 二、实训题目: 1.给出时间计算与几天的差值;给出天数计算日期;给出两个日期计算差值。 2.让一个圆在屏幕上动

4、起来;制作一个太阳、地球、月亮的动画。 3.区域内有障碍物使方块不能穿过;小球在区域内运动,碰到边界后随机改变方 向继续运动。 4.创建一个结构体;创建链表并输出;删除已有链表中的一个节点;在已有 链表中增加一个节点。 5.万年历 三、实训过程: 1.时间函数: a)思考过程: 第一小题:先把系统当前时间用 time 函数转换成秒,再把输入的 天数用 24 乘 3600 秒转换成秒,再与系统当前的秒数相加减,最后用 ctime 函 数以字符串输出。第二小题:调用 localtime 取得系统当前年月日,然后把当前 年月日提取出来用自己输入的年月日进行替换,用 mktime 把该年月日转换成 秒

5、,然后再把系统当前时间转换成秒,两个秒数进行相加减,把加减后的结果 除以 (24*3600) 就得到相差的天数。 第三小题和第二小题同理, 输入两个日期、 转换成秒以后相加减,最后除以(24*3600) ,就得到了两个日子相差的天数。2.动画制作: 思考过程:做个循环,先用白色画一个圆,然后再用背景色画一个圆把当前圆覆盖, 然后改变圆心,然后在画圆再覆盖最后循环完之后,再用白色在用位置画个圆,因 为不这样干的话,屏幕上就没有最好运行的位置了第二小题同理 障碍物(边界判断) ; 思考过程:第一小题:判断出上下左右移动的时候能运动的范围(即控制外边 界) ,然后再把范围内的某些不能通过的点的范围找

6、出来,把他们分别排除在外, 其他的坐标点就是可以任意移动的了,用 bioskey 计算按下的键的键值,然后判断 可以移动之后,就在当前位置用背景色画一个方框,然后在移动之后的位置用白色 画方框和障碍物等。 第二小题划定一个匡,然后在匡的范围再把小球的半径减去, 就是最后小球能运动的范围了然后我设置的是让小球逆时针转动,然后用随机函 数(系统时间做种子)来控制小球偏移的位置(或者说角度) 。链表及文件:1思考过程:第一个问题需要做的是结构体的认识并运,定义一个结构体,然后 输入内容,然后再输出之前输入的内容。第二个问题则是创建链表并输出, 将一个节点分成了两份,一边是指针域,一边是数据域,而指针

7、域,指针域是下一节点的地址,我把头结点不存储数据,以方便之后两题的操作;第三个问 题是删除链表,首先定义一个空的字符串,P,P1,P2,把头指针赋值给 P,随 后让用户输入要删去数据的名字, 储存在字符串中, 利用 strcmp 函数进行查找, 随后如果第一个有数据的节点就符合要求,就把第二个节点的地址赋值给头节 点的指针域后跳出循环,如果不是第一个节点符合要求就执行循环,让 P 赋值 给 P2,再把 p-next 赋值给 P,这时 P 就到了下一个节点,再把 p-next 赋值给 P1,也就是让 P1 得到第三个节点的首地址,P 指向第二个节点,P2 指向第一 个节点,再进行循环,还是没找到

8、就把 P,P1,P2 同时向后移动一个节点,如 果找到了,就把 P2 的值赋给 p-next,再把 p-next 的值赋给 P,这时 P 就回到 了上一个节点,再把 p-next 直接指向 P1,就把中间的那个节点跳过,完成了 删除功能;第四个问题则是增加节点,同样定义一个整型数据(即学号) ,P, P1,P2,P3,让用户键入想要添加的位置,之后让头指针赋值给 P,p-next 就 赋值给 P1,也就是让 p1 指向下一个节点,随后执行循环,让用户输入想学号 和每个节点内的学号比较, 如果找到了, 就创建一个新的链表, 并让 P3 指向它, 让用户输入添加的信息,并且把 p-next 赋值给

9、 P2 和 P,这是 P 就到了下一个 节点,再把 p-next 赋值给 P1,也就是让 P1 指向第二个,P 和 P2 都指向第一 个,返回循环,如果符合要求就让 p3-next 指向 P1,p2-next 指向 P3,这样, 新的节点就进入了链表中,满足要求,最后在主函数中先输入数据,然后执行 一个死循环,让用户选择功能,如果选择 1 就删除一个节点,选择 2 就增加一 个节点,选择 0 就跳出循环结束程序。 1.课程设计:万年历(带记事本功能) 思考过程:用 localtime 取得当前的系统时间,并且提取出年月日,然后把 公元元年到今年一月一日前的天数计算出来,把这个天数除 7 取余为

10、 a,然后 就获得了今年元旦前的一天是星期几。然后循环、从一月循环到当前月的上一 月的最后一天,在这个循环中,循环一次 a+1;当 a=7 时 a 置零,这个是用来 计算当前月的上一月的最后一天是星期几,然后从新在次循环外另开一个循环 来输出当前月的日历,并标记出今天用()标记,然后用 bioskey 读取用户按下 的键值,并实现相应的翻页、标记特殊日子、记事本、从新输入年份等功能源代码: #include #include #include void f();/*计算公元元年到某年某月的 时间*/ void f1(long int t,long int n,int y,int r);/*按日

11、历模式输出要得到的那个月的 日历*/ void w();/*当前月的日历*/ void s();/*输入某个年份和月份*/ void m(long int n,int y,int r);/*记事本功能的函数*/struct jishiben/*记事本的结构体定义*/ long int a;char name100;void w()/*输出当前月的日历*/ int y,r,a,b,c;/*分别定义月份日期以及记录键值记录日期以 及某月最后一天*/ long int n;/*定义年份的变量*/time_t timep; struct tm *p; time( p=localtime( /*取得当地

12、时间*/ printf (“%d-%d-%d n“, (1900+p-tm_year),( 1+p-tm_mon), p-tm_mday); /*输出当前的年月日*/ n=(1900+p-tm_year);/*获得当前年份*/ y=( 1+p-tm_mon);/*获得当前月份*/ r=p-tm_mday;/*获得当前的是几号*/for(;) printf(“jintianshi%d-%d-%dn“, (1900+p-tm_year),( 1+p-tm_mon), p-tm_mday);/*输出当前年月日*/ f(n,y,r); /*调用函数 f 获得某年某月的日历*/ printf(“an f

13、ang xiang jian ke tiao jie nian huo yuen“); printf(“ru xu shu ru nian fen qing an hui ge jian n“); printf(“ruo xu shi yong ji shi ben qing an hui chen“); if(y=1|y=3|y=5|y=7|y=8|y=10|y=12)c=31; if(y=4|y=6|y=9|y=11)c=30;if(y=2 if(y=2 /*判断月份及最后一天*/ a=bioskey(0);/*取得按下的 键值*/ if(a=18432)n=n-1;/*按方向键向 上则年

14、份减一*/ if(a=20480)n=n+1;/*按方向键向 下则年份加一*/ if(a=19200)y=y-1;if(y=0)y=12;n=n-1;/*按方向键向 左则月份减一*/ if(a=19712)y=y+1;if(y=13)y=1;n=n+1;/*按方向键向右则月份加一*/ if(a=18488)b=r;r=r-7;if(rc)r=b;/*按小键盘 5 则 下一周*/ if(a=19252)b=r;r=r-1;if(rc)r=b;/*按小键盘则下 一日*/ if(a=7181) m(n,y,r);/*调用 m 函 数 进行记事本功能*/ if(a=3592) s();/*按回格键 调

15、用函数 s 出入年份和月份*/ if(a=283)exit(0);/*按 esc 键 直接退出程序*/ system(“CLS“); void f(long n,int y,int r)/*计算公元元年一月一号到某年的 天数 n y r 为年月日*/ long int i,t;/*定义 i 为循环变量t 为天*/ t=0; for(i=1;i0)break;/*判断输入的月份是否正确*/else printf(“yue fen shu ru cuo wun“); for(;) r=0;/*这里不需要标记处某天,所以令 r=0*/ f(n,y,r);/*调用函数 f 来输出需要的某月的日历*/

16、printf(“an fang xiang jian ke tiao jie nian huo yuen“); printf(“ru xu shu ru nian fen qing an hui ge jian n“); printf(“an r jian fan hui dang qian yuen“); a=bioskey(0); if(a=18432)n=n-1;/*按方向键上键 则年份减一*/ if(a=20480)n=n+1;/*按方向键下键 则年份加一*/ if(a=19200)y=y-1;if(y=0)y=12;n=n-1;/*按方向键左键月份减一*/ if(a=19712)y=y+1;if(y=13)y=1;n=n+1;/*按方向键右键 月份加一*/ if(a=283)ex

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号