第一章:C语言概论 C语言的发展过程 C语言是在70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表 了C语言。同时由B.W. Kernighan和D.M. Ritchie合著了著名的“ THE C PROGRAMMING LANGUAGE 书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完 整的标准C语言,后来由美国国家标准学会在此基础上制定了一个C语言标准,于一九八三年 发表。通常称之为 ANSI C。 当代最优秀的程序设计语言 早期的C语言主要是用于UNIX系统。由于C语言的强大功能和各方面的优点逐渐为人们认 识,到了八十年代,C开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了 广泛的使用。成为当代最优秀的程序设计语言之一。 C语言的特点 C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C 语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数 据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬 件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也 适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了 各类各型计算机上,从而形成了多种版本的C语言。 C语言版本 目前最流行的C语言有以下几种 Microsoft c或称MSC Borland turbo c或称 Turbo C 这些C语言版本不仅实现了 ANSI C标准,而且在此基础上各自作了一些扩充,使之更加方 便、完美。 面向对象的程序设计语言 在C的基础上,一九八三年又由贝尔实验室的 Bjarne trou- strup推出了C++。C++进一 步扩充和完善了C语言,成为一种面向对象的程序设计语言。C++目前流行的最新版本是 5, Symantec C++6.1,和 MicrosoftⅥ usual++2.0。C++提出了一些更为深入的概 念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了 种与传统结构程序设计不同的思维方式和编程方法。因而也增加了整个语言的复杂性,掌握起来 有一定难度。 c和c+十
第一章: C 语言概论 C语言的发展过程 C语言是在 70 年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表 了C语言。同时由 B.W.Kernighan 和 D.M.Ritchit 合著了著名的“THE C PROGRAMMING LANGUAGE” 一书。通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完 整的标准 C 语言,后来由美国国家标准学会在此基础上制定了一个 C 语言标准,于一九八三年 发表。通常称之为 ANSI C。 当代最优秀的程序设计语言 早期的 C 语言主要是用于 UNIX 系统。由于C语言的强大功能和各方面的优点逐渐为人们认 识,到了八十年代,C 开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了 广泛的使用。成为当代最优秀的程序设计语言之一。 C语言的特点 C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C 语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数 据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。由于C语言实现了对硬 件的编程操作,因此C语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也 适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此广泛地移植到了 各类各型计算机上,从而形成了多种版本的C语言。 C语言版本 目前最流行的C语言有以下几种: ·Microsoft C 或称 MS C ·Borland Turbo C 或称 Turbo C ·AT&T C 这些C语言版本不仅实现了 ANSI C 标准,而且在此基础上各自作了一些扩充,使之更加方 便、完美。 面向对象的程序设计语言 在 C 的基础上,一九八三年又由贝尔实验室的 Bjarne Strou-strup 推出了 C++。 C++进一 步扩充和完善了C语言,成为一种面向 对象的程序设计语言。C++目前流行的最新版本是 Borland C++4.5,Symantec C++6.1,和 Microsoft VisualC++ 2.0。C++提出了一些更为深入的概 念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一 种与传统结构程序设计不同的思维方式和编程方法。因而也增加了整个语言的复杂性,掌握起来 有一定难度。 C和C++
但是,C是C++的基础,C++语言和C语言在很多方面是兼容的。因此,掌握了C语言,再进 一步学习C++就能以一种熟悉的语法来学习面向对象的语言,从而达到事半功倍的目的 C源程序的结构特点 为了说明C语言源程序结构的特点,先看以下几个程序。这几个程序由简到难,表现了C 语言源程序在组成结构上的特点。虽然有关内容还未介绍,但可从这些例子中了解到组成一个C 源程序的基本部分和书写格式 main o printf("c语言世界ww.vcok.com,您好!\n") main是主函数的函数名,表示这是一个主函数。每一个C源程序都必须有,且只能有一个 主函数(main函数)。函数调用语句, printf函数的功能是把要输出的内容送到显示器去显示 printf函数是一个由系统定义的标准函数,可在程序中直接调用。 #include stdio. h #include" math. h mainO double xs printf( input number: \n") canf(%1f, &x s=sin (x) printf( sine of %lf is %1f\n" x, s) 每行注释 nclude称为文件包含命令扩展名为h的文件也称为头文件或首部文件 定义两个实数变量,以被后面程序使用 显示提示信息 从键盘获得一个实数x 求x的正弦,并把它赋给变量s 显示程序运算结果 main函数结束 程序的功能是从键盘输入一个数x,求x的正弦值,然后输出结果。在 main(之前的两行称 为预处理命令(详见后面)。预处理命令还有其它几种,这里的 include称为文件包含命令,其 意义是把尖括号”"或引号<>内指定的文件包含到本程序来,成为本程序的一部分。被包含的文件 通常是由系统提供的,其扩展名为h。因此也称为头文件或首部文件。C语言的头文件中包括了 各个标准库函数的函数原型。因此,凡是在程序中调用一个库函数时,都必须包含该函数原型所 在的头文件。在本例中,使用了三个库函数:输入函数 scanf,正弦函数sin,输出函数 printf sin函数是数学函数,其头文件为math.h文件,因此在程序的主函数前用 include命令包含了
但是,C 是 C++的基础,C++语言和C语言在很多方面是兼容的。因此,掌握了C语言,再进 一步学习 C++就能以一种熟悉的语法来学习面向对象的语言,从而达到事半功倍的目的。 C源程序的结构特点 为了说明C语言源程序结构的特点,先看以下几个程序。这几个程 序由简到难,表现了C 语言源程序在组成结构上的特点。虽然有关内容还未介绍,但可从这些例子中了解到组成一个 C 源程序的基本部分和书写格式。 main() { printf("c 语言世界 www.vcok.com,您好!\n"); } main 是主函数的函数名,表示这是一个主函数。每一个 C 源程序都必须有,且只能有一个 主函数(main 函数)。函数调用语句,printf 函数的功能是把要输出的内容送到显示器去显示。 printf 函数是一个由系统定义的标准函数,可在程序中直接调用。 #include "stdio.h" #include "math.h" main() { double x,s; printf("input number:\n"); scanf("%lf",&x); s=sin(x); printf("sine of %lf is %lf\n",x,s); } 每行注释 include 称为文件包含命令扩展名为.h 的文件也称为头文件或首部文件 定义两个实数变量,以被后面程序使用 显示提示信息 从键盘获得一个实数 x 求 x 的正弦,并把它赋给变量 s 显示程序运算结果 main 函数结束 程序的功能是从键盘输入一个数 x,求 x 的正弦值,然后输出结果。在 main()之前的两行称 为预处理命令(详见后面)。预处理命令还有其它几种,这里的 include 称为文件包含命令,其 意义是把尖括号""或引号<>内指定的文件包含到本程序来,成为本程序的一部分。被包含的文件 通常是由系统提供的,其扩展名为.h。因此也称为头文件或首部文件。C语言的头文件中包括了 各个标准库函数的函数原型。因此,凡是在程序中调用一个库函数时,都必须包含该函数原型所 在的头文件。在本例中,使用了三个库函数:输入函数 scanf,正弦函数 sin,输出函数 printf。 sin 函数是数学函数,其头文件为 math.h 文件,因此在程序的主函数前用 include 命令包含了
math. h. scanf和 printf是标准输入输出函数,其头文件为 stdio.h,在主函数前也用 include 命令包含了 stdio.h文件。 需要说明的是,C语言规定对 scanf和 printf这两个函数可以省去对其头文件的包含命令。 所以在本例中也可以删去第二行的包含命令# include。同样,在例1.1中使用了 printf函数 也省略了包含命令 在例题中的主函数体中又分为两部分,一部分为说明部分,另一部分执行部分。说明是指变 量的类型说明。例题中未使用任何变量,因此无说明部分。C语言规定,源程序中所有用到的变 量都必须先说明,后使用,否则将会出错。这一点是编译型高级程序设计语言的一个特点,与解 释型的 BASIC语言是不同的。说明部分是C源程序结构中很重要的组成部分。本例中使用了两个 变量x,s,用来表示输入的自变量和sin函数值。由于sin函数要求这两个量必须是双精度浮 点型,故用类型说明符 double来说明这两个变量。说明部分后的四行为执行部分或称为执行语 句部分,用以完成程序的功能。执行部分的第一行是输出语句,调用 printf函数在显示器上输 出提示字符串,请操作人员输入自变量x的值。第二行为输入语句,调用 scanf函数,接受键盘 上输入的数并存入变量x中。第三行是调用sin函数并把函数值送到变量s中。第四行是用 printf 函数输出变量s的值,即x的正弦值。程序结束 printf(input number: \n") scanf("%1f","C10F10&x); s=sin(x) printf( sine of %If is %1f\n", 'C10F10x, s) 运行本程序时,首先在显示器屏幕上给出提示串 input number,这是由执行部分的第一行 完成的。用户在提示下从键盘上键入某一数,如5,按下回车键,接着在屏幕上给出计算结果。 输入和输出函数 在前两个例子中用到了输入和输出函数 scanf和 printf,在第三章中我们要详细介绍。这 里我们先简单介绍一下它们的格式,以便下面使用。 scanf和 printf这两个函数分别称为格式 输入函数和格式输出函数。其意义是按指定的格式输入输出值。因此,这两个函数在括号中的参 数表都由以下两部分组成:“格式控制串”,参数表格式控制串是一个字符串,必须用双 引号括起来,它表示了输入输出量的数据类型。各种类型的格式表示法可参阅第三章。在 printf 函数中还可以在格式控制串内出现非格式控制字符,这时在显示屏幕上将原文照印。参数表中给 出了输入或输出的量。当有多个量时,用逗号间隔。例如 printf( sine of %If is %If\n", x, s) 其中%lf为格式字符,表示按双精度浮点数处理。它在格式串中两次现,对应了x和s两个 变量。其余字符为非格式字符则照原样输出在屏幕上 t max(int a, int b) na In Int x, v,Z printf(input two numbers: \n") scanf("%d%d”,&x,&y printf(" maxmum=%d",z)
math.h。scanf 和 printf 是标准输入输出函数,其头文件为 stdio.h,在主函数前也用 include 命令包含了 stdio.h 文件。 需要说明的是,C 语言规定对 scanf 和 printf 这两个函数可以省去对其头文件的包含命令。 所以在本例中也可以删去第二行的包含命令#include。同样,在例 1.1 中使用了 printf 函数, 也省略了包含命令。 在例题中的主函数体中又分为两部分,一部分为说明部分,另一部分执行部分。说明是指变 量的类型说明。例题中未使用任何变量,因此无说明部分。C语言规定,源程序中所有用到的变 量都必须先说明,后使用,否则将会出错。这一点是编译型高级程序设计语言的一个特点,与解 释型的 BASIC 语言是不同的。说明部分是 C 源程序结构中很重要的组成部分。本例中使用了两个 变量 x,s,用来表示输入的自变量和 sin 函数值。由于 sin 函数要求这两个量必须是双精度浮 点型,故用类型说明符 double 来说明这两个变量。说明部分后的四行为执行部分或称为执行语 句部分,用以完成程序的功能。执行部分的第一行是输出语句,调用 printf 函数在显示器上输 出提示字符串,请操作人员输入自变量 x 的值。第二行为输入语句,调用 scanf 函数,接受键盘 上输入的数并存入变量x 中。第三行是调用sin 函数并把函数值送到变量s 中。第四行是用printf 函数输出变量 s 的值,即 x 的正弦值。程序结束。 printf("input number:\n"); scanf("%lf",'C10F10&x); s=sin(x); printf("sine of %lf is %lf\n",'C10F10x,s); 运行本程序时,首先在显示器屏幕上给出提示串 input number,这是由执行部分的第一行 完成的。用户在提示下从键盘上键入某一数,如 5,按下回车键,接着在屏幕上给出计算结果。 输入和输出函数 在前两个例子中用到了输入和输出函数 scanf 和 printf,在第三章中我们要详细介绍。这 里我们先简单介绍一下它们的格式,以便下面使用。scanf 和 printf 这两个函数分别称为格式 输入函数和格式输出函数。其意义是按指定的格式输入输出值。因此,这两个函数在括号中的参 数表都由以下两部分组成: “格式控制串”,参数表 格式控制串是一个字符串,必须用双 引号括起来,它表示了输入输出量的数据类型。各种类型的格式表示法可参阅第三章。在 printf 函数中还可以在格式控制串内出现非格式控制字符,这时在显示屏幕上将原文照印。参数表中给 出了输入或输出的量。当有多个量时,用逗号间隔。例如: printf("sine of %lf is %lf\n",x,s); 其中%lf 为格式字符,表示按双精度浮点数处理。它在格式串中两次现,对应了 x 和 s 两个 变量。其余字符为非格式字符则照原样输出在屏幕上 int max(int a,int b); main() { int x,y,z; printf("input two numbers:\n"); scanf("%d%d",&x,&y); z=max(x,y); printf("maxmum=%d",z);
int max(int a, int b) if(a>b) turn a else return b 此函数的功能是输入两个整数,输出其中的大数。 /*函数说明*/ /*主函数*/ /*变量说明*/ /*输入x,y值*/ /*调用max函数*/ /*输出*/ /*定义max函数* /*把结果返回主调函数*/ 上面例中程序的功能是由用户输入两个整数,程序执行后输出其中较大的数。本程序由两个 函数组成,主函数和max函数。函数之间是并列关系。可从主函数中调用其它函数。max函数 的功能是比较两个数,然后把较大的数返回给主函数。max函数是一个用户自定义函数。因此在 主函数中要给出说明(程序第三行)。可见,在程序的说明部分中,不仅可以有变量说明,还可以 有函数说明。关于函数的详细内容将在第五章介绍。在程序的每行后用/*和*/括起来的内容为注 释部分,程序不执行注释部分。 上例中程序的执行过程是,首先在屏幕上显示提示串,请用户输入两个数,回车后由 scanf 函数语句接收这两个数送入变量x,y中,然后调用max函数,并把x,y的值传送给max函数的 参数a,b。在max函数中比较a,b的大小,把大者返回给主函数的变量z,最后在屏幕上输出z 的值。 C源程序的结构特点 1.一个C语言源程序可以由一个或多个源文件组成 2每个源文件可由一个或多个函数组成。 3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数 4.源程序中可以有预处理命令( include命令仅为其中的一种),预处理命令通常应放在源文件或 源程序的最前面。 5每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能 加分号。 6.标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来 间隔。 书写程序时应遵循的规则
} int max(int a,int b) { if(a>b)return a; else return b; } 此函数的功能是输入两个整数,输出其中的大数。 /*函数说明*/ /*主函数*/ /*变量说明*/ /*输入 x,y 值*/ /*调用 max 函数*/ /*输出*/ /*定义 max 函数*/ /*把结果返回主调函数*/ 上面例中程序的功能是由用户输入两个整数,程序执行后输出其中较大的数。本程序由两个 函数组成,主函数和 max 函数。函数之间是并列关系。可从主函数中调用其它函数。max 函数 的功能是比较两个数,然后把较大的数返回给主函数。max 函数是一个用户自定义函数。因此在 主函数中要给出说明(程序第三行)。可见,在程序的说明部分中,不仅可以有变量说明,还可以 有函数说明。关于函数的详细内容将在第五章介绍。在程序的每行后用/*和*/括起来的内容为注 释部分,程序不执行注释部分。 上例中程序的执行过程是,首先在屏幕上显示提示串,请用户输入两个数,回车后由 scanf 函数语句接收这两个数送入变量 x,y 中,然后调用 max 函数,并把 x,y 的值传送给 max 函数的 参数 a,b。在 max 函数中比较 a,b 的大小,把大者返回给主函数的变量 z,最后在屏幕上输出 z 的值。 C源程序的结构特点 1.一个C语言源程序可以由一个或多个源文件组成。 2.每个源文件可由一个或多个函数组成。 3.一个源程序不论由多少个文件组成,都有一个且只能有一个 main 函数,即主函数。 4.源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或 源程序的最前面。 5.每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能 加分号。 6.标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来 间隔。 书写程序时应遵循的规则
从书写清晰,便于阅读,理解,维护的角度出发,在书写程序时应遵循以下规则 1.一个说明或一个语句占一行 2.用仆}括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对 齐,并单独占一行。 3.低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰, 增加程序的可读性。在编程时应力求遵循这些规则,以养成良好的编程风格 C语言的字符集 字符是组成语言的最基本的元素。C语言字符集由字母,数字,空格,标点和特殊字符组成 在字符常量,字符串常量和注释中还可以使用汉字或其它可表示的图形符号 1.字母小写字母a~z共26个,大写字母A~Z共26个 2.数字0~9共10个 3.空白符空格符、制表符、换行符等统称为空白符。空白符只在字符常量和字符串常量中起作 用。在其它地方出现时,只起间隔作用,编译程序对它们忽略。因此在程序中使用空白符与否, 对程序的编译不发生影响,但在程序中适当的地方使用空白符将增加程序的清晰性和可读性 4标点和特殊字符 c语言词汇 在C语言中使用的词汇分为六类:标识符,关键字,运算符,分隔符,常量,注释符等 1.标识符 在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外, 其余都由用户自定义。C规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线O)组成的 字符串,并且其第一个字符必须是字母或下划线。 以下标识符是合法的 以下标识符是非法的 3s以数字开头 s*T出现非法字符* -3x以减号开头 bowy-1出现非法字符-(减号) 在使用标识符时还必须注意以下几点: (1)标准C不限制标识符的长度,但它受各种版本的C语言编译系统限制,同时也受到具体机器 的限制。例如在某版本C中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是
从书写清晰,便于阅读,理解,维护的角度出发,在书写程序时 应遵循以下规则: 1.一个说明或一个语句占一行。 2.用{} 括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对 齐,并单独占一行。 3.低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰, 增加程序的可读性。在编程时应力求遵循这些规则,以养成良好的编程风格。 C语言的字符集 字符是组成语言的最基本的元素。C语言字符集由字母,数字,空格,标点和特殊字符组成。 在字符常量,字符串常量和注释中还可以使用汉字或其它可表示的图形符号。 1.字母 小写字母 a~z 共 26 个,大写字母 A~Z 共 26 个 2.数字 0~9 共 10 个 3.空白符 空格符、制表符、换行符等统称为空白符。空白符只在字符常量和字符串常量中起作 用。在其它地方出现时,只起间隔作用, 编译程序对它们忽略。因此在程序中使用空白符与否, 对程序的编译不发生影响,但在程序中适当的地方使用空白符将增加程序的清晰性和可读性。 4.标点和特殊字符 C语言词汇 在C语言中使用的词汇分为六类:标识符,关键字,运算符,分隔符,常量,注释符等。 1.标识符 在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外, 其余都由用户自定义。C 规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线()组成的 字符串,并且其第一个字符必须是字母或下划线。 以下标识符是合法的: a,x,_3x,BOOK_1,sum5 以下标识符是非法的: 3s 以数字开头 s*T 出现非法字符* -3x 以减号开头 bowy-1 出现非法字符-(减号) 在使用标识符时还必须注意以下几点: (1)标准 C 不限制标识符的长度,但它受各种版本的 C 语言编译系统限制,同时也受到具体机器 的限制。例如在某版本 C 中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是
同一个标识符。 (2)在标识符中,大小写是有区别的。例如B00K和book是两个不同的标识符。 (3)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有 相应的意义,以便阅读理解,作到“顾名思义” 2.关键 关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不 应与关键字相同。C语言的关键字分为以下几类 (1)类型说明符 用于定义、说明变量、函数或其它数据结构的类型。如前面例题中用到的int, double等 (2)语句定义符 用于表示一个语句的功能。如例1.3中用到的 if else就是条件语句的语句定义 (3)预处理命令字 用于表示一个预处理命令。如前面各例中用到的 include。 3.运算符 C语言中含有相当丰富的运算符。运算符与变量,函数一起组成表达式,表示各种运算功能。 运算符由一个或多个字符组成 4分隔符 在C语言中采用的分隔符有逗号和空格两种。逗号主要用在类型说明和函数参数表中,分隔 各个变量。空格多用于语句各单词之间,作间隔符。在关键字,标识符之间必须要有一个以上的 空格符作间隔,否则将会出现语法错误,例如把inta;写成inta;C编译器会把inta当成一个 标识符处理,其结果必然出错。 5.常量 C语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多 在第二章中将专门给予介绍。 6.注释符 C语言的注释符是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释 程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。注释用来向用户提示或解 释程序的意义。在调试程序中对暂不使用的语句也可用注释符括起来,使翻译跳过不作处理,待 调试结束后再去掉注释符
同一个标识符。 (2)在标识符中,大小写是有区别的。例如 BOOK 和 book 是两个不同的标识符。 (3)标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有 相应的意义,以便阅读理解,作到“顾名思义”。 2.关键字 关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不 应与关键字相同。C语言的关键字分为以下几类: (1)类型说明符 用于定义、说明变量、函数或其它数据结构的类型。如前面例题中用到的 int,double 等 (2)语句定义符 用于表示一个语句的功能。如例 1.3 中用到的 if else 就是条件语句的语句定义符。 (3)预处理命令字 用于表示一个预处理命令。如前面各例中用到的 include。 3.运算符 C语言中含有相当丰富的运算符。运算符与变量,函数一起组成表达式,表示各种运算功能。 运算符由一个或多个字符组成。 4.分隔符 在C语言中采用的分隔符有逗号和空格两种。逗号主要用在类型说明和函数参数表中,分隔 各个变量。空格多用于语句各单词之间,作间隔符。在关键字,标识符之间必须要有一个以上的 空格符作间隔, 否则将会出现语法错误,例如把 int a;写成 inta;C 编译器会把 inta 当成一个 标识符处理,其结果必然出错。 5.常量 C 语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。 在第二章中将专门给予介绍。 6.注释符 C 语言的注释符是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释。 程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。注释用来向用户提示或解 释程序的意义。在调试程序中对暂不使用的语句也可用注释符括起来,使翻译跳过不作处理,待 调试结束后再去掉注释符。 .:.:第二章:数据类型、运算符、表达式:.:
第二章:数据类型、运算符、表达式 c语言的数据类型 在第一课中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用。对变量的说 明可以包括三个方面 数据类型 存储类型 作用域 在本课中,我们只介绍数据类型说明。其它说明在以后各章中陆续介绍。所谓数据类型是按被说明量的 性质,表示形式,占据存储空间的多少,构造特点来划分的。在C语言中,数据类型可分为:基本数据类型 构造数据类型,指针类型,空类型四大类。 1.基本数据类型 基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的 2.构造数据类型构造数据类型 是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成 若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在C语言中,构造 类型有以下几种 数组类型 结构类型 联合类型 3.指针类型 指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个量在内存储器中的地址。虽 然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。4.空类型在调用函数 值时,通常应向调用者返回一个函数值。这个返回的函数值是具有一定的数据类型的,应在函数定义及函数 说明中给以说明,例如在例题中给出的max函数定义中,函数头为: int max(inta,intb);其中“int” 类型说明符即表示该函数的返回值为整型量。又如在例题中,使用了库函数sin,由于系统规定其函数返回 值为双精度浮点型,因此在赋值语句s=sin(x);中,s也必须是双精度浮点型,以便与sin函数的返回值 致。所以在说明部分,把s说明为双精度浮点型。但是,也有一类函数,调用后并不需要向调用者返回函数 值,这种函数可以定义为“空类型”。其类型说明符为void。在第五章函数中还要详细介绍。在本章中, 我们先介绍基本数据类型中的整型、浮点型和字符型。其余类型在以后各章中陆续介绍。 对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改 变的量称为常量,取值可变的量称为变量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型 变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中,常量是可以不经说明
第二章: 数据类型、运算符、表达式 C语言的数据类型 在第一课中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用。对变量的说 明可以包括三个方面: ·数据类型 ·存储类型 ·作用域 在本课中,我们只介绍数据类型说明。其它说明在以后各章中陆续介绍。所谓数据类型是按被说明量的 性质,表示形式,占据存储空间的多少,构造特点来划分的。在C语言中,数据类型可分为:基本数据类型, 构造数据类型,指针类型,空类型四大类。 1.基本数据类型 基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。 2.构造数据类型构造数据类型 是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成 若干个“成员”或“元素”。每个“成员”都是一个基本数据类型或又是一个构造类型。在 C 语言中,构造 类型有以下几种: ·数组类型 ·结构类型 ·联合类型 3.指针类型 指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个量在内存储器中的地址。虽 然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因此不能混为一谈。4.空类型在调用函数 值时,通常应向调用者返回一个函数值。这个返回的函数值是具有一定的数据类型的,应在函数定义及函数 说明中给以说明,例如在例题中给出的 max 函数定义中,函数头为: int max(int a,int b);其中“int ” 类型说明符即表示该函数的返回值为整型量。又如在例题中,使用了库函数 sin,由于系统规定其函数返回 值为双精度浮点型,因此在赋值语句 s=sin (x);中,s 也必须是双精度浮点型,以便与 sin 函数的返回值一 致。所以在说明部分,把 s 说明为双精度浮点型。但是,也有一类函数,调用后并不需要向调用者返回函数 值, 这种函数可以定义为“空类型”。其类型说明符为 void。在第五章函数中还要详细介绍。在本章中, 我们先介绍基本数据类型中的整型、浮点型和字符型。其余类型在以后各章中陆续介绍。 对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。在程序执行过程中,其值不发生改 变的量称为常量,取值可变的量称为变量。它们可与数据类型结合起来分类。例如,可分为整型常量、整型 变量、浮点常量、浮点变量、字符常量、字符变量、枚举常量、枚举变量。在程序中,常量是可以不经说明
而直接引用的,而变量则必须先说明后使用。 整型量 整型量包括整型常量、整型变量。整型常量就是整常数。在C语言中,使用的整常数有八进制、十六进制和 十进制三种。 整型常量 1.八进制整常数八进制整常数必须以0开头,即以0作为八进制数的前缀。数码取值为0~7。八进制数通常 是无符号数。 以下各数是合法的八进制数 015(十进制为13)0101(十进制为65)017777(十进制为65535) 以下各数不是合法的八进制数: 256(无前缀0)03A2(包含了非八进制数码)-0127(出现了负号) 2.十六进制整常数 十六进制整常数的前缀为0X或0x。其数码取值为09,AF或af 以下各数是合法的十六进制整常数: 0X2A(十进制为42)0XA0(十进制为160)0XFFF(十进制为6535) 以下各数不是合法的十六进制整常数: 5A(无前缀0X)0X3H(含有非十六进制数码) 3十进制整常数 十进制整常数没有前缀。其数码为0~9 以下各数是合法的十进制整常数 237-568655351627 以下各数不是合法的十进制整常数 023(不能有前导0)23D(含有非十进制数码) 在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错造成结果不正确。4.整型 常数的后缀在16位字长的机器上,基本整型的长度也为16位,因此表示的数的范围也是有限定的。十进制 无符号整常数的范围为0~65535,有符号数为-32768~+32767。八进制无符号数的表示范围为0~017777 十六进制无符号数的表示范围为0X0~0 XFFFF或0x0~0 XFFFF。如果使用的数超过了上述范围,就必须用长 整型数来表示。长整型数是用后缀“L”或“1”来表示的。例如: 十进制长整常数158L(十进制为158)358000L(十进制为-358000 八进制长整常数012L(十进制为10)077L(十进制为63)0200000L(十进制为65536) 十六进制长整常数0X15L(十进制为21)0XA5L(十进制为165)0X10000L(十进制为65536) 长整数158L和基本整常数158在数值上并无区别。但对158L,因为是长整型量,C编译系统将为它分 配4个字节存储空间。而对158,因为是基本整型,只分配2个字节的存储空间。因此在运算和输出格式上 要予以注意,避免出错。无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。例如 358u,0x38Au,235Lu均为无符号数。前缀,后缀可同时使用以表示各种类型的数。如0XA5Lu表示十六进制无 符号长整数A5,其十进制为165
而直接引用的,而变量则必须先说明后使用。 整型量 整型量包括整型常量、整型变量。整型常量就是整常数。在C语言中,使用的整常数有八进制、十六进制和 十进制三种。 整型常量 1.八进制整常数八进制整常数必须以 0 开头,即以 0 作为八进制数的前缀。数码取值为 0~7。八进制数通常 是无符号数。 以下各数是合法的八进制数: 015(十进制为 13) 0101(十进制为 65) 0177777(十进制为 65535) 以下各数不是合法的八进制数: 256(无前缀 0) 03A2(包含了非八进制数码) -0127(出现了负号) 2.十六进制整常数 十六进制整常数的前缀为 0X 或 0x。其数码取值为 0~9,A~F 或 a~f。 以下各数是合法的十六进制整常数: 0X2A(十进制为 42) 0XA0 (十进制为 160) 0XFFFF (十进制为 65535) 以下各数不是合法的十六进制整常数: 5A (无前缀 0X) 0X3H (含有非十六进制数码) 3.十进制整常数 十进制整常数没有前缀。其数码为 0~9。 以下各数是合法的十进制整常数: 237 -568 65535 1627 以下各数不是合法的十进制整常数: 023 (不能有前导 0) 23D (含有非十进制数码) 在程序中是根据前缀来区分各种进制数的。因此在书写常数时不要把前缀弄错造成结果不正确。4.整型 常数的后缀在 16 位字长的机器上,基本整型的长度也为 16 位,因此表示的数的范围也是有限定的。十进制 无符号整常数的范围为 0~65535,有符号数为-32768~+32767。八进制无符号数的表示范围为 0~0177777。 十六进制无符号数的表示范围为 0X0~0XFFFF 或 0x0~0xFFFF。如果使用的数超过了上述范围,就必须用长 整型数来表示。长整型数是用后缀“L”或“l”来表示的。例如: 十进制长整常数 158L (十进制为 158) 358000L (十进制为-358000) 八进制长整常数 012L (十进制为 10) 077L (十进制为 63) 0200000L (十进制为 65536) 十六进制长整常数 0X15L (十进制为 21) 0XA5L (十进制为 165) 0X10000L (十进制为 65536) 长整数 158L 和基本整常数 158 在数值上并无区别。但对 158L,因为是长整型量,C编译系统将为它分 配 4 个字节存储空间。而对 158,因为是基本整型,只分配 2 个字节的存储空间。因此在运算和输出格式上 要予以注意,避免出错。无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。例如: 358u,0x38Au,235Lu 均为无符号数。前缀,后缀可同时使用以表示各种类型的数。如 0XA5Lu 表示十六进制无 符号长整数 A5,其十进制为 165
整型变量 整型变量可分为以下几类: 1.基本型 类型说明符为int,在内存中占2个字节,其取值为基本整常数 2.短整量 类型说明符为 short int或 short'C110F1。所占字节和取值范围均与基本型相同。 3.长整型 类型说明符为 long int或long,在内存中占4个字节,其取值为长整常数。 4.无符号型 类型说明符为 unsigned. 无符号型又可与上述三种类型匹配而构成 (1)无符号基本型类型说明符为 unsigned int或 unsigned (2)无符号短整型类型说明符为 unsigned short 3)无符号长整型类型说明符为 unsigned long 各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负 数。下表列出了 Turbo c中各类整型量所分配的内存字节数及数的表示范围。 类型说明符 数的范围 分配字节数 3276832767 short int 32768~32767 signed int 32768~32767 unsigned int 0 65535 long int-2147483648214748364 unsigned long 0 4294967295 口 整型变量的说明 变量说明的一般形式为:类型说明符变量名标识符,变量名标识符,,,;例如: inta,b,c;(a,b,c为整型变量) long x,y;(x,y为长整型变量) unsigned p,q;(p,q为无符号整型变量) 在书写变量说明时,应注意以下几点 1.允许在一个类型说明符后,说明多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之 间至少用一个空格间隔 2.最后一个变量名之后必须以“:”号结尾 3.变量说明必须放在变量使用之前。一般放在函数体的开头部分。 [Practicel//lint a, b short d=1oo b=a+d c=a+b+d d=d-a+c-b. vtable a,2,0
整型变量 整型变量可分为以下几类: 1.基本型 类型说明符为 int,在内存中占 2 个字节,其取值为基本整常数。 2.短整量 类型说明符为 short int 或 short'C110F1。所占字节和取值范围均与基本型相同。 3.长整型 类型说明符为 long int 或 long ,在内存中占 4 个字节,其取值为长整常数。 4.无符号型 类型说明符为 unsigned。 无符号型又可与上述三种类型匹配而构成: (1)无符号基本型 类型说明符为 unsigned int 或 unsigned。 (2)无符号短整型 类型说明符为 unsigned short (3)无符号长整型 类型说明符为 unsigned long 各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负 数。 下表列出了 Turbo C 中各类整型量所分配的内存字节数及数的表示范围。 类型说明符 数的范围 分配字节数 int -32768~32767 ■■ short int -32768~32767 ■■ signed int -32768~32767 ■■ unsigned int 0~65535 ■■ long int -2147483648~2147483647 ■■■■ unsigned long 0~4294967295 ■■■■ 整型变量的说明 变量说明的一般形式为: 类型说明符 变量名标识符,变量名标识符,...; 例如: int a,b,c; (a,b,c 为整型变量) long x,y; (x,y 为长整型变量) unsigned p,q; (p,q 为无符号整型变量) 在书写变量说明时,应注意以下几点: 1.允许在一个类型说明符后,说明多个相同类型的变量。各变量名之间用逗号间隔。类型说明符与变量名之 间至少用一个空格间隔。 2.最后一个变量名之后必须以“;”号结尾。 3.变量说明必须放在变量使用之前。一般放在函数体的开头部分。 [Practice] //1int a,b; short int c; short d=100; a=d-20; b=a+d; c=a+b+d; d=d-a+c-b;'Vtable a,2,0
b,2,0 c,2,0 of vtable Vupdate 1,0;2,0 3,0 2,180 3,360 4,200 of vupdate of Practice [Practice]//2int a=5 int b=g long d d=a*b*kc c=dadd a=c-d: Vtable a,2,5 b,2,9 c,4,0 d,4,0 of vtable Vupdate 1,5 3,7 4,315 3,31255875 1,-5112 of Vupdat of Practice [Practice]//3int a=6, b=19 unsigned int c int d c=a-b+ a=b+c+d
b,2,0 c,2,0 d,2,100 of Vtable 'Vupdate 1,0;2,0 3,0 4,100 1,80 2,180 3,360 4,200 of Vupdate of Practice [Practice] //2int a=5; int b=9; long int c; long d; c=a+b-7; d=a*b*c; c=d*d*d; a=c-d;'Vtable a,2,5 b,2,9 c,4,0 d,4,0 of Vtable 'Vupdate 1,5 2,9 3,0 4,0 3,7 4,315 3,31255875 1,-5112 of Vupdate of Practice [Practice] //3int a=6,b=19; unsigned int c; int d; c=a-b+7; d=b*c; a=b+c+d;