c语言学后感
㈠ c语言实训心得
通过这次C语言实训,提高了我掌握和利用C语言进行程设计的能力, 而且进一步理解和运用结构化程设计的思想和方法。初步掌握了开发一个小型实用系统的基本方法。学会了调试一个较长程序的基本方法。学会了利用流程图或N-S图表示算法。掌握了书写程设计开发文档的能力.为以后的实训打下坚实的基础。
㈡ 学习C语言心得
学习C语言,我自己认为我还学得不错,但是其实比起THQ来说那又算什么哟!但是我并没有灰心,还是坚持于自己的执着...
其实学习任何东西都要有一种坚持不懈精神;其次,要对他培养出一种兴趣爱好.(兴趣是最大的老师)
我就是先了解它是个什么,在了解它能做什么,能做出什么好的什么...(这样可以钩起一种好奇的心理)
楼上那位说得对,这些东西要多写代码,也就是要多实践.
还有,我建议多到书店里去看看相关的书籍(因为我就经常新华书店看书,一看就是几个小时.)
㈢ 大一第一学期C语言实训心得500字左右,急 急 急,在线等
楼主在这中间加减点东西,就可以用
过C语言实训,让我加深了对C语言的了解,而不只是单单的在课本中学到的那些理论,平时乏味的课程,通过自己动手亲自编写,变的生动有趣,而在自己动手的过程中,出现的问题很多,比理论要难的多,当一个程序写完以后,经常会有很多错误而没法解决。不过,通过几天的实训,逐渐积攒了一些经验,有些错误可以很快就看出来。
这次实训有很大的收获,让我对C语言有了更深的认识,平时在课堂上学到的东西可以自己动手编写,将其转化成一些实用的技能。如果是一个程序写完一处错误也没有,会有种成就感,于是兴趣就来了,兴趣来了,自然学的东西也就多了,能把理论变成实际的技能,让我对C语言有了浓厚的兴趣和更深层的认识。
C语言是一个有序的学习,学了最基本的替换,然后扩展到循环,嵌套,条理很清楚,不是一个零散的知识,实际上所有的课程都如此,不过通过实训我也知道了自己的不足,存在的很多问题。
比如自己写的写的小程序出了问题,不会解决了就叫老师帮忙,虽然说一定意义上增加了师生之间的感情,但是会养成一种依赖的心理,碰到问题了个想到的是求助而不是自己独立解决,所以以后要多多锻炼自己的信心和增加自己的能力,争取做到老师不在身边的时候也可以完成一些简单的程序编写与错误排除。
还有自己的基础知识不扎实,遇到的问题,没有很好的逻辑思维,亲自编写一个陌生的程序的时候会有种无法下手的感觉,找不到突破口。通过实训,逐渐理清了顺序,对于简单的程序和一些相对比较繁琐的嵌套,循环,不在是看着一头雾水。其实只要理清了思路,把基础知识掌握了,然后有条不紊的分析,一步一步理解,C语言还是很有意思的课程。
自己亲自动手编写程序让我增加了对C语言程序开发环境的了解,在上课的时候老师就讲,学习C语言最重要的是学习C语言的逻辑思维,不管以后从事什么行业,学习C语言都对自己的职业很有帮助,如果是从事编程工程工作的话,就更有帮助了,即使以后的编程工作可能不用C语言,但是拥有扎实的C语言基础是对工作很有用的。
当初在初步接触C语言的时候,看着一堆“奇形怪状”的符号,觉得甚是无聊,通过这次实训,摆脱了那种似懂非懂的状态!
感谢学校安排这次实训和老师的耐心讲解,让我学到了很多知识,在实训过程中,同学之间的相互探讨,老师的循循善诱,最终让我们达到了举一反三的效果,在学知识的同时,也增加了同学老师之间的感情。希望以后还会有更多类似的实训课程,在有限的大学时间内学到更多的实用技能,为以后的工作打下一个良好的基础
㈣ 寻求学习C语言的心得
上回说的是一些小问题,真正编东西,学东西还有许多要注意的地方。
由于本人也是刚学不久,水平有限,说错的地方望大家原谅。谢谢!
一、多看代码
在有一定基础以后一定要多看别人的代码。注意代码中的算法和数据结构。毕竟学C之后的关口就是算法和数据结构。提到数据结构,指针是其中重要的一环,绝大多数的数据结构是建立在指针之上的,如链表、队列、树、图等等,所以只有学好指针才能真正学好C。别的方面也要关注一下,诸如变量的命名、库函数的用法等等。有些库函数是经常用到的。对于这些函数的用法就要牢牢记住。
二、要自己动手
编程序是个实干的活,光说不练不行。刚开始学的时候可以多练习书上的习题。对于自己不明白的地方,自己编个小程序实验一下是最好的方法,能给自己留下深刻的印象。自己动手的过程中要不断纠正自己不好的编程习惯和认识错误。有一定的基础以后可以尝试编一点小游戏,文曲星之类的电子词典上小游戏很多,照着编作为练习。基础很扎实的时候,可以编一些关于数据结构方面的东西,诸如最经典的学生管理系统。之后.....学汇编、硬件知识。
三、选择一个好的编译器
本人前段时间就遭受了一个编译器的折磨。这个编译器带了个自运行程序,自动修改IE主页。叫什么名字就不说了。言归正传,英文版Turbo C v2.0没话说,最经典的C编译器(下载地址:http://www4.skycn.com/soft/2151.html),其次推荐一个win-tc 1.91,支持windows下的编译器。(下载地址:http://www4.skycn.com/soft/17869.html)
四、关于养成良好的编程习惯
基本上每本C教材上都要提到。作为新手这条一定要时时遵守。记的一位网友发过评论:高手写一堆乱七八糟的代码就是艺术,新手写一堆乱七八糟的代码就是垃圾。就象古代贤人写错字叫通假字,小学生写错字叫错别字,一个道理。具体方面:
1、在比较复杂的代码后面要有注释。如果光溜溜一堆代码,别人就不可能看懂你的代码,而且也不利于查找错误。除非你一直编东西给自己看。能在代码里说明白的就一定要在代码里体现。比如变量名、函数名,在命名的时候尽量说明是干什么用的。
2、注意语句的嵌套不能过长,一般来说,一段代码里Tab要少于8个。简单说就是语句最多8个嵌套。对于新手来说,这个标准还要下降。有一个好习惯是,把主函数尽量写简短。经常看到别人的代码是主函数只有几行,几个函数调用,而定义全在主函数外部。这样一是减少了主函数内部的嵌套,二是比较精简,容易读懂。
3、注意语句的选择。并不是分支语句就用if循环就用while、for。在适当的情况下switch和do while语句也是要用的。在某些时候,switch语句比if语句更加精练明了,而do while比while少一个循环。
㈤ 学习c语言的感想
不同的人学习C语言都有不同的感想,可以根据自己的感想,自行将学习中的感受写下来即可。
㈥ c语言学习总结300字
1.最初接触C语言时要弄清楚各种变量的定义方法,特别是常用的类型,int、float、char等等,还要掌握各种类型的输入、输出格式。这一步做到后,上机就没有多大的问题了。
2.在对函数的学习过程中,一定要弄明白函数的作用和具体格式。值得强调的是在写循环程序时,一定要弄清楚循环的条件。
3.对每一个知识点,都应该立即编出对应的程序,有时可能还会有语法错误,碰到更好的方法也可以试一下,很多时候你想想代码怎么写和你真的写出来了是有很大的差距的。
4.学习时一定有很多疑惑的,要及时弄清楚。
5.找一本好的课本,我并不推荐谭浩强的《C语言程序设计》,因为这本书把知识点讲的太细碎太理论。我推荐《c语言程序设计:现代方法》这本书,书中奥妙非凡,值得深读体验。
6.不要认为上课认真听课有用,写程序不可能从课堂上学会太多的,伟大的程序员或者是很多的黑客,不是老师教出来的,你的有自己的想法自己的思路自己的,学习一门语言才有用,也才会得到别人传教不了的东西。
㈦ 求C语言的学习心得 或者 方法总结 什么的
* 掌握C语言的基本语法和规定。 * 掌握程序设计基本算法和思路,开拓思路, * 提高上机操作能力,掌握上机调试程序的方法 * 培养自学能力,强调自主学习。 * 养成良好的程序设计习惯。 通过总结多年的教学经验,总结学生在学习过程中具有规律性的特点,可以发现,在本课程学习过程中学生经常出现下面这些问题: * 注重理论学习,忽视上机编程实践,造成"只能用笔在纸上编程"的奇怪现象。特别是一些女同学,一到机器前面就手忙脚乱,如果程序再出现错误,就更不知道该如何查找错误,如何排除错误了。 *入门时自以为难度大,产生畏难情绪,总是怕,最后因为怕学不好而导致没有学好。 *前期没有抓紧,希望通过突击完成课程学习。本课程要靠平时的积累,几乎不能靠临时突击,由于前面基础补扎实,到了后面已经无法弥补。 *太注重学习语句的语法规定,忽视了对编程的思路和方法的训练。有些同学再学习结束的感觉就是:对每一个语句的语法和每一条规定都明白,就是面对实际问题的时候不知道该如何思考,该如何编程。 *急于求成,总想编写综合性的程序,忽视基本概念,忽视基本功的训练和练习。在编写程序中发现问题,一追根源,全是概念或基础问题。 1.不要看到别人的回复第一句话就说:给个代码吧!你应该想想为什么。当你自己想 出来再参考别人的提示,你就知道自己和别人思路的差异。 2.初学者请不要看太多太多的书那会误人子弟的,先找本系统的学,很多人用了很久 都是只对部分功能熟悉而已,不系统还是不够的。 3.看帮助,不要因为很难而自己是初学者所以就不看;帮助永远是最好的参考手册, 虽然帮助的文字有时候很难看懂,总觉得不够直观。 4.不要被对象、属性、方法等词汇所迷惑;最根本的是先了解最基础知识。 5.不要放过任何一个看上去很简单的小问题--他们往往并不那么简单,或者可以引伸 出很多知识点;不会举一反三你就永远学不会。 6.知道一点东西,并不能说明你会写脚本,脚本是需要经验积累的。 7.学脚本并不难,JSP、ASP、PHP等等也不过如此--难的是长期坚持实践和不遗余力的博览 群书; 8.看再多的书是学不全脚本的,要多实践 9.把时髦的技术挂在嘴边,还不如把过时的技术记在心里; 10.学习脚本最好的方法之一就是多练习; 11.在任何时刻都不要认为自己手中的书已经足够了; 12.看得懂的书,请仔细看;看不懂的书,请硬着头皮看; 13.别指望看第一遍书就能记住和掌握什么--请看第二遍、第三遍; 14.请把书上的例子亲手到电脑上实践,即使配套光盘中有源文件; 15.把在书中看到的有意义的例子扩充;并将其切实的运用到自己的工作中; 16.不要漏掉书中任何一个练习--请全部做完并记录下思路; 17.当你用脚本到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余 下的部分粗略的完成以保证这个代码的完整性,然后分析自己的错误并重新编写和工 作。 18.别心急,写脚本确实不容易;水平是在不断的实践中完善和发展的; 19.每学到一个脚本难点的时候,尝试着对别人讲解这个知识点并让他理解----你能 讲清楚才说明你真的理解了; 20.记录下在和别人交流时发现的自己忽视或不理解的知识点; 21.保存好你做过的所有的源文件----那是你最好的积累之一; 22.对于网络,还是希望大家能多利用一下,很多问题不是非要到论坛来问的,首先 你要学会自己找答案,比如google、网络都是很好的搜索引擎,你只要输入关键字就 能找到很多相关资料,别老是等待别人给你希望,看的出你平时一定也很懒! 23.到一个论坛,你学会去看以前的帖子,不要什么都不看就发帖子问,也许你的问 题早就有人问过了,你再问,别人已经不想再重复了,做为初学者,谁也不希望自己 的帖子没人回的。 24.虽然不是打击初学者,但是这句话还是要说:论坛论坛,就是大家讨论的地方, 如果你总期望有高手总无偿指点你,除非他是你亲戚!!讨论者,起码是水平相当的 才有讨论的说法,如果水平真差距太远了,连基本操作都需要别人给解答,谁还跟你 讨论呢。能找到很多相关资料,别老是等待别人给你希望,看的出你平时一定也很懒! 25.到一个论坛,你学会去看以前的帖子,不要什么都不看就发帖子问,也许你的问 题早就有人问过了,你再问,别人已经不想再重复了,做为初学者,谁也不希望自己 的帖子没人回的。 26.虽然不是打击初学者,但是这句话还是要说:论坛论坛,就是大家讨论的地方, 如果你总期望有高手总无偿指点你,除非他是你亲戚!!讨论者,起码是水平相当的 才有讨论的说法,如果水平真差距太远了,连基本操作都需要别人给解答,谁还跟你 讨论呢。 别做浮躁的人 浮躁的人容易问:我到底该学什么;----别问,学就对了; 浮躁的人容易问:JS有钱途吗;----建议你去抢银行; 浮躁的人容易说:我要中文版!我英文不行!----不行?学呀! 浮躁的人分两种:只观望而不学的人;只学而不坚持的人; 浮躁的人永远不是一个
㈧ 学习C语言有感~
那个叫【批处理】程序,其实你上面提到的那个处理垃圾的程序不要以为真的很厉害,很神奇,当你学过dos的话,那个程序可以说是很简单的东西;
也就是将那些以.tmp,.log等为后缀的文件和回收站,cookies里边的文件del【删除】罢了,/f是不显示提示,/s是本用户;echo是显示;
不要小看C/C++,你可以学习MFC和win32编程,就会发现C++的强大之处,而且现在基本的驱动程序都是用c语言写的,还有嵌入式程序开发,c语言也是首选语言,如今全国的商业银行的柜面程序,也是用linux环境的C语言写的;
好好学习,不要以为如今学的简单,其实以后你会发现,那些大的难的程序,都可以分为一个个简单的程序。
㈨ 请教学习c语言的心得
C语言学习心得
前言
指针,一直被认为是C语言中的精华。只有掌握了指针,你才能说你学会了C语言。
相当初,我是把指针这一章足足看了三遍才算是“学了这一章”下面的文字是阿容
写的,对我学习C语言的指针帮助很大。好东西不敢独享,今天把它贴出来,希望
大家也会有所帮助。
第一章。指针的概念
指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。
要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的
类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让
我们分别说明。
先声明几个指针放着做例子:
例一:
(1)int *ptr;
(2)char *ptr;
(3)int **ptr;
(4)int (*ptr)[3];
(5)int *(*ptr)[4];
如果看不懂后几个例子的话,请参阅我前段时间贴出的文章<<如何理解c和c
++的复杂类型声明>>。
1。 指针的类型。
从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就
是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的
类型:
(1)int *ptr; //指针的类型是int *
(2)char *ptr; //指针的类型是char *
(3)int **ptr; //指针的类型是 int **
(4)int (*ptr)[3]; //指针的类型是 int(*)[3]
(5)int *(*ptr)[4]; //指针的类型是 int *(*)[4]
怎么样?找出指针的类型的方法是不是很简单?
2。指针所指向的类型。
当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译
器将把那片内存区里的内容当做什么来看待。
从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符
*去掉,剩下的就是指针所指向的类型。例如:
(1)int *ptr; //指针所指向的类型是int
(2)char *ptr; //指针所指向的的类型是char
(3)int **ptr; //指针所指向的的类型是 int *
(4)int (*ptr)[3]; //指针所指向的的类型是 int()[3]
(5)int *(*ptr)[4]; //指针所指向的的类型是 int *()[4]
在指针的算术运算中,指针所指向的类型有很大的作用。
指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越
来越熟悉时,你会发现,把与指针搅和在一起的“类型”这个概念分成“指针的
类型”和“指针所指向的类型”两个概念,是精通指针的关键点之一。我看了不
少书,发现有些写得差的书中,就把指针的这两个概念搅在一起了,所以看起书
来前后矛盾,越看越糊涂。
3。 指针的值,或者叫指针所指向的内存区或地址。
指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是
一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数,因为
32位程序里内存地址全都是32位长。
指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si
zeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相
当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块
内存区域,就相当于说该指针的值是这块内存区域的首地址。
指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中
,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区
是不存在的,或者说是无意义的。
以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指向的
类型是什么?该指针指向了哪里?
4。 指针本身所占据的内存区。
指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道
了。在32位平台里,指针本身占据了4个字节的长度。
指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有
============================
7月11日
c语言心得一
2.数据输出
c语言不提供输入输出语句,输入输出操作是由c的库函数完成。但要包含头文件stdio.h。
putchar( ) 向终端输出一个字符
printf( )的格式字符:
① d格式符 用来输出十进制整数
%d 按整型数据的实际长度输出
%md 使输出长度为m,如果数据长度小于m,则左补空格,如果大于m,则输出实际长度
%ld 输出长整型数据
② o格式符 以八进制形式输出整数
③ x格式符 以十六进制形式输出整数
④ u格式符 用来输出unsigned型数据,以十进制形式输出
⑤ c格式符 用来输出一个字符
⑥ s格式符 输出一个字符串
%s 输出实际长度字符串
%ms 输出的串占m列,如果串长度小于m,左补空格,如果大于m,实际输出
%-ms输出的串占m列,如果串长度小于m,右补空格,
%m.ns 输出占m列,但只取字符串中左端n个字符并靠右对齐
%-m.ns m、n含义同上,靠左对齐,如果n>m,则m自动取n值
⑦ f格式符 以小数形式输出实数
%f 整数部分全部输出,小数部分输出6位
%m.nf 输出数据共占m列,其中有n位小数。如果数值长度小于m,左补空格
%-m.nf 同上,右补空格
⑧ e格式符 以指数形式输出实数
%e 系统指定6位小数,5位指数(e+002 )
⑨ g格式符 输出实数,根据数值大小,自动选f格式或e格式
3.数据输入
getchar( ) 从终端输入一个字符
scanf( 格式控制,地址列表) 标准C scanf中不使用%u,对于unsigned型数据,以%d或%o或%x输入。%后的*,用来跳过它相应的数据。输入数据时不能规定精度如scanf( "%7.2f", &a );是不合法的。
部分字符串处理函数
puts(字符数组) 将一个字符串输出到终端。
gets(字符数组) 从终端输入一个字符串到字符数组,并且得到一个函数值,为该字符数组的首地址
strcat(字符数组1,字符数组2) 连接两个字符数组中的字符串,数组1必须足够大。
Strcpy(字符数组1,字符串2) 将字符串2拷贝到字符数组1中。
Strcmp(字符串1,字符串2) 比较字符串,相等返回0,字符串1>字符串2,返回正数,小于返回负数。
Strlen(字符数组) 求字符串长度。
Strlwr( 字符串) 将字符串中的大写字母转换成小写
Strupr( 字符串) 将字符串中的小写字母转换成大写
以上是一些比较常用的字符串处理函数。
动态存储变量与静态存储变量
从变量值存在的时间(生存期)角度来分,可分为静态存储变量和动态存储变量。静态存储指在程序运行期间给变量分配固定的存储空间,动态存储指程序运行期间根据需要动态的给变量分配存储空间。
C语言中,变量的存储方法分为两大类:静态存储类和动态存储类,具体包括:自动的(auto),静态的(static),寄存器的(register),外部的(extern)。
1) 局部变量的存储方式
函数中的局部变量如不作专门说明,都之auto的,即动态存储的,auto可以省略。局部变量也可以定义为static的,这时它在函数内值是不变的。静态局部变量如不赋初值,编译时系统自动赋值为0,动态局部变量如不赋初值,则它的值是个不确定的值。C规定,只有在定义全局变量和局部静态变量时才能对数组赋初值。为提高执行效率,c允许将局部变量值放在寄存器中,这种变量叫register变量,要用register说明。但只有局部动态变量和形式参数可以作为register变量,其它不行。
2) 全局变量的存储方式
全局变量在函数外部定义,编译时分配在静态存储区,可以在程序中各个函数所引用。多个文件的情况如何引用全局变量呢?假如在一个文件定义全局变量,在别的文件引用,就要在此文件中用extern对全局变量说明,但如果全局变量定义时用static的话,此全局变量就只能在本文件中引用了,而不能被其它文件引用。
3) 存储类别小结
从作用域角度分,有局部变量和全局变量
局部变量:自动变量,即动态局部变量(离开函数,值就消失)
静态局部变量(离开函数,值仍保留)
寄存器变量(离开函数,值就消失)
(形参可定义为自动变量和寄存器变量)
全局变量:静态全局变量(只限本文件引用)
全局变量(允许其它文件引用)
从存在的时间分,有静态存储和动态存储
动态存储:自动变量(本函数内有效)
寄存器变量(本函数内有效)
形参
静态存储:静态局部变量(函数内有效)
静态全局变量(本文件内有效)
全局变量(其它文件可引用)
从变量值存放的位置分
静态存储区:静态局部变量
静态全局变量
全局变量
动态存储区:自动变量和形参
寄存器内:寄存器变量
7. 内部函数和外部函数
内部函数:只能被本文件中的其它函数调用,定义时前加static,内部函数又称静态函数。
外部函数:可以被其它文件调用,定义时前加extern,如果省略,则隐含为外部函数,在需要调用此函数的文件中,一般要用extern说明。
c编译系统在对程序进行通常的编译之前,先进行预处理。c提供的预处理功能主要有以下三种:1)宏定义 2)文件包含 3)条件编译
1. 宏定义
不带参数的宏定义
用一个指定的标识符来代表一个字符串,形式:#define 标识符 字符串
几点说明:
1) 宏名一般用大写
2) 宏定义不作语法检查,只有在编译被宏展开后的源程序时才会报错
3) 宏定义不是c语句,不在行末加分号
4) 宏名有效范围为定义到本源文件结束
5) 可以用#undef命令终止宏定义的作用域
6) 在宏定义时,可以引用已定义的宏名
带参数的宏定义
定义形式:#define 宏名(参数表) 字符串
这和函数有些类似,但他们是不同的:
1) 函数调用时,先求实参表达式值,再代入形参,而宏只是简单替换,并不求值
2) 函数调用是在程序运行时分配内存的,而宏展开时并不分配内存,也没有返回值的概念
3) 对函数中的实参和形参都要定义类型,而且要求一致,宏名无类型,其参数也没有类型。
4) 函数只有一个返回值,而宏可以得到几个结果
5) 宏替换不占运行时间,只占编译时间,而函数调用占运行时间
2. 文件包含处理
#include "文件1" 就是将文件1的全部内容复制插入到#include位置,作为一个源文件进行编译。
在#include命令中,文件名可以用" "也可以用< >,假如现在file1.c中包含file2.h文件," "表示系统先在file1.c所在目录中找file2.h,如果找不到,再按系统指定的标准方式检索目录,< >表示系统直接按指定的标准方式检索目录。所以用" "保险一点。
3. 条件编译
条件编译指不对整个程序都编译,而是编译满足条件的那部分。条件编译有以下几种形式:
1)#ifdef 标识符
程序段1
#else
程序段2
#endif
它的作用:当标识符在前面已经被定义过(一般用#define),则对程序段1编译,否则对程序段2编译。
2)#ifndef 标识符
程序段1
#else
程序段2
#endif
它的作用和#ifdef相反,当标识符没被定义过,对程序段1编译,否则对程序段2编译。
3)#if 表达式
程序段1
#else
程序段2
#endif
它的作用:当表达式值为真(非0)时,对程序段1编译,否则对程序段2编译。
http://spaces.msn.com/lxj5816778/Blog/cns!1pmxrkmy9J0DF4J21zFuHFzQ!134.entry
㈩ 讨论学习C语言算法的心得
关键是:存在 对比 客观 简化 实践
存在:算法中存在什么,目的是什么,怎么实现的,必要的话可以了解一下何人发明的,因为经典算法的设计者本身都是着作等身的,由此你可以通过“存在”了解一个事实:算法不是孤立的,是新和旧之间的更替。
对比:对比类似和不同算法,同在哪里,不同在哪里,以及这些差异导致了什么结果,过程有什么差异,这个过程为什么会导致那个结果。
客观:不凭空臆测,算法本身有什么思想以及借用了什么数学思想实现不能扭曲,以及何种状态适合这样的算法。
简化:当你深刻了解算法的本质(通过推导、证明和实际运用和改进),就不可避免的要把不同算法有机的结合在一起,不是线性的也不是单纯的组合,而是从内涵和外延的角度站在不同的立场把算法划分成不同的层次,每个层次什么时候运用。
简化操作往往要运用一些更加直观的快速的方法:联想。
关于联想,通常,你需要在思考线性表的时候想到一串隔开的纸带,当细化到链表还是顺序表时,需要加以限制为是否可随机存取还是顺序存取。
算法本身都可以通过数据结构表现得很清晰,这时候运用算法的时候,就可以脱离实际的ADT载体。
分类讨论以及回溯通常要结合树去分析,就一目了然。
字符串处理以及跟优先级和记忆索引等问题通常要结合栈结构去设计算法。
路径问题结合图结构设计算法。
当然,要加深对C语言算法的设计能力,需要从最根源出发:实践。
有专门的机构提供了实践平台,检验你设计的算法是否高效。
可以去搜索ACM POJ ZOJ 等关键字,找到相关的算法在线竞赛网站,从最基本的题开始训练。
另外,好的书籍是成功的一半:
《算法导论》 (虽然名为导论,但是算法着作中最权威也最有深度的一本书)
《数据结构(C语言)》(严蔚敏的着作,一般重点高校使用,虽然比较抽象,但比较简化)
《算法与数据结构(C语言)》(电子科技出版社,对算法的实际实现讲的比较透彻)
Finally,you need 'coding' and programming again and again.