南京理工大学C语言讲义第7章.ppt

  1. 1、本文档共108页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
南京理工大学C语言讲义第7章

* 静态局部变量:static 在函数内部定义,存储在静态存储区,与auto对应,在别的函数中不能引用。 全局静态变量:static 在函数外部定义,只限在本文件中使用,与extern对应。 当变量名相同致使作用域相重时,起作用的是最近说明的那个变量。 全局变量 静态 static 外部 extern 自动 auto 局部变量 静态 static 寄存器 register * 内部函数和外部函数 内部函数:函数只限于在本文件中调用,其它文件不能调用,用static 定义该函数。 static float fac( int n) { ...... } 外部函数:函数的默认形式,可以被其它文件调用,用extern 定义该函数。调用时,在文件中用extern 说明。 void main(void) { extern enter_string( ); char str[80]; enter_string(str); .......... } 说明外部函数 * 补充算法 方程求解 1、牛顿切线法 只有为数不多的方程有精确解,一般都是用迭代方法近似求方程的解。方程f(x)=0的实数解实际上是曲线f (x)在x轴上交点的值。 f(x) x y x0 * 1、任选一x值x1,在y1=f(x1)处做切线与x轴相交于x2处。 f(x) x y x0 f(x1) x1 x2 2、若|x2-x1|或|f(x2)|小于指定的精度,则令x1=x2,继续做1。当其满足所需的精度时,x2就是方程的近似解。 x1 x2 根据已知点求其切线的公式为: 这就是牛顿切线法。 牛顿切线法收敛快,适用性强,缺陷是必须求出方程的导数。 * 已知方程为f(x)=x*x-a时,用牛顿切线法求方程的解。给定初值x0,精度10-6,算法编程如下。 scanf(%f,x1); /*从键盘输入x0 */ do { x0=x1; x1=x0-(x0*x0-a)/(2*x0) ; /* */ } while (fabs(x1-x0)=1e-6) ; printf(x=%f\n,x1); 旧值算本次循环的新值 上一循环的新值成为本次循环的旧值 * void main() { float x1,x0; scanf(%f,x1); /*从键盘输入x0 */ do { x0=x1; x1=x0-f(x0)/df(x0) ; /* */ } while (fabs(f(x1))=1e-6) ; printf(x=%f\n,x1); } float f (float x) {return x*x*x-5*x*x+16*x-80; } float df (float x) {return 3*x*x-10*x+16; } f(x) f(x)的导数df(x) * 2、弦截法 f(x) x y x 1、在x轴上取两点x1和x2, 要确保x1与x2之间有且只有方程唯一的解。 x1 x2 f(x1) f(x2) 2、x1与x2分别与f(x)相交于y1=f(x1)、y2=f(x2)。 3、做直线通过y1、y2与x轴交于x0点。 x0 x2 x0 4、若|f(x0)|满足给定的精度,则x0即是方程的解,否则,若f(x0)*f(x1)0,则方程的解应在x1与x0之间,令x2=x0,继续做2。同理,若f(x0)*f(x1)0,则方程的解应在x2与x0之间,令x1=x0,继续做2 ,直至满足精度为止。 * 用弦截法求方程的根。 x3-5x2+16x-80=0 #include math.h float f (float x) {return x*x*x-5*x*x+16*x-80; } void main(void ) { float x1,x2, x0; do { printf(Input x1, x2\n)”; scanf(%f%f,x1,x2); } while (f(x1)*f(x2)0); do { x0= (x1*f(x2)-x2*f(x1))/(f(x2)-f(x1)); if (f(x0)*f(x1) 0) x1=x0; else x2=x0; }while (fabs(f(x0))=0.0001); printf(x=%f\n,x0);

文档评论(0)

little28 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档