1、各章学习目标小结各章学习目标、小结第一章 C 语言概述本章学习目标: 了解 C 语言的历史和发展过程。 了解 C 语言的特点及 C 程序的组成部分。 了解 C 程序的编译、链接过程。本章小结:本章首先介绍了 C 语言的发展简史。C 语言诞生于美国贝尔实验室,经过不断地修改、 完善,C 语言目前已成为人们广泛使用的语言之一。现在通用的 C 语言为 1983 年美国国 家标准化协会(ANSI)制定的标准 C 语言,称为 ANSI C。C 语言的特点使得它在各种语言中独树一帜,受到人们的青睐,广泛应用于社会各个 领域,其特点归纳如下。 结构化的语言。 模块化的语言。 简洁、紧凑,使用方便,灵活。 可
2、移植性好。 数据结构丰富。 运算符丰富,生成代码质量高。C 语言程序由函数组成。一个 C 源程序有且仅有一个 main()函数,但是可以包含任意 多个其他函数,因此,函数是 C 程序的基本单元。C 语言开发者编制了内容丰富的库函数, 编程者可以通过函数调用的形式使用这些库函数,方便、快捷、编程效率高。C 程序中,每一个基本语句和数据定义都是以分号“;”结束,书写格式自由,一行 可写多个语句,一个语句也可以分别写在几行上。可以使用/*/对程序添加注释以方 便读者阅读、理解程序的编写意图。C 语言是编译型语言,源程序必须经过编译和链接生成可执行文件后才能运行。编译 过程中可以检查出程序的错误,经过
3、编辑修改后,再重新编译。一般情况下,一个程序要 经过多次编辑和修改才能通过编译。链接目标文件的目的就是要生成最终的可执行文件。C 程序经过编译、链接,产生了 一个可执行文件(*.exe)。运行该文件,即可得到程序的运行结果。第二章 数据类型、运算符与表达式本章学习目标: 了解常量与变量的含义。 掌握数据类型及类型间的混合运算。 掌握运算符与表达式及其优先级和结合性。本章小结:本章主要讲述了 C 语言中的基本数据类型及类型的混合运算、常用的运算符与表达式 及其优先级和结合性等问题。(1) 常量:在程序运行过程中其值不发生改变的量称为常量。如0x123、0.123、a、n等都是常量。(2) 变量:
4、在程序运行过程中,其值可以改变的量称为变量。每个变量有一个变量名,变量名只能由字母、数字和下划线 3 种字符组成,且第 1 个字符必须 是字母或下划线,如 ab、_an0ve、sun 等都是合法的变量名。C 语言规定, 变量必须“先定义,后使用”。(3) 整型数据分为整型常量和整型变量。整型常量常用 3 种形式表示:十进制整数,如 100、3 等;八进制整数,如 010、07 等;十六进制整数,如 0x15、0x234 等。整型变量按数据在内存中所占的字节数分为基本型(int)、短整型(short)、长整型 (long)和无符号型(unsigned)4 种。整型变量定义的一般形式为:;如“in
5、t a,b;”、“unsigned c,d;”等都是整型变量的定义。在将一个整型常量赋给一个整 型变量时,应注意整型数据取值范围的选择。(4) 实型数据分为实型变量和实型常量。实型常量也称实数。常用十进制数的形式(如 0.123、45 等)和指数形式(如 1.23e3、123E4 等)表示。实型变量分为单精度(float 型)和双精度(double 型)两类。实型变量的定义一般形 式为:如“float a;”、“double a,b;”等都是实型变量的定义。同样,在将实型常量赋给一个实 型变量时应注意实型数据取值范围的选择。(5) 字符型数据分为字符型常量和字符型变量。字符型常量主要包括字符常
6、量(如a、A等)和字符串常量(如“hello”、“China ”等) 两种类型,此外,转义字符也是一种特殊的字符常量。字符变量用来存放字符变量,只能放一个字符,定义形式如下:“char c1=c;”字符串 常量常用数组和指针来存储和访问,相关内容将在后续内容中讲述。在一定的范围内 (0255 或-128127 之间),字符型数据和整型数据之间可以通用。(6) 类型的混合运算整型、实型和字符型数据间可以进行混合运算,有两种转换方式。自动类型转换:数据类型由低向高自动转换,即char,shortintunsignedlong doublefloat。强制类型转换:当自动类型转换达不到编程者的要求时
7、,可以利用强制类型转换将一 个表达式转换成所需的类型,其一般形式为(类型名)(表达式)。如 x=(int)a(如 a=2.53,则 x=2,a 为原值 2.53 不变)、(float)(5%2)等。(7) 运算符与表达式本章重点讲解了算术运算符与算术表达式、关系运算符与关系表达式、赋值运算符与 赋值表达式以及逻辑运算符与逻辑运算表达式。此外还介绍了自增和自减运算符、条件运 算符与条件表达式、逗号运算符与逗号表达式和位运算符。对于其他的一些运算符将在后 面的相关章节中讲解。各类运算符的优先级和结合性为:初等运算符()、:自左至右。单目运算符:自右至左。算术运算符(先乘除后加减):自左至右。关系运
8、算符:自左至右。逻辑运算符:自左至右。条件运算符:自右至左。赋值运算符:自右至左。逗号运算符:自左至右。第三章 顺序程序设计本章学习目标: 了解语句的概念及其构成。 掌握字符数据的输入与输出。 掌握格式输入与输出。 掌握编写简单的顺序结构程序的方法。本章小结:本章学习了 C 语句、数据的输入与输出及最简单的程序设计顺序程序设计。 一、 C 语句C 语句可以分为以下 5 类:(1) 表达式语句由表达式加分号构成。(2) 空语句只有 1 个分号的语句称为空语句。(3) 复合语句用大括号“”括起来的若干语句称为复合语句。复合语句的使用方式是:当单一语句位置上的功能必须用多个语句才能实现时,就需 要使
9、用复合语句。(4) 函数调用语句在 1 个函数的后面加 1 个分号就构成了 1 个函数调用语句。函数的使用除了在表达式 中出现外,主要是通过函数调用语句来使用它。(5) 流程控制语句主要是对程序的走向起控制作用。常用于实现选择结构和循环结构的程序控制。 二、 数据的输入与输出一个完整的程序,都应该含有数据输入/输出操作。将原始数据输入,经程序处理后, 输出有用的信息。C 程序的输入/输出功能是由系统提供的输入/输出标准函数实现的。常 用的输入/输出标准函数如下。字符输入输出函数:(1) 字符输入函数 getchar()getchar()函数的功能是接收从键盘输入的 1 个字符,它无参数。使用时
10、应注意以下两点。 如果 getchar()函数读入的字符不赋给任何变量,则该函数只能作为表达式的一部分使用。 如果在 1 个程序中使用了 getchar()函数,则必须在该程序的开头使用下列编译预处理命令:#include这是因为 getchar()函数属于标准 I/O 库函数。C 语言规定:凡在程序中使用了标准 I/O 库函数,就需要将文件“stdio.h”调入到源程序文件中。(2) 字符输出函数 putchar()putchar()函数的功能是向终端屏幕输出 1 个字符。该函数的使用形式为: putchar(c);输出字符变量c 的值。c 可以是字符型变量或整型变量,也可以是1 个字符常量
11、或整型常 量。格式化输入输出函数:(1) 格式化输入函数 scanf()用 scanf()函数可以输入任何类型的数据。 一般格式:scanf(格式控制,地址表列); 格式说明:格式说明以“%”开头,以 1 个格式字符结束,中间可以插入附加的字符。scanf()函 数中使用的格式字符如表 3-1 所示,附加说明字符如表 3-2 所示。表 3-1 scanf()函数中的格式字符格式字符说明dox用来输入十进制整数用来输入八进制整数用来输入十六进制整数c用来输入单个字符续表格式字符说明sfe用来输入以0为结束标志的字符串到字符数组用来输入实数,可以用小数形式或指数形式输入 与 f 作用相同,e 与
12、f 可以互相替换表 3-2 scanf 附加的格式说明字符字符说明lh域宽*用于输入长整型数据(如%ld)以及 double 型数据(如%lf)用于输入短整型数据(可用%hd,%ho,%hx)为一正整数,指定输入数据所占宽度(列数)表示本输入项在读入后不赋给相应的变量 scanf 函数的执行中应注意的问题。scanf()函数中“格式控制”的后面应当是变量地址,而不应是变量名。如果在“格式控制”字符串中,除了格式说明以外还有其他字符,则在输入数据 时应输入与这些字符相同的字符。添加这些字符的目的是帮助理解,避免在输 入时产生错误的数据输入。(2) 格式化输出函数 printf()putchar(
13、)函数只能输出 1 个字符,而 printf()函数的作用是向终端(一般指显示屏幕)输出若干个任意类型的数据。 一般格式:printf(格式控制,输出表列); 格式字符。printf()函数有 9 种格式字符(如表 3-3 所示)和 4 种附加格式说明字符(如表 3-4 所 示)。表 3-3 printf()函数中的格式字符格式字符说明doxu以带符号的十进制形式输出整数(正数不输出符号)以八进制的无符号形式输出整数(不输出前导符 0)以十六进制无符号形式输出整数(不输出前导符 0x) 以无符号十进制形式输出整数csfeg以字符形式输出,只输出一个字符输出字符串以小数形式输出单、双精度,隐含输
14、出 6 位小数以标准指数形式输出单、双精度数,数字部分小数位数为 6 位选用%f 或%e 格式中输出宽度较短的一种格式,不输出无意义的 0表 3-4 printf()函数中的附加格式说明字符格式字符字母 lm(一个正整数).n( 一个正整数)-说明用于长整型,可加在格式符 d,o,x,u 前面数据最小宽度对实数,表示输出 n 位小数;对字符串,表示截取的字符个数 输出的数字或字符在域内向左靠 使用 printf()函数应注意的问题如下。在用 printf()函数输出时,应注意与上表中的格式说明匹配,否则将会出现错 误。有些系统要求格式字符要用小写字母。三、 顺序结构程序设计顺序结构程序就是按语
15、句书写顺序,逐条执行的程序。顺序结构程序比较简单,应多 编程练习以熟练掌握基本程序设计技巧。第四章 选择程序设计本章学习目标: 理解 C 语言中各类控制语句的执行过程、功能和使用方法。 掌握 if 语句的 3 种形式、if 和 else 配对规则及 if 语句的嵌套。 能正确地使用 switch 语句设计多分支选择结构。本章小结:本章主要讲了两大语句的使用,即 if 语句和 switch 语句。它们都是 C 语言中使用最为 频繁的语句,必须很好地掌握。就 if 语句而言,有 3 种基本使用形式和多种嵌套格式,第 3 种基本使用形式和两种嵌 套较为繁琐,但在一般情况下,其功能能用 switch
16、语句代替。在学习 if 语句的过程中要着 重把握以下知识点。 if 语句后的表达式的值只有两种情况(“真”和“假”),它是其后语句是否被执行的依据,只有表达式的值为“真”时,其语句才被执行,否则不被执行。 在 if-else 结构中,if 子句和 else 子句只能有一个被执行。程序运行时首先判断 if 子句前的表达式,当 if 子句前的表达式为“假”时才执行 else 子句。否则,else 子句不被执行。 if 和 else 必须配对使用,当配对的 if 和 else 之间有两个或两个以上的语句时,一定要使用大括号,作为复合语句来处理,否则程序编译时将会出错。 else 总是与它前面的不带
17、else 的 if 配对。就 switch 语句而言,应主要把握以下知识点。 switch 结构中有 1 个小括号和 1 个大括号,小括号内是表达式,其值作为大括号内入口选择的依据。 两个括号(1 个小括号和 1 个大括号)外均无“;”。 default 无论在何处总是最后执行。 执行过程中,当进入入口后,只要没有遇到 break 语句,程序总是顺序执行下去,当遇到 break 语句时程序立即跳出 switch 结构,结束对 switch 的执行。 case 后必须是常量或常量表达式,绝不能含有变量。 不同 case 后的常量和常量表达式一定不能相同。第五章 循环程序设计本章学习目标: 掌握
18、C 语言中 while 循环的用法。 掌握 C 语言中 do-while 循环的用法。 掌握 C 语言中 for 循环的用法。 能对 for 语句和 while 循环进行正确的转换。 掌握并能熟练运用循环的嵌套设计。本章小结:本章重点讲述了 3 种循环结构,两种循环流程控制语句以及 for 语句和 while 循环之间 的相互转换等问题。while 循环是 1 种“当型”循环,而 do-while 循环是 1 种“直到型”循环。对于 while 循环而言,只有当条件表达式的值为“真”时才执行循环体。对于 do-while 循环而言,先 无条件地执行 1 次循环体再判断条件表达式的值,因此循环体
19、至少被执行 1 次。两种 while 循环的关系为:当两者的循环体相同,并且当第 1 次判断 while 后面的表 达式时,若其值为“真”时,两种循环得到的结果相同。否则,二者得到的结果不相同。for 语句的形式较为复杂,有 3 个表达式和 1 个循环体语句。3 个表达式均可省略,但 必须在程序其他相应的位置(循环语句前、循环体内等位置)补充必要的赋值、增值等语 句。对于循环体,如果循环体由多个语句构成,必须用大括号括起来作为 1 个复合语句来 处理,否则就会出现算法错误。在进行程序的调试时,特别要注意这点,因为大括号的有 无不会造成语法上的错误,程序编译时系统不会报错。break 语句和 c
20、ontinue 语句主要用于循环的流程控制,两者在用法上有显著差别。 break 语句用于结束整个循环,执行循环结构后面的下一个语句。continue 语句用于结束本次循环,越过循环体中尚未执行的语句,继续进行下一次循环。break 语句还可以用在 switch 分支选择结构中,但 continue 语句只能用于循环语句中。第六章 函数本章学习目标: 掌握函数、函数值(函数返回值)以及函数调用等的基本概念。 掌握函数的定义和调用方法。 掌握函数参数的传递方法。 掌握变量的作用范围。本章小结:本章着重讲述了有关函数的相关知识点,重点掌握以下要点。 在程序设计中使用函数有以下好处:可以增强程序的可
21、读性,可以为程序的后 序扩充留下空间,便于分工合作实现程序的并行开发。 函数的定义形式为:类型标识符 函数名 (参数表列)其中“类型标识符”可以是整型、实型、字符型和 void 类型。当省去“类型标识符” 时则隐含为整型。参数的个数可有可无、可多可少,完全取决于程序的实际情 况。 在使用函数时,函数的定义是必不可少的。但是对函数的声明可有可无,如果 不对函数进行声明则在使用函数前必须先定义。 变量可分为全局变量和局部变量,全局变量总是定义在所有函数的外部,其作 用范围是从定义位置开始一直到程序结束。局部变量总是定义在某个函数或块语 句内部,其作用范围只在该函数或块语句内部。 变量既有数据类型,
22、也有存储类型。存储类型用于指定变量在内存中的存储方 式,变量的存储类型主要有自动类型、静态类型、寄存器类型和外部类型等 4 种。第七章 数组本章学习目标: 掌握对数组的正确定义。 掌握对数组的正确引用。 掌握对数组的初始化。 字符串的输入、输出和处理。 掌握数组在函数中的运用。本章小结:关于一维数组的定义、初始化和引用作以下总结。 当定义数组并同时对所有元素进行初始化时,数组定义中的“常量表达式”可 以省略,系统默认数组的长度即为初始化时大括号内数据的个数。 当数组的定义与初始化同时进行时,定义数组时的“常量表达式”可以省略,系统默认数组的长度即为初始化时大括号内数据的个数。 对于字符类型的数
23、组,初始化时单个地赋以字符与赋以字符串是有区别的。单个地赋以字符时的数组的长度即为所赋字符的个数;赋以字符串的数组的长度即 为字符号串的长度再加 1,两者相比多了一个字符“0”占用的存储单元。 对数组所赋数据的个数只能小于或等于数组的长度,而不能大于数组的长度。当数组的长度大于初始化时所赋的字符(串)的长度时,对于赋以字符的数组余下 的部分补 0 值,而对于赋以字符串的数组余下的部分的第 1 个存储单元补以字符 “0”,其余部分不管。关于对数组中各元素的引用应注意以下要点。 数组中各元素都有自己的名称,其表示方法为:数组名下标。 下标是从 0 开始,到“常量表达式-1”结束。 各数组元素实质上
24、是 1 个变量,可以像对待其他普通变量一样对其进行各种操作和运算。 对数组名有两种理解,一是理解为数组的名称,二是理解为数组的首地址,即第 1 个元素的地址。数组不是 1 个变量,不能对其赋值。对数组中各元素地址的表示有两种方法。 第 1 种:数组名+整数。 第 2 种:&数组名下标。需要在此一提的是:数组中第 1 个元素的地址有 3 种表示方法,例如对于整型数组 a10的第 1 个元素的地址表示方法如下:aa+0&a0对二维数组的有关知识作以下总结。有关二维数组的定义:在二维数组中,“常量表达式 1”用于确定二维数组的行数即第 一维的长度,“常量表达式 2”用于确定二维数组的列数即第二维的长
25、度。两个表达式必须 是常量,而不能含有变量。有关二维数组的引用。 引用二维数组中元素的格式为:数组名下标 1下标 2,即二维数组中各元素的名称,其实质为变量。既可以对其引用,也可以对其赋值。 无论是二维数组的“行”还是二维数组的“列”,其下标总是从 0 开绐的。与一维数组一样,二维数组“行”和“列”的最大下标与二维数组对应的两维的长度之间始 终相差数值 1。 二维数组中的每个元素(存储单元)都是由两个值决定的,一个是行的下标,一个是列的下标。引用 1 个元素必须同时使用两个下标。有关二维数组中地址的表示方法。 “行”的首地址为:二维数组名行下标。 最常用的元素的地址表示方法为:&二维数组名行下
26、标列下标。 二维数组名是二维数组的首地址,数组名下标、&数组名下标 1下标 2也是二维数组的首地址。 如果用 i 表示二维数组的行下标,用 j 表示二维数组的列下标,用 m 表示二维数组第一维的长度,有 3 种方法表示各元素的地址,分别如下:a+i*m+ja0+i*m+j&a00+i*m+j有关二维数组的初始化。 可对所有的元素赋值,把所赋数据放在大括号内并以“,”相隔即可,或者在以“行”为单位再加以大括号。两种方法相比,第 1 种方法较为简便但不直观,第 2 种方法较为直观但不够简便。 可以对部分元素赋值,如果对二维数组的前几个元素赋值,把所赋数据放在大 括号内并以“,”相隔即可。如果对二维
27、数组中的元素有间隔地赋值则必须以“行”为 单元赋值。 在定义二维数组并对其全部元素进行初始化时,可以省略第一维的长度。第八章 指针本章学习目标: 掌握指针的概念、定义。 掌握指针变量的使用。 掌握指针在函数中的运用。 掌握指针的运算。 掌握指针在数组中的运用。本章小结:本章全面介绍了 C 语言中指针的相关知识,现将本章主要知识点总结如下: (1) 指针与地址的关系简单地说,指针是内存地址的代名词。通过指针(地址)操作,可以对存储单元中的 数据实现读写操作。用于存放 1 个变量地址的特殊变量就是指针变量。(2) 指针变量的定义指针变量定义的基本形式为:指针类型例如:int *p;*指针变量名(3
28、) 指针类型在指针变量定义中的类型符(int、char、float.)称为指针类型。由于指针代表 1 个内 存单元的地址,程序将要根据此地址读出(或写入)存放在此单元中的数据,因此指针类 型实际上表示该地址单元存储数据的类型。(4) 指针变量的存储。指针变量占有固定大小的存储单元。1 个地址本质上是整数(或长整数,为简单计, 可以认为是整数)。故指针变量都占 2 个字节的存储空间,与指针类型无关。(5) 取地址运算符号“&”是取变量地址的单目运算符,它直接作用于 1 个变量前表示该变量的地址, 例如,若定义以下变量:float x;char y;则&x 和&y 就是这两个变量的内存地址,通常,
29、程序设计者并不关心&x 和&y 的具体 值,只要知道&x 和&y 是变量 x 和 y 的指针就可以了。若在前两个语句后再有 1 个定义指 针变量的语句:float *f1;char *f2;则可进行以下赋值:f1=&x;f2=&y;这样就使指针变量 f1 指向变量 x 所在的地址,f2 指向变量 y 所在的地址。注意:以下 的赋值语句是错误的:f1=&y;f2=&x;错误的原因是指针基类型与变量的数据类型不一致。(6) 间接访问变量使用取内容运算符“*”可以间接访问 1 个指针指向的变量,只需要在指针名前加上 “*”即可。(7) 指针的自加和自减指针变量可以进行自加和自减运算,但其含义与普通变
30、量的同种运算不同。若已有定 义“float *p”,则: 表达式 p+(p-)将使指针向后(前)移动 1 个数据的位置。 p+1 指向数组的下 1 个元素,而不是简单地使指针变量 p 的值加 1。其值实际变化为 pointer+1*size(size 为一个元素占用的字节数)。例如,假设指针变量pointer 的当前值为 3000,则 pointer+1 为 3000+1*2=3002,而不是 3001。(8) 指针作函数参数在将指针作为函数参数时,一定要保证参数对应。指针是一种可以使我们“绕开”1 个变量的名字而存取它的工具或手段,指针本身并没有受间接引用的影响。并且实参和形 参指向同一段内存地址,因此在函数调用过程中可修改实参变量的值,还可以从被调函数 中获得多个返回值以提高以参数传递的程序的效率。第九章 编译预处理、结构体和共同体本章学习目标: 掌握有关编译预处理的知识。 掌握对简单的结构体的运用。 了解有关共同体的知识。本章小结:本章主要讲述了编译预处理命令的作用、定义和
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1