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