C期末复习.docx
《C期末复习.docx》由会员分享,可在线阅读,更多相关《C期末复习.docx(23页珍藏版)》请在冰豆网上搜索。
![C期末复习.docx](https://file1.bdocx.com/fileroot1/2023-1/24/0196623c-4a2e-4c6d-b39f-9d7c7f191fad/0196623c-4a2e-4c6d-b39f-9d7c7f191fad1.gif)
C期末复习
任务一
重点难点分析:
了解程序和程序设计语言,c语言的发展和特点,初步掌握c语言的构成和格式特点。
C程序的构成
(1)C程序由函数构成,函数是C程序的基本单位。
每个C程序由一个或多个函数组成,其中每一个C程序都必须有,且只能有一个main函数。
函数是C程序的基本单位。
(2)一个函数由函数首部和函数体两部分构成
函数首部包括函数类型、函数名、函数的参数说明等。
例如:
intmax(intx,inty)
函数体是函数首部下面用一对{}括起来的部分。
一般包括变量定义部分和语句执行部分。
变量定义部分定义函数内部所用变量,语句执行部分规定函数所要执行的动作。
(3)不论main函数在整个程序中的位置如何,C语言程序总是从main函数开始执行的,主函数执行完毕,整个程序结束运行。
(4)书写格式自由,一行可以写多个语句,一个语句也可以写在多行上,但每条语句或数据定义的最后必须有一个分号“;”,作为语句的结束标志。
(5)可用“/*……*/”对C程序中的任何部分作注释。
(6)预处理命令通常应放在源文件或源程序的最前面。
(7)VisualC++6.0是集编辑、编译链接和执行于一体的软件。
(8)C语言源文件的扩展名是.c。
任务二
本章重点:
掌握变量的定义,掌握各种运算符的特点及表达式的正确引用以及各种数据类型之间的相互转换。
本章难点:
各种数据类型的存储形式、相互转换及各种表达式的正确引用
1数据类型
C语言中提供了丰富的数据类型,其中整型、实型和字符型是基本数据类型,通过基本数据类型可再构造其他更复杂的数据类型。
1.1标识符
标识符:
用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。
C语言规定标识符只能由字母、数字、下划线三种字符组成,并且第一个字符必须是字母或下划线,同时C语言严格区分大小写。
标识符分三类:
关键字、预定义符和用户标识符
1.2变量
注意:
变量名、变量值、变量存储空间(变量内存单元)三者的区别与关系
1.变量的定义
变量必须先定义再使用。
【格式】:
数据类型 变量名列表;
2.变量的赋值
即将某一数据存入到变量的内存单元中。
数据称为变量值。
1.3常量
常量分为:
直接常量和符号常量
1.直接常量
直接在程序中使用的常量,根据字面意义可进行区分。
2.符号常量
【定义格式】#define 符号常量标示符 常量值
例:
#define PI 3.14
注意:
符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。
使用符号常量的好处是:
▪含义清楚;
▪能做到“一改全改”。
2.整型数据
2.1整型常量
C语言中,整型常量用来表示数学中的整数,可以用十进制、八进制或十六进制的形式表示,但没有二进制表示形式。
2.2整型变量
1.分类
归纳起来共6类(注意分配的字节数),即:
有符号基本整型 [singned]int
有符号短整型 [singned]short[int]
有符号长整型 [singned]long[int]
无符号基本整型 [unsigned]int
无符号短整型 [unsigned]short[int]
无符号长整型 [unsigned]long[int]
2.整型数据的存放形式
C语言规定一个有符号整数在内存中是以补码形式存放的。
3.整型数据的溢出
在应用中根据实际情况来选择数据类型,否则不能正确表达。
3实型数据
3.1实型常量
C语言中,实型常量用来表示带有小数点的实数,有两种表示形式:
(1) 十进制小数形式:
如,4.6、-1.23等
(2) 指数形式:
由尾数、字母e或E、指数三部分组成;如:
3.25E2
3.2实型变量
1.分类:
单精度(float)、双精度(double)、长双精度(longdouble)
2.实型数据的舍入误差
使用时注意不同类型的有效位问题,避免出现舍入误差
4字符型数据
4.1字符型常量
C语言规定用单引号定界的单个字符,及单引号定界的转义字符是字符常量。
注意:
转义字符仍然代表一个字符。
4.2字符型变量
一个字符型变量在内存占用一个字节的空间,存放的是该字符的ASCII码。
4.3字符型数据与整型数据的混合运算
因字符型数据内存存放的是该字符的ASCII码表现形式与整型数据相似,所以C规定两者可以混合运算。
4.4字符串常量
C语言中用双引号括起来的多个字符。
C语言规定:
存放字符串时,为其分配的存储空间比其实际字符个数多1,用于存放串结束标志字符‘\0’。
所以:
‘a’在内存中占1个字节;”a”在内存中占2个字节。
5运算符和表达式
掌握:
各种运算符的功能、对运算对象的要求、优先级别和结合性
5.1基本算术运算和表达式
1.基本算术运算符
包括:
+(加)、-(减)、*(乘)、/(除)、%(求余)+(正号)、-(负号)
注意:
(1) /:
参与运算的两个运算对象如果都是整数,则结果取整,例:
5/2的值是2
如果参与运算的运算对象中有实型数据,则结果为实型,例5.0/2的值是2.5
(2) %:
要求参与运算的两个运算对象必须是整型
2.算术表达式:
运算对象通过运算符连接起来的式子成为表达式,表达式值的含义。
3.运算符的优先级:
(详见教材附录)
由高到底依次是:
(+、-)正负号运算同级、%、(/、*)同级、(+、-)同级
5.2自增、自减运算符
1.++、--是单目运算,只能对变量进行自增1或自减1的运算
2.注意++、--作为前缀(先变后用)或后缀(先用后变)的区别
3.其结合性是右结合性
5.3强制类型转换
【格式】(类型名)(表达式)注意表达式左右括号的作用
【功能】将表达式的值强制转换成前面括号中规定的类型
例:
(float)(5/2)的值是2.0
(float)5/2的值是2.5
任务三
本章重点:
掌握C语言常用的输入/输出函数以及顺序结构程序设计的一般方法。
1.顺序结构程序概述
顺序结构程序是指程序中的语句完全按照它们的排列次序执行。
一般由四个部分组成:
1.定义变量部分;
2.已知变量赋值或输入部分;
3.未知变量求值部分;
4.输出结果部分。
2.顺序结构程序的编写方法,与求解物理题很相似。
1.变量相当于物理量,有几个物理量就定义几个变量。
并明确哪些变量是已知的,哪些变量是未知的。
2.给出已知变量的值。
若已知变量有明确的值,则用赋值语句给出;否则用输入语句获得。
3.根据已知变量与未知变量的关系,用赋值语句求得未知变量的值。
4.输出求得的未知变量的值。
3.C语句的分类
1.赋值语句
赋值语句是在赋值表达式加上分号构成的表达式语句。
其一般形式为:
变量=表达式;,功能是把表达式的值赋给变量。
▪赋值语句拓展之后的一般形式为:
变量=变量=…=表达式;。
▪在变量说明中给变量赋初值和赋值语句有些不同,给变量赋初值是变量说明的一部分,在编译的时候执行,赋初值后的变量与其后的其他同类型变量之间仍必须用逗号间隔,而赋值语句则必须用分号结尾。
(2) 复合语句
把多个语句用“{}”括起来组成一个语句称复合语句。
在程序中应把复合语句看成是单条语句。
1.空语句
4.数据的输入输出
C语言本身不提供输入输出语句,输入输出语句是由某些库函数实现。
1.数据的输出
▪单字符输入函数putchar
1.一般形式:
putchar(字符表达式);。
2.所在头文件:
stdio.h.
3.功能:
向终端输出一个字符(即可以是可显示的字符,又可以是控制字符或其他转义字符)。
▪格式输入函数printf
1.格式:
printf(格式控制,输出项列表);,输出项列表可以不需要。
2.所在头文件:
stdio.h.
3.功能:
按照用户指定的格式向系统隐含的输出设备输出若干个任意类型的数据。
4.数据的输入
▪单字符输入函数getchar
1.一般形式:
getchar();。
2.所在头文件:
stdio.h.
3.功能:
从系统隐含的输入设备输入一个字符,只能接收一个输入,如果有多个输入,只有第一个有效。
getchar的返回值为输入的字符。
▪格式输入函数scanf
1.格式:
scanf(格式控制,地址项列表);。
2.所在头文件:
stdio.h.
功能:
按格式控制所指的格式从标准输入设备输入数据并赋给指定的变量。
任务四
本章重点:
掌握关系表达式、逻辑表达式的用法,if语句、switch语句的基本用法和语法格式,各种数据类型之间的相互转化,以及选择结构程序设计的基本方法。
4.1关系表达式与逻辑表达式
1、C语言中的关系运算符
①<(小于) ②<=(小于或等于) ③>(大于)
④>=(大于或等于) ⑤==(等于) ⑥!
=(不等于)
2、关系表达式和关系表达式的值
由关系运算符组成的表达式称为关系表达式。
关系表达式的值是一个逻辑值,即“真”或“假”。
在C语言中,以1代表“真”。
以0代表“假”。
3、C语言中的逻辑运算符
①&&(逻辑“与”) ②||(逻辑“或”) ③!
(逻辑“非”)
4、逻辑表达式和逻辑表达式的值
由逻辑运算符和运算对象组成的表达式称为逻辑表达式。
逻辑表示式的运算结果只有两种:
1(“真”)或0(“假”)。
应该注意,在判断一个量是否为“真”时,却是以非0代表“真”,以0代表“假”。
4.2if语句
1、含else子句的if语句
语句形式:
if(表达式) 语句1
else 语句2
执行过程:
先计算if后面圆括号中的表达式的值,如果表达式的值为非零,执行if子句,然后跳过else子句,去执行if语句后的下
一个语句;如果表达式的值为零,跳过if子句,去执行else子句,接着去执行if语句后的下一个语句。
2、不含else子句的if语句
语句形式:
if(表达式) 语句
执行过程:
先计算if后面圆括号中的表达式的值,如果表达式的值为非零(“真”),则执行其后的if子句,然后执行if语句后的下一个语句;如果表达式的值为零(“假”),则跳过if子句,直接执行if语句后的下一个语句。
3、嵌套的if语句
if子句和else子句中可以是任意合法的C语句,当然也可以是if语句,通常称此为嵌套的if语句。
内嵌的if语句既可以嵌套在if子句中,也可以嵌套在else子句中。
在书写嵌套的if语句时,为了提高程序的可读性尽量按层缩进的书写格式来写自己的程序。
值得注意的是在执行嵌套的if语句的过程中,要特别注意if和else的匹配问题,else要与其上离它最近的未匹配的if来匹配。
4.3混合运算与强制类型转换
整型、实型、字符型数据间可以混合运算,在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。
不同类型的数据进行运算时,可以利用强制类型转换运算符将一个表达式转换成所需类型。
其一般形式为:
(类型名)(表达式)
4.4switch语句
switch语句的一般形式:
switch(表达式)
{case常量表达式1:
语句1
case常量表达式2:
语句2
┇
case常量表达式n:
语句n
default:
语句n+1
}
执行过程:
当执行switch语句时,首先计算紧跟其后的括号中的表达式的值,然后在switch语句体内寻找与该值吻合的case标号,如果有与该值相等的标号,则执行该标号后开始的各语句,包括在其后的所有case和default中的语句,直到switch语句体结束。
如果没有与该值相等的标号,并且存在default标号,则从default标号后的语句开始执行,直到switch语句体结束。
如果没有与该值相等的标号,且不存在default标号,则跳过switch语句体,什么也不做。
4.5拓展:
条件表达式
1、条件表达式
形式:
表达式1?
表达式2:
表达式3
由条件表达式组成的赋值语句事实上就是一个if-else语句的简写。
因此,若在if-else语句中,当表达式为“真”或“假”时,都只执行一个赋值语句,且给同一个变量赋值时,均可以用简单的条件表达式来处理。
任务五
本章重点:
深入掌握各种循环语句的要点和使用方法。
深入掌握break和continue语句在循环语句中的作用。
能够灵活地运用各种循环语句进行综合程序设计
基本知识点
循环语句是指在满足指定的条件时,重复执行某个语句。
重复执行的语句既可以是单个语句,也可以是复合语句。
循环语句有while、do-while和for等几种类型
1. while循环
语句一般格式
while(表达式)循环体语句
注意:
先判断循环条件再执行循环,如果循环条件不满足,循环体可能一次都不执行。
2. dowhile循环
语句一般格式
do
循环体语句
while(表达式);
注意:
先执行循环体后判断循环条件,如果循环条件不满足,循环体至少执行一次。
3. for循环
语句一般格式
for(表达式1;表达式2;表达式3)
语句
注意:
(1)三个表达式执行得先后顺序,三个表达式的书写格式,中间用;间隔。
(2)循环体有多句,用复合语句描述。
4. break语句与continue语句
注意:
⑴break终止本层循环,跳出循环体。
⑵continue跳过本次循环体下面的语句,进入下一次循环。
5. 三种循环语句的比较
(1)for和while语句先判断循环条件后执行循环体,do-while语句先执行循环体后再判断循环条件。
(2)while和do-while语句的条件表达式只有一个,for语句有3个。
(3)while、do-while、for可以相互替换使用。
(4)while语句多用于不需要赋初值的或者循环次数不确定的情况。
for语句多用于要赋初值或者循环次数固定的情况。
do-while语句多用于至少要执行一次的循环控制。
(5)循环语句可以嵌套,循环可以并列,但不能交叉。
本章学习难点
1. 注意循环中变量的初始化
2. 注意书写错误导致的死循环
任务六
本章重点、难点:
1.C语言不允许对数组的大小做动态定义,即数组的大小不依赖于程序运行过程中变量的值。
2.数组元素的下标:
C语言中数组元素下标的下限是固定的,总是为0;程序在执行过程中并不自动检验数组元素的下标是否越界。
3.数组在内存中的存放形式
当程序中定义了数组之后,系统将为数组在内存中分配一段连续的存储空间来存储数组元素。
对于一维数组来说,数组元素以下标从小到大的顺序依次存放于内存中。
对于二维数组来说,逻辑上可以把它们看成是一个矩阵结构,数组元素在内存中的排列是按照行优先原则。
数组名记录了数组在内存中的首地址,其值不能改变。
除字符数组外,不能直接使用数组名对数组进行整体的输入或输出。
数组:
由若干类型相同的数据按一定顺序存储所形成的有序集合。
用某个名字标识这个集合,这个名字称为数组名。
构成数组的每个数据项称为数组的元素,同一数组中的元素必须具有相同的数据类型。
6.1 一维数组的定义和引用
6.1.1一维数组的定义
定义一维数组的一般形式:
数据类型说明符数组名[常量表达式];
6.1.2一维数组元素的引用
数组元素是组成数组的基本单元。
数组元素也是一种变量,其标识方法为数组名后跟一个下标。
下标表示了元素在数组中的顺序号。
数组元素的一般形式为:
数组名[下标]
6.1.3一维数组的初始化
初始化的一般形式为:
类型说明符数组名[常量表达式]={值,值……值};
其中在{}中的各数据值即为各元素的初值,各值之间用逗号间隔。
C语言对数组的初始化有以下几点规定:
1.可以只给部分元素初始化。
当{}中值的个数少于元素个数时,只给前面部分元素赋值。
例如:
inta[10]={0,1,2,3,4}。
表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。
1.只能给元素逐个赋值,不能给数组整体赋值。
例如给十个元素全部赋1值,只能写为:
inta[10]={1,1,1,1,1,1,1,1,1,1}。
而不能写为:
inta[10]=1。
1.如给全部元素赋值,则在数组说明中,可以不给出数组长度。
例如:
inta[5]={1,2,3,4,5}。
可写为:
inta[]={1,2,3,4,5}。
6.2二维数组
6.2.1二维数组的定义
二维数组定义的一般形式
数据类型说明符 数组名[常量表达式1][常量表达式2];
其中“常量表达式1”表示二维数组的行数,“常量表达式2”表示二维数组的列数。
6.2.2二维数组元素的引用
二维数组的元素也称为双下标变量,其表示的形式为:
数组名[下标][下标]
其中下标应为整型常量或整型表达式。
6.2.3二维数组的初始化
给二维数组的初始化主要有以下几种方式。
1.分行给二维数组赋初值
例如:
inta[2][3]={{1,2,3},{4,5,6}}。
2.按数组元素在内存中排列的顺序对各元素赋初值
例如:
inta[2][3]={1,2,3,4,5,6}。
3.给部分元素赋初值
例如:
inta[2][3]={{1},{4}}。
4.如果对全部元素都赋初值,则定义数组时行长度可以省略,但列的长度不能省。
例如:
inta[][3]={1,2,3,4,5,6}。
6.3字符数组与字符串
6.3.1关于字符串
C语言规定:
字符串的末尾必须有'\0'字符,即'\0'字符为字符串结束标志。
'\0'是一个转义字符,它的ASCII码值为0。
一个字符数组中可以存放若干个字符。
字符数组除了可以存放字符型数据外还可以存放字符串。
6.3.2字符数组的定义
一般形式:
char数组名[数组长度]
6.3.3字符数组的初始化
1.用字符常量赋初值
例如:
charc[10]={'I','','a','m','','h','a','p','p','y'}。
则c[0]='I',…,c[9]='y'。
c数组中存放的是10个字符型数据(包括空格字符)。
需要注意:
当所赋初值的个数超过数组的长度时系统报错;当所赋初值的个数小于数组的长度时,剩余的元素系统自动赋予'\0',此时,可以将该数组看做是一个存放字符串的数组;对静态字符数组未被赋值的元素系统自动将其赋值为'\0'。
2.用字符串常量赋初值
C语言中,字符数组最常见的用法是用来处理字符串。
用字符串常量来初始化字符数组主要有以下两种方法:
charstr[10]={"astring"}。
或charstr[10]="astring"。
需要注意:
当用字符串常量来初始化字符数组时,数组的长度至少要比字符串中的字符个数多1,所多出的一个元素用来存放字符串的结束标志'\0'。
例如要存放字符串”Hello”,则需要将字符数组的长度至少设为6。
当然也可以使用二维数组来存放字符串,例如:
chara[3][10]={"china","Japan","USA"}。
表明a数组有三行,每行存放一个字符串。
注意:
此时的花括号不能省略。
3.初始化时长度的省略
在给数组初始化时,也可以省略数组的长度,系统自动根据字符个数计算出数组的长度。
例如:
chars[]="InputThePassword"。
此时由于s数组中存放的是一个字符串,而字符串中隐含有结束标记'\0',所以系统自动确认s数组长度为18。
再例如:
charch[]={'s','t','r','i','n','g'}。
此时ch数组长度为6。
6.3.4字符数组的输入输出
1.字符数组的输出
对字符数组,其输出控制字符有两种"%c"和"%s"。
%c逐个字符输出字符;%s一次输出整个字符串。
2.字符数组的输入
字符数组的输入,如果使用scanf函数,其输入格式控制字符可以有两种形式,即:
"%c"和"%s"。
%c逐个字符输入;%s一次输入整个字符串。
6.3.5字符串处理函数
C系统提供的字符串处理函数一般放string.h头文件中,所以若程序中调用字符串处理函数时,应在程序的开始应该写#include"string.h"预处理命令。
1.字符串输出函数puts()
函数原型:
puts(str)
功能:
输出一个字符串,输出时将'\0'置换成'\n',因此,输出字符串后自动换行。
2.字符串输入函数gets()
函数原型:
gets(str)
功能:
从键盘接受一个字符串直到回车键为止,将接受的字符串存入str数组中。
3.字符串连接函数strcat()
函数原型:
strcat(str1,str2)
功能:
连接两个字符串,把str2中的字符串连接到str1字符串的后面,结果放在str1数组中。
注意:
字符数组str1必须足够大,以便能容纳连接后的新字符串。
4.字符串复制函数strcpy()
函数原型:
strcpy(str1,str2)
功能:
将str2中的字符串复制到str1数组中。
注意:
字符数组str1必须足够大,以便能容纳符串str2的内容。
5.字符串比较函数strcmp()
函数原型:
strcmp(str1,str2)
功能:
将str1和str2中的两个字符串自左向右按照各字符的ASCII码值逐对进行比较,直到出现不同的字符或遇到'\0'为止。
6.求字符串长度函数strlen()
调用格式:
strlen(str)
功能:
测试字符串长度。
函数值返回值是str中不包括'\0'的字符个数。
说明:
str可以是存放字符串的字符数组名或字符串常量。
任务七
本章重点:
用户自定义函数的定义、调用、声明及返回;函数调用时的参数传递;函数的