还剩21页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
吉林工程技术师范学院信息工程学院《C语言程序》课程设计报告设计题目简单数学问题专业计算机班级C1153学生姓名王景爽学号09指导教师王少华董启明2011年12月摘要学习计算机程序设计语言是提高人们计算机知识水平的重要步骤C语言作为当今最为流行的程序设计语言之一,不但成为计算机专业的必修课,而且也越来越多地成为非计算机专业的学习课程通过C语言课程设计的实践,我学到了许多编程技巧和操作技巧,特别是在许在多数学问题上,运用C语言比较快捷,简便可以解决一些基础的简单数学问题本程序是将C语言的这一特点运用到小程序中,利用for循环,switch语句等解决简单的数学小问题关键字C语言;编程;数学问题;数字目录摘要I第1章概述1第2章系统分析
22.1技术分析
22.2功能分析2第3章总体设计与详细设计
33.1系统总体设计
33.2详细设计4第4章编码实现
64.1数据运算部分代码设计
64.2输出部分代码设计7第5章系统调试
85.1程序运行结果
85.2调试过程中的问题与对策12第6章设计总结13参考资料14致谢15附录16第1章概述在日常工作和学习中数据的运算是一项很频繁和很重要的工作,而且是一项脑力与数学的结晶,而我们借助于计算机来帮助实现这项繁琐的工作,会使繁琐变得简单本系统的设计主要是解决日常生活工作中简单的数学问题,它的编写过程会让我更熟悉C语言编程过程这个程序是具有可行性的,数学运算的基本过程就是对原来为数学的解法或数据按照计算机的某种算法进行处理系统的功能包括了用穷举法找到能被3整除且个位数字是3的一百以内的数字、简单的求解方程ax2+bx+c=0的根、根据线索用穷举法找出牌照号码、根据循环的天数求出第一天所摘桃子数、调用函数Print_Diamond输出line行的钻石图案、实现两个整数简单的加减乘除四则运算等简单的数学运算功能第2章系统分析
2.1技术分析程序采用的是C语言进行程序设计,在VC++
6.0的环境中进行编辑和调试,作为面向对象的VC来说,它不仅在程序中支持中文,而面向对象的平台还会给编程带来极大的方便
2.2功能分析本程序是实现多个简单数学问题的求解,我将许多问题设计成若干个子模块,再由主模块进行分别调用首先确定主模块与各个子模块之间的关系后,对子模块逐一进行细化对各个子模块所解决的问题进行逐一解决可以实现要查找的数字,可计算一些简单的算数运算,还可以进行简单四则运算,该程序即可以用作简易计算器,也可画出好看的图案,还可以进行扩展计算更多更复杂的数学小问题程序的最大特点是将整个程序模块化,分成了六个小程序,便于修改和维护,通过主函数中输出提示菜单,使主函数看起来清晰简洁菜单通过输入数字进行选择,相应的数字代表相应的子模块,每个模块都完成不同的计算问题,程序运行起来比较有趣味性第3章总体设计与详细设计
3.1系统总体设计1.程序总体结构图图3-1总体设计结构图首先进入程序,编译运行后进入menu_select菜单进行选择,输入1进入FindNum函数,输入2进入FindRoot函数,敲入3进入Detective函数,输入4进入Monkey函数,输入5进入Diamond,然后调用Print_Diamond,输入6进入Calculator函数2.包含的功能1voidFindNum;/*用穷举法找到能被3整除且个位数字是3的100以内的数字*/2voidFindRoot;/*求解方程ax2+bx+c=0的根*/3voidDetective;/*根据线索用穷举法找出牌照号码*/4voidMonkey;/*根据循环的天数求出第一天所摘桃子数*/5voidDiamond;/*调用函数Print_Diamond输出line行的钻石图案*/6voidCalculator;/*实现两个整数简单的加减乘除四则运算*/
3.2详细设计模块1是实现用穷举法找到能被3整除且个位数字是3的100以内的数字,用fori=1;i=100;i++语句进行穷举,用ifi%3==0i%10==3语句进行判断模块2求解方程ax2+bx+c=0的根,用fori=0;i10;i++语句循环输入方程的三个系数,用ifk==2break;语句判断是否继续输入,用iffabsa[j]=1e-7说明a=0的情况,iffabsdisc=1e-7有两个相等的实根的情况,由printfisnotquadraticsolutionis:%.2f\n-b[j]/2*a[j];完成输出elseifdisc1e-7有两个不等实根的情况{x1=-b[j]+sqrtdisc/2*a[j];x2=-b[j]-sqrtdisc/2*a[j];printfhasdistinctrealroots:%.2fand%.2f\nx1x2;}else有两个虚根的情况模块3根据线索用穷举法找出牌照号码,用fori=32;i=99;i++穷举找出后四位号码,ifa==bc==d判断后四位前两位相同,后两位相同模块4根据循环的天数求出第一天所摘桃子数,用fori=n-1;i=1;i--判断猴子吃桃的天数模块5调用函数print_diamondline;输出line行的钻石图案,多次运用for语句进行与列的输出模块6实现两个整数简单的加减乘除四则运算,运用switchch[j]判断运算符{case+:c[j]=a[j]+b[j];break;case-:c[j]=a[j]-b[j];break;case*:c[j]=a[j]*b[j];break;case/:c[j]=a[j]/b[j];break;}主函数菜单记录了所有模块的进入数字代号,do{systemcls;printf
1.FindNum\n;printf
2.FindRoot\n;printf
3.Detective\n;printf
4.Monkey\n;printf
5.Diamond\n;printf
6.Calculator\n;printf
0.Goodbye!\n;c=getchar;}whilec0||c6;returnc-0;运用do{}whilec0||c6;语句,系统清屏systemcls;第4章编码实现
4.1数据运算部分代码设计voidmain{for;;{switchmenu_select{case1:FindNum;systempause;break;case2:FindRoot;systempause;break;case3:Detective;systempause;break;case4:Monkey;systempause;break;case5:Diamond;systempause;break;case6:Calculator;systempause;break;case0:printfGoodbye!\n;systempause;exit0;}}}主函数采用菜单式,函数调用方法,使主函数显得有条理,系统化
4.2输出部分代码设计Diamond{intline;scanf%dline;print_diamondline;}输出钻石图案第5章系统调试
5.1程序运行结果运行程序后显示主菜单界面如图5-1所示图5-1主菜单界面输入数字1时显示结果如图5-2所示图5-2程序运行结果图按任意键返回菜单,输入2回车显示pleaseinputthreerealnumber:输入0回车1回车2回车显示press‘1’tocontinuepress’2’tocalculate输入1回车显示pleaseinputthreerealnumber:按照以上方法再输入三组数据1,2,1;1,3,2;1,0,4后选择2,回车显示Theequation1isnotquadraticsolutionis-
2.00Theequation2isnotquadraticsolutionis-
1.00Theequation3hasdistinctrealroots:-
1.00and-
2.00Theeauation4hascomplexroots:-
0.00+
2.00i-
0.00-
2.00iPressandkeytocontinue…按任意键返回菜单输入3回车,显示317744,Pressandkeytocontinue,按任意键返回菜单输入4回车、10回车,显示1534,Pressandkeytocontinue.按任意键返回菜单输入5回车,按任意键返回菜单输入6回车,输入1+2=回车,按任意键返回菜单输入0回车,显示Goodbye!按任意键返回菜单,按任意键结束程序
5.2调试过程中的问题与对策在一开始编写排序函数时,发现模块1没有问题,但其他模块却出现错误,于是我把模块1先摘除,再去编写和修改其他的模块,这样一个一个地独立地进行编程和调试第二个问题是缺少标点、括号,经过仔细逐个地检查,发现并改正了这个错误,后来我也见到了许多人在这个问题上也出现了同样的错误,于是我便帮他们解决了第三个问题是变量重名或是类与变量重名的情况,是因为考虑不周,没有顾及全局,没有设想遇到重名的情况应该怎么处理第四个问题是选择单一在我的设计程序中,只设计了按名字选择,进行操作,忽略了重名的情况整个程序虽然完成了,但还有很多不完善的地方,希望自己以后办事的时候要认真,仔细,考虑周全短短的三周课程设计结束了,但是这段时间里,我又学到了更多C的应用知识和操作技能第6章设计总结通过这次课程设计,我既收获了理论知识,又收获了实践能力在设计的过程中,我对书中的内容有了更深入的了解,编程及调试程序的能力都得到了较大的提高在编写第一个模块时还是比较轻松的,但我觉得第二个模块我的能力提高有更大的帮助每个函数都调试了n多次,经常报错,当时真的很想砸电脑,不过当我写完了之后又非常地高兴很有成就感,从而促使我继续下去在写第二个模块时,开始一团乱麻没有头绪,好不容易写出来一点东西,又有二三十个错,或者就是根本没有实现我想要它实现的功能,通过此次课程实践本人实在是收获很多!刚开始设计的时候,不知从哪下手,结果第一次上机,我傻坐着不知道该做什么,后来只看了看别人怎么做而已回去以后,我想,这样不行,这样下去还得了!于是我又重新翻开了书,复习了一遍书上的内容,发现许多自已刚刚学过的东西却又被忘掉了特别是文件操作几乎是一遍空白温习过后,开始做题编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还必须强破自己坚持下去,按照老师所说的模块化思想,按部分的进行编写编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎样去和同学交流与合作,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪这对我以后的生活和学习,都有很大的帮助参考文献
[1]谭浩强编著,C程序设计,清华大学出版社,
1991.7
[2]李春葆等主编,C语言程序,清华大学出版社,
2000.1
[3]谭浩强编,C语言程序设计题解与上机指导,清华大学出版社,
2000.11
[4]《C语言趣味程序百例精解》,陈朔鹰陈英主编,北京理工大学出版社,1996致谢感谢我的指导老师王老师和同学们在这次实训中对我的指导和帮助,使我受益匪浅,收获颇多,让书本与实践相结合在报告的写作过程中,有很多困难,无论是在理论学习阶段,还是在设计的选题、资料查询等方面,无不得到老师的悉心指导和帮助,同时我也要感谢我的同学给予我的帮助,他们为我的设计和报告提供了不少建议和帮助非常感谢我的指导老师,他为人随和热情,治学严谨细心在闲聊中他总是能像知心朋友一样鼓励我,在报告的写作和措辞等方面她也总会以“专业标准”严格要求,从选题、定题开始,一直到最后设计的反复修改、润色,老师始终认真负责地给予我深刻而细致地指导,帮助我开拓思路,精心点拨、热忱鼓励附录1.源代码#includestdio.h#includestdlib.h#includectype.h#includemath.hintmenu_select;voidmain{for;;{switchmenu_select{case1:FindNum;systempause;break;case2:FindRoot;systempause;break;case3:Detective;systempause;break;case4:Monkey;systempause;break;case5:Diamond;systempause;break;case6:Calculator;systempause;break;case0:printfGoodbye!\n;systempause;exit0;}}}intmenu_select{charc;do{systemcls;printf
1.FindNum\n;printf
2.FindRoot\n;printf
3.Detective\n;printf
4.Monkey\n;printf
5.Diamond\n;printf
6.Calculator\n;printf
0.Goodbye!\n;c=getchar;}whilec0||c6;returnc-0;}FindNum/*找数字*/{inti;fori=1;i=100;i++ifi%3==0i%10==3printf%d\ni;}FindRoot{floata
[10]b
[10]c
[10]discx1x2realimage;intikj;fori=0;i10;i++{printfpleaseinputthreerealnumbers:\n;scanf%f%f%fa[i]b[i]c[i];printfpress1tocontinue\npress2tocalculate\n;scanf%dk;ifk==2break;}forj=0;j=i;j++{printfTheequation%dj+1;iffabsa[j]=1e-7printfisnotquadraticsolutionis%.2f\n-c[j]/b[j];else{disc=b[j]*b[j]-4*a[j]*c[j];iffabsdisc=1e-7printfisnotquadraticsolutionis:%.2f\n-b[j]/2*a[j];elseifdisc1e-7{x1=-b[j]+sqrtdisc/2*a[j];x2=-b[j]-sqrtdisc/2*a[j];printfhasdistinctrealroots:%.2fand%.2f\nx1x2;}else{real=-b[j]/2*a[j];image=sqrt-disc/2*a[j];printfhascomplexroots:\n;printf%.2f+%.2fi\nrealimage;printf%.2f-%.2fi\nrealimage;}}}}Detective{intiabcd;longm;fori=32;i=99;i++{m=i*i;a=m%10;b=m/10%10;c=m/100%10;d=m/1000;ifa==bc==dbreak;}printf%ld\nm+310000;}Monkey{intni;longx;scanf%dn;x=1;fori=n-1;i=1;i--x=x+1*2;printf%ld\nx;}voidprint_diamondintline{intijkmnpqab;fori=1;i=49-line/2;i++printf\n;forj=1;j=line+1/2;j++{form=1;m=80-line/2;m++printf;fora=1;a=line-2*j-1/2;a++printf;forn=1;n=2*j-1;n++printf*;printf\n;}fork=1;k=line-1/2;k++{forp=1;p=80-line/2;p++printf;forb=1;b=k;b++printf;forq=1;q=line-2*k;q++printf*;printf\n;}}Diamond{intline;scanf%dline;print_diamondline;}Calculator{inta
[4]b
[4]c
[4]ijk;/charch
[4];fori=0;i=3;i++scanf%d%c%da[i]ch[i]b[i];forj=0;j=3;j++{switchch[j]{case+:c[j]=a[j]+b[j];break;case-:c[j]=a[j]-b[j];break;case*:c[j]=a[j]*b[j];break;case/:c[j]=a[j]/b[j];break;}}fork=0;k=3;k++printf%d%c%d=%d\na[k]ch[k]b[k]c[k];printfsucceed!\n;}menumenu_selectFindNumFindRootDetectiveMonkeyDiamondCalculatorPrint_Diamond。