分享

C语言教程第一章 概览

 杨贵妃妃 2016-03-09



路人甲:Hello!C!
路人乙:Hello!C!
路人丙:Hello!C!
路人丁:每天都有C的问候!
欢迎来到C世界!你将用这款世界上最美妙的高级编程语言去创造奇迹。

为什么学习C语言?
高级语言现在已经有很多,但是流行的却只是主要的几款,在基础教育教学中,我们应该遵循BASIC-PASCAL-C的过程。这是由语言所体现的目的不同而造成的过程的不同。BASIC尽力的模仿英语,这样就使初涉计算机的小学生根据他们的思维去写出让他们兴奋的玩意,而PASCAL的严谨代码风格使她在各大竞赛和培养后进程序员中大放异彩。而C,作为一个编程者的使用工具,她是秉承着使用为目的的。C完全是为了创造而服务的。

JAVA?C++?DELPHI?     NO!ONLY C.
今天的C语言,是高度成熟的产物,在过去的几十年中,已经发展成为最重要和最流行的编程语言之一。不仅如此,她对其他的语言仍有非常重要的借鉴意义。正如众所周知,在C++的道路上一定有C的陪伴。

C的羞处
我们略去C的优点不谈,因为这一部分内容你可以在网上轻松找到。下面简要的说一句关于C语言的缺点,就是代码的复杂度。因为C语言是以程序员使用为目的的,它大量的使用了不常用的字符来表达抽象含义,这就使原本的思路复杂化和可读性的下降。要克服这个缺点确实很难,但是你会慢慢发现,你越深入的学习到C语言,就会有意识的增加你程序的可读性,某种意义上讲,这个缺点并非是个巨大的缺点。

怎样写出C程序?
如果你读过其他C语言教程,就会发现很多人把精力放在了研究C语言的历史上,实际上这是一种不成熟的表现,因为我们大家都知道一个事实:即使你对编程语言毫无所知,你仍然可以很好的使用它。所以,除了历史之外,以下七个步骤是在学习C语言的过程中绝对不可不知的:
1.定义程序目标
2.设计程序
3.编写代码
4.编译
5.运行程序
6.测试和调试程序
7.维护和修改程序
以上七点是《C Primer Plus》中对使用C语言设计程序所提出的七大步骤。在实际操作中,其实这7个步骤是互相咬合,互相支援的。很多书籍中把这个观点忽视了,以至于读者们弄不清到底要以什么样的路线来设计程序。我想,上面提到的步骤,将对你是一个很好的启示。

{笔者补记}
以上就是所写的概论,关于C语言的提要知识,只需要知道这么多,因为无论是编译机制还是运行原理,我们都交给计算机去做吧。不过有兴趣,你可以读读本章附记,我会在那里作出大量的扩展。


好吧,让我们看看第一个程序:Hello world!
首先我要先扯两句,Hello world!是一个非常有趣和经典的问题,这个程序基本上包含了一个语言的最基本结构:
<------------------------------------------------------------------------------------->
//hello.c
#include//stdio库
int main(void)//main函数
{
   printf('Hello world!\n');//程序输出
   getch();//截断程序
   return 0;//返回值
}
<------------------------------------------------------------------------------------->
什么?看不懂程序?好吧,让我们慢慢来。不要着急,在你的NOTEPAD2中打下这段代码[不要复制]然后放进编译器里运行看看。
如果不出我只所料,你的编译器会出现下面一行字
Hello world!
并且光标在它的下一行,而且你再次ENTER一下,就会跳出程序了。
目前为止,你做的很好,关闭编译器,把它放到你的代码文件夹里吧!

{程序解释}{虽然这段文字又臭又长,我还是推荐你耐心的读下去}
关于这个程序,我有几点说明,以期让你对C有个概念。是的,仅仅是概念。
①看到//hello.c这句话了么?它在程序里不起任何作用,仅仅是注释,你不带它进入程序的运行仍然可以得到同样的效果。同样的,诸如“//stdio库”、“//main函数”、“//程序输出”等等都是注释,注释的作用是让你更明白。
在C语言中,注释的表达方法有两种,第一种就是这个极为简便的//,但是它只对一行起作用。它的使用是用来标明某一行代码或某一段代码的作用,这样再次阅读自己的程序的时候,就会非常清晰,也能顺利的进行下一步的工作了。另外一个重要的作用是在调试过程中的使用,行话叫做“注释掉”,“将某行代码注释掉”就是说在此行的开头打上//,用来看看不要这一行会造成什么结果,当然,如果你想注释掉一段代码,那么你将会对下面这种方法感兴趣。
另外一种表示方法是我个人非常不喜欢但却非常有用的方法,它在注释掉一段代码的时候非常方便,而且在写大量注释来解释程序的时候,你也不得不选择他来使自己注释的篇章结构看起来更有序,就是/* */,注意这是一对。如果你有PASCAL的设计经验,它就相当于{}。看个例子吧,比如还是注释hello.c这句话,我们就要/*hello.c*/这样写,当然,现在你看到他是非常的难写,但是如果是下面这个例子的话,我想你会选择这个的:
<------------------------------------------------------------------------------------->
/*
在C语言中,注释的表达方法有两种,第一种就是这个极为简便的//,但是它只对一行起作用。它的使用是用来标明某一行代码或某一段代码的作用,这样再次阅读自己的程序的时候,就会非常清晰,也能顺利的进行下一步的工作了。另外一个重要的作用是在调试过程中的使用,行话叫做“注释掉”,“将某行代码注释掉”就是说在此行的开头打上//,用来看看不要这一行会造成什么结果,当然,如果你想注释掉一段代码,那么你将会对下面这种方法感兴趣。
*/
<------------------------------------------------------------------------------------->
看到了么?在大段文字的注释的时候,这就显得方便了许多,而你用//则要对键盘进行12次操作,是这对命令的3倍,从长远来看,你这是不可持续发展。明白了注释,我们看下一句代码。
②#include
这是一个头文件。很多人,包括我在内在刚刚开始的时候都对这样一个文件抱有强烈的好奇心,什么是头文件。这是一段为你编写好的代码,里面包含了很多很有用的函数,甚至可以说,如果你不去申请用头文件,那么你的编程工作将举步维艰,因为你面临着编写大量函数的困难,而且时间效率却比系统默认的函数还低。
怎么理解它呢?不必理解,就当成是一种初始化命令即可,我们未必要去真正理解它的运作原理,如果你真的要管窥一二,那么请阅读本章附记,里面可能会有你想要的答案。
好的,那么怎么申请头文件呢?上面的那句话又是什么意思呢?
首先,上面的那句话就是调用stdio.h这个库(=头文件),这个库里包含着很多关于输入输出的函数,虽然原则上因为输入输出非常多,以至于现在的编译器已经默认的添加了stdio.h到每个被编译的程序,我仍然推荐加上这句话,似乎没有这句话就不太像C程序似的。
其次,怎么申请使用头文件呢?有一个固定的格式:#include这里面的xxx是指某一个头文件。
另外,关于这些说明的位置,你须将其放在主程序之上。
有了stdio.h,是到了撰写主程序的时候了。
③int main(void)
这句话是一句非常重要的代码,首先,我们要认识一个概念,就是函数。
所谓函数,就是一段以返回值为目的的代码,在有些时候,需要反复调用有某个作用的代码的时候,就必须用到函数来简化程序。但是函数所能执行的功能却不止于此,如果你有PASCAL程序设计经验的话就会知道,子程序的类型大约可分三种:1.直接嵌在主程序中的。2.过程。3.函数,C是一门函数化语言,所以这里的函数身兼两职。现在理解到这种地步就可以了,现在来解释一下这句代码:
int 这是一个整数类型(integer)的数据标识,表明了main的函数运行后将会返回一个整数。在这里要做一下说明,就是返回的这个值到底有用没用我们不必清楚,即我们希望它有用,我们可以调用它,如果没用,那我们也不必理会。
除了上面,我还要再进一步说明,就是如果你希望函数不返回值,那么就在int该待的地方替换成为void,它表示函数不返回值,即无。
main() 你可能会感到奇怪,括号里面的void呢?事实上,main函数最基本的原型就是这样,void只是表明了main中没有任何可传递和可利用的变量而已。
你要注意,在一个程序中,有且仅有一个main函数,即你必须在主程序开始前写上main函数。
void 实际上上面关于void的说法都是片面的,即不准确的。void是一个标识,这个标识是用来表示无的,在C语言中,无和空是两码事。
好像听不懂对吗?仔细理解一下,琢磨一下,看看有没有什么收获?如果不能的话,不妨把这句话当做一个格式记下来,因为你下面几乎所有的程序都会用到它。
④{} 看到了么?在程序头和程序尾都会有这样的一对大括号出现,它标识了一个程序或者子程序的界限。它们总是成对出现,如果你对C语言感兴趣的话,那么你将对他毫不陌生,心领神会。
⑤printf('Hello world!\n');
这是我们将要学到的第一个系统函数,printf函数,这个函数的作用很明确,它似乎是由英文单词print file得来,在这里,我们先来了解它的局部性质,至于他所有的性质和结构,我们将在以后的课程中逐渐提到。
首先打印的文字是一定要用双引号括起来,其次在某一段将要打印的字符的末端要写上打印格式的代码,如这里的\n,但是一定要写么?不,这只是帮助你更好的把代码输出出来。
你大概看到了一些东西的一些部分性质,现在不便和你讨论,你只需要知道目前它的作用就好了,如果你想知道更多,本章附记也不会提到。你可以去查一下,看看到底有什么更具体的性质。
最后,我要告诉你一条规则,就是在每一句话的后面,都要加上分号“;”,记住是每一句!如果你不行打成了冒号或根本没打,这样的错误总是会让你懊恼不已。
到此为止,我们的主要任务已经完成了,好吧,让我们看看善后工作。
⑥getch();
   return 0;
这两行代码几乎在你初学C语言的时候相伴左右,形影不离,getch是你在没有大规模的进行文件操作的时候常用的代码。它的作用就是在你所有的工作完成之后,也输出出来之后,在编译运行后暂时让程序停下来,以便让你看到你的程序所运行的结果。实际上它也是一个非常有用的函数,不过我们在这里就先不提了。
第二行代码所返回的是main函数的值,还记得么?你当时定义main的时候,曾意气风发的写下如下代码:int main(void) 这就注定了一定要有返回值,一定要有一个整数的返回值!
呼~一下写下了这么多,你们读着累,我写着也累。好吧,我们第一个程序分析结束,这是你可以和不懂C语言的家人或同学大吹你刚才所写的程序。可以趁机喝点水,可以上趟厕所。实践表明WC也是C的问候。
  
{学习原则}
在学习C语言的时候,首先要想清楚以下几件事:
有没有一个很好的,让你用得很舒服的文本编辑器?因为你不总是能用编译器去写代码。
有没有一个你用得很舒服的编译器?因为不同编译器的个性不同。
有没有一个专门储存代码的地方?这一点很重要,当你陷入僵局的时候,翻翻前面的代码,也许会让你灵光乍现。
有没有一个固定的书写习惯?记住,适合自己的才是最好的,别听别人瞎扯,只要你的智商够高,即使你把自己的程序写的云里雾里,你仍然能够清晰的看出,夫复何求!不过有一点你必须要注意,就是你的注释必定要清晰明朗,因为在真正的开发工作的时候,你不是一个人在战斗。代码风格也许不一样,但是绝不要让别人看不懂。如果看不懂,那么好吧,你浪费了生命,同时浪费了其他人的生命。在此我推荐《C Primer Plus》的写法,因为和我的行文习惯一样(^_^)。即同样地位的代码对齐,比它第一级的代码要有两个空格。另外{}各独占一行,如果想了解更多。百度一下,你就知道。
{感想提要}
学习一门编程语言靠什么?我想毅力和梦想即是答案。我曾经在PASCAL语言上苦苦求索了三年,我在这三年的学习生涯当中看到了很多这样的人。他们的手指在键盘上轻轻抚摸过去,一行行诗一样错落有致的代码即在屏幕上显现。
在这样荣耀的背后,你知道他们付出了怎样的努力么?
曾几何时,在你一个程序只写一遍的时候,他们竟写了几十遍。他们之所以出手成章,其根源来自于他们对梦想的追求,有了对梦想的追求,那么毅力也就彰显了。这篇概说完全是我几年来积攒下来的基础经验的基本总结,这些对特性的理解建立在数万行的代码上和一次次的失败上。更甚者,建立在痛苦与折磨之上。而一个程序员,必然要经过这一个时期,一旦走过,便得心应手。我仍在这样的道路上苦苦挣扎,你呢?
{本章附记}{简化版没有附记,请下载word文档}
{参考文献}
《C Primer Plus》
http://baike.baidu.com/view/2319743.htm?fr=ala0

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多