1.啥叫编程

编程乃编写程序的简称,所以要想知道啥叫编程,首先要清楚什么是程序(Program)。

普及一点计算机小知识:从根本上说,计算机是由数字电路组成的运算机器,处理的数字也仅限于0和1组成的数字串,也就是二进制范围内的运算,至于运算的具体细节在这里就不细说了。

回到程序上来,什么是程序呢?

程序由一系列指令(Instruction)组成,指令是指示计算机做某种运算的命令。

程序就是通过一系列指令的集合,告诉计算机应如何完成一个计算任务。这里的计算可以是数学运算,比如解方程,也可以是符号运算,比如查找和替换文档中的某个单词,甚至可以处理声音和图像。

根据前面提及的计算机小知识,相信大家也能得出结论:除了数学运算,程序之所以能做符号运算,声音和图像处理,是因为这些内容在计算机内部也是用数字表示的。这些数字经过专门的硬件设备转换成我们的所见所闻。(如显卡、声卡等硬件设备)

到这里,我们大体上就知道啥叫编程了。编程就是编写能够让计算机完成某项任务而执行的程序。

2.用啥编程

人类语言的产生是为了人与人之间的沟通,计算机编程语言的产生则是为了人与计算机之间的沟通,我们正是用计算机编程语言进行编程。

与人类语言一样,计算机编程语言也是逐步发展丰富的。那就先从最原始的编程语言,即机器语言开始说起。

所谓机器语言,通俗讲就是计算机能够直接理解并执行的语言,也就是由0,1组合串构成的语言(原因可从前文获知^_^)。这些0,1的组合并不是任意的,而是受到限制的。那具体是什么限制呢?受指令集限制。

所谓指令集,就是CPU中用来计算和控制计算机系统的一套指令的集合,而每一种CPU在设计时就规定了一系列与其他硬件电路相配合的指令系统。换言之,不同的CPU它的指令集是有差别的。

我们在用机器语言编写程序时,只能用它完成当前指令集的描述和组合,超出这个范围CPU自然就无法识别程序意图了。

现在我们下这样两个结论:a.机器语言写出来的程序满篇都是0和1;b.在张三型号CPU环境下写的机器语言代码拿到李四型号CPU的计算机上去,多半是无法运行的。(指令集不同所致)

由于原因a,机器语言太难写难记,更难改----想象一下一万行0,1组成的代码里有某个1错写成0了,你找找试试。于是发展出了汇编语言,它给0,1组合而成的指令起了好记的名字,如指令“1010000100011100”(十六进制表示)起名叫mov,“100000111100000000001”起名叫add。这样一来,指令就好记了也好用好改了。不过问题是,计算机无法直接读懂了(它可不知道啥叫mov,add)。怎么办?想想你如果想跟火星人沟通怎么办?找个懂火星语的好翻译呗。这里也是,把汇编语言翻译成机器语言即可,这个翻译工具就叫汇编器。

汇编语言跟机器语言的关系决定了它也具有b的特征,此特征在计算机界有个术语叫“可移植性差”。谁都想为了解决某个难题写的程序拷贝到其他的计算机上也能运行。于是计算机编程又进一步发展,诞生了高级编程语言,C语言就是其中灰常灰常经典的一个。

高级编程语言克服了a,b两点,但由于将高级语言翻译成机器代码的过程很复杂,耗时多,所以执行效率高级语言比不上前面的两种低级语言。不过由高级语言带来的便利那可是数不胜数的,so,由此计算机编程开始遍地开花,进入寻常百姓家。

至于高级语言翻译成机器代码的过程这里略过,只提两个翻译有关的名词,编译和解释,具体介绍诸君可以看维基,阅百度,找Google。

3.程序好编吗

简单的好编复杂的难(这不废话吗)。编程能力是日积月累,不断提高的一个过程。

计算机指令通常只包括以下5类:

输入(Input)类:从键盘、文件或者其它设备获取数据。

输出(Output)类:把数据显示到屏幕,或者存入一个文件,或者发送到其它设备。

基本运算类:执行最基本的数学运算(加减乘除)和数据存取。

测试和分支类:测试某个条件,然后根据不同的测试结果执行不同的后续指令。

循环类:重复执行一系列操作。

我们编程就是用对应的五类语句组合起来去解决问题,而组合的思路我们称为算法。

C语言中对应的这五类语句,以及应试类程序设计所涉及的算法,后面会逐一介绍。

初识C(1)----与C基本无关的开篇的更多相关文章

  1. 为什么mysqlbinlog --database选项不起作用

    群里看到有同学提问,多瞅了眼 [root@mysql55 mysql]# mysqlbinlog --no-defaults -vv --base64-output=decode-rows mysql ...

  2. 初识Java

    Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以极强的安全性.平台无关性.硬件结构无关性.语言简洁.面向对象的特点,在网络编程语言中占据了无可比拟的优势 ...

  3. Java初识

    基础概念 特点: 完全面向对象,动态 解释性,简单.易移植,跨平台 安全健壮,高性能 多线程,分布式 三种核心机制: Java虚拟机 Java Virtual Machine 垃圾收集机制 Garba ...

  4. hadoop初识

    搞什么东西之前,第一步是要知道What(是什么),然后是Why(为什么),最后才是How(怎么做).但很多开发的朋友在做了多年项目以后,都习惯是先How,然后What,最后才是Why,这样只会让自己变 ...

  5. 初识 Android

    创建博客有一年的时间了,一直没把它用起来,颇感惭愧.近日突感有写博客的冲动,更可怕的是这种冲动似乎比我体内的洪荒之力更为凶猛.于是乎,这篇博客悄然诞生.废话不多说,进入正题--初识Android. 这 ...

  6. Java 面向对象编程——第一章 初识Java

      第一章    初识Java 1.  什么是Java? Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以其强安全性.平台无关性.硬件结构无关性.语言简 ...

  7. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  8. [翻译]初识SQL Server 2005 Reporting Services Part 4

    原文:[翻译]初识SQL Server 2005 Reporting Services Part 4 这一篇是关于SQL Server 2005 Reporting Services四篇文章中最后一篇 ...

  9. 第二章 初识JSP

    第二章   初识JSP 一.JSP简述 1.是JSP JSP是指在HTML中嵌入Java脚本语言.全称(Java Server Pages) 当用户通过浏览器访问Web应用时,使用JSP容器对请求的J ...

随机推荐

  1. 《转载》深入理解 CSS 中的行高与基线

    这篇文章总结的很好,故转载收藏. 1.基本概念 1.  基线.底线.顶线.中线 注意:基线(base line)并不是汉字文字的下端沿,而是英文字母“x”的下端沿. 2. 内容区 内容区是指底线和顶线 ...

  2. poj3122--二分加贪心

    大致题意: 就是公平地分披萨pie 我生日,买了n个pie,找来f个朋友,那么总人数共f+1人 每个pie都是高为1的圆柱体,输入这n个pie的每一个尺寸(半径),如果要公平地把pie分给每一个人(就 ...

  3. Python核心编程读笔 2

    第三章 python基础 一.语句和语法 \n 标准的行分隔符 \ 继续上一行 ; 将两个语句连接在一行 : 分开代码块的头和体 代码块以缩进块的形式体现 python文件以模块的形式组织 二.变量赋 ...

  4. c++多线程同步使用的对象

    线程的同步 Critical section(临界区)用来实现“排他性占有”.适用范围是单一进程的各线程之间.它是: ·         一个局部性对象,不是一个核心对象. ·         快速而 ...

  5. C++中将int转变成string和string转变成int

    int to string #include<iostream> #include<string> using namespace std; int main() { stri ...

  6. JAVA日期字符串转化,日期加减

    SimpleDateFormat函数语法:  G 年代标志符  y 年  M 月  d 日  h 时 在上午或下午 (1~12)  H 时 在一天中 (0~23)  m 分  s 秒  S 毫秒  E ...

  7. jquery鼠标滑过展示图片时显示详情

    jquery: <script src="js/jquery.js" type="text/javascript"></script> ...

  8. DB2 相关操作

      查看数据库版本:db2level DB21061E  Command line environment not initialized. windows命令行下,需要先调用db2cmd,或者DB2 ...

  9. this的用法this.name=name 这个什么意思

    public Employee(string name, string alias){ // Use this to qualify the fields, name and alias: this. ...

  10. Servlet学习第一天--Servlet开发映射URL配置

    基础不扎实,从头学,认真记录笔记. 感谢@孤傲苍狼:http://www.cnblogs.com/xdp-gacl/p/3760336.html -为什么要配置? 由于客户端是通过URL访问web服务 ...