欢迎来到一句话经典语录网
我要投稿 投诉建议
当前位置:一句话经典语录 > 心得体会 > 首次适应算法实验心得体会

首次适应算法实验心得体会

时间:2017-10-03 18:52

可变分区管理内存分配算法有那些,各有什么有缺点

连续分配: 首次适应算法(较快,简单,碎片多),最大适应分配算法(以期不留下小碎片), 最佳适应分配算法(慢,复杂,碎片少)。

都需要碎片整理。

离散分配:分段管理(逻辑性好),分页管理,段页式管理(最好,当然也复杂)。

讨论学习C语言算法的心得

关键是:存在 对比 客观 简化 实践存在:算法中存在什么,目的是什么,怎么实现的,必要的话可以了解一下何人发明的,因为经典算法的设计者本身都是著作等身的,由此你可以通过“存在”了解一个事实:算法不是孤立的,是新和旧之间的更替。

对比:对比类似和不同算法,同在哪里,不同在哪里,以及这些差异导致了什么结果,过程有什么差异,这个过程为什么会导致那个结果。

客观:不凭空臆测,算法本身有什么思想以及借用了什么数学思想实现不能扭曲,以及何种状态适合这样的算法。

简化:当你深刻了解算法的本质(通过推导、证明和实际运用和改进),就不可避免的要把不同算法有机的结合在一起,不是线性的也不是单纯的组合,而是从内涵和外延的角度站在不同的立场把算法划分成不同的层次,每个层次什么时候运用。

简化操作往往要运用一些更加直观的快速的方法:联想。

关于联想,通常,你需要在思考线性表的时候想到一串隔开的纸带,当细化到链表还是顺序表时,需要加以限制为是否可随机存取还是顺序存取。

算法本身都可以通过数据结构表现得很清晰,这时候运用算法的时候,就可以脱离实际的ADT载体。

分类讨论以及回溯通常要结合树去分析,就一目了然。

字符串处理以及跟优先级和记忆索引等问题通常要结合栈结构去设计算法。

路径问题结合图结构设计算法。

当然,要加深对C语言算法的设计能力,需要从最根源出发:实践。

有专门的机构提供了实践平台,检验你设计的算法是否高效。

可以去搜索ACM POJ ZOJ 等关键字,找到相关的算法在线竞赛网站,从最基本的题开始训练。

另外,好的书籍是成功的一半:《算法导论》 (虽然名为导论,但是算法著作中最权威也最有深度的一本书)《数据结构(C语言)》(严蔚敏的著作,一般重点高校使用,虽然比较抽象,但比较简化)《算法与数据结构(C语言)》(电子科技出版社,对算法的实际实现讲的比较透彻)Finally,you need 'coding' and programming again and again.

急求 计算机操作系统 课程设计:动态分区分配方式的模拟

计算机操作系统实验报告姓名:班级:学号:

数学的历史

数学的历史数中国古代科学中一门的学科,根据中国古代数学发展的,可以五个时期:萌芽;体系的形成;发展;繁荣和中西方数学的融合。

中国古代数学的萌芽原始公社末期,私有制和货物交换产生以后,数与形的概念有了进一步的发展,仰韶文化时期出土的陶器,上面已刻有表示1234的符号。

到原始公社末期,已开始用文字符号取代结绳记事了。

西安半坡出土的陶器有用1~8个圆点组成的等边三角形和分正方形为100个小正方形的图案,半坡遗址的房屋基址都是圆形和方形。

为了画圆作方,确定平直,人们还创造了规、矩、准、绳等作图与测量工具。

据《史记·夏本纪》记载,夏禹治水时已使用了这些工具。

商代中期,在甲骨文中已产生一套十进制数字和记数法,其中最大的数字为三万;与此同时,殷人用十个天干和十二个地支组成甲子、乙丑、丙寅、丁卯等60个名称来记60天的日期;在周代,又把以前用阴、阳符号构成的八卦表示八种事物发展为六十四卦,表示64种事物。

公元前一世纪的《周髀算经》提到西周初期用矩测量高、深、广、远的方法,并举出勾股形的勾三、股四、弦五以及环矩可以为圆等例子。

《礼记·内则》篇提到西周贵族子弟从九岁开始便要学习数目和记数方法,他们要受礼、乐、射、驭、书、数的训练,作为“六艺”之一的数已经开始成为专门的课程。

春秋战国之际,筹算已得到普遍的应用,筹算记数法已使用十进位值制,这种记数法对世界数学的发展是有划时代意义的。

这个时期的测量数学在生产上有了广泛应用,在数学上亦有相应的提高。

战国时期的百家争鸣也促进了数学的发展,尤其是对于正名和一些命题的争论直接与数学有关。

名家认为经过抽象以后的名词概念与它们原来的实体不同,他们提出“矩不方,规不可以为圆”,把“大一”(无穷大)定义为“至大无外”,“小一”(无穷小)定义为“至小无内”。

还提出了“一尺之棰,日取其半,万世不竭”等命题。

而墨家则认为名来源于物,名可以从不同方面和不同深度反映物。

墨家给出一些数学定义。

例如圆、方、平、直、次(相切)、端(点)等等。

墨家不同意“一尺之棰”的命题,提出一个“非半”的命题来进行反驳:将一线段按一半一半地无限分割下去,就必将出现一个不能再分割的“非半”,这个“非半”就是点。

名家的命题论述了有限长度可分割成一个无穷序列,墨家的命题则指出了这种无限分割的变化和结果。

名家和墨家的数学定义和数学命题的讨论,对中国古代数学理论的发展是很有意义的。

中国古代数学体系的形成秦汉是封建社会的上升时期,经济和文化均得到迅速发展。

中国古代数学体系正是形成于这个时期,它的主要标志是算术已成为一个专门的学科,以及以《九章算术》为代表的数学著作的出现。

《九章算术》是战国、秦、汉封建社会创立并巩固时期数学发展的总结,就其数学成就来说,堪称是世界数学名著。

例如分数四则运算、今有术(西方称三率法)、开平方与开立方(包括二次方程数值解法)、盈不足术(西方称双设法)、各种面积和体积公式、线性方程组解法、正负数运算的加减法则、勾股形解法(特别是勾股定理和求勾股数的方法)等,水平都是很高的。

其中方程组解法和正负数加减法则在世界数学发展上是遥遥领先的。

就其特点来说,它形成了一个以筹算为中心、与古希腊数学完全不同的独立体系。

《九章算术》有几个显著的特点:采用按类分章的数学问题集的形式;算式都是从筹算记数法发展起来的;以算术、代数为主,很少涉及图形性质;重视应用,缺乏理论阐述等。

这些特点是同当时社会条件与学术思想密切相关的。

秦汉时期,一切科学技术都要为当时确立和巩固封建制度,以及发展社会生产服务,强调数学的应用性。

最后成书于东汉初年的《九章算术》,排除了战国时期在百家争鸣中出现的名家和墨家重视名词定义与逻辑的讨论,偏重于与当时生产、生活密切相结合的数学问题及其解法,这与当时社会的发展情况是完全一致的。

《九章算术》在隋唐时期曾传到朝鲜、日本,并成为这些国家当时的数学教科书。

它的一些成就如十进位值制、今有术、盈不足术等还传到印度和阿拉伯,并通过印度、阿拉伯传到欧洲,促进了世界数学的发展。

中国古代数学的发展魏、晋时期出现的玄学,不为汉儒经学束缚,思想比较活跃;它诘辩求胜,又能运用逻辑思维,分析义理,这些都有利于数学从理论上加以提高。

吴国赵爽注《周髀算经》,汉末魏初徐岳撰《九章算术》注,魏末晋初刘徽撰《九章算术》注、《九章重差图》都是出现在这个时期。

赵爽与刘徽的工作为中国古代数学体系奠定了理论基础。

赵爽是中国古代对数学定理和公式进行证明与推导的最早的数学家之一。

他在《周髀算经》书中补充的“勾股圆方图及注”和“日高图及注”是十分重要的数学文献。

在“勾股圆方图及注”中他提出用弦图证明勾股定理和解勾股形的五个公式;在“日高图及注”中,他用图形面积证明汉代普遍应用的重差公式,赵爽的工作是带有开创性的,在中国古代数学发展中占有重要地位。

刘徽约与赵爽同时,他继承和发展了战国时期名家和墨家的思想,主张对一些数学名词特别是重要的数学概念给以严格的定义,认为对数学知识必须进行“析理”,才能使数学著作简明严密,利于读者。

他的《九章算术》注不仅是对《九章算术》的方法、公式和定理进行一般的解释和推导,而且在论述的过程中有很大的发展。

刘徽创造割圆术,利用极限的思想证明圆的面积公式,并首次用理论的方法算得圆周率为 157\\\/50和 3927\\\/1250。

刘徽用无穷分割的方法证明了直角方锥与直角四面体的体积比恒为2:1,解决了一般立体体积的关键问题。

在证明方锥、圆柱、圆锥、圆台的体积时,刘徽为彻底解决球的体积提出了正确途径。

东晋以后,中国长期处于战争和南北分裂的状态。

祖冲之父子的工作就是经济文化南移以后,南方数学发展的具有代表性的工作,他们在刘徽注《九章算术》的基础上,把传统数学大大向前推进了一步。

他们的数学工作主要有:计算出圆周率在3.1415926~3.1415927之间;提出祖(日恒)原理;提出二次与三次方程的解法等。

据推测,祖冲之在刘徽割圆术的基础上,算出圆内接正6144边形和正12288边形的面积,从而得到了这个结果。

他又用新的方法得到圆周率两个分数值,即约率22\\\/7和密率355\\\/113。

祖冲之这一工作,使中国在圆周率计算方面,比西方领先约一千年之久;祖冲之之子祖(日恒)总结了刘徽的有关工作,提出“幂势既同则积不容异”,即等高的两立体,若其任意高处的水平截面积相等,则这两立体体积相等,这就是著名的祖(日恒)公理。

祖(日恒)应用这个公理,解决了刘徽尚未解决的球体积公式。

隋炀帝好大喜功,大兴土木,客观上促进了数学的发展。

唐初王孝通的《缉古算经》,主要讨论土木工程中计算土方、工程分工、验收以及仓库和地窖的计算问题,反映了这个时期数学的情况。

王孝通在不用数学符号的情况下,立出数字三次方程,不仅解决了当时社会的需要,也为后来天元术的建立打下基础。

此外,对传统的勾股形解法,王孝通也是用数字三次方程解决的。

唐初封建统治者继承隋制,656年在国子监设立算学馆,设有算学博士和助教,学生30人。

由太史令李淳风等编纂注释《算经十书》,作为算学馆学生用的课本,明算科考试亦以这些算书为准。

李淳风等编纂的《算经十书》,对保存数学经典著作、为数学研究提供文献资料方面是很有意义的。

他们给《周髀算经》、《九章算术》以及《海岛算经》所作的注解,对读者是有帮助的。

隋唐时期,由于历法的需要,天算学家创立了二次函数的内插法,丰富了中国古代数学的内容。

算筹是中国古代的主要计算工具,它具有简单、形象、具体等优点,但也存在布筹占用面积大,运筹速度加快时容易摆弄不正而造成错误等缺点,因此很早就开始进行改革。

其中太乙算、两仪算、三才算和珠算都是用珠的槽算盘,在技术上是重要的改革。

尤其是“珠算”,它继承了筹算五升十进与位值制的优点,又克服了筹算纵横记数与置筹不便的缺点,优越性十分明显。

但由于当时乘除算法仍然不能在一个横列中进行。

算珠还没有穿档,携带不方便,因此仍没有普遍应用。

唐中期以后,商业繁荣,数字计算增多,迫切要求改革计算方法,从《新唐书》等文献留下来的算书书目,可以看出这次算法改革主要是简化乘、除算法,唐代的算法改革使乘除法可以在一个横列中进行运算,它既适用于筹算,也适用于珠算。

中国古代数学的繁荣960年,北宋王朝的建立结束了五代十国割据的局面。

北宋的农业、手工业、商业空前繁荣,科学技术突飞猛进,火药、指南针、印刷术三大发明就是在这种经济高涨的情况下得到广泛应用。

1084年秘书省第一次印刷出版了《算经十书》,1213年鲍擀之又进行翻刻。

这些都为数学发展创造了良好的条件。

从11~14世纪约300年期间,出现了一批著名的数学家和数学著作,如贾宪的《黄帝九章算法细草》,刘益的《议古根源》,秦九韶的《数书九章》,李冶的《测圆海镜》和《益古演段》,杨辉的《详解九章算法》《日用算法》和《杨辉算法》,朱世杰的《算学启蒙》《四元玉鉴》等,很多领域都达到古代数学的高峰,其中一些成就也是当时世界数学的高峰。

从开平方、开立方到四次以上的开方,在认识上是一个飞跃,实现这个飞跃的就是贾宪。

杨辉在《九章算法纂类》中载有贾宪“增乘开平方法”、“增乘开立方法”;在《详解九章算法》中载有贾宪的“开方作法本源”图、“增乘方法求廉草”和用增乘开方法开四次方的例子。

根据这些记录可以确定贾宪已发现二项系数表,创造了增乘开方法。

这两项成就对整个宋元数学发生重大的影响,其中贾宪三角比西方的帕斯卡三角形早提出600多年。

把增乘开方法推广到数字高次方程(包括系数为负的情形)解法的是刘益。

《杨辉算法》中“田亩比类乘除捷法”卷,介绍了原书中22个二次方程和 1个四次方程,后者是用增乘开方法解三次以上的高次方程的最早例子。

秦九韶是高次方程解法的集大成者,他在《数书九章》中收集了21个用增乘开方法解高次方程(最高次数为10)的问题。

为了适应增乘开方法的计算程序,奏九韶把常数项规定为负数,把高次方程解法分成各种类型。

当方程的根为非整数时,秦九韶采取继续求根的小数,或用减根变换方程各次幂的系数之和为分母,常数为分子来表示根的非整数部分,这是《九章算术》和刘徽注处理无理数方法的发展。

在求根的第二位数时,秦九韶还提出以一次项系数除常数项为根的第二位数的试除法,这比西方最早的霍纳方法早500多年。

元代天文学家王恂、郭守敬等在《授时历》中解决了三次函数的内插值问题。

秦九韶在“缀术推星”题、朱世杰在《四元玉鉴》“如象招数”题都提到内插法(他们称为招差术),朱世杰得到一个四次函数的内插公式。

用天元(相当于x)作为未知数符号,立出高次方程,古代称为天元术,这是中国数学史上首次引入符号,并用符号运算来解决建立高次方程的问题。

现存最早的天元术著作是李冶的《测圆海镜》。

从天元术推广到二元、三元和四元的高次联立方程组,是宋元数学家的又一项杰出的创造。

留传至今,并对这一杰出创造进行系统论述的是朱世杰的《四元玉鉴》。

朱世杰的四元高次联立方程组表示法是在天元术的基础上发展起来的,他把常数放在中央,四元的各次幂放在上、下、左、右四个方向上,其他各项放在四个象限中。

朱世杰的最大贡献是提出四元消元法,其方法是先择一元为未知数,其他元组成的多项式作为这未知数的系数,列成若干个一元高次方程式,然后应用互乘相消法逐步消去这一未知数。

重复这一步骤便可消去其他未知数,最后用增乘开方法求解。

这是线性方法组解法的重大发展,比西方同类方法早400多年。

勾股形解法在宋元时期有新的发展,朱世杰在《算学启蒙》卷下提出已知勾弦和、股弦和求解勾股形的方法,补充了《九章算术》的不足。

李冶在《测圆海镜》对勾股容圆问题进行了详细的研究,得到九个容圆公式,大大丰富了中国古代几何学的内容。

已知黄道与赤道的夹角和太阳从冬至点向春分点运行的黄经余弧,求赤经余弧和赤纬度数,是一个解球面直角三角形的问题,传统历法都是用内插法进行计算。

元代王恂、郭守敬等则用传统的勾股形解法、沈括用会圆术和天元术解决了这个问题。

不过他们得到的是一个近似公式,结果不够精确。

但他们的整个推算步骤是正确无误的,从数学意义上讲,这个方法开辟了通往球面三角法的途径。

中国古代计算技术改革的高潮也是出现在宋元时期。

宋元明的历史文献中载有大量这个时期的实用算术书目,其数量远比唐代为多,改革的主要内容仍是乘除法。

与算法改革的同时,穿珠算盘在北宋可能已出现。

但如果把现代珠算看成是既有穿珠算盘,又有一套完善的算法和口诀,那么应该说它最后完成于元代。

宋元数学的繁荣,是社会经济发展和科学技术发展的必然结果,是传统数学发展的必然结果。

此外,数学家们的科学思想与数学思想也是十分重要的。

宋元数学家都在不同程度上反对理学家的象数神秘主义。

秦九韶虽曾主张数学与道学同出一源,但他后来认识到,“通神明”的数学是不存在的,只有“经世务类万物”的数学;莫若在《四元玉鉴》序文中提出的“用假象真,以虚问实”则代表了高度抽象思维的思想方法;杨辉对纵横图结构进行研究,揭示出洛书的本质,有力地批判了象数神秘主义。

所有这些,无疑是促进数学发展的重要因素。

中西方数学的融合中国从明代开始进入了封建社会的晚期,封建统治者实行极权统治,宣传唯心主义哲学,施行八股考试制度。

在这种情况下,除珠算外,数学发展逐渐衰落。

16世纪末以后,西方初等数学陆续传入中国,使中国数学研究出现一个中西融合贯通的局面;鸦片战争以后,近代数学开始传入中国,中国数学便转入一个以学习西方数学为主的时期;到19世纪末20世纪初,近代数学研究才真正开始。

从明初到明中叶,商品经济有所发展,和这种商业发展相适应的是珠算的普及。

明初《魁本对相四言杂字》和《鲁班木经》的出现,说明珠算已十分流行。

前者是儿童看图识字的课本,后者把算盘作为家庭必需用品列入一般的木器家具手册中。

随着珠算的普及,珠算算法和口诀也逐渐趋于完善。

例如王文素和程大位增加并改善撞归、起一口诀;徐心鲁和程大位增添加、减口诀并在除法中广泛应用归除,从而实现了珠算四则运算的全部口诀化;朱载墒和程大位把筹算开平方和开立方的方法应用到珠算,程大位用珠算解数字二次、三次方程等等。

程大位的著作在国内外流传很广,影响很大。

1582年,意大利传教士利玛窦到中国,1607年以后,他先后与徐光启翻译了《几何原本》前六卷、《测量法义》一卷,与李之藻编译《圜容较义》和《同文算指》。

1629年,徐光启被礼部任命督修历法,在他主持下,编译《崇祯历书》137卷。

《崇祯历书》主要是介绍欧洲天文学家第谷的地心学说。

作为这一学说的数学基础,希腊的几何学,欧洲玉山若干的三角学,以及纳皮尔算筹、伽利略比例规等计算工具也同时介绍进来。

在传入的数学中,影响最大的是《几何原本》。

《几何原本》是中国第一部数学翻译著作,绝大部分数学名词都是首创,其中许多至今仍在沿用。

徐光启认为对它“不必疑”、“不必改”,“举世无一人不当学”。

《几何原本》是明清两代数学家必读的数学书,对他们的研究工作颇有影响。

其次应用最广的是三角学,介绍西方三角学的著作有《大测》《割圆八线表》和《测量全义》。

《大测》主要说明三角八线(正弦、余弦、正切、余切、正割、余割、正矢、余矢)的性质,造表方法和用表方法。

《测量全义》除增加一些《大测》所缺的平面三角外,比较重要的是积化和差公式和球面三角。

所有这些,在当时历法工作中都是随译随用的。

1646年,波兰传教士穆尼阁来华,跟随他学习西方科学的有薛凤柞、方中通等。

穆尼阁去世后,薛凤柞据其所学,编成《历学会通》,想把中法西法融会贯通起来。

《历学会通》中的数学内容主要有比例对数表》《比例四线新表》和《三角算法》。

前两书是介绍英国数学家纳皮尔和布里格斯发明增修的对数。

后一书除《崇祯历书》介绍的球面三角外,尚有半角公式、半弧公式、德氏比例式、纳氏比例式等。

方中通所著《数度衍》对对数理论进行解释。

对数的传入是十分重要,它在历法计算中立即就得到应用。

清初学者研究中西数学有心得而著书传世的很多,影响较大的有王锡阐《图解》、梅文鼎《梅氏丛书辑要》(其中数学著作13种共40卷)、年希尧《视学》等。

梅文鼎是集中西数学之大成者。

他对传统数学中的线性方程组解法、勾股形解法和高次幂求正根方法等方面进行整理和研究,使濒于枯萎的明代数学出现了生机。

年希尧的《视学》是中国第一部介绍西方透视学的著作。

清康熙皇帝十分重视西方科学,他除了亲自学习天文数学外,还培养了一些人才和翻译了一些著作。

1712年康熙皇帝命梅彀成任蒙养斋汇编官,会同陈厚耀、何国宗、明安图、杨道声等编纂天文算法书。

1721年完成《律历渊源》100卷,以康熙“御定”的名义于1723年出版。

其中《数理精蕴》主要由梅彀成负责,分上下两编,上编包括《几何原本》、《算法原本》,均译自法文著作;下编包括算术、代数、平面几何平面三角、立体几何等初等数学,附有素数表、对数表和三角函数表。

由于它是一部比较全面的初等数学百科全书,并有康熙“御定”的名义,因此对当时数学研究有一定影响。

综上述可以看到,清代数学家对西方数学做了大量的会通工作,并取得许多独创性的成果。

这些成果,如和传统数学比较,是有进步的,但和同时代的西方比较则明显落后了。

雍正即位以后,对外闭关自守,导致西方科学停止输入中国,对内实行高压政策,致使一般学者既不能接触西方数学,又不敢过问经世致用之学,因而埋头于究治古籍。

乾嘉年间逐渐形成一个以考据学为主的乾嘉学派。

随着《算经十书》与宋元数学著作的收集与注释,出现了一个研究传统数学的高潮。

其中能突破旧有框框并有发明创造的有焦循、汪莱、李锐、李善兰等。

他们的工作,和宋元时代的代数学比较是青出于蓝而胜于蓝的;和西方代数学比较,在时间上晚了一些,但这些成果是在没有受到西方近代数学的影响下独立得到的。

与传统数学研究出现高潮的同时,阮元与李锐等编写了一部天文数学家传记—《畴人传》,收集了从黄帝时期到嘉庆四年已故的天文学家和数学家270余人(其中有数学著作传世的不足50人),和明末以来介绍西方天文数学的传教士41人。

这部著作全由“掇拾史书,荃萃群籍,甄而录之”而成,收集的完全是第一手的原始资料,在学术界颇有影响。

1840年鸦片战争以后,西方近代数学开始传入中国。

首先是英人在上海设立墨海书馆,介绍西方数学。

第二次鸦片战争后,曾国藩、李鸿章等官僚集团开展“洋务运动”,也主张介绍和学习西方数学,组织翻译了一批近代数学著作。

其中较重要的有李善兰与伟烈亚力翻译的《代数学》《代微积拾级》;华蘅芳与英人傅兰雅合译的《代数术》《微积溯源》《决疑数学》;邹立文与狄考文编译的《形学备旨》《代数备旨》《笔算数学》;谢洪赉与潘慎文合译的《代形合参》《八线备旨》等等。

《代微积拾级》是中国第一部微积分学译本;《代数学》是英国数学家德·摩根所著的符号代数学译本;《决疑数学》是第一部概率论译本。

在这些译著中,创造了许多数学名词和术语,至今还在应用,但所用数学符号一般已被淘汰了。

戊戌变法以后,各地兴办新法学校,上述一些著作便成为主要教科书。

在翻译西方数学著作的同时,中国学者也进行一些研究,写出一些著作,较重要的有李善兰的《《尖锥变法解》《考数根法》;夏弯翔的《洞方术图解》《致曲术》《致曲图解》等等,都是会通中西学术思想的研究成果。

由于输入的近代数学需要一个消化吸收的过程,加上清末统治者十分腐败,在太平天国运动的冲击下,在帝国主义列强的掠夺下,焦头烂额,无暇顾及数学研究。

直到1919年五四运动以后,中国近代数学的研究才真正开始。

有哪些数学小故事

23.程大位(公元1533年~1606年)程大位是中国古代数学家,字汝思,号宾渠,安徽省休宁县(今黄山市)人。

其故居至今尚存。

程大位出身小商,自幼聪明好学,尤其喜爱数学,常不惜重金购求算书。

20岁左右时,他利用外出经商的机会,邀游吴楚,遍访名师,遇有“睿通数学者,辄造请问难,孜孜不倦”。

他身居小县城,对土地测量十分重视,曾创造“丈量步车”,并绘图传世。

程大位40岁以后,倦于外游,便“归而覃思于率水之上余二十年”。

他认真钻研古籍,绎其文义,审其成法,遍取各家之长,加上自己的心得体会,终于在万历二十年(1592)写成《算法统宗》(原名《直指算法统宗》)17卷。

其后6年(1598),又对该书删其繁抚,揭其要领,写成《算法纂要》4卷,先后在休宁刊行。

《算法统宗》中,第一、二卷是全书所用的基本知识;第3到12卷为各种应用题解法汇编,各卷基本上以《九章算术》的章名为标题;第13卷到16卷为“难题”,其实算法都很简单,只是条件用诗歌表达;比较隐晦;第17卷为“杂法”。

书中各类问题都用珠算,程大位所使用的一套简明顺口的珠算加减乘除口诀及开方方法,一直沿用至今。

该书系统总结了我国的珠算法,成为一部比较完备的珠算书。

它的成书及广泛流传,标志着我国数学史上由筹算向珠算转化的完成,程大位本人也因此被誉为“珠算一代宗师”。

明末思想家徐光启曾指出,明代数学落后的原因有两个,一个是“名理之儒土苴天下之实事”,另一个是“妖妄之术谬言数有神理。

”程大位作为数学家,却与哪些“名理之儒”的观点不同,他十分重视实事,重视数学的应用。

他的《算法统宗》之,所以能“风行宇内”,使“海内握算持筹之士,莫不家藏一编”,是与它的实用性分不开的。

(一)重视数学应用程大位认为数学有广泛的用处,他说:“远而天地之高广,近而山川之浩衍;大而朝廷军国之需,小而民生日用之费,皆莫能外。

”吴继绥在《算法统宗》序中也引用过他说的话:“多算胜少算不胜而况于无算乎?”在程大位看来,数学是社会也是人生不可缺少的。

他在《算法统宗》中开宗明义,以诗歌形式写道:“世间六艺任纷坛,算乃人之根本;知书不知算法,如临暗室昏昏。

”这与当时的理学家们反对经世致用的学问和轻视数学的态度形成了鲜明对照。

当时盛行的八股取士制,是“以四书五经命题,八股文章取士”的,它引导知识分子远离自然科学,严重束缚了知识分子的思想。

许多读书人为了功名,埋头于儒家经典,只会奢谈三纲五常之类的封建伦理,哪里还顾得上数学和其他有实用价值的科学技术呢?程大位却能突破儒家思想的束缚,中年以后全力写作《算法统宗》。

以解决当时社会急需的实际问题,这种精神是十分可贵的。

不仅如此,程大位还敢于针对时弊,秉笔直书、从数学的角度揭露了贪官污吏对人民的愚弄。

卷三的“亩法论”便表现了这种思想,文中说:“万历九年遵诏清丈,敝邑(休宁)总书擅变亩法,田分四等,上则一百九十步,中则二百二十步,下则二百六十步,下下则三百步。

……与前贤二百四十步一亩大相缪皮,借日土田有肥硗,征役有轻重,亦宜就土田高下。

别米麦之多寡、不得轻变亩法。

第总书开其弊窦,举邑业已遵行,何容置喙!姑记之此,以见作聪明乱旧章之自云。

”显然,这种以“土地肥挠”和“征役轻重”来确定田亩单位的作法是十分荒唐的。

其目的无非是浑水摸鱼,敲诈百姓。

这段话的字里行间,流露出一位正直数学家对人民的深切同情。

综观《算法统宗》全书,作者是十分重视数学应用的。

595道题中,绝大部分是密切结合人民生活的应用问题。

开方、勾股等方面有些纯数学问题,也是为应用题作准备的。

在应用问题中,包括田亩测量、交通运输、物资分配、容积计算、税收贸易、工程技术等。

题目分类基本上沿袭《九章算术》,但在体例上与《九章算术》有一点明显的不同,就是首先列举了学习全书所需的基本知识,包括算法提纲、大数、小数、度量衡、田亩测量制、珠算定位法、珠算四则运算口诀等。

这就使该书不仅内容丰富,而且便于自学,成为一本良好的数学入门书。

(二)改进珠算法《算法统宗》的另一特点是大部分题采用珠算,这也体现厂作者着眼于应用的精神。

珠算盘是一种构造简单、价格低廉、容易携带的计算工具。

珠算与筹算相比,运算更为方便、迅速。

但当时的珠算方法还不够完善,有的口诀也不够顺畅,于是程大位便花大力气改进珠算法及珠算口诀。

他为了区别乘除法口诀,在卷一明确规定:“九九合数”应“呼小数在上,大数在下”,“九归歌”应“呼大数在上,小数在下”。

例如“六八四十八”是乘法口诀,“八六七十四”是除法口诀。

书中记载着完整的撞归口诀,如“一归:见一无除作九一,起一下还一”;“二归,见二无除作九二,起一下还二”等等。

第六、七卷中,程大位还给出珠算开平、立方的方法。

虽不能肯定这是他的发明,但该书确是最早记载这种方法的古算书之一。

(成书稍早于《算法统宗》而出版稍晚的朱载培《算学新说》中也有珠算开平、立方法。

)书中的珠算定位法则应归功于程大位,因为当时流行的珠算书中都未提到。

吴敬的《九章算法比类大全》中虽有定位法,但他是用于筹算。

首次完整地叙述珠算定位法的是《算法统宗》中的“定位总歌”:“数家定位法为奇, 因乘俱向下位推。

加减只需认本位, 归与归除上位施。

法多原实逆上数, 法前得零顺下宜。

法少原实降下数, 法前得零逆上知。

”程大位十分重视珠算口诀,他认为口诀是学珠算、用珠算的基础,一定要记熟。

他反复强调:“一要熟读九歌,二要诵归除歌法”,“学算之人须努力,先将九数时时习。

”(三)补充面积公式在用珠算法解决的各种实际问题中,特别引人注目的是面积问题。

对于广大农村来说,田亩测量是不可缺少的,所以程大位十分重视面积问题。

在《算法统宗》卷三“方田”中,他结合田亩测量总结出大量面积公式,并编成歌谣,给出图形。

这一卷所绘图形60余种,其中比较基本的有十几种,其他都是由这些图形割补而成的。

这十几种图形中,一些是《九章算术》中已有公式的,如方田(正方形)、直田(矩形)、圭田(三角形)、邪田(梯形)、圆田(圆形)、弧田(弓形)等,另一些图形则是《九章算术》中没有的,程大位分别给出公式。

对于计算结果、程大位既要求尽可能准确,又主张根据—体情况适可而止。

程大位不用旧法而创立“截法”、就是为了计算结果的准确。

他说:“遇歪斜不等,必有斜步,岂可作正步相乘?若截之,庶无误矣。

”对于更加复杂的图形,只用“截法”还不行,程大位便采用“截盈补虚”的方法,他说:“田之形状甚多,具载难尽,学者不必执泥,在于临场机变,必须截盈补虚,卑尖减大,以合规式。

但田中央先取出方、直、勾股、圭、梭等形,另积旁余,并而于一,然后用法乘除之,用少广章开方等法还原,始为精密之术焉。

”但他对准确性的要求是有限度的,因为他着眼于应用。

他指出:“世之习算者,咸以方五斜七、围三径一为准,殊不知方五则斜七有奇,径一则围三有奇”,可见他知道有更准确的比值,但他认为不一定使用,因为:数多则散漫难收”,即精确的数据位数多,计算起采太复杂,这在实际应用中往往是没有必要的。

(四)创造丈量步车为了适应当时测量田亩的需要,程大位还创造了一种丈量步车,在《算法统宗》中绘有图形并有详细解说;这种测量工具类似于现在的卷尺,由环、十字架、转轴、锁、钻角及缠在十字架内的竹尺(薄竹片制成的尺)构成,如图6。

这在当时是一种很先进的测量工具。

程大位对自己的发明十分得意,在图边自题:“宾渠制造心机巧,隶首传来数学精。

”(五)寓算题于诗词除了《算法统宗》的内容以外,我们从它的文字形式上也可以看出作者重视数学的应用与普及的思想。

全书文字分为叙述性文字、诗词歌诀及图表中的文字三种形式,而诗词贯穿全书,占了相当大的比例。

这些诗词,既是优美的文学作品,又是直接为数学服务的。

例如“留头乘”的歌诀是一首七绝:“下乘之法此为真,起于先将第二因,三四五来乘遍了,却将本位破其身。

”衰分章的一首《西江月》用来命题:“群羊一百四十,剪毛不惮勤劳,群中有母有羊羔,先剪二毛比较。

大羊剪毛斤二,一十二两羔毛,百五十斤是根苗,子母各该多少?”这些诗词浅明易懂,生动有趣,使读者在学习珠算的过程中同时得到美的享受。

再如盈肋章用来命题的一首五律:“今携一壶酒,游春郊外走。

逢朋添一倍,入店饮斗九。

相逢三处店,饮尽壶中酒。

试问能算士,如何知原有?”此诗不仅朗朗上口,而且具有浓厚的生活气息。

读罢全诗,仿佛在眼前展现出一幅情趣盎然的携酒春游图。

这种大众化的生动诗歌,无疑会引起读者的兴趣。

《算法统宗》寓算题于诗词,赋予数学书以文学色彩,其普及数学的效果是显而易见的。

人们在愉快地欣赏这些诗词的同时,也就开始了对数学的理解。

《算法统宗》成为明清两代流传最广泛的算书,甚至能超越国度,受到日本、朝鲜和东南亚各国人民的欢迎,其引人入胜的文字无疑是原因之一。

24.陈景润(公元1933—1996)数学家中国科学院院士。

1933年5月22日生于福建福州。

1953年毕业于厦门大学数学系。

由于他对塔里问题的一个结果作了改进,受到华罗庚的重视,1957年进入中国科学院数学研究所并在华罗庚教授指导下从事数论方面的研究。

先任实习研究员、助理研究员,再越级提升为研究员,并当选为中国科学院数学物理学部委员兼贵阳民族学院、河南大学、青岛大学、华中工学院、福建师范大学等校教授,国家科委数学学科组成员,《数学季刊》主编等职。

陈景润是世界著名解析数论学家之一,他在50年代即对高斯圆内格点问题、球内格点问题、塔里问题与华林问题的以往结果,作出了重要改进。

60年代后,他又对筛法及其有关重要问题,进行广泛深入的研究。

1966年屈居于六平方米小屋的陈景润,借一盏昏暗的煤油灯,伏在床板上,用一支笔,耗去了几麻袋的草稿纸,居然攻克了世界著名数学难题“哥德巴赫猜想”中的(1+2),创造了距摘取这颗数论皇冠上的明珠(1+1)只是一步之遥的辉煌。

他证明了“每个大偶数都是一个素数及一个不超过两个素数的乘积之和”,使他在哥德巴赫猜想的研究上居世界领先地位。

这一结果国际上誉为“陈氏定理”,受到广泛征引。

这项工作还使他与王元、潘承洞在1978年共同获得中国自然科学奖一等奖。

其后对上述定理又作了改进,并于1979年初完成论文《算术级数中的最小素数》,将最小素数从原有的80推进到16,受到国际数学界好评。

对组合数学与现代经济管理、科学实验、尖端技术、人类生活密切关系等问题也作了研究。

他研究哥德巴赫猜想和其他数论问题的成就,至今,仍然在世界上遥遥领先。

世界级的数学大师、美国学者阿·威尔(A·Weil)曾这样称赞他:“陈景润的每一项工作,都好像是在喜马拉雅山山巅上行走。

”陈景润于1978年和1982年两次收到国际数学家大会请他作45分钟报告的邀请。

这是中国人的自豪和骄傲。

他所取得的成绩,他所赢得的殊荣,为千千万万的知识分子树起了一面不凋的旗帜,辉映三山五岳,召唤着亿万的青少年奋发向前。

陈景润共发表学术论文70余篇,并有《数学趣味谈》、《组合数学》等著作。

25.陈建功 (公元1893年~1971年) 中国著名数学家陈建功(1893—1971),淅江绍兴人,曾任淅江大学教授,解放后,历任复旦大学教授、杭州大学副校长,并当选为中国科学院物理学数学化学学部委员。

早年提倡国语讲学,自编中文数学教材,是最早把西方现代数学较全面地引入中国的先驱之一,长期从事数学的教学和研究工作,对函数论、特别是直交函数级数论、三角级数论单叶函数论和函数逼近论等方面理论问题的解决作出了重大贡献,一生著作甚多。

1929年获得日本理学博士学位时,他的指导老师藤原教授在庆祝会上说:“我一生以教书为业,没有多少成就。

不过,我有一个中国学生,名叫陈建功,这是我一生的最大光荣。

”陈建功生于浙江绍兴,从小好学,一向是文理兼优的好学生,数学尤其突出。

1913年到1929年,陈建功三次东渡日本求学,1929年获得日本理学博士学位,成为20世纪初留日学生中第一个获得理学博士学位的中国人,也是在日本获得这一荣誉的第一个外国科学家。

这件事轰动了日本列岛。

当时,他的导师藤原教授苦于自己专业领域内缺少日文著作,只能用英文上课,便委托陈建功用日文写了一部《三角函数论》,既反映国际最新成果,也包括了陈建功自己的研究心得。

他在写书时首创的许多日文名词,至今还在使用。

回国后,陈建功被聘为浙江大学数学教授与著名数学家苏步青一起,从1931年开始举办数学讨论班,对青年教师和高年级大学生进行严格训练,培养他们的独立工作和科学研究能力,逐渐形成了国内外著名的陈苏学派。

这个学派代表了中国函数论和微分几何研究的最高水平。

26.陈省身(公元1911年~2004年12月3日 )在数学领域,沃尔夫奖与菲尔兹奖是公认的能与诺贝尔奖相媲美的数学大奖。

菲尔兹奖主要奖励在现代数学中做出突出贡献的年轻数学家,而沃尔夫奖主要奖励在数学上做出开创性工作、具有世界声誉的数学家。

到1990年为止,世界上仅有24位数学家获得过沃尔夫奖,而陈省身教授就是其中之一。

他由于在整体微分几何上的杰出工作获得1984年度沃尔夫奖,成为唯一获此殊荣的华人数学家。

陈省身先生1911年生,浙江嘉兴人。

1930年毕业于南开大学数学系,受教于姜立夫教授。

1934年获清华大学硕士学位。

同年入德国汉堡大学随布拉施克教授研究几何,仅用了1年零3个月便在1936年获博士学位后,以“法国巴黎索邦中国基金会博士后研究员”身份到巴黎大学从事研究工作,师从国际数学大师E·嘉当。

1937-1943年,任清华大学和西南联合大学教授。

1943-1946年在美国普林斯顿高级研究所任研究员。

在微分几何中高斯-波内公式的研究和拓扑学方面取得重要进展。

1946-1948年筹建中央数学研究所并任代理所长。

1949-1960年,任美国芝加哥大学教授,1960-1979年任加州大学伯克利分校教授,1981-1984年任美国国家数学研究所首任所长,后任名誉所长。

他是美国科学院院士,法国、意大利、俄罗斯等国家科学院外籍院士。

他对整体微分几何的深远贡献,影响了整个数学,被公认为“20世纪伟大的几何学家”,先后获美国国家科学奖章、以色列沃尔夫奖、中国国际科技合作奖及首届邵逸夫数学科学奖等多项荣誉。

陈省身对祖国心怀赤诚,1972年后多次回到祖国访问讲学,慨言“为祖国工作,是我崇高的荣誉”。

2000年定居南开大学,被天津市人民政府授予永久居留权。

他盛赞新中国欣欣向荣,瞩望祖国早日统一,诚挚地向党和国家领导人就发展科学事业、培养和引进人才等建言献策,受到高度重视。

1984年应聘出任南开数学研究所所长,创办立足国内、面向世界培养中国高级数学人才基地。

努力推进中国科学家与美国及各国的学术交流,促成国际数学家大会在北京召开,并被推选为大会名誉主席。

他殚精竭虑地为把中国建成数学大国、科技强国贡献力量,多次受到、江泽民等党和国家领导人接见,高度称赞他对中国数学科学发展所作的杰出贡献。

除了在数学上做出的巨大成就,陈省身教授还培养了一大批世界级的科学家,其中包括诺贝尔物理学奖获得者杨振宁,菲尔兹奖获得者丘成桐,中国国家自然科学奖一等奖获得者吴文俊等。

钳工五角星的检验方法,急

测试过了 \\\/*头文件*\\\/ #include #include #include \\\/*其它说明*\\\/ #include \\\/*字符串函数*\\\/ #include \\\/*内存操作函数*\\\/ #include \\\/*字符操作函数*\\\/ #include conio.h #define LEN sizeof(STUDENT) typedef struct stu \\\/*定义结构体数组用于缓存数据*\\\/ {char num[6]; char name[5]; int score[3]; int sum; float average; int order; struct stu *next; }STUDENT; \\\/*函数原型*\\\/ STUDENT *init(); \\\/*初始化函数*\\\/ int menu_select(); \\\/*菜单函数*\\\/ STUDENT *create(); \\\/*创建链表*\\\/ void print(STUDENT *head); \\\/* 显示全部记录*\\\/ void search(STUDENT *head); \\\/*查找记录*\\\/ STUDENT *mydelete(STUDENT *head); \\\/*删除记录*\\\/ STUDENT *sort(STUDENT *head); \\\/*排序*\\\/ STUDENT *insert(STUDENT *head,STUDENT *mynew); \\\/*插入记录*\\\/ void save(STUDENT *head); \\\/*保存文件*\\\/ STUDENT *load(); \\\/*读文件*\\\/ \\\/*主函数界面*\\\/ void main() {STUDENT *head,mynew; head=init(); \\\/*链表初始化,使head的值为NULL*\\\/ for(;;) \\\/*循环无限次*\\\/ {switch(menu_select()) { case 1:head=create();break; case 2:print(head);break; case 3:search(head);break; case 4:head=mydelete(head);break; case 5:head=sort(head);break; case 6:head=insert(head,&mynew);break; \\\/*&mynew表示返回地址*\\\/ case 7:save(head);break; case 8:head=load(); break; case 9:exit(0); \\\/*如菜单返回值为9则程序结束*\\\/ } } } \\\/*初始化函数*\\\/ STUDENT *init() { return NULL; \\\/*返回空指针*\\\/ } \\\/*菜单选择函数*\\\/ menu_select() {int n; printf(\\\ 按任一键进入主菜单...... \\\ press any key to enter the menu......); \\\/*按任一键进入主菜单*\\\/ getch(); \\\/*从键盘读取一个字符,但不显示于屏幕*\\\/ system(cls); printf(********************************************************************************\\\ ); printf(\\\\\\ 欢迎 Welcome to\\\ ); printf(\\\ \\\\\\\\\ 使用学生管理系统1.0\\\ \\\ \\\\\\\\\\\\\\\\\\ ); printf(*************************************MENU***************************************\\\ ); printf(\\\\\\\\\1. 输入学生成绩记录 Enter the record\\\ ); \\\/*输入学生成绩记录*\\\/ printf(\\\\\\\\\2. 显示 Print the record\\\ ); \\\/*显示*\\\/ printf(\\\\\\\\\3. 寻找 Search record on name\\\ ); \\\/*寻找*\\\/ printf(\\\\\\\\\4. 删除 mydelete a record\\\ ); \\\/*删除*\\\/ printf(\\\\\\\\\5. 排序 Sort to make mynew a file\\\ ); \\\/*排序*\\\/ printf(\\\\\\\\\6. 插入 Insert record to list\\\ ); \\\/*插入*\\\/ printf(\\\\\\\\\7. 保存 Save the file\\\ ); \\\/*保存*\\\/ printf(\\\\\\\\\8. 读取 Load the file\\\ ); \\\/*读取*\\\/ printf(\\\\\\\\\9. 退出 Quit\\\ ); \\\/*退出*\\\/ printf(********************************************************************************\\\ ); do{ printf(\\\ \\\\\\\\\输入你的选择Enter your choice(1~9):); scanf(%d,&n); }while(n<1||n>9); \\\/*如果选择项不在1~9之间则重输*\\\/ return(n); \\\/*返回选择项,主函数根据该数调用相应的函数*\\\/ } \\\/*输入函数*\\\/ STUDENT *create() {int i,s; STUDENT *head=NULL,*p; \\\/* 定义函数.此函数带回一个指向链表头的指针*\\\/ system(cls); for(;;) {p=(STUDENT *)malloc(LEN); \\\/*开辟一个新的单元*\\\/ if(!p) \\\/*如果指针p为空*\\\/ {printf(\\\ 输出内存溢出. Out of memory.); \\\/*输出内存溢出*\\\/ return (head); \\\/*返回头指针,下同*\\\/ } printf(输入学号Enter the num(0:list end):); scanf(%s,p->num); if(p->num[0]=='0') break; \\\/*如果学号首字符为0则结束输入*\\\/ printf(输入名字Enter the name:); scanf(%s,p->name); printf(请输入3门成绩Please enter the %d scores\\\ ,3); \\\/*提示开始输入成绩*\\\/ s=0; \\\/*计算每个学生的总分,初值为0*\\\/ for(i=0;i<3;i++) \\\/*3门课程循环3次*\\\/ { do{ printf(成绩score%d:,i+1); scanf(%d,&p->score[i]); if(p->score[i]<0 || p->score[i]>100) \\\/*确保成绩在0~100之间*\\\/ printf(数据错误,请重新输入 Data error,please enter again.\\\ ); }while(p->score[i]<0 || p->score[i]>100); s=s+p->score[i]; \\\/*累加各门成绩*\\\/ } p->sum=s; \\\/*将总分保存*\\\/ p->average=(float)s\\\/3; \\\/*先用强制类型转换将s转换成float型,再求平均值*\\\/ p->order=0; \\\/*未排序前此值为0*\\\/ p->next=head; \\\/*将头结点做为新输入结点的后继结点*\\\/ head=p; \\\/*新输入结点为新的头结点*\\\/ } return(head); } \\\/* 显示全部记录函数*\\\/ void print(STUDENT *head) {int i=0; \\\/* 统计记录条数*\\\/ STUDENT *p; \\\/*移动指针*\\\/ system(cls); p=head; \\\/*初值为头指针*\\\/ printf(\\\ ************************************STUDENT************************************\\\ ); printf(-------------------------------------------------------------------------------\\\ ); printf(| Rec | Num | Name | Sc1 | Sc2 | Sc3 | Sum | Ave | Order |\\\ ); printf(-------------------------------------------------------------------------------\\\ ); while(p!=NULL) { i++; printf(| %3d | %4s | %-4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\\\ , i, p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order); p=p->next; } printf(-------------------------------------------------------------------------------\\\ ); printf(**************************************END**************************************\\\ ); } \\\/*查找记录函数*\\\/ void search(STUDENT *head) {STUDENT *p; \\\/* 移动指针*\\\/ char s[5]; \\\/*存放姓名用的字符数组*\\\/ system(cls); printf(请输入个姓名来查找. Please enter name for searching.\\\ ); scanf(%s,s); p=head; \\\/*将头指针赋给p*\\\/ while(strcmp(p->name,s) && p != NULL) \\\/*当记录的姓名不是要找的,或指针不为空时*\\\/ p=p->next; \\\/*移动指针,指向下一结点*\\\/ if(p!=NULL) \\\/*如果指针不为空*\\\/ {printf(\\\ *************************************FOUND************************************\\\ ); printf(-------------------------------------------------------------------------------\\\ ); printf(| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\\\ ); printf(-------------------------------------------------------------------------------\\\ ); printf(| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\\\ , p->num,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order); printf(-------------------------------------------------------------------------------\\\ ); printf(***************************************END**************************************\\\ ); } else printf(\\\ 没有该学生 There is no num %s student on the list.\\\ ,s); \\\/*显示没有该学生*\\\/ } \\\/*删除记录函数*\\\/ STUDENT *mydelete(STUDENT *head) {int n; STUDENT *p1,*p2; \\\/*p1为查找到要删除的结点指针,p2为其前驱指针*\\\/ char c,s[6]; \\\/*s[6]用来存放学号,c用来输入字母*\\\/ system(cls); printf(请输入要删除的学号 Please enter the mydeleted num: ); scanf(%s,s); p1=p2=head; \\\/*给p1和p2赋初值头指针*\\\/ while(strcmp(p1->num,s) && p1 != NULL) \\\/*当记录的学号不是要找的,或指针不为空时*\\\/ {p2=p1; \\\/*将p1指针值赋给p2作为p1的前驱指针*\\\/ p1=p1->next; \\\/*将p1指针指向下一条记录*\\\/ } if(strcmp(p1->num,s)==0) \\\/*学号找到了*\\\/ {printf(**************************************FOUND************************************\\\ ); printf(-------------------------------------------------------------------------------\\\ ); printf(| Num | Name | sc1 | sc2 | sc3 | Sum | Ave | Order |\\\ ); printf(-------------------------------------------------------------------------------\\\ ); printf(| %4s | %4s | %3d | %3d | %3d | %3d | %4.2f | %-5d|\\\ , p1->num,p1->name,p1->score[0],p1->score[1],p1->score[2],p1->sum,p1->average,p1->order); printf(-------------------------------------------------------------------------------\\\ ); printf(***************************************END**************************************\\\ ); printf(\\\ 是否要删除,输入Y删除,N则退出\\\ Are you sure to mydelete the student Y\\\/N ?); \\\/*提示是否要删除,输入Y删除,N则退出*\\\/ for(;;) {scanf(%c,&c); if(c=='n'||c=='N') break; \\\/*如果不删除,则跳出本循环*\\\/ if(c=='y'||c=='Y') { if(p1==head) \\\/*若p1==head,说明被删结点是首结点*\\\/ head=p1->next; \\\/*把第二个结点地址赋予head*\\\/ else p2->next=p1->next; \\\/*否则将一下结点地址赋给前一结点地址*\\\/ n=n-1; printf(\\\ 学号为(Num): %s 学生以被删除(student have been mydeleted.)\\\ ,s); printf(别忘了保存. Don't forget to save.\\\ );break; \\\/*删除后就跳出循环*\\\/ } } } else printf(\\\ 没有这个学生在表上\\\ There is no num %s student on the list.\\\ ,s); \\\/*找不到该结点*\\\/ return(head); } \\\/*排序函数*\\\/ STUDENT *sort(STUDENT *head) {int i=0; \\\/*保存名次*\\\/ STUDENT *p1,*p2,*t,*temp; \\\/*定义临时指针*\\\/ temp=head->next; \\\/*将原表的头指针所指的下一个结点作头指针*\\\/ head->next=NULL; \\\/*第一个结点为新表的头结点*\\\/ while(temp!=NULL) \\\/*当原表不为空时,进行排序*\\\/ { t=temp; \\\/*取原表的头结点*\\\/ temp=temp->next; \\\/*原表头结点指针后移*\\\/ p1=head; \\\/*设定移动指针p1,从头指针开始*\\\/ p2=head; \\\/*设定移动指针p2做为p1的前驱,初值为头指针*\\\/ while(t->averageaverage&&p1!=NULL) \\\/*作成绩平均分比较*\\\/ { p2=p1; \\\/*待排序点值小,则新表指针后移*\\\/ p1=p1->next; } if(p1==p2) \\\/*p1==p2,说明待排序点值大,应排在首位*\\\/ { t->next=p1; \\\/*待排序点的后继为p*\\\/ head=t; \\\/*新头结点为待排序点*\\\/ } else \\\/*待排序点应插入在中间某个位置p2和p1之间,如p为空则是尾部*\\\/ { t->next=p1; \\\/*t的后继是p1*\\\/ p2->next=t; \\\/*p2的后继是t*\\\/ } } p1=head; \\\/*已排好序的头指针赋给p1,准备填写名次*\\\/ while(p1!=NULL) \\\/*当p1不为空时,进行下列操作*\\\/ { i++; \\\/*结点序号*\\\/ p1->order=i; \\\/*将结点序号赋值给名次*\\\/ p1=p1->next; \\\/*指针后移*\\\/ } printf(排序成功 Sorting is sucessful.\\\ ); \\\/*排序成功*\\\/ return (head); } \\\/*插入记录函数*\\\/ STUDENT *insert(STUDENT *head,STUDENT *mynew) {STUDENT *p0,*p1,*p2; int n,sum1,i; p1=head; \\\/*使p1指向第一个结点*\\\/ p0=mynew; \\\/*p0指向要插入的结点*\\\/ printf(\\\ Please enter a mynew record.\\\ ); \\\/*提示输入记录信息*\\\/ printf(输入学号Enter the num:); scanf(%s,mynew->num); printf(输入名字Enter the name:); scanf(%s,mynew->name); printf(Please enter the %d scores.\\\ ,3); sum1=0; \\\/*保存新记录的总分,初值为0*\\\/ for(i=0;i<3;i++) { do{ printf(成绩score%d:,i+1); scanf(%d,&mynew->score[i]); if(mynew->score[i]>100||mynew->score[i]<0) printf(数据错误Data error,please enter again.\\\ ); }while(mynew->score[i]>100||mynew->score[i]<0); sum1=sum1+mynew->score[i]; \\\/*累加各门成绩*\\\/ } mynew->sum=sum1; \\\/*将总分存入新记录中*\\\/ mynew->average=(float)sum1\\\/3; mynew->order=0; if(head==NULL) \\\/*原来的链表是空表*\\\/ {head=p0;p0->next=NULL;} \\\/*使p0指向的结点作为头结点*\\\/ else {while((p0->averageaverage)&&(p1->next!=NULL)) {p2=p1; \\\/*使p2指向刚才p1指向的结点*\\\/ p1=p1->next; \\\/*p1后移一个结点*\\\/ } if(p0->average>=p1->average) {if(head==p1)head=p0; \\\/*插到原来第一个结点之前*\\\/ else p2->next=p0; \\\/*插到p2指向的结点之后*\\\/ p0->next=p1;} else {p1->next=p0;p0->next=NULL;} \\\/*插到最后的结点之后*\\\/ } n=n+1; \\\/*结点数加1*\\\/ head=sort(head); \\\/*调用排序的函数,将学生成绩重新排序*\\\/ printf(\\\ 学生Student %s 已被更新have been inserted.\\\ ,mynew->name); printf(不要忘了保存Don't forget to save the mynew file.\\\ ); return(head); } \\\/*保存数据到文件函数*\\\/ void save(STUDENT *head) {FILE *fp; \\\/*定义指向文件的指针*\\\/ STUDENT *p; \\\/* 定义移动指针*\\\/ char outfile[10]; printf(输出文件例如:c:\\\\\\\\score Enter outfile name,for example c:\\\\\\\\score\\\ ); scanf(%s,outfile); if((fp=fopen(outfile,w))==NULL) \\\/*为输出打开一个二进制文件,为只写方式*\\\/ { printf(打不开文件Cannot open the file\\\ ); return; \\\/*若打不开则返回菜单*\\\/ } printf(\\\ 保存中...Saving the file......\\\ ); p=head; \\\/*移动指针从头指针开始*\\\/ while(p!=NULL) \\\/*如p不为空*\\\/ { fwrite(p,LEN,1,fp); \\\/*写入一条记录*\\\/ p=p->next; \\\/*指针后移*\\\/ } fclose(fp); \\\/*关闭文件*\\\/ printf(保存成功....Save the file successfully!\\\ ); } \\\/* 从文件读数据函数*\\\/ STUDENT *load() {STUDENT *p1,*p2,*head=NULL; \\\/*定义记录指针变量*\\\/ FILE *fp; \\\/* 定义指向文件的指针*\\\/ char infile[10]; printf(倒入文件例如:c:\\\\\\\\score Enter infile name,for example c:\\\\\\\\score\\\ ); scanf(%s,infile); if((fp=fopen(infile,r))==NULL) \\\/*打开一个二进制文件,为只读方式*\\\/ { printf(打不开文件Can not open the file.\\\ ); return(head); } printf(\\\ 寻找文件...Loading the file!\\\ ); p1=(STUDENT *)malloc(LEN); \\\/*开辟一个新单元*\\\/ if(!p1) { printf(内存溢出!Out of memory!\\\ ); return(head); } head=p1; \\\/*申请到空间,将其作为头指针*\\\/ while(!feof(fp)) \\\/*循环读数据直到文件尾结束*\\\/ { if(fread(p1,LEN,1,fp)!=1) break; \\\/*如果没读到数据,跳出循环*\\\/ p1->next=(STUDENT *)malloc(LEN); \\\/*为下一个结点开辟空间*\\\/ if(!p1->next) { printf(Out of memory!\\\ ); return (head); } p2=p1; \\\/*使p2指向刚才p1指向的结点*\\\/ p1=p1->next; \\\/*指针后移,新读入数据链到当前表尾*\\\/ } p2->next=NULL; \\\/*最后一个结点的后继指针为空*\\\/ fclose(fp); printf(\\\ 你成功的从文件中读取了数据!\\\ You have success to read data from the file!\\\ ); return (head); }

声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。联系xxxxxxxx.com

Copyright©2020 一句话经典语录 www.yiyyy.com 版权所有

友情链接

心理测试 图片大全 壁纸图片