C语言学习心得及报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序让“好看”)都需要我们在编程实践中去获得,这是宝贵的经验也我们作为
程序员最珍贵的地方,而且最重要的这些经验是属于我们自己的,独一无二的。
综合上面的叙述,我们把编程看成程序设计语言的“单词”“语法”“明确
的语义”“正确的语义”四个部分,可以看出前面三个部分是几乎所有的程序设
char string[81]; int i,num = 0,word = 0;/*word 标志位*/ char c; gets(string); for(i = 0;(c = string[i])!='\0';i++)
if(c == ' ') word = 0; else if(word == 0) {
最后始终记住这点在没有实践之前,先打下坚实的理论基础吧,毕竟理论是 实践的先行,理论可以更好的指导实践。即使再低点的要求至少要先熟悉理论吧, 毕竟“摸着石头过河”感觉还是盲目以及痛苦的
“语义”即语句的意思、含义。同人类语言一样,程序设计语言最重要的目 的还是“交流”,所以写一段没有任何作用的代码就如同说一句没有任何意思的 话是没有意义的,在这一点上两者是共同的,至于在其他某些方面两者也有惊人 的相似之处,试举一例吧,比如说可以有不同的表达表示同一个意思,如微型计 算机同个人计算机就是同一个意思,在 C 语言中比如要让变量 i 自增 1,可以有 i=i+1 或者 i+=1 等等。不过与人类语言相比,程序设计语言毕竟是与计算机交流, 交流对象计算机与人类的不同也决定了程序设计语言与人类语言还是有所区别, 甚至可以说是存在巨大的“鸿沟”,这也就是学习程序设计语言的重点。
/* Program 2*/ #include<stdio.h> main() {
char string[81]; int i,num = 0; char c; gets(string); for(i = 0;(c = string[i])!='\0';i++)
if(c != ' ' &&(string[i+1] ==' '|| string[i+1]== '\0')) num++;
“语法”,在英语中是如常见构词法、时态、常用句型、特殊用法、固定用法 等等(呵呵,不是语言专家如有兴趣可以参考英语语法书籍),仅拿构词法来说 动 词 后 面 加 er 就 变 成 名 词 ( work-worker ), 名 词 后 面 加 y 就 变 成 形 容 词 (wind-windy)等十多种变换还要记忆些特殊变换,复杂且繁琐,假如算上时态、 句型等那就更复杂了。在 C 语言中也同样也存在有语法,比如标识符、常量、 表达式、数据定义、函数定义、变量初始化、语句构成、预处理命令等大致 8 种语法,如标识符[2]可由字母、数字以及下划线组成,且必须以字母或下划线
简介
我是很乐意将计算机(程序设计)语言跟人类语言做类比的,在我看来学 习程序设计语言就想学习外语一样,通过计算机语言与计算机交流就如同在使用
外语与老外交流一样。通常学习语言比如英语有单词,语法,语义三个部分组成, 单词是构成语言的最基本的要素,语法告诉我们单词如何构成语句,语义则告诉 我们单词构成的语句的意思,类似的程序设计语言中也是有[1] “单词”,“语法”, “语义”三部分组成,其中跟人类语言一样,“单词”“语法”是基础,而为达到 交流的目的“语义”是整个程序设计语言的重点。当然相对人类语言(以英语为 例)而言程序设计语言(以 C 语言为例)显然要有简单得多的组成,所以这里 我们要首先确立自己对学好程序设计语言的信心。下面试加以说明,其中可能有 些类比不太适当,不过好像也差不多吧,你自己也可以试着举出更好的例子以使 自己更容易明白,我这里就抛砖引玉吧。
开头,区分大小写,另外在不同的编译器中字符数目有不同的规定,一般为 7
个字符。不过这里有些可能会被忽略的就是书写格式,在 C 语言中书写格式也
是需要被注意的,因为格式ຫໍສະໝຸດ Baidu可以当作 C 语言的语法项目,如语句是以分号‘;’
作为结束的标志的而不是以换行作为结束标志,其实英语也有要求比如什么时候
该使用句号什么时候该使用逗号等等只不过我们日常要求并不注意,而且也可以
总体比较三个程序,可以说类似程序 1 的错误——逻辑错误是我们程序员 比较容易犯的,也是在编程调试过程中最费时间的,至于语法错误编译器可以很
快的给我们找出错误的地方程序 2 逻辑正确但相比程序 1 思路要更难想到,程序 3 思路不但正确而且还在编程的过程中使用了一些编程技巧,所有这些开阔的逻 辑思路(解决问题),快速的调试方法及过程(发现错误),累积的编程技巧(让
看的懂所以不太较真。
总结
综上所述我们要学好一门程序设计语言首先就要像学习英语一样先熟记至少 要熟悉这门语言的“单词”和“语法”然后才能谈得上使用,俗话说“万丈高楼 平地起”,学好 C 语言的必要前提就是先打下坚实的 C 语言基础,所以潭先生的 书作为一本很好的教材,我建议是不能丢的,而且还要反复看,至少刚开始我学 习的时候上机机会不多,就是反复看懂看明白这本书,有些东西该记的还是要记 尤其是一些重要的语法比如标识符、数据类型、语句的特点、函数的占式结构, 指针的意义等等。
word = 1; num++; } printf("There are %d words in the line.\n",num); }
输入测试用例也能够完全正确,看看源程序,其中增加了一个标志位便把所有的情况给 考虑进去了,相比前一个程序,程序 2 就是直白的描述了解题的思路,而程序 3 看起来好像 不好理解但似乎更能满足我们作为“天才程序员”的欲望,这也就是编程时使用的一些小技 巧。
如 何 学 习 C 语 言
学校:西安航空学院 系别:电气系 班级:过控 1409 姓名:兰敏 学号:1130306140913
前言
两个原因促使我写下这篇文章,第一就是作为过来人根据我自己的经验我知 道编程的初学者 一般都很兴 奋也都有种困惑,一方面对运行在计算机(注:不 特别指明都指个人微型计算机)的五花八门如精彩的游戏程序,多姿多彩的网站 等等漂亮的视窗程序所着迷,另一方面大部分的初学者(如计算机专业的低年级 学生)都是从简单命令行程序“Hello world!”开始入手而且很长一段时间都无 法接触到日常经常使用的视窗程序,由此好奇者有之,迷惑者有之等等,更遗憾 的是也有少部分人因为困惑对编程逐渐失去兴趣。第二就是今天妹妹看 C 程序 设计语言的人读碰到一个例题没有看懂,而作为计算机专业毕业的老哥自然义不 容辞地承担起了讲解的任务,在噼里啪啦的大说之后,老妹终于弄懂了例题程序 的意思,但仍然不过瘾,竟然问起我如何学好 C 语言,弄得我心一惊,这里我 还是有点自知之明的,因为我知道我并不是什么大师,甚至自己对计算机世界也 经常是一片茫然,不过看着她那“崇拜”的眼神,不说点什么似乎有点不大好, 只好硬着头皮把自己以前的一些理解讲了一番。所以既然知道有这个需要,尽管 自己见识浅薄,也抱着“区区陋见假如能够对后学者能够有所帮助那是再好不过 了,即使有所偏颇当当笑话看看能有助于大家饭后生活也是美德一件”的心 情就写下了这篇文章。
先从“单词”谈起,在英语中就是由 26 个英文字母以及 26 个英文字母构 成的单词组成,学习语言我们首先应该记忆的就是“单词”,26 个英文字母 A, B,C,……然后就是令人头痛的英文单词,记忆的过程是痛苦的至少我学英语 时最恼火的地方就是反复记忆老是忘记的单词,类似的在 C 语言中我们可以作 这样的类比,C 语言的单词是由 26 个英文字母、数字(0,1,2……9)、运算符 以及其他特殊符号组成,所以相比而言学习 C 语言是多么的幸福。
编译运行,然后输入“I am a student”,得出正确答案“There are 4 words in the line.”在 输入几个类似的测试用例,都得出正确答案,最后确信无误便自信满满的交出自己的答卷。 应该说正确的输入情况下,这个程序毫无疑问是能够正确运行的,但这种正确性是非常脆弱 的,你不能指望用户和你一样聪明并且不犯错误,何况即使是神仙那也有打盹的时候。假如 用户输入“ I am a student”,“ I am a student”, “ I am a student ”……这种情况 下,你是不是应该重新修正你的思路呢?现在我这样考虑一个单词应该是字母后面紧接着一 个空格或者结束符号,所以重新写下如下程序。
/*Program1*/ #include<stdio.h> main() {
char string[81]; int i,num = 0; char c; gets(string); for(i = 0;(c=string[i])!='\0';i++)
if(c == ' ') num++;
printf("There are %d words in the line.\n",num+1); }
先小结下,由于我们在编程时需要对于输入的不可预期的程序源数据以及
提高我们自己的逻辑正确性花费更多的时间,因此这也就是我们编程训练所应该
关注的重点,而不是关注于何种实际的程序设计语言。
为了加深印象,下面我们举个实际的例子来说明这点。先看题目要求“输 入一行字符串(全字母或空格),统计其中的单词数量,单词之间用空格分开”, 应该说这是个简单的题目,有些人可能一看到这个题目很快就给出了自己的答 案。如有些人会想单词是以空格分开的,我们统计其中空格的数量再加上最后一 个单词不就是单词的个数吗,因此便很快给出如下答案。
与人类相区别,计算机最大的不同之处在于没有“自己”的“思维”,没有 像人类那样丰富的感情,所以在交流过程中对于人类的跳跃性的思维,对于人类 的“幽默”无法理解也没有丝毫的兴趣。比如说对与同样一句话“Do it”,在不 同的场景不同的说话语气,对 10 个人来说就会有 10 种不同的回答,有的人可能 会认为这是合理的要求,有的人可能会认为这可能是个玩笑而不与理睬,有的人 则可能认为语气要求有些过分而感到非常愤怒……,但对所有的计算机来说则是 严格执行。不过也正是由于计算机“机械”“笨着”的可爱而深得人们的喜爱并 被广泛使用,因为对我们来说,计算机就像一个忠实的士兵一样在执行我们的命 令并且作为指挥者,当然我们希望计算机在合适的时间干切当的事情。而要达到 这个目的,很凑巧有点类似于社会的“权利与义务”法则一样,我们也有自己的 义务那就是下达明确而又正确的“命令”。
printf("There are %d words in the line.\n",num);
}
运行一遍,发现结果是正确的,单词之间不管你是有几个空格,不管是两个也好,三 个也好都能够正确运行,但是回过头来我们看下这个程序是不是还有些可以改进的地方呢? 我们再看如下一个程序 /* Program 3[3]*/ #include<stdio.h> main() {
首先明确,即我们要在与计算机交流时“语义”必须明确,否则计算机将无 所适从,因此作为交流工具的程序设计语言的“语义”也必须是能够明确无二义 的。当然程序设计语言的设计者已经注意到这一点,在设计时就回避了这个问题, 所以我们——程序设计语言的使用者——程序员也就无须过多关注这点,也就是 说使用何种程序设计语言(C,Basic,Pascal 等)并不是我们要关注的重点。 其次正确,包括正确的输入以及正确的逻辑。由于计算机 “忠实”得有点“盲 目”以至于对事情的对错毫无判断力,就像一把枪一样,在警察手里它就是正义 的化身,而在土匪手里就成了恶魔的代言人,因此要时刻记住计算机是没有错的, “错误”掌握在我们自己手里,这也就决定了我们在编程时是不是应该投入更多 的精力来纠正我们自己所犯下的错误上面来?除此之外,我们智慧的结晶——程 序,在我们的上帝——顾客,在程序的使用者看来就像个黑匣子,他们只管输入 哪怕是错误的输入却同样期待能得到正确的结果,而对于上帝我们除了祈祷和期 望之外还能有什么选择?因此对于输入的不可预期的程序源数据,我们是不是也 应该花更多的时间进行处理呢?
程序员最珍贵的地方,而且最重要的这些经验是属于我们自己的,独一无二的。
综合上面的叙述,我们把编程看成程序设计语言的“单词”“语法”“明确
的语义”“正确的语义”四个部分,可以看出前面三个部分是几乎所有的程序设
char string[81]; int i,num = 0,word = 0;/*word 标志位*/ char c; gets(string); for(i = 0;(c = string[i])!='\0';i++)
if(c == ' ') word = 0; else if(word == 0) {
最后始终记住这点在没有实践之前,先打下坚实的理论基础吧,毕竟理论是 实践的先行,理论可以更好的指导实践。即使再低点的要求至少要先熟悉理论吧, 毕竟“摸着石头过河”感觉还是盲目以及痛苦的
“语义”即语句的意思、含义。同人类语言一样,程序设计语言最重要的目 的还是“交流”,所以写一段没有任何作用的代码就如同说一句没有任何意思的 话是没有意义的,在这一点上两者是共同的,至于在其他某些方面两者也有惊人 的相似之处,试举一例吧,比如说可以有不同的表达表示同一个意思,如微型计 算机同个人计算机就是同一个意思,在 C 语言中比如要让变量 i 自增 1,可以有 i=i+1 或者 i+=1 等等。不过与人类语言相比,程序设计语言毕竟是与计算机交流, 交流对象计算机与人类的不同也决定了程序设计语言与人类语言还是有所区别, 甚至可以说是存在巨大的“鸿沟”,这也就是学习程序设计语言的重点。
/* Program 2*/ #include<stdio.h> main() {
char string[81]; int i,num = 0; char c; gets(string); for(i = 0;(c = string[i])!='\0';i++)
if(c != ' ' &&(string[i+1] ==' '|| string[i+1]== '\0')) num++;
“语法”,在英语中是如常见构词法、时态、常用句型、特殊用法、固定用法 等等(呵呵,不是语言专家如有兴趣可以参考英语语法书籍),仅拿构词法来说 动 词 后 面 加 er 就 变 成 名 词 ( work-worker ), 名 词 后 面 加 y 就 变 成 形 容 词 (wind-windy)等十多种变换还要记忆些特殊变换,复杂且繁琐,假如算上时态、 句型等那就更复杂了。在 C 语言中也同样也存在有语法,比如标识符、常量、 表达式、数据定义、函数定义、变量初始化、语句构成、预处理命令等大致 8 种语法,如标识符[2]可由字母、数字以及下划线组成,且必须以字母或下划线
简介
我是很乐意将计算机(程序设计)语言跟人类语言做类比的,在我看来学 习程序设计语言就想学习外语一样,通过计算机语言与计算机交流就如同在使用
外语与老外交流一样。通常学习语言比如英语有单词,语法,语义三个部分组成, 单词是构成语言的最基本的要素,语法告诉我们单词如何构成语句,语义则告诉 我们单词构成的语句的意思,类似的程序设计语言中也是有[1] “单词”,“语法”, “语义”三部分组成,其中跟人类语言一样,“单词”“语法”是基础,而为达到 交流的目的“语义”是整个程序设计语言的重点。当然相对人类语言(以英语为 例)而言程序设计语言(以 C 语言为例)显然要有简单得多的组成,所以这里 我们要首先确立自己对学好程序设计语言的信心。下面试加以说明,其中可能有 些类比不太适当,不过好像也差不多吧,你自己也可以试着举出更好的例子以使 自己更容易明白,我这里就抛砖引玉吧。
开头,区分大小写,另外在不同的编译器中字符数目有不同的规定,一般为 7
个字符。不过这里有些可能会被忽略的就是书写格式,在 C 语言中书写格式也
是需要被注意的,因为格式ຫໍສະໝຸດ Baidu可以当作 C 语言的语法项目,如语句是以分号‘;’
作为结束的标志的而不是以换行作为结束标志,其实英语也有要求比如什么时候
该使用句号什么时候该使用逗号等等只不过我们日常要求并不注意,而且也可以
总体比较三个程序,可以说类似程序 1 的错误——逻辑错误是我们程序员 比较容易犯的,也是在编程调试过程中最费时间的,至于语法错误编译器可以很
快的给我们找出错误的地方程序 2 逻辑正确但相比程序 1 思路要更难想到,程序 3 思路不但正确而且还在编程的过程中使用了一些编程技巧,所有这些开阔的逻 辑思路(解决问题),快速的调试方法及过程(发现错误),累积的编程技巧(让
看的懂所以不太较真。
总结
综上所述我们要学好一门程序设计语言首先就要像学习英语一样先熟记至少 要熟悉这门语言的“单词”和“语法”然后才能谈得上使用,俗话说“万丈高楼 平地起”,学好 C 语言的必要前提就是先打下坚实的 C 语言基础,所以潭先生的 书作为一本很好的教材,我建议是不能丢的,而且还要反复看,至少刚开始我学 习的时候上机机会不多,就是反复看懂看明白这本书,有些东西该记的还是要记 尤其是一些重要的语法比如标识符、数据类型、语句的特点、函数的占式结构, 指针的意义等等。
word = 1; num++; } printf("There are %d words in the line.\n",num); }
输入测试用例也能够完全正确,看看源程序,其中增加了一个标志位便把所有的情况给 考虑进去了,相比前一个程序,程序 2 就是直白的描述了解题的思路,而程序 3 看起来好像 不好理解但似乎更能满足我们作为“天才程序员”的欲望,这也就是编程时使用的一些小技 巧。
如 何 学 习 C 语 言
学校:西安航空学院 系别:电气系 班级:过控 1409 姓名:兰敏 学号:1130306140913
前言
两个原因促使我写下这篇文章,第一就是作为过来人根据我自己的经验我知 道编程的初学者 一般都很兴 奋也都有种困惑,一方面对运行在计算机(注:不 特别指明都指个人微型计算机)的五花八门如精彩的游戏程序,多姿多彩的网站 等等漂亮的视窗程序所着迷,另一方面大部分的初学者(如计算机专业的低年级 学生)都是从简单命令行程序“Hello world!”开始入手而且很长一段时间都无 法接触到日常经常使用的视窗程序,由此好奇者有之,迷惑者有之等等,更遗憾 的是也有少部分人因为困惑对编程逐渐失去兴趣。第二就是今天妹妹看 C 程序 设计语言的人读碰到一个例题没有看懂,而作为计算机专业毕业的老哥自然义不 容辞地承担起了讲解的任务,在噼里啪啦的大说之后,老妹终于弄懂了例题程序 的意思,但仍然不过瘾,竟然问起我如何学好 C 语言,弄得我心一惊,这里我 还是有点自知之明的,因为我知道我并不是什么大师,甚至自己对计算机世界也 经常是一片茫然,不过看着她那“崇拜”的眼神,不说点什么似乎有点不大好, 只好硬着头皮把自己以前的一些理解讲了一番。所以既然知道有这个需要,尽管 自己见识浅薄,也抱着“区区陋见假如能够对后学者能够有所帮助那是再好不过 了,即使有所偏颇当当笑话看看能有助于大家饭后生活也是美德一件”的心 情就写下了这篇文章。
先从“单词”谈起,在英语中就是由 26 个英文字母以及 26 个英文字母构 成的单词组成,学习语言我们首先应该记忆的就是“单词”,26 个英文字母 A, B,C,……然后就是令人头痛的英文单词,记忆的过程是痛苦的至少我学英语 时最恼火的地方就是反复记忆老是忘记的单词,类似的在 C 语言中我们可以作 这样的类比,C 语言的单词是由 26 个英文字母、数字(0,1,2……9)、运算符 以及其他特殊符号组成,所以相比而言学习 C 语言是多么的幸福。
编译运行,然后输入“I am a student”,得出正确答案“There are 4 words in the line.”在 输入几个类似的测试用例,都得出正确答案,最后确信无误便自信满满的交出自己的答卷。 应该说正确的输入情况下,这个程序毫无疑问是能够正确运行的,但这种正确性是非常脆弱 的,你不能指望用户和你一样聪明并且不犯错误,何况即使是神仙那也有打盹的时候。假如 用户输入“ I am a student”,“ I am a student”, “ I am a student ”……这种情况 下,你是不是应该重新修正你的思路呢?现在我这样考虑一个单词应该是字母后面紧接着一 个空格或者结束符号,所以重新写下如下程序。
/*Program1*/ #include<stdio.h> main() {
char string[81]; int i,num = 0; char c; gets(string); for(i = 0;(c=string[i])!='\0';i++)
if(c == ' ') num++;
printf("There are %d words in the line.\n",num+1); }
先小结下,由于我们在编程时需要对于输入的不可预期的程序源数据以及
提高我们自己的逻辑正确性花费更多的时间,因此这也就是我们编程训练所应该
关注的重点,而不是关注于何种实际的程序设计语言。
为了加深印象,下面我们举个实际的例子来说明这点。先看题目要求“输 入一行字符串(全字母或空格),统计其中的单词数量,单词之间用空格分开”, 应该说这是个简单的题目,有些人可能一看到这个题目很快就给出了自己的答 案。如有些人会想单词是以空格分开的,我们统计其中空格的数量再加上最后一 个单词不就是单词的个数吗,因此便很快给出如下答案。
与人类相区别,计算机最大的不同之处在于没有“自己”的“思维”,没有 像人类那样丰富的感情,所以在交流过程中对于人类的跳跃性的思维,对于人类 的“幽默”无法理解也没有丝毫的兴趣。比如说对与同样一句话“Do it”,在不 同的场景不同的说话语气,对 10 个人来说就会有 10 种不同的回答,有的人可能 会认为这是合理的要求,有的人可能会认为这可能是个玩笑而不与理睬,有的人 则可能认为语气要求有些过分而感到非常愤怒……,但对所有的计算机来说则是 严格执行。不过也正是由于计算机“机械”“笨着”的可爱而深得人们的喜爱并 被广泛使用,因为对我们来说,计算机就像一个忠实的士兵一样在执行我们的命 令并且作为指挥者,当然我们希望计算机在合适的时间干切当的事情。而要达到 这个目的,很凑巧有点类似于社会的“权利与义务”法则一样,我们也有自己的 义务那就是下达明确而又正确的“命令”。
printf("There are %d words in the line.\n",num);
}
运行一遍,发现结果是正确的,单词之间不管你是有几个空格,不管是两个也好,三 个也好都能够正确运行,但是回过头来我们看下这个程序是不是还有些可以改进的地方呢? 我们再看如下一个程序 /* Program 3[3]*/ #include<stdio.h> main() {
首先明确,即我们要在与计算机交流时“语义”必须明确,否则计算机将无 所适从,因此作为交流工具的程序设计语言的“语义”也必须是能够明确无二义 的。当然程序设计语言的设计者已经注意到这一点,在设计时就回避了这个问题, 所以我们——程序设计语言的使用者——程序员也就无须过多关注这点,也就是 说使用何种程序设计语言(C,Basic,Pascal 等)并不是我们要关注的重点。 其次正确,包括正确的输入以及正确的逻辑。由于计算机 “忠实”得有点“盲 目”以至于对事情的对错毫无判断力,就像一把枪一样,在警察手里它就是正义 的化身,而在土匪手里就成了恶魔的代言人,因此要时刻记住计算机是没有错的, “错误”掌握在我们自己手里,这也就决定了我们在编程时是不是应该投入更多 的精力来纠正我们自己所犯下的错误上面来?除此之外,我们智慧的结晶——程 序,在我们的上帝——顾客,在程序的使用者看来就像个黑匣子,他们只管输入 哪怕是错误的输入却同样期待能得到正确的结果,而对于上帝我们除了祈祷和期 望之外还能有什么选择?因此对于输入的不可预期的程序源数据,我们是不是也 应该花更多的时间进行处理呢?