贾柳楼分享 http://blog.sciencenet.cn/u/jiatong123

博文

[2011-09-27]C语言学习笔记(1)-综述

已有 4245 次阅读 2011-9-27 20:57 |个人分类:C/C++/VC++|系统分类:科研笔记| windows, 程序设计

本篇笔记主要回答如何学习程序设计语言、Windows系统的内部运行机制、Windows下编程的学习等问题。

1) 如何学习程序设计语言?

学习编程需要经历三大步:一、读程序;二、写程序;三、积累功能代码段。

a)读程序

在没有阅读过一份完整的源代码之前,别指望能写出有多好的程序!读程序必须具备一定的语言基础知识,基础知识主要是指语法知识,最起码要能读懂程序的每一行意思。有没有程序的设计思想,在这个时期并不重要,只要具备一定的语法基础就可以了。

 学一门语言并不需要刻意去记条条框框的语法,看代码的时候,遇到了不明白的地方再去 查相关的资料,补充基础知识再配合源程序的思路,这时的理解才是最深刻的。

b)写程序

 刚开始写程序,不要奢望一下子写出很出色的程序来,“万丈高楼平底起”,编程贵在动手,只要动手去写就可以了。此外,还要依照自身的能力循序渐进地写,开始的时候写一点功能简单的、篇幅短小的代码,力求简洁、完整,然后在此基础上进行扩充,一点点的添加功能。

c)积累功能代码

 积累非常的重要,将平时自己写的和自己已经读通的程序分类保存起来,建一个属于自己的代码库,需要相关功能的时候,就到代码库中找相关的代码。这样既提高编码的效率又提高了正确率。

-------------------------------------------------------感悟---------------------------------------------------------

看 似很难回答的问题,其实最简单,就是从最原始的地方做起,曾经上过C语言课,那个老师是外聘的,特别不负责任,搞得我们一年几乎啥都没学到,后来到大二时 张黎宁老师的数据结构课程我才算是真正的重新学了遍C语言,因为那五次算法的程序实现我都是一点点一句句自己敲出来的,现在依稀还记得有链表结构、二叉树 查找与遍历、数据存储与查找那些内容,当时用的教材是清华大学严蔚敏的数据结构。个人感觉数据结构对于程序设计人员来说很关键很重要,它阐明了数据组织与 存储的结构和使用的过程,是一切与数据有关的程序设计都不可避免的东西,真的很庆幸,当初遇到了张老师,孙然那几次上机作业我基本上都是费了了九牛二虎之 力自己做出来的,收获很大。很可惜的是,我没有电脑,就把自己的程序资料都存放在实验室电脑上,现在都找不到了,太可惜了。一起丢失的还有大学阶段几乎所 有的程序设计的资料。

    对于第三点,现在真的能体会到,其实觉得自己程序设计的水平不差,但心里总感觉没底,因为自己肚里到底有多少货,自己真的不清楚,就是因为之前的而积累没 有保住。孙认识你过了二级、三级,但我知道那些都是在考前强化的结果,我自己的水平,过一段时间都不敢再去回想了,抓紧形成自己的保存程序,加油!


2)Windows系统的内部机制是怎样的?

从 理论上说,任何一门语言可以在任何一个操作系统上编程,C语言可以在Windows下编程,同样也可以在Linux下编程。在Windows平台下,目前 主要采用C/C++语言。编程是一项比较综合的工作,除了熟练使用编程工具以外,还要了解系统本身的内部工作机理和编程语言,下面简述Windows系统 的内部机制。

Windows 是一个“基于事件的,消息驱动的”操作系统。在Windows下执行一个程序,只要用户进行了影响窗口的动作(如改变窗口大小或移动、单击鼠标等)该动作 就会触发一个相应的“事件”。系统每次检测到一个事件时,就会给程序发送一个“消息”,从而使程序可以处理该事件。即程序对该事件做出响应,处理完以后, 再等待下一个事件的发生。

与Windows系统密切相关的八个基本概念分别是:窗口、程序、进程、线程、消息、事件、句柄、API与SDK

1、窗口

窗口是Windows本身以及Windows 环境下的应用程序的基本界面单位,但是很多人都误以为只有具有标题栏、状态栏、最大化、最小化按钮这样标准的方框才叫窗口。其实窗口的概念很广,例如按钮和对话框等也是窗口,只不过是一种特殊的窗口罢了。

2、程序

通常说的程序都是指一个能让计算机识别的文件,接触得最多的是以exe或者com作为扩展名的文件。

3、进程

进 程就是应用程序的执行实例(或称一个执行程序),进程是程序动态的描述。一个以exe作为扩展名的文件,在没有被执行的时候称之为应用程序,当用鼠标双击 执行以后,就被操作系统作为一个进程执行了。当关机或者在任务栏的图标上单击鼠标右键选“退出”时,进程便消亡,彻底结束了生命。进程经历由“创建”到 “消亡”的生命期,而程序自始至终存在于你的硬盘上,不管计算机是否启动。

4、线程

线程是进程的一个执行单元,同一个进程中的各个线程对应于一组CPU指令、一组CPU寄存器以及一个堆栈。进程本来就具有动态的含义,是通过线程来体现的。

5、消息

消息是应用程序和计算机交互的途径,在计算机上几乎做每一个动作都会产生一个消息,鼠标被移动会产生WM_MOUSEMOVE消息,鼠标左键被按下会产生WM_LBUTTONDOWN的消息,鼠标右键按下便产生WM_RBUTTONDOWN消息等等。

6、事件

从字面意思就可以明白它的含义,如在程序运行的过程中改变窗口的大小或者移动窗口等,都会触发相应的“事件”,从而调用相关的事件处理函数。

7、句柄

单单一个“柄”字便可以解释它的意思了,句柄是一个指针,通过句柄就可以控制该句柄指向的对象。编写程序总是要和各种句柄打交道的,句柄是系统用来标识不同对象类型的工具,如窗口、菜单等,这些东西在系统中被视为不同类型的对象,用不同的句柄将他们区分开来。

8、API与SDK

API是英文ApplicationProgramming Interface 的缩写,意思是“应用程序接口”,泛指系统为应用程序提供的一系列函数接口。在编程的时候可以直接调用,而不必知道其内部实现的过程,只知道它的原型和返回值就可以了。

SDK是英文SoftwareDevelopment Kit的缩写,意思是“软件开发工具包”,微软提供了许多专门的SDK开发包,比如DirectX开发包和语音识别开发包等等。

-------------------------------------------------------感悟---------------------------------------------------------

1)当初大三上曾经上过操作系统课程,当时也是很努力的去听了,但感觉好像没有这样八个关键概念展示得简洁明了,这个应该是事件处理的角度去分析操作系统的工作机制的,正好适合于对程序设计的理解,也许是当初没有领会到这一点吧,呵呵!

2) 关于第八个API与SDK概念,研一阶段参与的项目中涉及的无线传感器网络监测系统设计,使我深深地体会到了这一点。因为在接触这个设计之前,我所经历过 的的只有基于单片机的设计,设计过程中所有单片机的资源都可以直调用,毕竟不是很复杂,资源也不是很多。但是经过近一年的设计发现,那些都是有用的,但远 远不够,各种不同场合对处理器的要求越来越高,处理器的发展也越来越迅速,速度越来越快,资源越来越丰富,必须采用这种API接口的方式,才能够适应开发 的要求。处理器的生产商将底层的东西固化,同时提供API接口和开发包,这样个适合于产品的推广和应用,也便于开发者进行设计。

但 是这样做,也有个弊端,就是对开发者而言,这样做的收获好像没有长久的进步,因为从事了一个产品的开发和应用,只是对他熟悉了,换了一个还得从头再来和熟 悉。虽说多经历几次会熟练些,但总感觉这样不能够获得核心的技术和长进,这样的长久结果,感觉一般的开发者就像是做研究开发的工具一样。这个想法可能不是 很对,可能技术的发展就是要模块化和流水线化,但我现在就没有了当初进行单片机开发时的实在感,呵呵!

 

3)Windows下编程的学习

学 习语言,选择语言和工具是第一步,而且是非常重要的一步工作,目前的编程语言那么多,有C、C++、C#、Java和汇编语言等等。虽然有很多语言,但只 要精通一门就够了。从实用的角度来讲,C/C++是最好的选择,而微软公司的VisualC++和Insprise公司(原Borland公司)的C++ Builder是其相应开发工具的两大主流。在开发工具上,选择比较流行的VC++6.0,而且最好是英文版本;在选择编程工具上,目前流行两大语法体 系:Basic语系和C语系。同一个语系下语言的基本语法是一样。

C语系:C语言/C++语言/Java语言/Perl语言/C#/JavaScript;

Basic语系: Basic语言/VB6.0/VB.NET/VBScript/VBA;

C 语系中,目前两大语言如日中天:C++和Java。C++适宜做系统软件的开发、Java更适宜做网络应用开发。虽然VC++.NET已经面世很久了,但 是C++的开发工具目前主流依然是VC++6.0和C++ Builder6.0。Java流行的开发工具比较多,比如:IBM公司的Visual Age和Websphere Studio,Insprise公司JBuilder等等。

VC++是基于C/C++的集成开发工具,目前最常用的版本是VC++6.0。VC++有一套集成开发工具,其中包括各种编辑器、编译工具、集成调试器等等。在编写程序的过程中,各种操作都可以通过单击相应的菜单完成。

-------------------------------------------------------感悟---------------------------------------------------------

其 实自己一直想对比各种编程语言,分析它们的特点和优劣,但一直感到自己没有那种能力,就是因为没有经过各种语言的应用经验,没法高屋建瓴地进行比较和选 择,今天看到这个有种茅塞顿开的感觉,可能是我水平确实不够,但看到这些比较和说明,心里还是比较兴奋,我喜欢这种从整体上指点江山的感觉,哈哈!



https://wap.sciencenet.cn/blog-494374-491108.html

上一篇:[2011-09-16]丁肇中东南大学报告-"AMS研究进展"有感
收藏 IP: 121.249.25.*| 热度|

3 陈小润 陈绥阳 dulizhi95

该博文允许注册用户评论 请点击登录 评论 (3 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-23 18:56

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部