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