第1章C语言概述

mac2022-06-30  166

第1章  C语言概述

欢迎来到C世界!C语言作为一种强大的专业的编程语言,深受业余和专业编程人员的喜爱。本章将为学习和使用这一强大的语言做一些准备。

1.1        C语言的起源和发展方向

人们发明了很多可以计算机语言,把利用计算机语言编制程序的人称为程序员。计算机语言大致是这样的发展历程:机器语言 -> 汇编语言 -> 高级语言。

机器语言(直接的机器0、1指令)只有少量的程序员阅读和使用,编制效率低下,维护难度较大,属于早期的计算机语言;汇编语言(利用特定的助记符帮助程序员记忆机器指令)同样无法满足大规模开发的需求;机器语言和汇编语言都是直接面向计算机的,一般称为低级语言,而目前使用的非常贴近人们使用的自然语言,称为高级语言,如Pascal、Basic、C/C++、Java等,C语言就是众多高级语言中非常成功的一种。

1967年,Martin Richards开发了BCPL(Basic Compound Programming Language),其目的是编写操作系统软件和编译器。1970年,Ken Thompson在BCPL基础上开发了B语言,并在PDP-7计算机上利用B语言开发了第一个UNIX操作系统。1972年,贝尔实验室的Dennis Ritchie在同Ken Thompson一起设计UNIX操作系统时在B语言的基础上开发了C语言。作为为从事编程工作的程序员开发的工具,当今许多重要的操作系统和应用软件都是利用C/C++来实现的。其中将C看做C++的子集,但C++学习难度是很陡峭的,而C则非常简单了。

20世纪80年代初,C语言大行其道,许多软件开发商都首选C语言来开发程序(电子表达、编译器和其他程序)。在90年代,许多软件开发商转向C++(这里不解释原因,但读者需要明白的是C语言并未因此被淘汰,人们只是找到了更快写出程序的工具,但未必是最好的)。不论C++、Java、Object-c如何流行,C在行业中仍然是一项重要的技能,且不说在开发操作系统领域内的独领风骚的地位,单表在嵌入式系统的编程中,比如汽车、照相机、DVD播放器等现代化设备逐渐普及的微处理器编程中,C将扮演重要的角色,特别是近些年逐渐流行的机器人。

1.2     C语言编制的基本步骤

1.2.1安装集成开发环境(IDE)

计算机是不能直接执行C语言写的程序,我们需要一种工具软件将C源程序(.c文件)解释成机器语言,这个软件就是我们需要的编译器;同时源程序的输入需要一个编辑器,当然用Windows自带的记事本也可以,除了记事本软件不够专业、不够强大。现在我们不再需要将所需要的这么多软件一个个安装了,我们只要下载一个集成开发环境(IDE)就可以完成从 “编辑 -> 编译 … -> 运行”所有的步骤了,我们推荐的是在Windows xp操作系统上安装Dev-C++5.9.2。

1.2.2启动IDE,输入C源程序

启动Dev-C++5.9.2,在编辑器中输入C源程序,并保存成文本文件(文件的的后缀名必须是.c)。

1.2.3调试运行

程序员编写程序,有时候会出错(编译错、连接错、逻辑错),出错时Dev-C++5.5.3会给出必要的提示,无论哪种错误,都需要程序员有针对性的修改源程序,这个过程就叫做调试。当程序没有错误时,我们就可以得到计算机可执行的文件(文件的后缀名为.exe),双击该exe文件,可直接运行我们写好的程序。

1.3     C语言程序的基本结构

一个C程序可以很简单,也可以是非常复杂的,这取决于程序所要完成的功能,我们下面陆续分析三个C程序,了解下C程序的基本结构。这三个程序难度依次加大,虽然很简单,但的确包含了几乎所有C语言的基础,可以毫不夸张的说,我们后续的所有程序只是在这三个程序的骨架上填了很多肉而已。

【例1-1】  第1个C程序(hello_world)

1 #include <stdio.h> 2 3 /*Say "Hello, world!" on the screen*/ 4 main() { 5 printf("Hello, world!"); 6 }

运行结果如下。

Hello, world!

l        程序【例1-1】的运行结果是在计算机屏幕上显示文本“Hello, world!”,并且将光标停留在“!”的右边。光标是计算机文本屏幕上重要的对象,光标的位置就是程序输出文本的起始位置,光标会随着文本的输出而变换位置,后续章节会介绍如何控制光标的位置。

l        程序第1行是在包含stdio.h这个文件(标准输入输出即standard input/output),而这个文件包含了标准输入/输出函数(如printf函数)。

l        程序第2行是注释。注释信息是写给程序员看的,主要是选择性的说明程序功能、程序逻辑等内容;计算机执行程序时会忽略注释信息。注释信息由“/*”开始,由“*/”结束,中间放置的都是注释(注释可以跨越多行,但注释不能嵌套)。

l        从main()开始到最后一行之间的部分称为函数,更准确的叫做函数定义。函数代表一段可以重复执行的计算机指令(一对儿圆括号说明main是个函数,其中main是函数名)。每个函数都有名字,而且在同一个程序内部,函数是不能同名的(否则计算机无法区分);

l        main函数的一对儿圆括号是空的,表明main函数无参数。函数可以有参数,也可以无参数。

l        一对儿圆括号后紧跟着一对儿花括号{ },在说明main函数的具体功能,花括号中的内容称为函数体。第3-5行合起来称为main函数的函数定义;若一对儿圆括号后紧跟着一个分号,则成为函数调用;没错,main函数定义中唯一的那一行文本就是一个函数调用,只不过printf函数实际上是C语言自己提供的函数,称为标准库函数

l        调用printf函数的功能是将双引号内的内容显示在计算机屏幕上。其中因为双引号的提示,双引号中的内容称为字符串。注意到了吗?printf函数的圆括号内有内容,也就是说printf函数有参数。

l        main函数是非常特殊的函数。特殊之处在于:(1)每个C程序有且仅有一个main函数。(2)main函数是程序的入口:程序从main函数开始执行,当main函数最后一行代码执行完,整个程序就结束了。

程序【例1-1】非常简单,它包含的新名词依次是:注释、函数、参数、函数体、函数定义、函数调用、标准库函数、字符串。下面我们通过【例1-2】来认识一个稍微复杂一点的程序。

【例1-2】第2个C程序(variable_use)

1 #include <stdio.h> 2 3 /*Use variable in program*/ 4 main() { 5 int a; 6 a = 20; 7 a = a+30; 8 9 printf("Now, variable a = %d!", a); 10 }

运行结果如下,

Now, variable a = 50.

l        【例1-2】同【例1-1】一样,整体上,程序主要逻辑都是写在main函数定义中的。

l        “int a;”表示声明了一个变量,准确的说这一行代码是在进行变量声明。若一个程序想要处理数据,首先要将数据保存起来,对C语言而言,C语言是用变量来保存数据的;

l        int表示C语言支持的一种数据类型。C语言有多种数据类型如int(integer即整形)、float(float即浮点型)、char(character即浮点数)。变量声明要说清楚数据类型是计算机能够正确存储、解释数据的前提(比如整数可以有数学中的取余操作,而浮点数则没有)。

l        int a是在变量声明,声明的这个整形变量的名字为a。不论是变量取名还是我们后面要学习的自定义函数的取名,这些名字我们统称为标识符(顾名思义,它的作用是标识一个变量或函数)。标识符的命名规则如下两个:(1)可使用数字、大/小写字母和下划线(_),但第一个字符不能是数字。(2)C语言本身有自己的标识符(如main、printf、int等),这些特殊的标识符我们成为关键字。我们自定义的标识符不能和C语言的关键字重复,这是第二条规则。

l        int a变量声明后,计算机系统就会为a这个变量分配一块大小合适的内存,这块内存可以用来存放数据。

l        有了变量a,就可以对a进行一些操作。“a = 20”称为赋值(用数学上的等号,但表达的意思截然不同)。赋值是将等号右边的值赋值给左边的变量,此时a就保存了20这个值了。

l        “a = a+30”,这也是赋值(这个在数学上永远无法成立的式子,在计算机中就是赋值的意思)。同样将a+30的值(即50)赋值给左边的变量(即a),此时a就保存了50这个值了。

l        最后一行还是printf函数,函数的第一个参数是一个字符串,第二个参数是变量a,两个参数由逗号分隔开。printf函数会将第一个参数(字符串)输出到计算机屏幕上,“Now, variable a =”这句话是好理解的,但输出中怎么没有%d呢?对于这个问题,我们学完第3章才能回答,这里只做这样的解释,%d被变量a的值50代替了。

l        字符串末尾的“\n”代表换行符。换行符的实际效果是将光标移动到下一行的行首。

l        仔细观察,C程序中每一个具体的操作(不论是对数据的声明还是对数据的操作,或者函数调用),我们称为语句。C语言中语句是由分号结尾的。

【例1-2】新名词有变量、变量声明、数据类型、标识符、关键字、赋值、换行符、语句。【例1-2】能够处理数据,但还不能代表完整的C程序,下面我们花点时间认识一个更复杂的程序【例1-3】。

【例1-3】第3个程序(multi_function) 

1 #include <stdio.h> 2 3 /* Use multi function */ 4 smile(){ 5 printf("^_^"); 6 } 7 8 main(){ 9 int money; 10 money = 100; 11 12 money = (money-20)*2; 13 smile(); 14 printf("I have money!\n%d dollars.",money); 15 }

运行结果如下。

^_^ I have money! 160 dollars.

l        前两个程序只定义了一个函数(即main函数),【例1-3】却定义了两个函数。而且函数的定义形式是类似的,函数名后面跟着一对儿圆括号()和一对儿花括号{},花括号{}中间是函数的具体实现(即函数体)。

l        smile函数定义只是用一条printf语句输出双引号内的笑脸“^_^”而已。因为笑脸后没有换行符“\n”,所以main函数中的printf输出紧跟着笑脸符号;而“I have money”后有换行符,所以“%d dollars.”另起一行输出。

l        “money = (money-20)*2;”对于整体上的赋值语句暂且不提。“*”是数学中的乘法运算符,括号()是用来改变运算顺序的(比C更早期的程序设计主要是做数值计算的,继往开来,C语言也支持了很多数学运算,甚至可以说C语言以丰富的运算符和数据类型区分于C之后的C++、Java等语言)。

l        简述下【例1-3】的执行流程。main函数是所有程序的入口,即程序从“int money”函数声明开始执行,执行完“money = (money-20)*2;”后,开始了smile函数调用,C编译器会主动的去找smile函数定义,进而执行smile函数。当smile函数执行完,程序开始执行smile后的那一条printf语句(也是函数调用),执行完该printf函数后,整个程序也就结束了。

对比三个程序,总结如下:

(1)    C语言是一系列函数的集合,并且总有一个main函数作为整个程序的入口和出口。

(2)    用户自己编写的函数,必修先定义后调用。

(3)    变量名、函数名必须是合法的标识符,且不能和C语言提供的那30多个关键字重复。

(4)    C语言程序是由一条条语句构成的,语句以分号结尾。语句细分种类很多:变量声明语句、赋值语句、函数调用语句…

1.4     编程练习

光读C语言的书是不够的,应该试着自己编写程序,请读者练习下面的练习题。

1、编写一个程序输出你的姓名和地址。

2、编写一个程序,把你的年龄(岁)转换成天数,并输出两者的值。格式为“年龄:xx岁;天数yy天”。

3、编写一个能够产生下面输出的程序:

I love C very much!

I love C very much!

I love C very much!

Which nobody can deny!

程序除了main函数外还需要两个用户自定义的函数,一个用于把上面的示爱程序输出一次,一个用于把最后一行输出一次。

4、编写一个程序,创建一个名为num的整数变量,让程序把num的值设置为10,再让程序计算两个num的和以及num的平方。最后程序应该输出所有的3个值,并分别标志它们。

 

转载于:https://www.cnblogs.com/jlxu1101/p/5148390.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)