没有合适的资源?快使用搜索试试~ 我知道了~
C程序设计语言(the c programming language 的中文版)
4星 · 超过85%的资源 需积分: 45 8 下载量 52 浏览量
2012-08-10
10:17:52
上传
评论
收藏 5.95MB PDF 举报
温馨提示
试读
246页
Dennis M. Retchie 经典之作;the c programming language 的中文版
资源推荐
资源详情
资源评论
本章首先对C语言做简要介绍。目的是通过实际的程序向读者介绍C语言的本质要素,
而不是一下子就陷入到具体细节、规则及例外情况中去。因此,在这里我们并不想完整
地或很精确地对C语言进行介绍(但所举例子都是正确的)。我们想尽可能快地让读者学
会编写有用的程序,因此,重点介绍其基本概念:变量与常量、算术运算、控制流、函
数、基本输入输出。本章并不讨论那些编写较大的程序所需要的重要特性,包括指针、
结构、大多数运算符、部分控制流语句以及标准库。
这样做也有缺陷,其中最大的不足之处是在这里找不到对任何特定语言特性的完整
描述,并且,由于太简略,也可能会使读者产生误解。而且,由于所举的例子没有用到
C语言的所有特性,故这些例子可能并未达到简明优美的程度。我们已尽力缩小这种差
异。另一个不足之处是,本章所讲过的某些内容在后续有关章节还必须重复介绍。我们
希望这种重复带给读者的帮助会胜过烦恼。
无论如何,经验丰富的程序员应能从本章所介绍的有关材料中推断他们在程序设
计中需要的东西。初学者则应编写类似的小程序来充实它。这两种人都可以把本章当
作了解后续各章的详细内容的框架。
1.1 入门
学习新的程序设计语言的最佳途径是编写程序。对于所有语言,编写的第一个程序
都是相同的:
打印如下单词:
hello, world
在初学语言时这是一个很大的障碍,要越过这个障碍,首先必须建立程序文本,然后
成功地对它进行编译,并装入、运行,最后再看看所产生的输出。只要把这些操作细
节掌握了,其他内容就比较容易了。
在C语言中,用如下程序打印“hello, world”:
#include <stdio.h>
main()
{
printf("hello, world");
}
C
第1章 基 本 概 念
至于如何运行这个程序取决于使用的系统。作为一个特殊的例子,在U N I X操作系统中,必须
首先在某个以“. c”作为扩展名的文件中建立起这个程序,如h e l l o . c,然后再用如下命令编译它:
cc hello.c
如果在输入上述程序时没有出现错误(例如没有漏掉字符或错拼字符),那么编译程序将往
下执行并产生一个可执行文件 a . o u t。如果输入命令
a. out
运行a . o u t 程序,则系统将打印
hello, world
在其他操作系统上操作步骤会有所不同,读者可向身边的专家请教。
#include <stdio.h> 包含有关标准库的信息
main() 定义名为main的函数,它不接收变元值
{ main的语句括在花括号中
printf("hello, world\n"); main函数调用库函数printf可打印字符序列,\n代表换行符
}
下面对这个程序本身做一些解释说明。每一个 C程序,不论大小如何,都由函数和变量组成。
函数中包含若干用于指定所要做的计算操作的语句,而变量则用于在计算过程中存储有关值。 C
中的函数类似于F O RT R A N 语言中的子程序与函数或 P a s c a l 语言中的过程与函数。在本例中,函
数的名字为m a i n 。一般而言,可以给函数任意命名,但 m a i n 是一个特殊的函数名,每一个程序
都从名为m a i n 的函数的起点开始执行。这意味着每一个程序都必须包含一个 m a i n函数。
m a i n 函数通常要调用其他函数来协助其完成某些工作,调用的函数有些是程序人员自己编
写的,有些则由系统函数库提供。上述程序的第一行
#include <stdio.h>
用于告诉编译程序在本程序中包含标准输入输出库的有关信息。许多 C源程序的开始处都包含这
一行。我们将在第7章和附录B中对标准库进行详细介绍。
在函数之间进行数据通信的一种方法是让调用函数向被调用函数提供一串叫做变元的值。
函数名后面的一对圆括号用于把这一串变元(变元表)括起来。在本例子中,所定义的 m a i n 函
数不要求任何变元,故用空变元表()表示。
函数中的语句用一对花括号 { } 括起来。本例中的m a i n 函数只包含一个语句:
printf("hello, world\n");
当要调用一个函数时,先要给出这个函数的名字,再紧跟用一对圆括号括住的变元表。上
面这个语句就是用变元 "hello, world\n" 来调用函数p r i n t f。p r i n t f是一个用于打印输出的库函数,
在本例中,它用于打印用引号括住的字符串。
用双引号括住的字符序列叫做字符串或字符串常量,如 "hello, world\n"就是一个字符串。目
前仅使用字符串作为p r i n t f 及其他函数的变元。
在C语言中,字符序列\ n表示换行符,在打印时它用于指示从下一行的左边换行打印。如果
在字符串中遗漏了\ n(一个值得做的试验),那么输出打印完后没有换行。在 p r i n t f 函数的变元中
必须用\ n引入换行符,如果用程序中的换行来代替 \ n,如:
printf("hello, world
2计计C 程序设计语言
下载
");
那么C编译器将会产生一个错误信息。
p r i n t f函数永远不会自动换行,我们可以多次调用这个函数来分阶段打印一输出行。上面给
出的第一个程序也可以写成如下形式:
#include <stdio.h>
main()
{
printf("hello, ");
printf("world");
printf("\n");
}
它所产生的输出与前面一样。
请注意,\ n 只表示一个字符。诸如 \ n 等换码序列为表示不能打印或不可见字符提供了一种通
用可扩充机制。除此之外, C语言提供的换码序列还有:表示制表符的 \ t,表示回退符的 \ b,表
示双引号的 \ " ,表示反斜杠符本身的 \ \ 。2 . 3节将给出换码序列的完整列表。
练习1-1 请读者在自己的系统上运行“ hello, world”程序。再做个实验,让程序中遗漏一
些部分,看看会出现什么错误信息。
练习1-2 做个实验,观察一下当p r i n t f 函数的变元字符串中包含\ c(其中c是上面未列出的某
个字符)时会出现什么情况。
1.2 变量与算术表达式
下面的程序用公式
˚C = (5/9) (˚F-3 2 )
打印华氏温度与摄氏温度对照表:
0 -17
20 -6
40 4
60 15
80 26
100 37
120 48
140 60
160 71
180 82
200 93
220 104
240 115
260 126
280 137
第1章 基 本 概 念计计3
下载
300 148
这个程序本身仍只由一个名为 m a i n的函数的定义组成,它要比前面用于打印“ hello, world”的
程序长,但并不复杂。这个程序中引入了一些新的概念,包括注解、说明、变量、算术表达式、
循环以及格式输出。该程序如下:
#include <stdio.h>
/* 对 fahr = 0, 20, ..., 300
打印华氏温度与摄氏温度对照表 */
main()
{
int fahr, celsius;
int lower, upper, step;
lower = 0; /* 温度表的下限 */
upper = 300 ; /* 温度表的上限 */
step = 20; /* 步长 */
fahr = lower;
while (fahr <= upper) {
celsius = 5 * (fahr-32) / 9;
printf("%d\t%d\n", fahr, celsius);
fahr = fahr + step;
}
}
其中的两行
/* 对fahr=0, 20, ..., 300
打印华氏温度与摄氏温度对照表 */
叫做注解,用于解释该程序是做什么的。夹在 / * 与* / 之间的字符序列在编译时被忽略掉,它们可
以在程序中自由地使用,目的是为了使程序更易于理解。注解可以出现在任何空格、制表符或
换行符可以出现的地方。
在C语言中,所有变量都必须先说明后使用,说明通常放在函数开始处的可执行语句之前。
说明用于声明变量的性质,它由一个类型名与若干所要说明的变量组成,例如
int fahr, celsius;
int lower, upper, step;
其中,类型i n t表示所列变量为整数变量,与之相对, f l o a t 表示所列变量为浮点变量(浮点数可
以有小数部分)。i n t 与f l o a t类型的取值范围取决于所使用的机器。对于 i n t类型,通常为1 6位(取
值在 - 32768 ~ +32767之间),也有用3 2位表示的。f l o a t 类型一般都是3 2 位,它至少有6位有效数
字,取值范围一般在1 0
-3 8
~1 0
+ 3 8
之间。
除i n t与f l o a t之外,C语言还提供了其他一些基本数据类型,包括:
c h a r 字符
—
单字节
s h o r t 短整数
4计计C 程序设计语言
下载
l o n g 长整数
d o u b l e 双精度浮点数
这些数据类型对象的大小也取决于机器。另外,还有由这些基本类型组成的数组、结构与联合
类型、指向这些类型的指针类型以及返回这些类型的函数,我们将在后面适当的章节再分别介
绍它们。
上面温度转换程序计算以4个赋值语句
lower = 0;
upper = 300 ;
step = 20;
fahr = lower;
开始,用于为变量设置初值。各个语句均以分号结束。
温度转换表中的每一行均以相同的方式计算,故可以用循环语句来重复产生各行输出,每
行重复一次。这就是w h i l e循环语句的用途:
while (fahr <= upper) {
. . .
}
w h i l e 循环语句的执行步骤如下:首先测试圆括号中的条件。如果条件为真( f a h r小于等于
u p p e r),则执行循环体(括在花括号中的三个语句)。然后再重新测试该条件,如果为真,则再
次执行该循环体。当该条件测试为假( f a h r 大于u p p e r )时,循环结束,继续执行跟在该循环语
句之后的下一个语句。在本程序中,循环语句后再没有其他语句,因此整个程序终止执行。
w h i l e语句的循环体可以是用花括号括住的一个或多个语句(如上面的温度转换程序),也可
以是不用花括号括住的单个语句,例如:
while (i < j)
i = 2 * i;
在这两种情况下,我们总是把由w h i l e 控制的语句向里缩入一个制表位(在书中以四个空格表示),
这样就可以很容易地看出循环语句中包含那些语句。这种缩进方式强化了程序的逻辑结构。尽
管C编译程序并不关心程序的具体形式,但使程序在适当位置采用缩进空格的风格对于使程序更
易于为人们阅读是很重要的。我们建议每行只写一个语句,并在运算符两边各放一个空格字符
以使运算组合更清楚。花括号的位置不太重要,尽管每个人都有他所喜爱的风格。我们从一些
比较流行的风格中选择了一种。读者可以选择自己所合适的风格并一直使用它。
绝大多数任务都是在循环体中做的。循环体中的赋值语句
celsius = 5 * (fahr-32) / 9;
用于求与指定华氏温度所对应的摄氏温度值并将值赋给变量 c e l s i u s 。在该语句中,之所以把表达
式写成先乘5然后再除以9而不直接写成5 / 9 ,是因为在C语言及其他许多语言中,整数除法要进
行截取:结果中的小数部分被丢弃。由于 5和9都是整数,5 / 9相除后所截取得的结果为 0,故这样
所求得的所有摄氏温度都变成 0。
这个例子也对p r i n t f 函数的工作功能做了更多的介绍。 p r i n t f 是一个通用输出格式化函数,第
7章将对此做详细介绍。该函数的第一个变元是要打印的字符串,其中百分号( %)指示用其他
第1章 基 本 概 念计计5
下载
剩余245页未读,继续阅读
资源评论
- zuoyangguo5202012-09-05非常好,讲解的不错,
- wayiyi2012-08-14比较基础的介绍,还做了相关的注释,比较清晰
- chengliyekaoyan2013-02-27很经典的一本书
张鸣筝
- 粉丝: 0
- 资源: 37
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功