版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第19章 C语言应用实例,本章的学习重点 C语言解决实际问题 C语言完成数学函数运算 C语言工程项目建立与完成,19.1 C语言巧解问题实例,C语言可以解决实际生活中许多小问题,小运算。同时,使用C语言也可以仿真和实现许多人工计算和统计难以实现的工作。下面介绍使用C语言解决实际生活中一些常见的计算问题,以展示C语言的实用性。,19.1.1 求1到1000之内的素数,素数,又称为质数,其定义为:只能被1和它本身整除的自然数叫做素数。也就是说,任何一个素数,它除了能表示为其本身和1的乘积外,不能表示为任何其他两个正整数的乘积。例如,自然数7,只能表示为1*7,因此,7是素数。素数是一类特殊的数字,
2、它在实际中也有很多应用,例如使用素数构建素数表,用于进行工程测试,使用素数搭建加密系统,使密码更加难以被破解等。 随着数字数值的增加,素数越来越少。在古代,素数的计算主要靠人工计算,繁琐且容易出错,现在,使用C语言则可以很容易的实现素数的统计计算。 可以使用for循环遍历自然数,同时,根据素数的定义,对于自然数n,若n不能够被除1以外小于等于的所有自然数整除,则这个数就是素数。,19.1.2 巧解古代百钱买百鸡问题,百钱买百鸡问题是中国古代经典的趣味算术问题,在今天,仍然有很多测试沿用这一题目进行智力测试。这一问题的具体描述是:5吊钱可以买1只公鸡,3吊钱可以买一只母鸡,1吊钱可以买3只小鸡。
3、用100吊钱买100只鸡,没种鸡必须有一只,那么可以买公鸡、母鸡、小鸡各多少只?共有多少种买法? 这一问题在现代方程代数数学中可以很容易的解决,可以设100吊钱可以买x只公鸡,y只母鸡,z只小鸡,共100只,则可以使用下面的方程组表示: 其中,x,y和z都是正整数,对于这样一个不定方程,只能使用试凑法解决,过程繁琐且容易产生错误。,19.1.3 巧解换钱币问题,换钱币问题是外国古代趣味算术问题的经典题目,和我国古代百钱买百鸡问题极为相似,具体问题描述为:用一个1磅金币可以兑换1分、2分和5分金币,试问共有多少种不同的兑换方法。其中,1磅金币=100分金币。 这一问题与百钱买百鸡问题可以沿用类似
4、的程序来解决,所不同的是本题并没有限制1分、2分或5分金币的数量。,19.1.4 求1-20000之间的平方回文数,回文数也叫对称数,是指这类数的各位数字具有对称性,例如12121,通常,可以通过使用任何一个数字与其倒序数相加,再依次执行下去获得, 例如:96+69=165,165+561=726,726+627=1353,1353+3531=4884。但是也有某些数字目前为止还不能验证是否可以通过上述操作获得回文数,例如数字196。平方回文数是指这类数字即是回文数,又是某个自然数的平方数,例如121,就是11的平方数,同时也是回文数。可以编写程序,通过遍历获得平方回文数,19.1.5 验证卡
5、布列克常数,卡布列克常数是美国数学家卡布列克在进行数学运算时发现的一个有趣的数学规律,他也因此而闻名世界。卡布列克常数是一个非常简单的数字,共有两个,一个是495,一个是6174。这两个数字都具有特殊的规律,对于任何各位数字不全相同的三位数字或四位数字,都可以通过一定规律的运算得到这两个数字。其运算规律为:首先,将所选数的各位数字从大到小排列组成一个新的三位数x,然后,再将各位数字按从小到大排列得到另一个新的三位数y,然后,使用大的数字减去小的数字:x-y=z。得到差值z之后,对得到的结果z继续执行上述运算,直到每次都得到相同的数字为止。 例如,数字132,首先将这个数的各位数字从大到小排列组
6、成一个新的三位数321,然后再将各位数字按从小到大排列得到另一个新的三位数123,然后,使用大的数字减去小的数字:321-123=198。继续执行上述操作:981-189=792,972-279=693,963-369=594,954-459=495,954-459=495,。同样,对于四位数字,也存在这样的规律。 有趣的是,除了三位数和四位数,再也没有能够找到符合这一规律的数字。通过编写程序,可以验证四位数字卡布列克常数的正确性。,19.2 C语言应用实例计算数学公式,C语言工程编译软件Visual C+中有很多函数库,其中数学函数库最为丰富,可以通过包含头文件math.h来调用数学库中的数
7、学函数。对于Visual C+中的数学函数,大部分都是使用C语言编写与实现的,因此,利用C语言实现数学函数逼近及数学公式计算广泛应用于工程运算中。,19.2.1 C语言实现三角函数sinx逼近,数学中曾经介绍过,三角函数可以展开为无穷泰勒级数。而泰勒级数可以通过循环累加实现,而循环累加操作恰好是C语言最容易实现的操作,因此,使用C语言实现三角函数的逼近则变得非常简单而容易实现。 sinx可以展开为泰勒级数如下的泰勒级数: 通过for循环可以实现对sinx的逼近,19.2.2 C语言实现三角函数cosx逼近,和正弦函数类似,余弦函数cosx也可以展开为泰勒级数,并通过C语言实现,cosx的泰勒展
8、开式如下: 通过循环可以实现cosx的计算。,19.2.3 C语言计算排列组合,排列组合是统计学应用非常广泛的一个统计运算公式,也是概率论中最基本也最实用的一种抽象概念转化,它为概率论的结果验证提供了强有力的理论依据。排列组合最常用的两个公式是计算排列数和组合数,即全排列数和组合数,下面的公式表示了全排列和组合数的计算公式:,19.3 C语言编写万年历,万年历是日常生活中必不可少的工具,现在,万年历几乎随处可见,计算机系统中、手机里、电子词典中、mp4播放器中、办公桌上、家庭摆设等。万年历之所以随处可见,一方面是由于其在人们日常生活中的重要性,另一方面也因为其易于实现的规律性和特定的算法。本节
9、以编写C语言万年历为例,介绍一个项目的实现过程。,19.3.1 万年历的实现流程,1C语言万年历项目建立 项目的建立是指要建立的项目的定义,文档结构的编写,项目最初始阶段要进行的计划设计等。万年历程序设计项目中,首先要确定该项目的名称,然后设计项目执行计划和流程。本项目名称为“C语言实现简单万年历程序”,如表所示为该项目的执行计划流程图。,19.3.1 万年历的实现流程,2需求分析 需求分析是指项目设计的目的,应明确项目要完成的结果,预期目标等。本次项目要实现C语言的万年历程序,针对项目的实际实现及复杂状态,提出如下设计需求: C语言实现简单万年历程序项目需求: 需求1:输入要查询的年和月,输
10、出该月的月历。例如,输入年份为2010,输入月份为7,则输出2010年7月的月历。 请输入要查询的年和月,格式为:xxxx-xx 2010-7 - SunMonTueWedThuFriSat 123 45678910 11121314151617 18192021222324 25262728293031 - 需求2:输出格式美观大方。 需求3:程序稳定性强,可以长期运行而不出现崩溃。,19.3.1 万年历的实现流程,3算法设计 首先,判断输入年份是平年还是闰年,若输入年份为year,则可以通过下面的算式判断当前年份是否为闰年: if(year%4=0 02do 03 04scanf(%d-%
11、d, 19,19.3.3 万年历程序编写,2year闰年判断模块 判断year为闰年还是平年,为后续程序设计作判断。仿照算法设计中的公式,写出闰年判断函数leapFunc(),代码如下: 01int leapFunc(int year) 02 03if(year%4=0 10 11 函数判断结束后将返回值,若返回1,表示year为闰年,否则为平年。,19.3.3 万年历程序编写,3月份日期数计算 每个月有多少天需要根据year是闰年还是平年来计算,当year是闰年时,2月有29天,否则有28天,因此,在月份日期数计算过程中,需要调用year闰年判断函数leapFunc()。通过switch语句
12、实现月份日期数的统计,实现函数为monthDays() 4month中1号在一年中天数计算 根据输入的month值,计算month第一天在该年中是第多少天,根据算法设计程序代码如下: 01int dayNum(int month, int year) 02 03int loop=0; 04int daySum=1; 05for(loop=1;loopmonth;loop+) 06 07daySum=daySum+monthDays(month,year); 08 09return daySum; 10,19.3.3 万年历程序编写,5计算month中1号是星期几 根据算法设计公式,调用dayN
13、um()函数返回的结果,计算month中1号的星期值,代码如下: 01int firstday(int month,int year) 02 03int w; 04w=year-1+(year-1)/4-(year-1)/100+(year-1)/400+dayNum(month,year); 05return w%7; 06 6输出打印 输出打印时一定注意空格对齐,否则将无法得到正确而又美观的的图形,若计算得到month月份1号为星期2,则应在其前面补空格以对其输出。,19.3.3 万年历程序编写,7函数入口设计 子模块设计完成后,添加主函数并进行代码调试,代码如下: 01void main
14、() 02 03int month=0,year=0; 04int Times=3; 05printf(请输入要查询的年和月,格式为:xxxx-xxn); 06do 07 08scanf(%d-%d, 26,19.3.4 结果验证与代码完善,1异常处理 通过输入错误数据格式验证工程代码对异常输入的处理能力,例如,输入-2101-4和2010-20验证输出结果,本程序输出结果为: 请输入要查询的年和月,格式为:xxxx-xx -2010-4 对不起,输入错误,请重新输入,您还有 2 次尝试机会. 2010-20 对不起,输入错误,请重新输入,您还有 1 次尝试机会. 2闰年2月验证 输入2012-2验证输出月历结果,如下:,19.3.4 结果验证与代码完善,请输入要查询的年和月,格式为:xxxx-x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 市场营销策划案编写规范与模板
- 肱动脉球囊血管成形术后护理查房
- 食品行业生产过程记录与质检模板
- 财务预算编制流程模板财务版
- 节能环保领域绿色能源项目实施承诺书范文5篇
- 公司财务报销制度实施操作规程手册
- 安徽省合肥市高新区重点中学2026届初三模拟考试(三)语文试题试卷含解析
- 2026年贵州铜仁松桃县初三下学期开学考语文试题含解析
- 四川省资阳市雁江区临丰祥片区2025-2026学年初三中考仿真模拟冲刺考试(五)语文试题含解析
- 山东省冠县2025-2026学年初三下第二次检测试题考试英语试题含解析
- 2025年全国高等学校英语专业八级考试真题(附答案)
- 2025年内外妇儿联考试题及答案
- 初中英语集体备课教学案例
- 《岩溶区公路隧道排水管沟维护技术指南》
- 斜向钢管支撑施工方案
- 2026年证券从业之证券市场基本法律法规考试题库500道含答案(模拟题)
- 心肺复苏健康宣教课件
- 医院医学装备管理制度
- 工程安全生产应急预案模板
- 湖北省恩施州2026届高三第一次质量监测暨9月起点考试物理试卷(含答案)
- 夹层盘扣支架专项施工方案
评论
0/150
提交评论