初识C(1)----与C基本无关的开篇
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基本无关的开篇的更多相关文章
- 为什么mysqlbinlog --database选项不起作用
群里看到有同学提问,多瞅了眼 [root@mysql55 mysql]# mysqlbinlog --no-defaults -vv --base64-output=decode-rows mysql ...
- 初识Java
Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以极强的安全性.平台无关性.硬件结构无关性.语言简洁.面向对象的特点,在网络编程语言中占据了无可比拟的优势 ...
- Java初识
基础概念 特点: 完全面向对象,动态 解释性,简单.易移植,跨平台 安全健壮,高性能 多线程,分布式 三种核心机制: Java虚拟机 Java Virtual Machine 垃圾收集机制 Garba ...
- hadoop初识
搞什么东西之前,第一步是要知道What(是什么),然后是Why(为什么),最后才是How(怎么做).但很多开发的朋友在做了多年项目以后,都习惯是先How,然后What,最后才是Why,这样只会让自己变 ...
- 初识 Android
创建博客有一年的时间了,一直没把它用起来,颇感惭愧.近日突感有写博客的冲动,更可怕的是这种冲动似乎比我体内的洪荒之力更为凶猛.于是乎,这篇博客悄然诞生.废话不多说,进入正题--初识Android. 这 ...
- Java 面向对象编程——第一章 初识Java
第一章 初识Java 1. 什么是Java? Java是一种简单的.面向对象的.分布式的.解释的.安全的.可移植的.性能优异的多线程语言.它以其强安全性.平台无关性.硬件结构无关性.语言简 ...
- WPF学习之路初识
WPF学习之路初识 WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...
- [翻译]初识SQL Server 2005 Reporting Services Part 4
原文:[翻译]初识SQL Server 2005 Reporting Services Part 4 这一篇是关于SQL Server 2005 Reporting Services四篇文章中最后一篇 ...
- 第二章 初识JSP
第二章 初识JSP 一.JSP简述 1.是JSP JSP是指在HTML中嵌入Java脚本语言.全称(Java Server Pages) 当用户通过浏览器访问Web应用时,使用JSP容器对请求的J ...
随机推荐
- Java开发常用下载的网址
cygwin国内镜像:http://mirrors.sohu.com/cygwin/ 旧版本的ant下载:http://archive.apache.org/dist/ant/ 旧版本的nutch下载 ...
- 第四课 Grid Control实验 GC OMS安装(第二台机器部署)
2.GC OMS安装(第二台机器部署) 1. 配置图形化 [oracle@ocm2 ~]$ xhost + access control disabled, clients can connect f ...
- English words
英语指路常用单词 the one-way street单行道traffic light红绿灯 fork road三叉路口intersection/crossroad 十字路口T road 丁字路口in ...
- 【Chromium中文文档】跨进程通信 (IPC)
跨进程通信 (IPC) 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/I ...
- J2SE知识点摘记(十四)
1. 字符流 Reader是定义java的流式字符输入模式的抽象类,该类所有方法在出错的情况下都将引发IOException异常. Int read(char buffer[]) ...
- QWebView 显示本地HTML 文件
QWebView 显示本地HTML文件的时候,如果直接使用 webView->load(QUrl(QString("file:///c:\\a.html")); 可能会导致a ...
- delphi写的整合汇编与api的简单的窗口程序
program Project1; { Types and Structures Definition }type WNDCLASSEX = packed record cbSize: Lon ...
- Netfilter-packet-flow.svg
调试网络的方法:(Debugging the kernel using Ftrace) $ watch -n1 -d sudo cat /proc/net/snmp$ watch -n1 -d su ...
- [虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(四)
通过前面的操作,我们已经可以创建一个带有我们自己的PCI的watchdog外设qemu 虚拟机了. 目的: 1. 了解我们的外设情况. 2. 为在guest中开发我们自己的linux PCI驱动程序做 ...
- Ubuntu14.04 Server Apache2+subversion环境搭建
自从工作后,发现之前的代码开发太随便啦,于是经过不到两年的工作积累,打算在自己开发软件的过程中好好管理自己的项目.于是打算搭建自己的项目服务器,去年搭建过一次,但是由于没有记录,现在需要再来一遍,好多 ...