① 求编程方法
1、学好C语言,你可以很好地应付任何一种编程工具。
2、一定要多上机练习,通过程式了解相关知识。几经反复方得正果。
3、不要把学习C语言当成一种任务,更不要把它看成很难完成的任务。要充满自信,只要是一个智力正常的人都能学好C语言。始终保持游戏的心态,多发现其中的乐趣。当感到编程趣味无穷,那你在电脑方面将前程无量。
4、如果一个程式一时无法弄清楚最后暂时放在一边,过一段时间你可能会从其他的程式中悟出道理。
5、C语言是一个整体,各个方面是有机联系的,要从总体上把握它,不要把它割裂成互不关联的部件。
6、不要完全相信教材(包括本讲义),所有结论最好都上机验证。
简单的说,编程就是为了借助于计算机来达到某一目的或解决某个问题,而使用某种程序设计语言编写程序代码,并最终得到结果的过程。
计算机虽然功能十分强大。可以供你上网、打游戏、管理公司人事关系等等,但是没有程序,它就等于是一堆废铁,不会理会我们对它下达的“命令”。于是,我们要驯服它,只有通过一种方式——程序,这也是我们和计算机沟通的唯一方式。
那程序到底是什么呢?
程序也就是指令的集合,它告诉计算机如何执行特殊的任务。
打个比方说,它好比指导你烹调菜品的菜谱或指挥行驶一路到达目的地的交警(或者交通路标)。没有这些特殊的指令,就不能执行预期的任务。计算机也一样,当你想让计算机为你做一件事情的时候,计算机本身并不能主动为我们工作,因此我们必须对它下达指令,而它根本不会也不可能听懂人类自然语言对事情的描述,因此我们必须使用程序来告诉计算机做什么事情以及如何去做?甚至对最简单的任务也需要指令,例如如何取得击键,怎样在屏幕上放一个字母,怎样在磁盘中保存文件等等。
这么麻烦,连这些东西编程都要考虑!怪不得人家说编程好难!你错了,其实许多这样的指令都是现成的,包含在处理芯片中内置于操作系统中,因此我们不必担心它们工作,他们都是由处理器和操作系统来完成的,并不需要我们来干预这些过程。
上面讲到的计算机本身不会主动的做任何事情。因此我们要通过程序的方式来让计算机为我们“效劳”。而这个过程就是我们“编”出来的。编程可以使用某一种程序设计语言来实现,按照这种语言的语法来描述让计算机要做的事情。
我们这里所讲的语法和外语中的语法完全两码事,这里讲的语法只是读你的程序书写做出一写规定而已。
写出程序后,再由特殊的软件将你的程序解释或翻译成计算机能够识别的“计算机语言”,然后计算机就可以“听得懂”你的话了,并会按照你的吩咐去做事了。因此,编程实际上也就是“人给计算机出规则”这么一个过程。
随计算机语言的种类非常的多,总的来说可以分成机器语言,汇编语言,高级语言三大类。
电脑每做的一次动作,一个步骤,都是按照已经用计算机语言编好的程序来执行,程序是计算机要执行的指令的集合,而程序全部都是用我们所掌握的语言来编写的。所以人们要控制计算机一定要通过计算机语言向计算机发出命令。
计算机所能识别的语言只有机器语言,即由构成的代码。但通常人们编程时,不采用机器语言,因为它非常难于记忆和识别。
目前通用的编程语言有两种形式:汇编语言和高级语言。
汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。它同样需要编程者将每一步具体的操作用命令的形式写出来。
汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,例如移动、自增,因此汇编源程序一般比较冗长、复杂、容易出错,而且使用汇编语言编程需要有更多的计算机专业知识,但汇编语言的优点也是显而易见的,用汇编语言所能完成的操作不是一般高级语言所能实现的,而且源程序经汇编生成的可执行文件不仅比较小,而且执行速度很快。
高级语言是目前绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。由于省略了很多细节,所以编程者也不需要具备太多的专业知识。
② C++算法的书籍(适合初学的)
一般来说,清华大学出版社的计算机书是最好的,主要有
1.《C++语言基础教程(第2版)》
出版社:清华大学出版社
作者:吕凤翥
书中全面、系统地讲述了 C++语言的基本概念、基本语法和编程方法,较详尽地讲述了 C++语言面向对象的重要特征: 类和对象、继承和派生类、多态性、虚函数、函数模块和类模板等内容。本书具有丰富的例题,每章后面均备有相当数量的练习题和作业题。 全书通俗易懂,由浅入深,突出重点,偏重应用。本书不仅可作为高等学校 C++语言课程的教材,还可作为 C++语言的自学教材
2.《面向对象程序设计与C++语言(第二版)》
出版社:人民邮电出版社
作者:杨庚/王汝传/叶晓国
本书系统地介绍了面向对象技术及C++语言的相关知识。内容包括面向对象技术的概念和特征、C++语言基础、类和对象、派生与继承、虚函数与多态性、模板、运算符重载、输入/输出流库、异常处理等。 本书注重基本概念,从实际应用出发,突出重点,叙述清楚,深入浅出,论述详尽,使读者既能深刻领会面向对象程序设计的思想,了解面向对象程序设计的特征,又能掌握C++语言的...
3.《C++语言程序设计教程》
出版社:清华大学出版社
作者:杨进才/沈显君/刘蓉
C++语言是目前最为流行的程序设计语言,它既支持面向过程的结构化程序设计,也支持基于对象的面向对象程序设计。本书依据ANSI C++标准,从面向过程的编程到面向对象的编程方法展开,形成一条自然流畅的主线,同时两个部分又自成体系,以满足不同基础与需求的学习者。内容包括:C++编程简介、数据类型与表达式、控制结构、函数、构造数据类型、C++程序的结构、类与对象、继承
4.《C/C++程序设计教程》
出版社:机械工业出版社
作者:秦维佳/伞宏力/侯春光/孟艳红
本书是《C/C++程序设计教程》的配套学习辅导用书。. 全书共分12章,内容包括C/C++语言程序设计初步,C语言的数据类型及表达式,结构化程序设计,数组、函数与指针的概念和实例,结构体与共用体,位运算与文件的概念,面向对象程序设计,类的继承与多态,C++的I/O流。每章包括知识体系、学习要点、上机实训、习题和参考答案。.. 本书可供初学者学习C语言,也可供...
5.《C++程序设计基础导学》
出版社:科学出版社
作者:赵海廷/严运国
本书为是实践训练环节必不可少的辅助教材。本书按照《C++程序设计基础》的顺序组织编撰,由基本要求、内容小结、典型例题分析、习题、实验及习题参考答案组成。本书的目的是通过典型例题剖析、习题和实验环节来巩固所学的理论知识,提高学生的实践操作水平。 本书适用高职高专的理工科学生,也适合于C++语言的初学者,还可供普通高校理...
③ 学习算法分析与设计需要那些基础(是否需要学习离散数学和线性代数)
算法分析与设计,目前国内本科生和硕士生的教材好像都是从国外翻译过来的。听起来挺复杂的样子,如果简单地掌握和运用还是不难的,大部分内容在数据结构中都涉及过,实际编程中也运用比较多,难的在于算法的理论研究,如21世纪的七大难题之一的NP问题就是算法问题(涉及逻辑可满足性问题)。
简单地讲需要的基础有以下几类:
1、基础类(相对一般本科生而言):(1)把数据结构学好了算法就不难的,而数据结构其实就是图论的运用,如果是非数学专业的学生可以看离散数学中的图论部分。(2)算法分析设计时间和空间复杂度的计算,常用的还是毛泽东的战略思想——以空间换取时间。所以要学会简单的数量级运算,涉及部分代数式和数论的知识。只要简单掌握运算就可以了,不必深究。
2、提高型(研究生水平):图论、组合数学、数理逻辑学要专门学习,可以采用数学系本科生的图论、组合数学、数理逻辑学等专业课的教材。其中组合数学中的组合设计在一定程度上和算法设计有异曲同工之处。
3、研究型(专业研究):这主要看自己的研究方向了,如果研究能力强的话可以在很短时间内可以把需要遇到的数学知识搞懂,没有现成的固定模式。其中如研究NP问题,需要非常精深的逻辑学知识和数论基础。但不管哪个研究方向,数学的缜密思维和推理能力都是必备的,这不是一朝一夕可以练就的,需要长时间的锻炼。
以上仅个人一点点体会,仅供参考。
④ 初学者,数学建模需要准备些什么东西
数学建模应当掌握的十类算法
1、蒙特卡罗算法(该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算 法,同时可以通过模拟可以来检验自己模型的正确性,是比赛时必用的方法) 2、数据拟合、参数估计、插值等数据处理算法(比赛中通常会遇到大量的数据需要 处理,而处理数据的关键就在于这些算法,通常使用Matlab作为工具) 3、线性规划、整数规划、多元规划、二次规划等规划类问题(建模竞赛大多数问题 属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、 Lingo软件实现) 4、图论算法(这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉 及到图论的问题可以用这些方法解决,需要认真准备) 5、动态规划、回溯搜索、分治算法、分支定界等计算机算法(这些算法是算法设计 中比较常用的方法,很多场合可以用到竞赛中) 6、最优化理论的三大非经典算法:模拟退火法、神经网络、遗传算法(这些问题是 用来解决一些较困难的最优化问题的算法,对于有些问题非常有帮助,但是算法的实 现比较困难,需慎重使用) 7、网格算法和穷举法(网格算法和穷举法都是暴力搜索最优点的算法,在很多竞赛 题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好 使用一些高级语言作为编程工具) 8、一些连续离散化方法(很多问题都是实际来的,数据可以是连续的,而计算机只 认的是离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非 常重要的) 9、数值分析算法(如果在比赛中采用高级语言进行编程的话,那一些数值分析中常 用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调 用) 10、图象处理算法(赛题中有一类问题与图形有关,即使与图形无关,论文中也应该 要不乏图片的,这些图形如何展示以及如何处理就是需要解决的问题,通常使用Matlab 进行处理)
数学建模资料
竞赛参考书
l、中国大学生数学建模竞赛,李大潜主编,高等教育出版社(1998). 2、大学生数学建模竞赛辅导教材,(一)(二)(三),叶其孝主编,湖南教育 出版社(1993,1997,1998). 3、数学建模教育与国际数学建模竞赛 《工科数学》专辑,叶其孝主编, 《工科数学》杂志社,1994).
国内教材、丛书
1、数学模型,姜启源编,高等教育出版社(1987年第一版,1993年第二版,2003年第三版;第一版在 1992年国家教委举办的第二届全国优秀教材评选中获"全国优秀教材奖"). 2、数学模型与计算机模拟,江裕钊、辛培情编,电子科技大学出版社,(1989). 3、数学模型选谈(走向数学从书),华罗庚,王元着,王克译,湖南教育出版社;(1991). 4、数学建模--方法与范例,寿纪麟等编,西安交通大学出版社(1993). 5、数学模型,濮定国、 田蔚文主编,东南大学出版社(1994). 6..数学模型,朱思铭、李尚廉编,中山大学出版社,(1995) 7、数学模型,陈义华编着,重庆大学出版社,(1995) 8、数学模型建模分析,蔡常丰编着,科学出版社,(1995). 9、数学建模竞赛教程,李尚志主编,江苏教育出版社,(1996). 10、数学建模入门,徐全智、杨晋浩编,成都电子科大出版社,(1996). 11、数学建模,沈继红、施久玉、高振滨、张晓威编,哈尔滨工程大学出版社,(1996). 12、数学模型基础,王树禾编着,中国科学技术大学出版社,(1996). 13、数学模型方法,齐欢编着,华中理工大学出版社,(1996). 14、数学建模与实验,南京地区工科院校数学建模与工业数学讨论班编,河海大学 出版社,(1996). 15、数学模型与数学建模,刘来福、曾文艺编,北京师范大学出版杜(1997). 16. 数学建模,袁震东、洪渊、林武忠、蒋鲁敏编,华东师范大学出版社. 17、数学模型,谭永基,俞文吡编,复旦大学出版社,(1997). 18、数学模型实用教程,费培之、程中瑗层主编,四川大学出版社,(1998). 19、数学建模优秀案例选编(工科数学基地建设丛书),汪国强主编,华南理工大学出版社,(1998). 20、经济数学模型(第二版)(工科数学基地建设丛书),洪毅、贺德化、昌志华 编着,华南理工大学出版社,(1999). 21、数学模型讲义,雷功炎编,北京大学出版社(1999). 22、数学建模精品案例,朱道元编着,东南大学出版社,(1999), 23、问题解决的数学模型方法,刘来福,曾文艺编着、北京师范大学出版社,(1999). 24、数学建模的理论与实践,吴翔,吴孟达,成礼智编着,国防科技大学出版社, (1999). 25、数学建模案例分析,白其岭主编,海洋出版社,(2000年,北京). 26、数学实验(高等院校选用教材系列),谢云荪、张志让主编,科学出版社,(2000). 27、数学实验,傅鹏、龚肋、刘琼荪,何中市编,科学出版社,(2000). 28、数学建模与数学实验,赵静、但琦编,高等教育出版社,(2000).
国外参考书(中译本)
1、数学模型引论, E.A。Bender着,朱尧辰、徐伟宣译,科学普及出版社(1982). 2、数学模型,[门]近藤次郎着,官荣章等译,机械工业出版社,(1985). 3、微分方程模型,(应用数学模型丛书第1卷),[美]W.F.Lucas主编,朱煜民等 译,国防科技大学出版社,(1988). 4、政治及有关模型,(应用数学模型丛书第2卷),[美W.F.Lucas主编,王国秋 等译,国防科技大学出版社,(1996). 5、离散与系统模型,(应用数学模型丛书第3卷),[美w.F.Lucas主编,成礼智 等译,国防科技大学出版社,(1996). 6、生命科学模型,(应用数学模型丛书第4卷),[美1W.F.Lucas主编,翟晓燕等 译,国防科技大学出版社,(1996). 7、模型数学--连续动力系统和离散动力系统,[英1H.B.Grif6ths和A.01dknow 着,萧礼、张志军编译,科学出版社,(1996). 8、数学建模--来自英国四个行业中的案例研究,(应用数学译丛第4号), 英]D.Burglles等着,叶其孝、吴庆宝译,世界图书出版公司,(1997)
专业性参考书
(这方面书籍很多,仅列几本供参考) : 1、水环境数学模型,[德]W.KinZE1bach着,杨汝均、刘兆昌等编纂,中国建筑工 业出版社,(1987). 2、科技工程中的数学模型,堪安琦编着,铁道出版社(1988) 3、生物医学数学模型,青义学编着,湖南科学技术出版杜(1990). 4、农作物害虫管理数学模型与应用,蒲蛰龙主编,广东科技出版社(1990). 5、系统科学中数学模型,欧阳亮编着, E山东大学出版社,(1995). 6、种群生态学的数学建模与研究,马知恩着,安徽教育出版社,(1996) 7、建模、变换、优化--结构综合方法新进展,隋允康着,大连理工大学出版社, (1986) 8、遗传模型分析方法,朱军着,中国农业出版社(1997). (中山大学数学系王寿松编辑,2001年4月)
过程
模型准备
了解问题的实际背景,明确其实际意义,掌握对象的各种信息。用数学语言来描述问题。
模型假设
根据实际对象的特征和建模的目的,对问题进行必要的简化,并用精确的语言提出一些恰当的假设。
模型建立
在假设的基础上,利用适当的数学工具来刻划各变量之间的数学关系,建立相应的数学结构(尽量用简单的数学工具)。
模型求解
利用获取的数据资料,对模型的所有参数做出计算(或近似计算)。
模型分析
对所得的结果进行数学上的分析。
模型检验
将模型分析结果与实际情形进行比较,以此来验证模型的准确性、合理性和适用性。如果模型与实际较吻合,则要对计算结果给出其实际含义,并进行解释。如果模型与实际吻合较差,则应该修改假设,再次重复建模过程。
模型应用
应用方式因问题的性质和建模的目的而异。
1、努力学习数学知识,完善自己的知识体系,尤其是与数学相关的知识体系,比如高等数学、工程数学和应用数学的相关知识;
2、扩充自己的知识面,你可以看到很多赛题都是很现实的社会热点问题,相关的背景知识是非常必要的;
3、多看一些案例分析的教程,在学习案例分析时的注意点是:如何考虑现实问题中的各个因素,综合运用所学知识,建立适当的模型;如何进行模型的优化;如何求解模型;如何解释模型的解。
还要逐步去理解数学建模中最难的三个问题,1、如何用学到的数学思想来表述所面对的问题,所谓的建模。2、应用学到的数学知识解刚刚建立的数学模型,并进行优化。3、将刚刚得到的数学上的解解释为现实问题中的现象或者是方法。这三个过程体现了一个“现实——>数学——>现实”的一个过程。这其实就是最难的地方。这需要你首先了解面临的实际问题,然后从现实中转入数学,再从数学中跳出来回到现实。
4、说到matlab,我建议你借一本matlab手册做参考书就行了!毕竟matlab只是实现你数学模型的基础,这不是说matlab不重要,其实matlab也很重要!
祝你快乐!
⑤ C语言算法设计主要需要掌握哪些
你如果只问C语言的话,它与其他语言最大的不同就是指针了,很多针对C语言的算法都会用到它,每种语言虽然大体相同但都有独特之处的。我们老师常说:
不懂指针的人,就等于不会C/C++
不懂委托、引用的人,就等于不会C#
除此之外就是算法设计的共同基础了,像楼上所说的,
你需要熟悉各种数据结构的特性,才能在设计你的算法时用最适合的方法
你需要熟悉各种变量的结构,C语言是可以手动管理内存的,灵活掌握物理地址与逻辑地址对C语言算法设计很有帮助
你需要熟悉各种循环控制结构,这才是程序的真谛,让计算机代替人完成重复性的工作,而算法就是教机器该如何这样做的命令集
⑥ 怎样用DIJKSTRA算法设计最短路径
以下................
输入时,将s,t,x,y,z五个点按照1,2,3,4,5起别名,输入格式按照下图例所示
当提示Please enter the vertex where Dijkstra algorithm starts:时输入算法的起始点
比如计算结果v1v4v2表示从点1到点2经过1,4,2为最短路径
Dijkstra算法的完整实现版本,算法的源代码
/* Dijkstra.c
Copyright (c) 2002, 2006 by ctu_85
All Rights Reserved.
*/
#include "stdio.h"
#include "malloc.h"
#define maxium 32767
#define maxver 9 /*defines the max number of vertexs which the programm can handle*/
#define OK 1
struct Point
{
char vertex[3];
struct Link *work;
struct Point *next;
};
struct Link
{
char vertex[3];
int value;
struct Link *next;
};
struct Table /*the workbannch of the algorithm*/
{
int cost;
int Known;
char vertex[3];
char path[3];
struct Table *next;
};
int Dijkstra(struct Point *,struct Table *);
int PrintTable(int,struct Table *);
int PrintPath(int,struct Table *,struct Table *);
struct Table * CreateTable(int,int);
struct Point * FindSmallest(struct Table *,struct Point *);/*Find the vertex which has the smallest value reside in the table*/
int main()
{
int i,j,num,temp,val;
char c;
struct Point *poinpre,*poinhead,*poin;
struct Link *linpre,*linhead,*lin;
struct Table *tabhead;
poinpre=poinhead=poin=(struct Point *)malloc(sizeof(struct Point));
poin->next=NULL;
poin->work=NULL;
restart:
printf("Notice:if you wanna to input a vertex,you must use the format of number!\n");
printf("Please input the number of points:\n");
scanf("%d",&num);
if(num>maxver||num<1||num%1!=0)
{
printf("\nNumber of points exception!");
goto restart;
}
for(i=0;i<num;i++)
{
printf("Please input the points next to point %d,end with 0:\n",i+1);
poin=(struct Point *)malloc(sizeof(struct Point));
poinpre->next=poin;
poin->vertex[0]='v';
poin->vertex[1]='0'+i+1;
poin->vertex[2]='\0';
linpre=lin=poin->work;
linpre->next=NULL;
for(j=0;j<num-1;j++)
{
printf("The number of the %d th vertex linked to vertex %d:",j+1,i+1);
scanf("%d",&temp);
if(temp==0)
{
lin->next=NULL;
break;
}
else
{
lin=(struct Link *)malloc(sizeof(struct Link));
linpre->next=lin;
lin->vertex[0]='v';
lin->vertex[1]='0'+temp;
lin->vertex[2]='\0';
printf("Please input the value betwixt %d th point towards %d th point:",i+1,temp);
scanf("%d",&val);
lin->value=val;
linpre=linpre->next;
lin->next=NULL;
}
}
poinpre=poinpre->next;
poin->next=NULL;
}
printf("Please enter the vertex where Dijkstra algorithm starts:\n");
scanf("%d",&temp);
tabhead=CreateTable(temp,num);
Dijkstra(poinhead,tabhead);
PrintTable(temp,tabhead);
return OK;
}
struct Table * CreateTable(int vertex,int total)
{
struct Table *head,*pre,*p;
int i;
head=pre=p=(struct Table *)malloc(sizeof(struct Table));
p->next=NULL;
for(i=0;i<total;i++)
{
p=(struct Table *)malloc(sizeof(struct Table));
pre->next=p;
if(i+1==vertex)
{
p->vertex[0]='v';
p->vertex[1]='0'+i+1;
p->vertex[2]='\0';
p->cost=0;
p->Known=0;
}
else
{
p->vertex[0]='v';
p->vertex[1]='0'+i+1;
p->vertex[2]='\0';
p->cost=maxium;
p->Known=0;
}
p->next=NULL;
pre=pre->next;
}
return head;
}
int Dijkstra(struct Point *p1,struct Table *p2) /* Core of the programm*/
{
int costs;
char temp;
struct Point *poinhead=p1,*now;
struct Link *linna;
struct Table *tabhead=p2,*searc,*result;
while(1)
{
now=FindSmallest(tabhead,poinhead);
if(now==NULL)
break;
result=p2;
result=result->next;
while(result!=NULL)
{
if(result->vertex[1]==now->vertex[1])
break;
else
result=result->next;
}
linna=now->work->next;
while(linna!=NULL) /* update all the vertexs linked to the signed vertex*/
{
temp=linna->vertex[1];
searc=tabhead->next;
while(searc!=NULL)
{
if(searc->vertex[1]==temp)/*find the vertex linked to the signed vertex in the table and update*/
{
if((result->cost+linna->value)<searc->cost)
{
searc->cost=result->cost+linna->value;/*set the new value*/
searc->path[0]='v';
searc->path[1]=now->vertex[1];
searc->path[2]='\0';
}
break;
}
else
searc=searc->next;
}
linna=linna->next;
}
}
return 1;
}
struct Point * FindSmallest(struct Table *head,struct Point *poinhead)
{
struct Point *result;
struct Table *temp;
int min=maxium,status=0;
head=head->next;
poinhead=poinhead->next;
while(head!=NULL)
{
if(!head->Known&&head->cost<min)
{
min=head->cost;
result=poinhead;
temp=head;
status=1;
}
head=head->next;
poinhead=poinhead->next;
}
if(status)
{
temp->Known=1;
return result;
}
else
return NULL;
}
int PrintTable(int start,struct Table *head)
{
struct Table *begin=head;
head=head->next;
while(head!=NULL)
{
if((head->vertex[1]-'0')!=start)
PrintPath(start,head,begin);
head=head->next;
}
return OK;
}
int PrintPath(int start,struct Table *head,struct Table *begin)
{
struct Table *temp=begin->next,*p,*t;
p=head;
t=begin;
if((p->vertex[1]-'0')!=start&&p!=NULL)
{
while(temp->vertex[1]!=p->path[1]&&temp!=NULL)
temp=temp->next;
PrintPath(start,temp,t);
printf("%s",p->vertex);
}
else
if(p!=NULL)
printf("\n%s",p->vertex);
return OK;
}