很多同学到了大学迷茫、厌学,很大的原因就是不知道学这些东西有啥用,又这么难又学不会。或者还有很多同学为了考试成绩而苦读,失了学习基本的兴趣,专心服侍考试。下边是我很喜欢的一句话,每次读都能让内心一颤。
平时则放荡冶游,考试则熟读讲义,不问学问之有无,惟争分数之多寡;试验既终,书籍束之高阁,毫不过问,敷衍三四年,潦草塞责,文凭到手,即可借此活动于社会,岂非与求学初衷大相背驰乎?光阴虚度,学问毫无,是自误也!---蔡元培《就任北京大学校长演示》
1917年蔡元培就说出了这样的话,现在2014年了,每次读这段话都不得不说人家真不愧是大教育家。这话说了这么久依旧是一针见血、直抵真相!想想他老人家的话如今竟然成了“普遍现象”,真是让人倒抽凉气。
分享给大家,警钟长鸣。所以大家要明确目标--我们的目标是学以致用!不能不学 浪费光阴,也不能盲目学习充当被添的鸭子。
接下来麦粒er准备开始一个讲解C语言基础的系列文章,毕竟工科的知识还是有点难懂的,单靠这点篇幅远远不够。预计连着用六篇小文章来讲C语言入门基础知识,大致包括(C介绍、书籍推荐、关键字、运算符、控制语句、函数、还会介绍下指针和数组以便大家接着学习)抛砖引玉、各洒潘江,哈哈。
学习嵌入式需要很多科目(C语言、模电、数电、自控、信号等等)的知识结合在一起,综合能力的提升很重要的。要不然难免遇到木桶效应的尴尬。学习的乐趣是学以致用。知识就是力量吗?学会使用知识才能创造生产力,那才是力量!理论指导实践,实践践行理论,才是学习的乐趣所在。
其实大部分同学都应该学过了C语言基础了,大一的同学们正在学,大二大三的估计都忘光光了吧。其实正常,学完了用不到慢慢自然会忘。还可能当时学的不好,其实真心不用自责真心没关系,谁说必须要一次就学懂呢,不懂就不懂,以后碰到需要用的情况就接着学接着研究,几次之后总会懂的。
--说说C语言吧
上图中的老爷爷很慈祥吧。Dennis Ritchie 丹尼斯·里奇,C语言之父和UNIX之父。这个UNIX大家不熟悉,Linux操作系统可能大家都听说过,这没听过那Androi安卓大家一定一定听说过吧,安卓就是一种基于Linux的自由及开放源代码的操作系统。
1969年,通用电气、麻省理工、贝尔实验室联合研制一种叫Multics的操作系统,但研制完了发现系统太大太复杂,几乎彻底失败。
从失败项目撤出后,贝尔实验室的工程师们Dennis Ritchie和Ken Thompson设计了一个比Multics更简单更轻量级的操作系统UNIX,1970年将UNIX移植到PDP-11小型机上,但当时的高级语言BCPL(Basic Combined Programming Language,由伦敦大学和剑桥大学合作研发的早期高级语言)简称“B语言”不适合作为UNIX系统的编程语言。所以Dennis Ritchie创立了“New B”语言。很快就被人称为C语言。
C语言能干啥呢?大部分同学都能知道--编程呗,那给什么东西编程呢?又有点说不清了吧--不太清楚,但我最起码知道嵌入式系统用,C语言现在在嵌入式软件开发中的比例仍占60%左右。所以要学嵌入式,一定要学好C语言。自然随着深入还会学到更高级的语言如C++、java,但先学好C会给你的编程语言进阶提供基础。
--书籍推荐
大家学C语言的教程是谭浩强版的吧,很多人说那是国内C方面最经典之作,教材就不用我推荐了吧。
基础推荐:C Primer Plus(第五版)中文版
作者[美]Stephen Prata著 出版社:人民邮电出版社
提高推荐:C 和指针 中文版
作者[美] Kenneth A.Reek 出版社:人民邮电出版社
这书也不是我推荐,大家都说好,确实讲的比较仔细,语言也比较通俗好懂。价格都是40多元,我都买了,因为我平时比较有闲着没事就买书的习惯,大家可以去图书馆借借,也有同样习惯的同学也可以买。但买书不代表就看书,买得来书买不来知识,买书如山倒,读书如抽丝啊!
还有更高级的,我也没过,网上大家评价还不错的有《C陷阱和缺陷》、《C专家编程》等等。
--小试牛刀
给大家看两段简单的小程序,检验一下自己的C语言水平:
这段程序有问题吗?
char i;
unsigned int a[300];
for(i=0;i<300;i++)
a[300]=i;
有,因为char是无符号数(ARM编辑器的编译环境中),它的范围是0至255。所以i会永远小于300,所以这个循环永远不会退出。程序也就卡死在这了。
还有
if(x[i]>MAX);
MAX=x[i];
和
if(x[i]>MAX)
MAX=x[i];
有什么区别?[这个给大家思考思考 周三把答案发给大家]
给大家看看这两段小程序就是让大家回忆回忆C语言的知识。这周的小文章就这样吧,下周就要介绍关键字、运算符这样的真材实料的知识啦。
大一正在学C的孩子们,拿出书来翻翻查查,大二大三C结课了的孩子们,快去把收起来的C语言书找出来吧!
if(x[i]>MAX)
MAX=x[i];
和
if(x[i]>MAX);
MAX=x[i];
有什么区别?
答案公布:
其实大家仔细看看,会发现两段代码的区别在于那个;分号。对啊,区别就是这一个分号的。但功能上却有很大区别。
先看
if(x[i]>MAX)
MAX=x[i];
这里运用了一个C语言里常用的if判断语句:这里的if...else...是C语言里的控制语句关键字。
下边列举我总能用到的if...else...条件判断语句的变形形式。
1./*只有if判断没有else的情况*/
if(条件表达式)
{
执行表达式1;
执行表达式2;
...
}
2./*既有if还有else的情况*/
if(条件表达式)
{
执行表达式1;
执行表达式2;
...
}else{
执行表达式3;
执行表达式4;
...
}
3./*有多个if...else...嵌套的情况*/
if(条件表达式1)
{
执行表达式1;
执行表达式2;
...
}else if(条件表达式2)
{
执行表达式3;
执行表达式4;
...
}else{
执行表达式5;
执行表达式6;
...
}
显然上边的
if(x[i]>MAX)
MAX=x[i];
是第一种情况,只有if判断没有else的情况
x[i]>MAX是条件表达式,MAX=x[i]是执行表达式,语句进行判断如果符合x[i]>MAX条件表达式的条件,执行MAX=x[i]执行表达式,然后;分号表示语句结束。如果不符合x[i]>MAX条件表达式的条件,就会跳出判断语句,语句结束。(补充说明一下,当if语句只有一条执行表达式时,{}可以省略。自然如果把上句写成:
if(x[i]>MAX)
{
MAX=x[i];
}
会更标准。)
再来看看下边的
if(x[i]>MAX);
MAX=x[i];
;c语言中,分号结尾代表语句结束,所以这段的代码是两个语句而不是一个。
第一个语句是if(x[i]>MAX);,也是第一种情况,只有if判断没有else的情况。x[i]>MAX是条件表达式,那执行表达式是什么呢?此句的执行表达式位置没有写东西,即为空白,也就是什么都不执行。
x[i]>MAX是条件表达式,空白是执行表达式,也就是什么都不执行。语句进行判断如果符合x[i]>MAX条件表达式的条件,什么都不执行,然后;分号表示语句结束。如果不符合x[i]>MAX条件语句的表达式,当然什么也都不会执行,就跳出判断语句,语句结束。
代码从上到下执行,自然接着向下执行了。第二个语句是MAX=x[i];就是把x[i]数组里第i个元素赋值给MAX。
从语法书写上来说这段代码是没有问题的,但在执行结果上却存在问题。就是无论是否符合x[i]>MAX是条件表达式,都会得到MAX=x[i]的结果,那判断就跟没判断一样,这当然不是语句的本意。
举个例子:比如写完这篇小文章,我当然要保存了,我点击了“保存按钮”,判段“电脑提示保存成功”还是“电脑提示保存失败”和我接下来执行的动作“关闭编辑页面”
if(电脑提示保存成功)
关闭编辑页面;
那就是我只有当“电脑提示保存成功”时才会关闭编辑页面。
if(电脑提示保存成功);
关闭编辑页面;
如果我这么执行,那当“电脑提示保存成功”或“电脑提示保存失败”时,我都会接着把编辑页面关掉,那我不是白打字这么半天,这显然不是我想要的。
大家编程时,语法的错误(比如关键字写错,有些变量没有定义)编译软件会报错,还会提醒大家错误代码的位置,这还算比较好的情况。如果一段代码没有报错,但是烧写到单片机里执行的结果却不对,这就很让人头疼了!因为这是语意错误,就得自己一点点在大段的代码中排除,可能就是因为一个分号啊。
举个例子:比如你想跟一个姑娘表达:“你比我见过的所有女生都优秀!”
但是说错了,说成“你比我女生见过都秀优所有的!”女生就会提示你“说人话好吗?同学!”,这还算比较好的情况。(语法错误,编译软件会提示错误,且错误代码不执行)
如果说错了,说成“我见过的所有女生都比你优秀!”,亲,恭喜你没有语法错误了。这时估计那姑娘也不会说什么,只是默默的走开了,大错也就铸成了。(语意错误,编译软件不会提示错误,且代码正常执行---因为编译软件也不知道你本来想表达的意思)
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1