浅谈数学在C语言编程中的应用 毕业论文.doc_第1页
浅谈数学在C语言编程中的应用 毕业论文.doc_第2页
浅谈数学在C语言编程中的应用 毕业论文.doc_第3页
浅谈数学在C语言编程中的应用 毕业论文.doc_第4页
浅谈数学在C语言编程中的应用 毕业论文.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浅谈数学在c语言编程中的应用【摘 要】 本文首先阐明数学与c语言之间的关系,然后以全国新课程育改革在高中数学教材为基础列举在学习c语言的过程中常见的数学思想与方法并将这些思想与方法应用于c语言编程当中。【关键词】 c语言 算法 程序 编程语言 数学思想 数学方法引言在现代社会里,计算机已经成为人们日常生活和工作不可缺少的工具。听音乐看电影玩游戏打字画卡动画处理数据,计算机几乎渗透到了人们生活的所有领域。现如今许多公司在招聘员工时将计算机应用能力的高低作为一项重要的考察指标在进行参考,不仅在企业上如此在公务员的工作考核中也越来越重视计算机能力的应用水平,甚至为了适应社会发展和社会对人才的需要,全国新课程教育改革在高中数学中也加入了算法这一章有关计算机的数学理论知识为学生将来学习计算机编程打下基础。所以现在许多学生选择掌握一门计算机程序语言来增加就业机会。c语言对学习者的数学基础要求较高对一部分学生来说学好c语言有一定的困难。本文就本专业知识和自身对c语言的学习经验对数学在c语言编程中的应用做出讲解,以帮助部分学生更好的学习c语言。1 与数学的关系c语言要知道c语言与数学的关系可以通过以下几个关系来得出。1.1:编程语言与程序的关系程序(program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合。为实现预期目的而进行操作的一系列语句和指令。一般分为系统程序和应用程序两大类。程序就是为使电子计算机执行一个或多个操作,或执行某一任务,按序设计的计算机指令的集合。简单一点说如果我们把程序作为一种产品,那么编程语言就是生产实现的工具。1.2:c语言与编程语言的关系 计算机语言的种类非常的多,总的来说可以分成机器语言,汇编语言,高级语言三大类。 如果按语种分,可以分为英文符号语言和汉语符号语言两类。目前通用的编程语言有两种形式:汇编语言和高级语言。而c语言是一款综合功能强大的编程语言,和其它编程语言相比它既具有汇编语言的功能又具有高级语言的功能这一优势。这使得c语言成为当今最受程序员欢迎也是应用最为广泛的编程语言之一。1.3:算法与程序的关系算法是程序的灵魂 我们知道,计算机执行的是人们事先编制好的程序。一个程序,它包括两个方面:一是对数据的描述,即数据结构( data structure ),它在程序中的作用是指定数据的类型和组织形式。二是对操作的描述,即算法( algorithm ),它在程序中的作用是控制操作的步骤,是程序实现的基本思想。著名计算机科学家沃思( nikiklaus wirth )就曾提出: 程序 = 数据结构 + 算法1.4:算法与数学的关系在高中数学教材必修3中有过这样几句话“算法不仅是数学及其应用的重要组成部分,也是计算机科学的重要基础。”“从数学发展的历史来看,算法的概念古已有之。比如,在西方数学中很早就有了欧几里得算法,而中国古代数学中蕴含着更为丰富的算法内容和思想。割圆术,秦九韶算法等等都是很经典的算法。通过学习算法发展有条理的思考与表达的能力,提高逻辑思维能力。”并且在教材中给出了算法的定义。算法(algorithm)一词出现于12世纪,指的是用阿拉伯数字进行算术运算的过程。在数学中,算法通常是指按照一定规则解决某一类问题的明确和有限的步骤。现在,算法通常可以编成计算机程序,让计算机执行并解决问题.这样算法与数学的关系就已经十分的明确了。总结:综上所述,c语言作为编程语言之一,是为生产实现程序的工具,而无论构成程序的数据结构还是算法都属于数学范畴。如果把程序比作产品,那么数学内容就是原料和零件,而c语言就是把原料和零件加工组装成品的工具和机器。2 数学的思想方法在c语言中的应用2.1辗转相除法例1(1) 设计一个算法,判断7是否为质数。(2)设计一个算法,判断35是否为质数。算法分析:(1)根据质数的定义,可以这样判断:依次用26除7,如果它们中有一个能整除7,则7不是质数,否则7是质数。根据以上分析,可写出如下算法:第一步,用2除7,得到余数1。因为余数不为0,所以2不能整除7.第二步,用3除7,得到余数1。因为余数不为0,所以3不能整除7.第三步,用4除7,得到余数3。因为余数不为0,所以4不能整除7.第四步,用5除7,得到余数2。因为余数不为0,所以5不能整除7.第五步,用6除7,得到余数1。因为余数不为0,所以6不能整除7.因此,7是质数。(2)类似地,可写出“判断35是否为质数”的算法:第一步,用2除35,得到余数1。因为余数不为0,所以2不能整除35.第二步,用3除35,得到余数2。因为余数不为0,所以3不能整除35.第三步,用4除35,得到余数3。因为余数不为0,所以4不能整除35.第四步,用5除35,得到余数0。因为余数为0,所以5能整除35.因此,35不是质数。对于任意的整数n(n2),若用i表示2(n-1)中的任意整数,则“判断n是否为质数”的算法包含下面的重复操作:用i除n,得到余数r。判断余数r是否为0,若是,则n不是质数;否则,将i的值增加1,再执行同样的操作。这个操作一直要进行到i的值等于(n-1)为止。因此,“判断n是否为质数”的算法可以写成:第一步,给定大于2的整数n。第二步,令i=2。第三步,用i除n,得到余数r。第四步,判断“i=o”是否成立。若是,则n不是质数,结束算法;否则,将i的值增加1,仍用i表示。第五步,判断“i(n-1)”是否成立。若是,则n是质数,结束算法;否则,返回第三步。2.2 更相减损术九章算术是中国古代的数学专著,其中的“更相减损术”也可以用来求两个数的最大公约数,即“可半者半之,不可半者,副置分母子之数,以少减多,更相减损,求其等也。以等数约之。”翻译为现代语言如下:第一步,任意给定两个正整数,判断它们是否都是偶数。若是,用2简约;若不是,执行第二步。第二步,以较大的数减去较小的数,接着把差与较小的数比较,并以大数减小数。继续这个操作,直到所得的数相等为止,则这个数或这个数与简约的数的乘积就是所求的最大公约数。例题2用更相减损术求98与63的最大公约数。解:由于63不是偶数,把98和63以大数减小数,并辗转相减如下:98-86=3563-35=2836-28=728-7=2121-7=1414-7=7所以,98和63的最大公约数等于7.2.3 秦九韶算法怎样求多项式f(x)=x5+x4+x3+x2+x+1当x=5时的值?一个自然的做法是把5带入多项式f(x),计算各项的值,然后把它们加起来。这时,我们一共做了1+2+3+4=10次乘法运算,5次加法运算。另一种做法是先计算x2 的值,然后依次计算x2*x,( x2*x)*x,( ( x2*x)*x)*x的值,这样每次都可以利用上一次计算的结果。这时,我们一共做了4次乘法运算,5次加法运算。第二种做法与第一种做法相比,乘法的运算次数减少了,因而能够提高运算效率。对于计算机来说,做一次乘法运算所用的时间比做一次加法运算长得多,所以采用第二种做法,计算机能更快地得到结果。我国南宋时期的数学家秦九韶在他的著作数书九章中提出了下面的算法。把一个n次多项式f(x)=anxn +an-1xn-1 +a1x+a0改写成如下形式: f(x)= anxn +an-1xn-1 +a1x+a0 =(an xn-1+ an-1 xn-2+a1)x+ a0 =( an xn-2+ an-1 xn-3+a2)x+ a0 = =(anx+an-1)x+an-2)x+a1)x+a0 .求多项式的值时,首先计算最内层括号内一次多项式的值,即 u1= anxn+ an-1,然后由内向外逐层计算一次多项式的值,即 u2= u1x+ an-2, u3= u2x+ an-3, un= un-1x+a0,这样,求n次多项式f(x)的值就转化为求n个一次多项式的值。 上述方法称为秦九韶算法。算法分析:观察上述秦九韶算法中的n个一次式,可见uk的计算要用到uk-1的值。若令u0=an,我们可以得到下面的公式: u0=an, uk=uk-1x+an-k(k=1,2, ,n).这是一个在秦九韶算法中反复执行的步骤,因此可用循环结构来实现。算法步骤如下:第一步,输入多项式的次数n,最高此项的系数an和x的值.第二步,将u的值初始化为an,将i的值初始化为n-1.第三步,输入i此项的系数ai.第四步,u=ux+ai,i=i-1.第五步,判断i是否大于或等于0,若是,则返回第三步;否则,输出多项式的值u.2.4进位制进位制使人们为了计数和运算方便而约定的计数系统,约定满二进一,就是二进制;满十进一,就是十进制;满十二进一,就是十二进制;等等。也就是说,“满几进一”就是几进制,几进制的基数就是几。一般地,若k是一个大于1的整数,那么以k为基数的k进制数可以表示为一串数字连写在一起的形式anan-1a1a0(k) (an,an-1,a1n,0 ank,0an-1 ,a1,a0n是否成立,若是,则执行第五步;否则返回第三步。第五步,输出b的值。例题4 设计一个求解一元二次方程ax2+bx+c=0的算法。 算法分析:我们知道,若判别式=b2-4ac0,则原方程有两个不相等的实数根x1=(-b+)/(2a),x2=(-b-)/(2a);若=0,则原方程有两个相等的实数根x1= x2=(-b)/(2a);若0,则原方程没有实数根。也就是说,在求解方程之前,可以先判断判别式的符号,根据判断的结果执行不同的步骤。又因为方程的两个根有相同的部分,为了避免重复计算,可以在计算x1和x2之前,先计算p=(-b)/(2a),q=()/(2a)。解决这一问题步骤如下:第一步,输入3个系数a,b,c.第二步,计算=b2-4ac。第三步,判断0是否成立。若是,则计算p=(-b)/(2a),q=()/(2a):否则,输出“方程没有实数根”,结束算法。第四步,判断=0是否成立。若是,则输出x1= x2=p;否则,计算x1=p+q, x2=p-q,并输出x1,x2。3 结合具体事例解决编程问题3.1 例题1辗转相除法main() int m,n,r;doprintf(“请输入两个正整数:”);scanf(“%d%d”,&m,&n);while(m=0n=0);r=m%n;m=n;n=r;while(r!=0);printf(“%d”,m);3.2 例题2 更相减损术main()int a,b;doprint(“请输入两个正整数:”);scanf(“%d%d”,&a,&b);while(m=0n=0);doif(a%2=0)&(b%2=0)a=a/2;b=b/2;else ;while(a%2=0)&(b%2=0);while(a!=b)a=a-b;if(ab)a=a-b;else printf(“%d”,a);3.3 例题3秦九韶算法main()int n,i;double x,v,ai;printf(“输入多项式的次数n,最高此项的系数an和x的值”);scanf(“%d%lf%lf”,&n,&an,&x);v=an;i=n-1;while(i=0)scanf(“输入ai=%d”,&an);v=v*x+ai;i=i-1;printf(“%ld”,v);3.4例4进位制设计一个算法,把k进制数a(共有n为)化为十进制数b.main()int a,k,n,b,i,t;scanf(“%d%d%d”,&a,&k,&n);b=0;i=1;t=a%10;dob=b+t*k(i-1);a=a10;t=a%10;i=i+1;while(i=0.0) printf(“two root:x1=%lft x2=%lfn”,re+im,re-im);else printf(“two complex roots:x1=%lf+i*%lft x2=%lf-i*%lfn”,er,im,er,im); 结束语c语言和其它编程语言相比学习起来难度较大。为什么c语言学习起来比较难呢?那是因为很多编程语言注重编程工具的熟练使用,而对于编写程序代码要求较低。c语言专注于编写程序代码,所以学习起来相

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论