C 语言学习的第 01 课:先来聊聊计算机吧
各位同学,新学期,我就是你们的助教了。我的个人信息,你们的任课老师都已经介绍过了,所以我这里也就不再啰嗦。下面,来聊聊今天的话题:“先来谈谈计算机吧”。
想必看到这个题目,你们大家一定是不愿意点击进来的,毕竟,现在的你们呐,一定都是差不多天天面对计算机的(要知道,现在你们的手机,都要比早些年的计算机要先进,性能强大很多)。但是,不知道你是不是有想过和它相关的一些问题呢。比如:
- 当按下开关机按键以后,它是怎么进入操作系统的;
- 进入操作系统以后,它怎么启动第一个程序的;
- 软件是怎么控制硬件的(比如你使用手机拍一张照片,它是怎么打开了摄像头,怎么采集到一张图片,又是怎么显示到手机的屏幕上的呢)
- ……
是不是在提出这些问题之后,你会觉得,“是哎”这都是为什么呢,计算机的内部,都经历了一些什么,实现了上面列出的种种功能。
这些问题,都可以留着在你们以后的学习中慢慢的一点点的解开,比如计算机原理就可以告诉你计算机到底是怎么进入系统的,它又是如何去控制计算机的硬件。不过,学习这些课程以前,C 语言一定是一项必备的技能,甚至,你需要有一点点汇编的基础。到这里,我们就来简单的聊聊 C 语言吧。
谈 C 语言一定要聊聊计算机。
计算机:硬件和软件
计算机软件
计算机它本身是一件能够计算和逻辑判断的电子设备。所谓计算,就是指它能够在你输入“1+1”之后输出2,所谓逻辑判断就是你在输入“今天下雨不下雨”给出“下”或者“不下”的断言。当然,这仅仅是一个简单的解释,计算机处理的运算和逻辑判断比上面的例子可能要复杂千万倍。这里,我们可以称输入的“1+1”或者是“今天下雨不下雨”为“数据”,它对这些数据的计算或者是判断,是一种操作,最终呈现出来。所以,计算机的功能又可以概括为对输入的数据进行处理,然后输出。
通常来说,假如仅有计算机这个实实在在的实体,是无法完成数据的处理这一过程的,因为数据如何处理往往是由人预设的。预设的过程,我们可以称其为编程。预设的结果,我们可以称其为程序。
计算机硬件
一般来说,不管计算机的外形如何变化 ,它通常都是由 6 个部分构成:
- 输入单元(input unit):用于接收数据,巧妇难为无米之炊,要是没有数据,计算机也不知道该做点什么好;
- 输出单元(output unit):用于处理好的数据的输出,数据好不容易处理好,总是要秀出来看看的;
- 内存单元(memory unit):数据的来来往往,总是要有一个临时的客栈;
- 算术逻辑单元(Arithmetic and Logic Unit,ALU):用于执行加减乘除这些数学运算;
- 中央处理器(Central Processing Unit,CPU):用于协调各个单元的事务;
- 辅助存储单元(secondary storage unit):用于存储一些需要长久保存的数据。
(在一些传统的计算机教材中,仅有 5 个逻辑单元构成,没有第六个辅助存储单元。或者使用存储器这一概念统称第三个和第六个)
机器语言,汇编语言和高级语言
不过,计算机本身并不能够听懂人类的语言,因为他内部使用的是电力驱动的各种电子器件,他们仅能够感受是否有电(还记得小时候用舌头舔电池吗,有电的是咸咸的,没电的没什么味道)。所以,一台计算机能够理解的仅仅是一堆有电没电有电没电这样的符号。
机器语言有点不太好理解,于是聪明的人类将一串固定的“有电没电”转换为名为“汇编”的代码,然后使用一段程序,将汇编代码作为数据输入进去,输出一串“有电没电”的机器代码。可是,要是你已经看过汇编语言就会发现汇编本身也并不是那么好理解的。懒惰是科技发展的第一动力,人类为了更好的和机器玩耍,于是发明了现代的高级语言(high level language)。
C 语言发展简史
(好懒,我就不写了,请看这里http://www.zhihu.com/question/22826568/answer/65915408)
C 语言学习的第 01 课:先来聊聊计算机吧的更多相关文章
- C 语言学习的第 05 课:C 语言基础(01)
C语言程序中的绝大部分应该记录在以.c作为扩展名的文件里,这种文件叫做C语言 程序的源文件. C语言中还包括以.h作为扩展名的文件,这种文件叫做头文件. C语言中的四则运算: 加:+ 减:- 乘 ...
- C 语言学习的第 03 课:你的 idea 是怎么变成能够执行的程序的
在上一篇文章中,我们说到,C 语言系统应该由程序开发环境,C 语言本身和 C 语言的库组成.且同时说了程序开发环境做了“编写”,“预处理”,“编译”和“链接”这几件事情.但是细节并没有一一呈现.不知道 ...
- C 语言学习的第 04 课:编译器常见错误和警告(1)
同学们可能已经开始使用 C-Free 5 写自己的程序了.但是新手编程,总是会有一些磕磕绊绊.不要紧,在这篇文章中,就主要来了解一些编程开始时经常会遇到的语法方面的问题. warning: no ne ...
- C 语言学习的第 02 课:C 语言的开发环境
工欲善其事,必先利其器.不知道还是不是记得上一篇文章中说到的,计算机本身是一个数据输入及输出的设备.所以,为了将你大脑中的各种 idea 输入到电脑,且最终生成能够执行的程序,总是要预备点什么的. 通 ...
- C语言学习记录_2019.01.29
C语言的灵魂:指针 #include <stdio.h> int main(int argc, char **argv) { printf("Hello, World!\n&q ...
- Java语言学习day26--7月01日
###14内部类 * A: 内部类的概述 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类. 其他类也称为外部类. * B: 什么时候使用内部类 在描述事物 ...
- C 语言学习的第 05 课:了解课程配套的平台
在此之前,已经同授课老师沟通,确认课程的配套平台是Coding.net.对于大多数(甚至是全部)同学来说,这个平台应该是极其陌生的.不过不用担心,且还是娓娓道来. 定义:Coding.net是一个集代 ...
- 足球运动训练心得及经验分析-c语言学习调查
在准备预备作业02之前,我参考娄老师的提示,阅读了<[做中学(Learning By Doing)]之乒乓球刻意训练一年总结>一文. 在文章描述的字里行间,给予我的印象是系统.负责,娄老师 ...
- 郝斌老师C语言学习笔记(一)
在给变量分配内存时,很可能这段内存存在以前其他程序使用留下的值.当使用VC编译器,若编译器发现没有给变量赋值而使用,就会返回一个以“85”开头的很大的数字(此时该段内存中为一个垃圾数,为了避免出现较常 ...
随机推荐
- 关于《Windows程序设计(第五版)》中一个实例程序的疑问
最近一直在看Charlse Petzold的<Windows程序设计>,作为一个新得不能再新的新手,只能先照着书的抄抄源码了,之前的例子一直都很正常,但昨天遇到一个很诡异的BUG. 先看实 ...
- 学会使用简单的 MySQL 常用操作
一.MySQL 数据库的基本安装 # yum 安装 mysql 版本:5.1.73 [root@mysql ~]# yum install -y mysql-server mysql # 启动 MyS ...
- Ineedle驱动方式dpdk测试性能
这次主要是测试在dpdk方案下,ineedle的处理包的性能. 发包工具: 使用立永当时写的一个发包工具:linux_pcap 做法:大概是从网上抓取了一些数据包,将源ip替换为随即ip,sip替换为 ...
- python 笔记(一) —— 不要误用 ++i、--i
ilocker:关注 Android 安全(新手) QQ: 2597294287 在 python 中也可以写 ++i,但含义完全不同于 c/c++.python 的 ++i 并不是将 i 自增 1, ...
- [转]ASP.NET中使用UpdatePanel实现局部异步刷新方法和攻略
本文转自:http://blog.csdn.net/chenhongwu666/article/details/41392529/ asp.net UpdatePanel实现异步局部刷新 如有雷同,不 ...
- plain framework 1 参考手册 入门指引之 模块
模块 总述 基础 数据库 引擎 事件 文件 网络 性能 脚本 系统 工具 总述 上图为plain framework(简称简约框架)所有的模块,包括基础.数据库.引擎.事件.文件.网络.性能.脚本.系 ...
- AC日记——逆波兰表达式 openjudge 3.3 1696
1696:逆波兰表达式 总时间限制: 1000ms 内存限制: 65536kB 描述 逆波兰表达式是一种把运算符前置的算术表达式,例如普通的表达式2 + 3的逆波兰表示法为+ 2 3.逆波兰表达式 ...
- 今天在看UWP蓝牙的例子
private async void InitializeRfcommServer() { ListenButton.IsEnabled = false; DisconnectButton.IsEna ...
- 杭电OJ——1198 Farm Irrigation (并查集)
畅通工程 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可 ...
- 怎样使用nat和桥接方式解决虚拟机联网问题
对于很多的linux初学者来说,最开始学习linux时通常是在虚拟机上进行的,然而对于新手来说虚拟机联网会对他们来说是比较困难的.这里我根据自己的经验写了一篇文档分享给大家.下面对几种连接方式进行简单 ...