C语言程序总结
2023-02-10 15:50:57 19 举报
AI智能生成
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
作者其他创作
大纲/内容
由哪些数据组成的数组,数组中有多少元素,属于哪个类型数据。否则计算机不会自动把一批数据作为数组处理
6.1.1怎样定义一维数组
在定义数组并对其各元素赋值后,就可以引用数组中的元素
6.1.2怎样引用一维数组元素
为了使程序简洁,常在定义数组的同时给个数组元素赋值。
可以用“初始化列表”方法实现数组的初始化
6.1.3一维数组的初始化
6.1.4一维数组程序举例
6.1怎样定义和引用一维数组
类型说明符 数组名[常量表达式][常量表达式]
6.2.1怎样定义二维数组
数组名[下标][下标]
6.2.2怎样引用二维数组元素
分行给二维数组赋初值
可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值
可以对部分元素赋初值
如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第2维的长度不能省
6.2.3二维数组的初始化
6.2.4二维数组程序举例
6.2怎样定义和引用二维数组
用来存放字符数据的数组是字符数组
6.3.1怎样定义字符数组
对字符数组初始化,最容易理解的方式是用“初始化列表”,把各个字符依次赋给数组中的各元素
6.3.2字符数组的初始化
可以引用字符数组中的一个元素,得到一个字符
6.3.3怎样引用字符数组中的元素
6.3.4字符串和字符串结束标志
逐个字符输入输出
将整个字符串一次输入输出
6.3.5字符数组的输入输出
puts函数——输出字符串的函数
get函数——输出字符串的函数
strcat函数——字符串连接函数
strcpy和strncpy函数——字符串复制函数
strcmp函数——字符串比较函数
strlen函数——测字符串长度的函数
strlwr函数——转换为小写的函数
strupr函数——转换为大写的函数
6.3.6使用字符串处理函数
6.3.7字符数组应用举例
6.3字符数组
第六章 利用数组处理批量数据
7.1为什么要用函数
指定函数的名字,以便以后按名调用
指定函数类型,即函数返回值的类型
指定函数的参数的名字和类型,以便在调用函数时向它们传递数据
指定函数应当完成什么操作,也就是函数是做什么的,即函数的功能
7.2.1为什么要定义函数
定义无参函数
定义有参函数
定义空函数
7.2.2定义函数的方法
7.2怎样定义函数
函数调用语句
函数表达式
函数参数
7.3.1函数调用的形式
形式参数和实际参数
实参和形参间的数据传递
7.3.2函数调用时的数据传递
7.3.3函数调用的过程
函数的返回值是通过函数中的return语句获得的
函数值的类型
在定义函数时指定的函数类型一般应该和return语句中的表达式类型一致
7.3.4函数的返回值
7.3调用函数
首先被调用的函数必须是已经定义的函数
如果使用库函数,应该在本文件开头用#include指令将调用有关库函数时所需用到的信息“包含”到本文件夹
如果使用用户自己定义的函数,,而该函数的位置在调用它的函数的后面,应该在主调函数中对被调用的函数作声明
7.4对被调用函数的声明和函数原型
7.5函数的嵌套调用
7.6函数的递归调用
从实参传到形参,单向传递
7.7.1数组元素作函数实参
除了可以用数组元素作为函数参数外,还可以用数组名作函数参数
7.7.2一维数组名作函数参数
多维数组元素可以做函数参数
可以用多维数组名作为函数的实参和形参,在被调用函数中对形参数组定义时可以指定每一维的大小,也可以省略第一维的大小说明
7.7.3多维数组名作函数参数
7.7数组作为函数参数
在函数的开头定义
在函数内的复合语句内定义
在函数的外部定义
7.8.1局部变量
7.8.2全局变量
7.8局部变量和全局变量
7.9.1动态存储方式与静态存储方式
自动变量(auto变量)
静态局部变量(static局部变量)
寄存器变量
7.9.2局部变量的存储类别
在一个文件内扩展外部变量作用域
将外部变量的作用域扩展到其他文件
将外部变量的作用域限制在本文件中
7.9.3全局变量的存储类别
自动变量,即动态局部变量
静态局部变量
局部变量
静态外部变量
外部变量
全局变量
按作用域角度分
自动变量
形式参数
动态存储
静态存储
按变量的生存期分
内存中静态存储区
自动变量和形式参数
内存中动态存储区
CPU中的寄存器
按变量值存放的位置分
7.9.4存储类别小结
7.9变量的存储方式和生存期
7.10关于变量的声明和定义
一个函数只能被本文件中其他函数所调用
又称为静态函数
7.11.1内部函数
在定义函数时,在函数首部的最左端加关键字
7.11.2外部函数
7.11内部函数和外部函数
第七章 用函数实现模块化程序设计
通过它能找到以它为地址的内存单元
8.1指针是什么
8.2.1使用指针变量的例子
类型名*指针变量名
8.2.2怎样定义指针变量
给指针变量赋值
引用指针变量指向的变量
引用指针变量的值
8.2.3怎样引用指针变量
将一个变量的地址传送到另一个函数中
8.2.4指针变量作为函数参数
8.2指针变量
所谓数组元素的指针就是数组元素的地址
引用数组元素可以用下标法也可以用指针法
8.3.1数组元素的指针
8.3.2在引用数组元素时指针的运算
指针法
下标法
8.3.3通过指针引用数组元素
在函数调用进行虚实结合后,形参的值就是实参数组首元素的地址。在函数执行的期间,它可以在被赋值
8.3.4用数组名作函数参数
多维数组元素的地址
指向数组元素的指针变量
指向由m个元素组成的一维数组的指针变量
指向多维元素的指针变量
用指向数组的指针作函数参数
8.3.5通过指针引用多维数组
8.3通过指针引用数组
用字符数组存放一个字符串,可以通过数组名和下标引用字符串中的一个字符,也可以通过数组名和格式声明“%s”输出该字符串
用字符串指针变量指向一个字符串常量,通过字符指针变量引用字符串常量
8.4.1字符串的引用方式
用字符数组名作为函数参数
用字符型指针变量作实参
用字符指针变量作形参和实参
函数的形参和实参可以分别用字符数组名或者字符指针变量
8.4.2字符指针作函数参数
字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址,绝不是将字符串放到字符指针的变量中
赋值方式。可以对字符指针变量赋值,但不能对数组名赋值
存储单元的内容
指针变量的值是可以改变的,而字符数组名代表一个固定的值,不能改变
字符数组中各元素的值是可以改变的,但字符指针变量指向的字符串常量中的内容是不可以被取代的
引用数组元素
用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串
8.4.3使用字符指针变量和字符数组的比较
8.4通过指针引用字符串
函数名就是函数的指针,它代表函数的起始地址
8.5.1什么是函数的指针
通用函数名调用函数
通过指针变量调用它所指向的函数
8.5.2用函数指针变量调用函数
类型名(*指针变量名)(函数参数表列)
8.5.3怎样定义和使用指针函数的指针变量
8.5.4用指向函数的指针作函数参数
8.5指向函数的指针
类型名*函数名(参数表列)
8.6返回指针值的函数
一个数组,若其元素均为指针类型的数据,称为指针数组
类型名*数组名[数组长度];
8.7.1什么是指针数组
8.7.2指向指针数据的指针变量
参数1 参数2···参数n
8.7.3指针数组作main函数的形参
8.7指针数组和多重数组
8.8.1什么是内存的动态分配
用malloc函数开辟动态存储区
用calloc函数开辟动态存储区
用realloc函数重新分配动态存储区
用free函数释放动态存储区
8.8.2怎样建立内存的动态分配
子主题 1
8.8.3void指针类型
8.8动态内存分配与指向它的指针变量
8.9有关指针的小结
第八章 善于利用指针
9.1.1自己建立结构体类型
先声明结构体类型,在定义该类型的变量
在声明类型的同时定义变量
不指定类型名而直接定义结构体类型变量
9.1.2定义结构体类型变量
结构体变量名.成员名
9.1.3结构体变量的初始化和引用
9.1定义和使用结构体变量
{成员表列} 数组名[数组长度]
struct结构体名
结构体类型 数组名[数组长度]
先声明一个结构体类型,然后再用此类型定义结构体数组
={初值表列}
9.2.1定义结构体数组
9.2.2结构体数组的应用举例
9.2使用结构体数组
指向结构体对象的指针变量既可以指向结构体变量,又可以指向结构体数组中的元素。指针变量的基类型必须与结构体变量的类型相同
9.3.1指向结构体变量的指针
9.3.2指向结构体数组的指针
9.3.3用结构体变量和结构体变量的指针作函数参数
9.3结构体指针
一种常见的重要的数据结构
9.4.1什么是链表
9.4.2建立简单的静态链表
在程序执行过程中从无到有的建立起一个链表,即一个一个的开辟结点和输入各结点的数据,并建立起前后相链的关系
9.4.3建立动态链表
9.4.4输出链表
9.4用指针处理链表
union 共用体名 { 成员列表} 变量列表
9.5.1什么是共用体类型
只有先定义了共用体变量才能引用它,但应注意,不能引用共用体变量,而只能引用共用体变量中的成员
9.5.2引用共用体变量的方式
9.5.3共用体类型数据的特点
9.5共用体类型
9.6使用枚举类型
简单的用一个新的类型名代替原有的类型名
命名一个简单的类型名代替复杂的类型表示方法
9.7用typedef声明新类型名
第九章 用户自己建立数据类型
程序文件
数据文件
10.1.1什么是文件
文件路径
文件名主干
文件后缀
10.1.2文件名
ASCII文件
二进制文件
10.1.3文件的分类
每一个文件在内存中只有一个缓冲区,再向文件输出数据时,它就作为输出缓冲区,再从文件输入数据时,它就作为输入缓冲区
10.1.4文件缓冲区
通过文件指针变量能够找到与它关联的文件
10.1.5文件类型指针
10.1C文件有关的基本知识
fopen(文件名,使用文件方式)
10.2.1用fopen函数打开数据文件
fclose(文件指针)
10.2.2用fclose函数关闭数据文件
10.2打开与关闭文件
10.3.1怎样向文件读写字符
10.3.2怎样向文件读写一个字符串
fprintf(文件指针,格式字符串,输出表列)
fscanf(文件指针,格式字符串,输入表列)
10.3.3用格式化的方式读写文本文件
fread(buffer,size,count,fp)
fwrite(buffer,size,count,fp)
10.3.4用二进制方式向文件读写一组数据
10.3顺序读写数据文件
文件位置标记
用rewind函数使文件位置标记指向文件开头
用fseek函数改变文件位置标记
用ftell函数测定文件位置标记的当前位置
文件位置标志的定位
10.4.1文件位置标记及其定位
10.4.2随机读写
10.4随机读写数据文件
ferror函数
子主题 2
10.5文件读写的出错检测
第十章 对文件的输入输出
1.1什么是计算机程序
1.2什么是计算机语言
语言简洁、紧凑,使用方便灵活
运算符丰富
数据类型丰富
具有结构化的控制语句
语言限制不太严格,程序设计自由度大
C语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以对硬件进行操作
用C语言编写的程序可移植性好
生成目标代码质量高,程序执行效率高
特点
1.3C语言的发展及其特点
1.4.1最简单的C语言程序举例
预处理指令
全局声明
函数定义
一个程序由一个或多个源程序文件组成
函数是C程序的主要组成部分
函数首部
声明部分
执行部分
函数体
一个函数包括两个部分
程序总是从main函数开始执行的
程序中要求计算机完成的操作是由函数中的C语句完成的
在每个数据声明和语句的最后必须有一个分号
C语言本身不提供输入输出语句
程序应当包含注释
1.4.2C语言程序的结构
1.4最简单的C语言程序
上机输入和编辑源程序
对源程序进行编译,先用C编译系统提供的“预处理器”对程序中的预处理指令进行编译预处理
进行连接处理
运行可执行程序,得到运行结果
步骤
一个程序从编写到运行得到预期结果,并不是一次就能成功,往往要经过多次反复。编写好的程序并不一定能保证正确无误,除了用人工方式检查外,还须借助编译系统来检查有无语法错误
为了编译、连接、运行C程序,必须要有相应的编译系统
在Windows环境下,用Visual Studio2010比较方便
不应当只会使用一种编译系统,无论用哪一种编译系统,都应当能举一反三,在需要时会用其他编译系统进行工作
方法
1.5运行C程序的步骤与方法
问题分析
设计算法
编写程序
对源程序进行编辑、编译和连接
运行程序,分析结果
编写程序文档
1.6程序设计的任务
第一章 程序设计和C语言
数据结构:对数据的描述。在程序中要指定用到哪些数据,以及这些数据的类型和数据的组织形式
算法:对操作的描述。要求计算机进行操作的步骤
2.1程序=算法+数据结构
数值分析方法
数值运算算法
排序算法
查找搜索算法
非数值运算算法
2.2什么是算法
2.3最简单的算法举例
有穷性
确定性
有零个或多个输入
有一个或多个输出
有效性
2.4算法的特性
优点:通俗易懂
文字过长,容易出现歧义
表示的含义往往不大严格
描述包含分支和循环的算法不大方便
缺点
2.5.1用自然语言表示算法
直观形象,易于理解
2.5.2用流程图表示算法
用流程线指出各框的执行顺序,对流程线的使用没有严格限制。因此,使用者可以不受限制的使流程随意的转来转去,使流程图变得毫无规律,阅读时需要花很大精力去追踪流程,使人难以理解算法的逻辑。
难以阅读,也难以修改,从而使算法的可靠性和可维护性难以保证。
传统流程图的弊端
顺序结构
选择结构
当型(while型)循环结构
直到型(until型)循环结构
循环结构
三种基本结构
2.5.3三种基本结构和改进的流程图
比文字描述直观、形象、易于理解
比传统流程图紧凑易化
2.5.4用N-S流程图表示算法
不用图形符号,因此书写方便,格式紧凑,修改方便,容易看懂,也便于向计算机语言算法过度
用伪代码写算法并无固定的、严格的语法规则,可以用英文,也可以用中英文混用。只要把意思表达清楚,便于书写和阅读即可,书写的格式要写成清晰易读的形式
用介于自然语言和计算机语言之间的文字和符号来描述算法
2.5.5用伪代码表示算法
用不同的方法来表示操作的步骤
笔算,算盘,或计算机
实现算法
2.5.6用计算机语言表示算法
2.5怎样表示一个算法
2.6结构化程序设计方法
第二章 算法——程序的灵魂
3.1顺序程序设计举例
整型常量
十进制小数形式,由数字和小数点组成
指数形式
实型常量
普通字符
转义字符
字符常量
字符串常量
含义清楚
在需要改变程序中多处用到的同一个常量时,能做到了“一改全改”
符号常量:一个符号名代表一个常量
常量
先定义,后使用
变量
常变量
在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列
标识符
3.2.1常量和变量
基本整型
短整型
长整型
双长整型
字符型
布尔型
整型
单精度浮点型
双精度浮点型
复数浮点型
浮点型
基本类型
枚举类型
指针类型
数组类型
结构体类型
共用体类型
函数类型
派生类型
3.2.2数据类型
基本整型(int型)
短整型(short int)
长整型(long int)
双长整型(long long int)
整型数据的分类
整型变量的符号属性
3.2.3整型数据
字符与字符代码
字符变量
3.2.4字符型数据
float型(单精度浮点型)
double型(双精度浮点型)
long double型(长双精度)型
3.2.5浮点型数据
浮点型常量
3.2.6怎样确定常量的类型
3.2数据的表现形式及其运算
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
条件运算符
逗号运算符
指针运算符
求字节数运算符
强制类型转换运算符
成员运算符
下标运算符
其他(如函数调用运算符)
3.3.1C运算符
3.3.2基本的算术运算符
3.3.3自增(++)、自减(--)运算符
3.3.4算术表达式和运算符的优先级与结合性
3.3.5不同类型数据间的混合运算
3.3.6强制类型转换运算符
3.3运算符和表达式
if()···else条件语句
for()循环语句
while()···循环语句
do···while()循环语句
continue结束本次循环语句
break中止执行switch或循环语句
switch多分支选择语句
return从函数返回语句
goto转向语句,在结构化程序中基本不用goto语句
控制语句
表达式语句
空语句
复合语句
分类
3.4.1C语句的作用和分类
复合的赋值运算符
赋值表达式
将浮点型数据赋值给整型变量时,先对浮点数取证,即舍弃小数部分,然后赋予整型变量
将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中
将一个double型数据赋给float变量时,先将双精度数转换为单精度,即只取6~7位有效数字,存储到float型变量的4个字节中
字符型数据赋给整型变量时,将字符的ASCII代码赋给整型变量
将一个占字节多的整型数据赋给一个占字节少的整型变量或字符变量时,只将其低字节原封不动的送到被赋值的变量(即发生"截断“)
赋值过程中的类型转换
赋值表达式和赋值语句
变量赋初值
3.4.2最基本的语句—赋值语句
3.4C语句
3.5.1输入输出举例
所谓输入输出是以计算机主机为主体而言的
C语言本身不提供输入输出的语句,输入和输出操作是由C标准函数库中的函数来实现的
在程序文件的开头用预处理命令#include把有关头文件放在本程序中
3.5.2有关数据输入输出的概念
格式声明
格式控制
输出列表
printf函数的一般格式
d格式符
c格式符
s格式符
基本型用%f
指定数据宽度和小数位数,用%m.
输出的数据向左对齐,用%-m.
f格式符
e格式符
i格式符
o格式符
x格式符
u格式符
g格式符
其他格式符
格式字符
3.5.3用printf函数输出数据
一般形式:scanf
scanf函数的格式声明
scanf函数中的格式控制后面应当是变量地址,而不是变量名
如果在格式控制字符串中除了格式声明意外还有其他字符,则在输入数据时在对应得位置上应输入与这些字符相同的字符
用%c格式声明输入字符时,空格字符和转义字符中的字符都作为有效字符输入
在输入数值数据时,如输入空格,回车、Tab键或遇非法字符(不属于数值的字符),认为该数据结束
使用scanf函数时应该注意的问题
3.5.4用scanf函数输入数据
用putchar函数输入一个字符
用getchar函数输入一个字符
3.5.5字符输入输出函数
3.5数据的输入和输出
第三章 最简单的C程序设计——顺序程序设计
4.1选择结构和条件判断
4.2.1用if语句处理选择结构举例
没有else子句部分
有else子句部分
在else部分又嵌套了多层的if语句
4.2.2if语句的一般形式
4.2用if语句实现选择结构
关系运算符的优先级低于算术运算符
关系运算符优先级高于赋值运算符
4.3.1关系运算符及其优先次序
用关系运算符将两个数值或数值表达式连接起来的式子
4.3.2关系表达式
4.3关系运算符和关系表达式
4.4.1逻辑运算符及其优先次序
4.4.2逻辑表达式
4.4逻辑运算符和逻辑表达式
?
:
表达式
4.5条件运算符和条件表达式
if()if()else
elseif()else
4.6选择结构的嵌套
4.7用switch语句实现多分支选择结构
4.8选择结构程序综合举例
第四章 选择结构程序设计
5.1为什么需要循环控制
只要当循环条件表达式为真(即给定的条件成立)就执行循环体语句
5.2用while语句实现循环
先执行循环体,然后在检查条件是否成立,若成立,在执行循环体
特点:先无条件的执行循环体,然后判断循环条件是否成立
5.3用do···while语句实现循环
设置初始条件,只执行一次
是循环条件表达式,用来判断是否继续循环
作为循环的调整,例如使循环变量增值,它是在执行完循环体后才进行的
5.4用for语句实现循环
5.5循环的嵌套
5.6几种循环的比较
作用是使流程跳到循环体外,接着执行循环体下面的语句
break语句只能用于循环语句和switch语句中,而不能单独使用
5.7.1用break语句提前终止循环
5.7.2用continue语句提前结束本次循环
continue语句只结束本次循环,而不是终止整个循环的执行
break语句则是结束整个循环过程,不再判断执行循环的条件是否成立
5.7.3break语句和continue语句的区别
5.7改变循环执行的状态
5.8循环程序举例
第五章 循环结构程序设计
C语言程序设计总结
0 条评论
回复 删除
下一页