项目2:输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。图3.15兔子问题输出结果根据以上的分析可以知道,循环次数可以为0,因此该程序是一个条件型循环,可以利用while语句编写程序。熟悉了循环结构在程序设计中的运用,循环结构语句包含了while语句、do…......
2023-11-18
1969年的美国贝尔实验室是当时科技界的梦工厂,集结着世界上最富创造力的科学家和工程师,其中包括数位诺贝尔奖获得者。他们一起创造了无数影响着全人类的发明,如数码相机的核心——电荷耦合器件(Charge-Coupled Device,CCD)。
这些人的成就貌似高不可攀,但其实他们也都是凡人,在某些方面和我们也是非常相似的。例如,当他们见到一台功能强大的计算机时,心里最先想到的也可能是用它来玩游戏。那个时代,计算机是大型机构才能拥有的奢侈品,在这上面玩游戏确实是奢侈的。
那时候是没有商业游戏的,想玩游戏,首先要发挥DIY(Do It Yourself)精神,自己编写游戏。自己编的游戏被别人喜欢,是当时最有面子的事情。有一个叫Ken Thompson(以下尊称为ken)的工程师,当时26岁,看到阿波罗11号载人飞船登月成功,觉得挺酷,于是设计了一款叫“Space Travel”的游戏。在游戏中,玩家驾驶着宇宙飞船,在虚拟的太阳系里穿梭,欣赏美景的同时,还可以在各个行星、卫星表面降落。这个游戏先是在Multics系统上编写,后来又在GECOS系统上重写。能运行这两个系统的机器都是笨重的大型机,虽然运算能力出众,但显示效果很差,而且机时费非常高,玩一次需要支付75美元(当时美国人均月收入大约200美元)。这实在是太贵了。于是他与同事Dennis M.Ritchie(以下尊称为dmr)一起寻找免费的“游戏机”,后来他们找到了一台由DEC公司制造的PDP-7小型机,它拥有当时最先进的图形处理能力。那时计算机的主要用途是数据处理,图形处理能力并不太受重视,所以PDP-7很少被使用。ken和dmr决定使用它来玩游戏。
然而,游戏的运行需要操作系统的支持。PDP-7当时还是“裸机”,没有能在其上运行的操作系统。于是,他们开始为PDP-7编写操作系统,并给这个系统起了一个名字——UNIX。直到今天,UNIX仍然是最受信任的操作系统,它既支撑着军队、政府、电力公司、电信公司和银行等大型机构的关键业务,也是苹果Mac系列计算机的动力之源,甚至iPhone的魅力也部分拜其所赐。如图1.1所示,从左至右分别为ken和dmr。
图1.1 ken和dmr
UNIX起初是用汇编语言编写的,那是一种更接近机器而不是人的语言。计算机能直接读懂的语言称为机器语言,它所有的语句都是由“0”和“1”两个数字构成的,人很难读懂和记忆,而人的自然语言机器又很难理解,于是人们开始琢磨怎么让计算机读懂自然语言。基本思路是设计一个翻译程序,直接把自然语言翻译成机器语言,这种翻译程序被命名为“编译器”。但是直接理解自然语言太难了,折中的办法是设计一种尽量接近自然语言,且还能被精确翻译为机器语言的语言,这种语言就是人们常说的编程语言。学编程的过程,其实就是学习怎样用编程语言说话并让编译器听懂的过程。第一种编程语言肯定是最接近机器而远离人类的,它就是汇编语言。虽然看上去有点像自然语言,如加法叫“ADD”,减法叫“SUB”,但它的语法完全是为机器服务的,每一行语句都和一条机器指令严格对应。不同计算机的机器指令是不一样的,所以针对一种计算机编写的汇编程序不能在另一种计算机上直接使用,必须重写(Space Travel就被重写过很多次)。用专业术语来说,汇编语言缺少可移植性。
因为Space Travel的吸引力,使得很多人都希望他们的计算机上也能安装UNIX。于是ken和dmr决定改用高级语言编写UNIX,这样它就可以在更多类型的计算机上运行。(www.chuimin.cn)
除了机器语言和汇编语言以外,几乎所有编程语言都被统称为高级语言。它的特点是更接近自然语言,而与机器语言联系不紧密。不同的高级语言编译器可以把同样的高级语言程序翻译成适应不同机器的指令,因而高级语言大多具有较好的可移植性。
在高级语言的选择上,ken和dmr遇到了麻烦,虽然可供选择的高级语言有很多,如现在还在被使用的有Basic和Fortran等,但这些语言都是面向应用程序编写而设计的,层次太高,使机器能理解太困难,都假想其是在一个操作系统上运行,所以不适合用来开发操作系统。所以他们最后决定自己设计一种适合编写UNIX的高级语言。那一年是1972年,ken继续完善UNIX,dmr设计新语言,两人一起开发编译器。因为该语言以ken早年设计的B语言为基础,所以就自然而然地被命名为C语言。
1983年,因为UNIX和C语言的巨大成功,ken和dmr共同获得了计算机界的最高奖——图灵奖。
UNIX和C其实是可以为ken和dmr带来大量财富的。然而,他们从一开始就没有想去申请专利、商标、软件著作权等法律保护,而是把所有的一切,包括最宝贵的源代码,都全部公开发布。对他们来说,自己写的程序有人使用,就是最大的快乐,也是最大的财富。这恰好使得很多机构和个人都具有了自如地为UNIX和C添加代码、做各种贡献的条件,因而又极大地促进了它们的发展。
有关C语言程序设计基础(第3版)的文章
项目2:输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。图3.15兔子问题输出结果根据以上的分析可以知道,循环次数可以为0,因此该程序是一个条件型循环,可以利用while语句编写程序。熟悉了循环结构在程序设计中的运用,循环结构语句包含了while语句、do…......
2023-11-18
图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
C语言把括号、赋值、强制类型转换等都作为运算符处理,灵活使用各种运算符可以实现在其他高级语言中难以实现的运算,功能强大。另外,C语言还把括号、下标、强制类型转换、取地址等都作为运算符处理,并通过与算数运算符的组合达到不同的目的,从而使程序更加简洁明了。C语言具有超强的可移植性。总之,C语言在运算符方面是比较容易让人混淆的。......
2023-11-18
机器语言由0和1两个字符组成,称为二进制数。指令是计算机语言的最小组成单元,机器语言就是机器指令的集合。对人而言,不管是机器语言还是汇编语言,可读性都差,一般的人也难以理解,不利于计算机语言的推广普及。当然,计算机不能直接识别用高级语言编写的源程序,需要通过编译器将其翻译成机器语言产生目标程序,才能被计算机执行。......
2023-11-18
C语言中逻辑运算符及其含义见表3.2。表3.2逻辑运算符及其含义逻辑运算符“&&”和“||”是双目运算符,具有左结合性;“!”表3.3逻辑运算真值表C语言中进行逻辑表达式求值运算时,不但要注意逻辑运算符本身的运算规则,而且还必须要遵循下面的两条原则:·对逻辑表达式从左到右进行求解。......
2023-11-20
针对不同的实际应用,数据排序方法有很多种。本节介绍两种常用排序方法的基本思想和实现方法,帮助读者初步理解排序方法的计算机解决思路。②不考虑已排好序的数据,将剩下的数据作为待排序列。编写程序实现冒泡排序算法,对随机生成的10个3位整数按升序进行排序并输出。......
2023-11-20
void类型指针中的数据不能访问,如果非要访问的话,可以通过强制转换将void类型指针转换为与所指向的数据类型相符的类型。所谓“相同存储对齐限制”是指void类型指针所指的数据在内存中所占的长度与显式转换后的指针所指的数据在内存中所占的长度相等。同理,如果是将void类型转换为具有更小存储对齐限制的指针时,也可能引起数值的改变。......
2023-11-18
在C 语言中,对文件的基本操作包括文件的打开与关闭、文件的读和写等。表9.1文件操作方式例如:打开当前目录下的C.DAT 文件,这是一个二进制文件,只允许进行读操作,并使fp 指针指向该文件。应该养成在程序终止前关闭所有文件的习惯,如果不关闭文件将会丢失数据。......
2023-10-21
相关推荐