




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘 要:讨论了C 语言中使用Scanf()对二维数组浮点数操作出现异常的情况分析了异常产生的原因给出多种的解决方法并对每种方法进行了评价关键词:浮点数;二维数组;scanf中图分类号:TP312 文献标识码:A 文章编号:1671 - 2153(2006)02 - 0026 - 02在C语言中提供了格式输入函数scanf()可以从键盘上对数据进行格式化的输入其一般形式是scanf(格式控制地址列表)1 在TC2.0 的编译环境下学生在应用这个函数读数时经常会出错这其中大部分的错误是由于对scanf()这个函数的格式不熟悉引起的语法错误仔细检查语法和拼写就可以解决但用这个函数对二维数组的浮点数进行存储时出现的错误就令人难以理解如下面的简单例子:从键盘读10个数存在二维数组a25中main()floata25;int i,j;for (i=0;i2;i+)for(j=0;j5;j+) scanf( %f ,&aij);以上程序编译通过,运行的时候却出现了:scanf:floating point formats not linked, Abnormalprogram termination!的错误上述的程序如果单纯地从语法方面去考虑是没有错误的编译通过也证明不是语法的问题但运行时会出错从错误的提示信息可以知道是没有链接浮点格式库这个问题有人认为是TC2.0 编译系Scanf 对二维数组浮点数操作异常的研究龚成清(广东女子职业技术学院 计算机系 广东 广州 511450)1 问题的提出统的一种优化技术有人认为是TC2.0 的一个Bug本文认为TC2.0 的优化技术带来的一个Bug众所周知TC2.0 产生于资源紧缺的DOS 时代而浮点数运算占用系统的资源是比较大的2 因此TC2.0 在编译时尽量不加入无关的部分在没发现需要浮点转换程序时在链接外部函数库的时候就不安装浮点格式库以达到节约资源的目的当然这样做在很多时候都是有效的但有时TC2.0又不能正确识别实际上确实需要做浮点转换出现误判的情况因此就会出现上述错误根据笔者的测试TC2.0 可以识别单个变量一维数组的浮点数操作但却不能识别二维数组和多维数组以及结构体等复杂结构内的浮点数操作从而引发上述的错误根据错误产生的原因要解决这个问题就是要让TC2.0 知道程序在运行中用到了浮点库把浮点库链接进来以下给出几种参考的解决方法3.1 增加一个浮点变量TC2.0 可以识别单个变量的浮点数操作因此可以增加一个简单的浮点变量来解决这个问题程序修改如下:main()float a25,tmp;/tmp是增加的浮点变量int i,j;收稿日期:2005-11-28作者简介:龚成清(1979-) 男广东增城人广东女子职业技术学院计算机系助教2 原因分析3 解决办法JOURNAL OF NINGBO POLYTECHNIC2 0 0 6 年4 月宁波职业技术学院学报第10卷第2期Ap r , 2 0 0 6Vol. 10 No.22006 年第2 期. 26 .万方数据for (i=0;i2;i+)for(j=0;j5;j+)scanf( %f ,&tmp);aij=tmp;这种方法增加了一个变量和在循环体内增加了一条赋值语句当读数量不大的时候是很有效的但如果数据量很大无疑就增加了程序运行的时间降低了程序的效率因此可以把对这个方法进行改进把单个变量的浮点数操作提前程序如下:main()float a25,tmp;int i,j;scanf( %f ,&tmp);for (i=0;i2;i+)for(j=0;j5;j+)scanf( %f ,& aij);这种方法仅仅增加了一条语句不管数据量的大小对程序的运行时间几乎没有影响但这种方法却要输入一个多余的数破坏了程序的本意稍不小心就会造成结果的错误为此对程序进一步改进可以把这个浮点变量指向一个浮点函数的值程序修改如下:main()float a25,tmp;int i,j;tmp=cos(0.0);/ 调用了cos()函数告诉编译系统程序在运行过程中存在浮点运算for (i=0;i2;i+)for(j=0;j5;j+)scanf( %f ,& aij);3.2 把二维数组转换成一维数组TC2.0 可以识别一维数组的浮点数操作而二维数组可以看成是一个特殊的一维数组只不过是其元素又是一维数组而已3 如float a33,把a看成是一个一维数组它有3 个元素每个元素又是一个包含3 个元素的一维数组如因此可以把二维数组转化为一维数组解决问题程序修改如下:main()floata25;int j;for(j=0;j5;j+) scanf( %f ,&a0j);for(j=0;j5;j+) scanf( %f ,&a1j);这种方法把二维数组当作一维数组进行操作二重循环改成了一重循环降低了程序的时间复杂度4 但这种方法对数组的第一个维数必须手工变化如果第一个维数比较大这种方法就显得非常的繁琐因此可以利用指针对这种方法进行改进如main()float a25,*ptr;int i,j;ptr=a;/ 指针ptr 指向数组的首地址for (i=0;i2;i+)for(j=0;j5;j+)scanf( %f ,ptr+i*2+j;)3.3 自编浮点运算函数从上述的分析可知如果让系统知道程序运行的时候要用到浮点格式库编译系统就会自动地链接浮点格式库因此可以自己编写一个小函数告诉编译系统要用到浮点格式库程序如下:static void fpf()float x,*y;y=&x;/* 强迫链接浮点格式因此编译器就能自动的链接浮点格式库*/x=*y;/* 避免出现x 的错误警告*/编译器在分析该段程序时当其遇到一个指向一浮点型数据的指针变量y时,其会设一标志要求链接浮点格式库因此只要把该函数加入以上的C 语言程序中就可以了而且还不必去调用它也可以避免以上出现的错误了这种方法是比较直观和有效的仅仅是在源代码中增加了一些冗余的代码对于C语言较低版本的编译系统(包括BorlandC和Microsoft C)用scanf()对多维数组和结构体中的浮点数进行输入存储时均会出现上述类似的错误; 在使用其他函数(如printf()函数和atof()函数等)对多维数组和结构体中的浮点数进行操作时都可能出现类似问题把上述介绍的方法进行推广都能很好地解决异常的问题(下转49页)4 结束语龚成清:Scanf对二维数组浮点数操作异常的研究. 27 . 2006 年第2 期万方数据本文探讨了如何在SQLServer2000 环境下进行映射架构检索XML 数据利用映射架构可以通过IIS 虚拟目录ADO 客户以及.NET 框架应用程序检索数据在用架构定义的商业文档交换的B2B应用程序中特别有用参考文献:1GRAEME M.Programming Microsoft SQL Server2000 with Xml(Second Edition)M.Microsoft Press,2002:150-190.2GRAEME M.SQL Server 2000 与 XML 数据库编程(第2版)M.北京:清华大学出版社,2003:159-197.使用映射架构可以通过IIS 虚拟目录基于ADO 的客户端或者.NET 架构应用程序检索数据只需要为这个客户应用程序指定要使用的架构用来包含得到的XML 片段的根元素名和一个确定要实际返回哪些行的X p a t h 表达式架构使用的Xpath 表达式指定从XML 层次结构中的什么位置开始检索数据以及以什么条件确定要返回的行最直观的Xpath 表达式只包括在架构中定义的顶级元素的名称这个表达式会返回一个包含架构中所有映射的元素和属性的XML 片段SQL Server 2000 引入了许多批注可以在XDR 架构中使用这些批注将元素和特性映射到数据库表和列可以使用XPath(XML 路径)指定对映射架构(XML 视图)的查询映射架构描述了最后所得到的文档结构4 结束语Application of the mapping framework in sql server querying xml dataCHEN Zhi-qiang(Guangdong University of Finance , Guangzhou 510521,China)Abstract:This paper gives a example of students achievement ,describes the mapping framework of the XML . We alsoexpound the differences between the default mapping and the postil mapping and discuss the using of the mapping framework inSQL Server querying XML data.Key words:mapping framework; XML; SQL server陈志强:映射架构在SQL Server 检索XML 数据的应用(上接27页)参考文献:1谭浩强.C 语言程序设计M.北京:清华大学出版社1998.2HERBERT S.C 语言大全M.北京:电子工业出版社,1990.3谭浩强,张基温,唐永炎.C语言程序设计教程M.北京:高等教育出版社,1998.4龚杰民.C语言程序设计及其应用M.西安:西安电子科技大学出版社,1994.Discussion of the abnormity of float while using scanf to handle planar arrayGONG Cheng-qingAbstract:It discussed the abnormity of float while using scanf to handle planar array in C language,analysed the cause of theabnormity and gave several solutions.It also gave some evaluations to each solution.Key words:float;planar array;scanf. 49 . 2006 年第2 期万方数据Scanf对二维数组浮点数操作异常的研究作者: 龚成清, GONG Cheng-qing作者单位: 广东女子职业技术学院,计算机系,广东,广州,511450刊名:宁波职业技术学院学报英文刊名: JOURNAL OF NINGBO POLYTECHNIC年,卷(期): 2006,10(2)被引用次数: 1次参考文献(4条)1.HERBERT S C语言大全 19902.谭浩强C语言程序设计 19983.龚杰民C语言程序设计及其应用 19944.谭浩强;张基温;唐永炎C语言程序设计教程 1998相似文献(2条)1.期刊论文张慧娥.李旸园.郑国杰.ZHANG Hui-e.LI Yang-yuan.ZHENG Guo-jie C语言中浮点数输入出现异常的研究 -电脑知识与技术(学术交流)2006(11)在TC2.0的编译环境下,发现利用scanf0函数给浮点型二维数组和结构体数组赋值时,没有语法错误,但程序不能正常运行.通过实例分析了产生这种问题的原因并提出了解
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版新媒体短视频拍摄合同示范文本
- 2025年度企业培训中心场地租赁服务协议
- 2025年旅游服务平台充值卡销售及积分兑换合同
- 2025房地产营销顾问团队协作服务合同
- 2025年智能钢筋绑扎设备租赁与施工合同范本
- 2025版桥梁预制构件运输劳务分包合同范本
- 2025年通信基站安全评估与整改施工合同样本
- 2025年光伏电站智能化运维设备故障诊断与发电量提升策略分析
- 2025比亚迪购车赠送延长保修期限合同
- 2025年度老旧小区改造房屋共建共享管理协议
- 北科大工业生态学教学大纲
- 口服CCB类药品临床综合评价指标体系专家咨询调查表
- 第四节道亨slw2d架空送电线路评断面处理及定位设计系统部分操作说明
- 测振仪使用方法
- 表- 邻二氯苯的理化性质和危险特性表
- 工程项目全过程造价管理课件PPT超详细
- 成人手术后疼痛处理专家共识
- 读书分享-《教育的情调》
- 《材料力学》说课-课件
- 物资采购付款报销单
- 政务云收费标准 云托管收费标准
评论
0/150
提交评论