找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2273|回复: 2
收起左侧

C语言基础教程(1)-前奏

[复制链接]
ID:99082 发表于 2015-12-10 03:27 | 显示全部楼层 |阅读模式
--C语言开讲啦系列大致介绍


很多同学到了大学迷茫、厌学,很大的原因就是不知道学这些东西有啥用,又这么难又学不会。或者还有很多同学为了考试成绩而苦读,失了学习基本的兴趣,专心服侍考试。下边是我很喜欢的一句话,每次读都能让内心一颤。

平时则放荡冶游,考试则熟读讲义,不问学问之有无,惟争分数之多寡;试验既终,书籍束之高阁,毫不过问,敷衍三四年,潦草塞责,文凭到手,即可借此活动于社会,岂非与求学初衷大相背驰乎?光阴虚度,学问毫无,是自误也!---蔡元培《就任北京大学校长演示》

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语言书找出来吧!


以下是本系列教程文章列表:欢迎大家踊跃讨论,有问题可在51黑论坛回帖提出.


C语言基础教程(1):http://www.51hei.com/bbs/dpj-41177-1.html
C语言教程(2)-关键字 变量:http://www.51hei.com/bbs/dpj-41178-1.html
C语言教程(3)-控制语句:http://www.51hei.com/bbs/dpj-41179-1.html
C语言教程(4)-运算符:http://www.51hei.com/bbs/dpj-41180-1.html
C语言教程(5)-函数:http://www.51hei.com/bbs/dpj-41181-1.html
C语言教程(6)-数组与函数指针:http://www.51hei.com/bbs/dpj-41182-1.html

51单片机教程:http://www.51hei.com/bbs/mcu-xuexi-1.html
STM32教程:http://www.51hei.com/bbs/dpj-41167-1.html
回复

使用道具 举报

ID:99082 发表于 2015-12-10 03:30 | 显示全部楼层
周一更新的小文章里留了个问题啊,大家想明白了没?


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(电脑提示保存成功);

关闭编辑页面

如果我这么执行,那当“电脑提示保存成功”或“电脑提示保存失败”时,我都会接着把编辑页面关掉,那我不是白打字这么半天,这显然不是我想要的。

大家编程时,语法的错误(比如关键字写错,有些变量没有定义)编译软件会报错,还会提醒大家错误代码的位置,这还算比较好的情况。如果一段代码没有报错,但是烧写到单片机里执行的结果却不对,这就很让人头疼了!因为这是语意错误,就得自己一点点在大段的代码中排除,可能就是因为一个分号啊。

举个例子:比如你想跟一个姑娘表达:“你比我见过的所有女生都优秀!”

但是说错了,说成“你比我女生见过都所有的!”女生就会提示你“说人话好吗?同学!”,这还算比较好的情况。(语法错误,编译软件会提示错误,且错误代码不执行)

如果说错了,说成“我见过的所有女生都优秀!”,亲,恭喜你没有语法错误了。这时估计那姑娘也不会说什么,只是默默的走开了,大错也就铸成了。(语意错误,编译软件不会提示错误,且代码正常执行---因为编译软件也不知道你本来想表达的意思)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表