C程序设计课程设计报告

上传人:仙*** 文档编号:33890712 上传时间:2021-10-19 格式:DOC 页数:24 大小:196.50KB
返回 下载 相关 举报
C程序设计课程设计报告_第1页
第1页 / 共24页
C程序设计课程设计报告_第2页
第2页 / 共24页
C程序设计课程设计报告_第3页
第3页 / 共24页
点击查看更多>>
资源描述
西安科技大学C语言程序设计课程设计报告 题 目 C 程序设计课程设计报告 院、系(部) 电气与控制工程学院 专业及班级 微电子1001班 姓 名 李治 刘源 韩枝宏 日 期 2011年7月7号 1 题目要求 一级标题小三黑体,二级标题四号黑体,正文小四宋体,行间距20磅2 功能需求(分析系统应具有哪些功能)(1)圆圈循环报数有100个小朋友按编号顺序1,2,。,100逆时针方向围成一圈。从1号开始按逆时针方向1,2,。,9报数,凡报数9者出列,问:最后剩下一个未出圈者的编号是多少?第50个出圈者的编号是多少?(2)年历显示功能要求:A输入一个年份,输出是在屏幕上显示该年的日历。假定输入的年份在1940-2040年之间。B输入年月,输出该月的日历。C输入年月日,输出距今天还有多少天,星期几,是否是公历节日。(3)图形时钟功能要求: 在屏幕上显示一个图形时钟(用程序绘制一个与时钟样式相似即可),时间与系统时间一致,且要随着时间的走动准确的走动。(4)猜数字游戏首先输入要猜的数字的位数,这样计算机可以根据输入的位数随机地分配一个符合要求的数据,计算机输出guess后便可以输入数字,计算机会根据输入信息给出相应的提示信息:A表示位置于数字均正确的个数,B表示位置不正确但数字正确的个数,这样便可以根据提示信息进行下次输入,知道正确为止。(5)保龄球计分程序要求: A使用C语言写一个程序可以方便的对保龄球运动项目进行记分; 界面布局合理,能直观的显示每次得分,每轮得分和累计得分的情况 B分值录入操作合理,需要有必要的无效值判断处理(比如每次击球得分不会10等等) C每场比赛结束后将本次比赛数据保存下来。(选择文件或者数据库均可)3 总体设计系统业务处理流程开始(1)圆圈循环报数 结束输出b50 b100i=1000i=i+1 ai=1j=j+1 bj=i+1ai=0 s=0S=9s=s+aii=i+1i=0i=0i,j,s,a100,b100Y NNY NNi=99i= -1NY NN j=100 Y N(2)年历显示a.主体循环输入p qP=BP=CP=AYYY输出某年年历输出某年某月日历输出某年某月某日详细信息Yq=YN退出程序b.分步流程图NNNNNYYYYY输出daid=d+1k=6k=k+1j=6j=j+1(j*10+k)=(10+w)j=1k=0i=12i=i+1输出i+1月i=0a1=29输入y,m,d,w,k,s,i,j;a12w=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7y%4=0&y%100!=0)|y%400=0sum1,sum2NYNNNNNYYYYYsum2=sum2-sum1j=ksum2=sum2+1i=k j=j+1bj=aij=0i=i+1i=0 i=ki=i+1sum1=sum+1bi=aii=0i=ksum1=0,sum2=0, k,i=0,aibi=xi=i+1开始(4)猜数字游戏(5)保龄球计分NNNYNNNNYYYYYY开始输出部分a18+a19)=10输入附加球1输入附加球1、2a18=10(*pb+*(pb-1)10i10Pb0输入pbi =i+1a22=0*pb=a,i=1,s10=0,sum=0开始A输入部分4 详细设计根据功能模块,详细论述设计过程,给出主要实现代码。(1) 圆圈循环报数#includemain()int i,j=0,s=0,a100,b100;for(i=0;i100;i+) ai=1; /*给所有ai赋初值1*/ for(i=0;i100;i+) s=s+ai; /*从1开始报数*/ if(s=9) /*报数为9的出圈*/ j=j+1; /*出圈人数加1*/ bj=i+1; ai=0; /*与前面相对应,可使出圈者以后的报数都为前一位所报数*/ s=0; /*重新从1开始报数*/ if(i=99) i=-1; /*第100个人报完后又从第1个开始报数*/ if(j=100) /*100个人都报完了输出结果*/ break; printf(第50个出圈者的编号是:%dn,b50); printf(最后未出圈者编号是:%dn,b100);(2) 年历显示 #includemain()int y,m,d,w,k,s,i,j;int a12=31,28,31,30,31,30,31,31,30,31,30,31;char p,q;printf(查询项目A:查询1940-2040年的年历表.n); printf(查询项目B:查询某年某月的日历表.n); printf(查询项目C:输入年月日查询当天信息.nn);doprintf(请输入你所要查询的项目(输入A或者B或者C));scanf( %c,&p);if(p=A)/*打印某年的年历表*/printf(请输入你想知道的年份:); scanf(%d,&y);printf(n); printf(=%d年公历表=nn,y); w=(y+(y-1)/4-(y-1)/100+(y-1)/400)%7; if(y%4=0&y%100!=0)|y%400=0) a1=29; for(i=0;i12;i+) d=0; printf(=%2d月=n,i+1); printf( SUN MON TUE WED THU FRI SATn); for(j=1;j=6;j+) for(k=0;k=(10+w) /*当j大于1时此不等式必为真,只有月初的前几日此不等式才可能为假,此时输出空格*/ d=d+1; if(dai) printf(n); break; /*日期大于某月天数时跳到下一个月*/ else printf(%5d,d); w=k+1; if(w=7) w=0; printf(n); /*星期天时换行并从星期一开始新的循环*/ else printf( ); printf(=n);/*打印某年某月的日历表*/if(p=B) printf(请输入你想知道的年 月:); scanf(%d %d,&y,&m);printf(n); printf(=%d年%d月=nn,y,m); if(y%4=0&y%100!=0)|y%400=0) a1=29; s=0; for(i=0;im-1;i+)s=s+ai; /*s为y年中m月前的天数*/ w=(y+(y-1)/4-(y-1)/100+(y-1)/400+s)%7; /* y年m月1号为星期w*/ printf( SUN MON TUE WED THU FRI SATn); d=0; for(j=1;j=6;j+) for(k=0;k=(10+w) d=d+1; if(dai) printf(n); break; else printf(%5d,d); w=k+1; if(w=7) w=0; printf(n); else printf( ); /*这些和上面年历差不多*/ printf(=n);/*某年某月某日的信息查询*/ if(p=C)int y1,m1,d1,i1,j1,s=0,s1=0,x=0,x1=0,sum3000,sum13000,t,t1,b,z=0;printf(请输入今天的日期 年 月 日);scanf(%d %d %d,&y,&m,&d);printf(请输入你所要查询的年 月 日);scanf(%d %d %d,&y1,&m1,&d1);for(i=0;iy;i+)if(i%4=0&i%100!=0)|i%400=0)sumi=366;else sumi=365;s=s+sumi; /*s为y年元旦与公元0年元旦所差的天数*/for(j=0;jm-1;j+)if(y%4=0&y%100!=0)|y%400=0)a1=29;x=x+ai; /*x为m-1个月的天数*/for(i1=0;i1y1;i1+)if(i1%4=0&i1%100!=0)|i1%400=0)sum1i=366;else sum1i=365;s1=s1+sum1i; /*s1为y1年元旦与公元0年元旦所差的天数*/for(j1=0;j10)printf(所查询日期还有%d天n,b);else b=-1*b;printf(所查询日期已过%d天n,b);/*计算要查询的这一天是星期几*/ for(i=0;im1-1;i+)z=z+ai1; /*z为y1年中前m1-1个月的天数*/ z=z+d1; /*z为y1年中m1月d1号之前的天数*/w=(y1-1+(y1-1)/4-(y1-1)/100+(y1-1)/400+z)%7; /*y1年m1月d1是星期w*/switch(w)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;/*查看改日是否有节日*/if(m1=1&d1=1) printf(| 元旦节 |n); if(m1=2&d1=2) printf(| 世界湿地日 |n); if(m1=2&d1=14) printf(| 情人节了 |n); if(m1=3&d1=1) printf(| 国际海豹日 |n); if(m1=3&d1=3) printf(| 全国爱耳日 |n); if(m1=3&d1=8) printf(| 3.8妇女节 |n); if(m1=3&d1=12) printf(| 植树节 |n); if(m1=3&d1=14) printf(| 国际警察日 |n); if(m1=3&d1=15) printf(| 消费者权益日 |n); if(m1=3&d1=17) printf(| 国际航海日 |n); if(m1=3&d1=21) printf(| 世界森林日 |n); if(m1=3&d1=23) printf(| 世界气象日 |n); if(m1=3&d1=24) printf(| 世界防治结核病日 |n); if(m1=4&d1=1) printf(| 愚人节,小心上当 |n); if(m1=4&d1=7) printf(| 世界卫生日 |n); if(m1=4&d1=13) printf(| 黑色星期五 |n); if(m1=5&d1=1) printf(| 劳动节 放假 |n); if(m1=5&d1=4) printf(| 青年节 |n); if(m1=5&d1=8) printf(| 世界红十字日 |n); if(m1=5&d1=12) printf(| 国际护士节 |n); if(m1=5&d1=5) printf(| 近日注意母亲节 |n); if(m1=5&d1=15) printf(| 国际家庭日 |n); if(m1=5&d1=31) printf(| 世界无烟日 |n); if(m1=6&d1=1) printf(| 国际儿童节 |n); if(m1=6&d1=5) printf(| 世界环境日 |n); if(m1=6&d1=26) printf(| 国际禁毒日 |n); if(m1=6&d1=6) printf(| 全国爱眼日 |n); if(m1=6&d1=13) printf(| 近期注意父亲节 |n); if(m1=7&d1=1) printf(| 香港回归纪念日 |n); if(m1=7&d1=7) printf(| 抗日战争纪念日 |n); if(m1=7&d1=11) printf(| 世界人口日 |n); if(m1=8&d1=1) printf(| 八一建军节 |n); if(m1=8&d1=8) printf(| 中国男子节 |n); if(m1=8&d1=15) printf(| 抗日战争胜利纪念日 |n); if(m1=9&d1=10) printf(| 中国教师节 |n); if(m1=9&d1=18) printf(| 九一八事变纪念 |n); if(m1=9&d1=20) printf(| 国际爱牙日 |n); if(m1=9&d1=27) printf(| 世界旅游日 |n); if(m1=10&d1=1) printf(| 中国国庆节 |n); if(m1=10&d1=4) printf(| 世界动物日 |n); if(m1=10&d1=24) printf(| 联合国日 |n); if(m1=10&d1=12) printf(| 明天国际教师节 |n); if(m1=10&d1=13) printf(| 国际教师节 |n); if(m1=11&d1=10) printf(| 世界青年节 |n); if(m1=11&d1=17) printf(| 世界学生节 |n); if(m1=12&d1=1) printf(| 世界艾滋病日 |n); if(m1=12&d1=23) printf(| 明晚平安夜 |n); if(m1=12&d1=24) printf(| 今晚平安夜 |n); if(m1=12&d1=25) printf(| 圣诞快乐 |n); if(m1=12&d1=31) printf(| 明日新年 |n);printf(=n);printf(是否想继续查询(Y/N)n); scanf( %c,&q);while(q=Y);(3)图形时钟#includegraphics.h 是TC里面的图形库#includemath.h #includedos.h 这是一个头文件,里面包含了很多BIOS和DOS调用函数#define pi 3.1415926 #define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300 确定横坐标#define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240 确定纵坐标#define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y) void init() /*画时钟边框函数*/自定义函数初始化时钟界面 int i,l,x1,x2,y1,y2; setbkcolor(1); 背景颜色为蓝色circle(300,240,200); circle(300,240,205);画圆 circle(300,240,5); for(i=0;i60;i+) /*划钟点上的短线*/ if(i%5=0) l=13;(表示线长13) else l=4; x1=200*cos(i*6*pi/180)+300; y1=200*sin(i*6*pi/180)+240; x2=(200-l)*cos(i*6*pi/180)+300; y2=(200-l)*sin(i*6*pi/180)+240; line(x1,y1,x2,y2); 画一条从点(x1,y1)到(x2,y2) main() int x,y,i,k=1; int gdriver=9,gmode=2; unsigned char h,m,s; int o,p,q; float n; struct time t1; struct date d1; initgraph(&gdriver,&gmode,c: tc); initgraph(&gdriver,&gmode,c: tc); for(i=0;i=4;i+) settextstyle(TRIPLEX_FONT,HORIZ_DIR,i); /*控制输出字符的字体,方向,大小*/ cleardevice(); settextjustify(1,1); /*在指定坐标上输出字符串*/ outtextxy(300,80,12) ; outtextxy(300,390,6); outtextxy(140,230,9); outtextxy(460,230,3); outtextxy(380,100,1); outtextxy(220,100,11); outtextxy(430,160,2); outtextxy(430,310,4); outtextxy(380,370,5); outtextxy(220,370,7); outtextxy(160,160,10); outtextxy(160,310,8); init(); setwritemode(1); /*设置画线的输出模式*/ if(k!=0) getdate(d); /*获得系统日期函数*/ o=d0.da_year; p=d0.da_mon; q=d0.da_day; gettime(t); /*获得系统时间函数*/ h=t0.ti_hour; m=t0.ti_min; s=t0.ti_sec; setcolor(9); /*设置时针颜色*/ n=(float)h+(float)m/60; d(120,n,30); /*画出时针*/ setcolor(8); /*设置分针颜色*/ d(150,m,6); /*画出分针*/ setcolor(4); /*设置秒针颜色*/ d(190,s,6); /*画出秒针*/ while(!kbhit() /*控制程序按下任意键退出*/ while(t0.ti_sec=s) gettime(t); gotoxy(44,18); /*使光标移动到指定坐标*/ printf(bbbbbbbbb); /*退格,使表示时间的字符串不断变化*/ sound(400); /*按给定的频率打开PC扬声器*/ delay(70); /*中断程序的执行,时间为70毫秒*/ sound(200); delay(30); nosound(); /*按给定的频率关闭PC扬声器*/ setcolor(4); d(190,s,6); s=t0.ti_sec; d(190,s,6); if(t0.ti_min!=m) setcolor(14); d(170,m,6); m=t0.ti_min; d(170,m,6); if(t0.ti_hour!=h) setcolor(7); d(150,h,30); h=t0.ti_hour; d(150,h,30); sound(1000); delay(240); nosound(); delay(140); sound(2000); delay(240); nosound(); if(s10) /*用字符的形式输出时间*/ if(m10) printf(%u:0%u:0%u,h,m,s); else printf(%u:%u:0%u,h,m,s); else if(m10) printf(%u:0%u:%u,h,m,s); else printf(%u:%u:%u,h,m,s); gotoxy(34,19); /*在指定坐标上输出日期*/ printf(%d-%d-%d,o,p,q); printf(bbbbbbbbb); getch(); closegraph(); (4)猜数字游戏#include#includemain()int i,j,k,n,sum1,sum2,m=0,a10,b10;time_t t;printf(难度设置(110):);scanf(%d,&k);srand(unsigned)time(&t); for(i=0;ik;i+) ai=rand()%10; /*电脑随机出k个0到9的数*/dosum1=0;sum2=0;printf(n请输入所猜的数字(请用空格隔开!);for(i=0;ik;i+) scanf(%d,&n);bi=n; /*输入k个数字*/for(i=0;ik;i+) if(bi=ai) /*位置和数值都对*/sum1+; /*sum1为位置数值都对的数的个数*/for(i=0;ik;i+) for(j=0;jk;j+)if(bj=ai) /*此处用j,所以位置不一定相等*/ bj=10;sum2+;break; /*sum2为数值相等的个数*/ sum2=sum2-sum1; /*sum2为位置不同数值相同的数的个数*/ printf(%dA %dBn,sum1,sum2);while(sum1!=k); /*当sum1等于k时停止循环*/ printf(恭喜你,猜对了 (*_*) !n);(5)保龄球计分程序#includeint main(void)int a22=0;int i,*pb=a,s10=0,sum=0;for(i=1;i=10;i+,pb+)doprintf(第%d轮第1次:,i); scanf(%d,pb);while(*pb10); if(*pb10); else *+pb=0;if(a18=10)printf(附加的第一次击倒的柱数:);scanf(%d,pb);printf(附加的第二次击倒的柱数:); scanf(%d,pb);if(a18!=10&(a18+a19)=10)printf(本局附次的击倒的柱数:);scanf(%d,pb); printf(nn 本局得分情况 n);printf( 轮数 1 2 3 4 5 6 7 8 9 10 n);printf( 各轮第一次得分 );for(i=0;i10;i+) printf(%4d,ai*2);printf( n);printf( 各轮第二次得分 );for(i=0;i10;i+) if(ai*2=10)printf( /);else printf(%4d,ai*2+1); printf( n); for(i=0;i10;i+) if(a2*i=10) if(a2*(i+1)=10) si=20+a2*(i+2); else si=10+a2*(i+1)+a2*(i+1)+1; else if(a2*i+a2*i+1=10) si=10+a2*(i+1); else si=a2*i+a2*i+1; printf( 本轮分数 );for(i=0;i10;i+) printf(%4d,si); printf( n);printf( 累计分数 );for(i=0;i10;i+)printf(%4d,sum+=si);printf(n谢谢使用!(*_*) 嘻嘻n); 5 测试与实现(1) 圆圈循环报数(2) 年历显示(3)数字时钟(4)猜数字游戏(5)保龄球计分程序6 总结这次的程序设计实习让我们意识到自己对知识的把握还远远不够,很多程序对我们来说都有很大挑战。但是我们通过努力的学习,不断的尝试和团结的力量克服了一个又一个的难题,最终完成了老师所要求的五个程序。虽然有几个程序有一点小瑕疵,不是那么的完美,但是总体来说我们的程序有自己的特点,有自己的想法,还是很不错的。一开始做第一个圆圈循环报数时,怎么也想不到怎样让出圈者不再报数。可谓绞尽脑汁,最后被我们给突破。但是当我们发现其他同学的居然还可以选择几个为一个循环,并且可以查第n个出圈人是多少号时,才知道我们的程序有点弱了。但是我们并不气馁,因为我们的程序完全符合要求,并且要简短精干许多。我们决定以后多花心血,在其他程序的设计上一定要超过他们!年历显示这一块,一开始就有所突破,可是显示出来的日历只有一列,而不是像题目里面截图那样是两列,我们就想要做出那种效果。是我们太过自信了,事实证明那确实不是我们这个水平所能及的,花了很多时间,请教过一些同学,都无功而返。最后只能放弃。在做第二部分时,由于计算比较复杂,总是写错,写了好久都有明显的错误。通过我们大家的努力,我们想到了间接求法。时间是直线,所以我们可以用直线坐标来表示用与它们各自原点的距离来相减,就可以得到它们的差值了。于是我们就付诸实施了,果然一次就算对了。以前小时候就经常玩猜数字游戏,觉得很有意思,而且能够锻炼自己的智力。没想到现在我也能编出这样的小游戏了,很开心。程序的编制过程中没什么大的困难,相对于其他的程序,这个真的是小巫见大巫了。当我们看到保龄球的那一大堆要求和计分规则时,头都大了。我们先是花了十几分钟,在争论中搞明白了它到底是怎样计分的,才发现它是那么的复杂。最后我们决定用指针来做,做出来的结果也比别的组的精简很多。但是整个程序有一些漏洞,所以有时候会出错,当然那只是很少的情况。经过这两个月的学习,我们都学会了更多的关于C的知识,并且学会了灵活的运用我们在课堂上所学到的知识。团结协作,不满足于现状的精神让我们把程序写的更好,更完美。希望以后能有更多的这样的动手的机会,我们都从中受益匪浅。23
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!