C语言程序设计学习提纲
C语言程序设计学习提纲
第一章 C语言概述
1. C语言字符集
2. C语言单词
3. C语句
4. C函数
5. C程序
6. Printf()和scanf()函数
7. C语言开发环境
第二章 基本数据类型和表达式
1. 数据类型
2. 常量
3. 变量
4. 运算符和表达式
5. 函数
第三章 流程控制语句
1条件语句
2.分支语句
3.循环语句
4.跳转语句
第四章 数组和字符串
1. 数组定义
2. 一维数组
3. 二维数组
4. 字符串
第五章 指针
1. 指针定义
2. 指针运算
3. 指针与数组
4. 动态存储分配
第六章 函数
1. 函数定义
2. 函数调用
3. 变量作用域
4. 递归调用
5. 函数指针
第七章 结构与联合
1. 结构变量的定义与初始化
2. 结构成员的访问
3. 程序举例
4. 结构与函数
5. 结构与链表
第八章 文件
1. 文件的概念
2. 数据文件的打开与关闭
3. 文本文件的访问操作
4. 二进制文件的访问操作
第九章 C语言应用举例
《C程序设计》复习资料知识点总结(C语言)
1.1. C语言属高级语言,区分字母的大小写,以函数为基本单位采用模块化程序设计,可直接访问内存,进而对硬件进行操作。
1.2. 用C语言编写和程序称作C源程序,简称C程序,C程序可由若干个文本文件组成,文件扩展名为C(使用C++编译器时默认扩展名为CPP)。C源程序经编译、连接后得到扩展名为EXE的可执行文件(目标程序)。
预处理 编译、连接 执行
若干个C程序文件—-→C程序——→目标程序文件–→
1.3. C程序从主函数开始执行,每个C程序有且仅有一个主函数,因此,每个C程序文件中至多有一个主函数。
1.4. C语句以分号结尾,用{}括起来的一组语句称作复合语句,复合语句可省略花括号之后的分号。
1.5. 允许一行内写多个C语句,也允许一个C语句占用多行,但保留字和标识符不可拆行。
1.6. 在C集成环境VC++ 6.0中,新建工程、保存当前程序文件、编译当前程序、执行当前程序的快捷键依次为:Ctrl+N、Ctrl+S、F7、Ctrl+F5。
2.1. 解决问题的方法和步骤称作算法。算法和数据结构是程序的两个主要要素。
2.2. 算法具有确定性、有穷性、有效性等特点。
2.3. 算法可用自然语言、流程图、N-S图、计算机语言、伪代码等描述。伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。
起止框
输入输出框
判断框
处理框
注释框 ……
连接点 〇
流程线 有向线段或折线
图2.1 ANSI流程图符号
2.4. 算法的基本结构分为:顺序结构、选择结构、循环结构。
↓
↓
↓
↓←-
–┐
Y┌
条件
┐N
条件
┐N
│
↓
↓
↓
↓Y
│
↓
│
│
条件
┘Y
↓
└—
→↓←
—┘
↓←-
–┘
↓N
图2.2 顺序结构 图2.3 选择结构 图2.4 当循环 图2.5 直到循环
条件
条件
循环体
Y
N
循环体
条件
图2.6 顺序结构 图2.7 选择结构 图2.8 当循环 图2.9 直到循环
2.5. 由三种基本结构组成的程序称作结构化程序,结构化程序中的每个模块只有一个入口和一个出口。结构化程序设计通常采用“自顶向下、逐步细化”的设计方法。
3.1. C的数据类型如下所示:
表3.1 C语言的数据类型
数据类型
字节数
数值范围
基本类型
整型
无符号短整型( short int)
4
0~216-1
有符号短整型( )
2
-215~215-1
无符号长整型( int)
4
0~232-1
有符号长整型(signed int)
4
-231~231-1
实型
单精度实型(float)
4
长37位,6位有效
双精度实型(double)
8
长307位,15位有效
长双精度实型(long double)
10
长4931位,18位有效
字符型(char)
1
0~28-1
空类型(void)
1
构造类型
枚举类型
2
指针类型
2
数组类型
结构体类型
共用体类型
3.2. C符号常量名、变量名、函数名等统称标识符,标识符的命名规则为:以字母或下划线开头,由字母、数字、下划线组成,超出32个字符部分被忽略(最好不超过8个字符)。
3.3. 以0开头的整数为八进制整数,以0X或0x开头的整数为十六进制无符号整数。
3.4. -32768~32767为int型,0U~65535U为unsigned型,65536U~4294967295U和0UL~4294967295UL为unsigned long型,-2147483648~-32769、32768~2147483647和-2147483648L~2147483647L为long型。后缀U和L不区分大小写和次序。
3.5. 数据的存储字节数可用运算符sizeof()查询,括号内可是数据、表达式或类型名。
3.6. 有符号整数(int和long)按补码存储,因此,-65535U~-1U与1U~65535U依次相等,-4294967295UL~-1UL与1UL~4294967295UL依次相等。
3.7. 定点数(含小数点数)和浮点数统称C实型常量,浮点数的一般形式为:
尾数e除码 或 尾数E除码
其含义为:
尾数×10除码
其中,尾数为定点数或整数,除码为整数。标准浮点数的小数点在第1位非0数字之后。后缀L或l的实型常量为长双精度,无后缀实型常量为双精度。
3.8. 用一对单引号括起来的单个字符称作C字符常量,其值为该字符的ASCII码(1字节无符号整数)。
3.9. 转义字符\’\\n\’、\’\\t\’、\’\\\\\’、\’\\\’\’、\’\\\”\’分别表示回车符、制表符、反斜杠、单引号、双引号。
3.10. 转义字符\’\\整数\’、\’\\x整数\’(或\’\\X整数\’)中的整数分别为八进制、十六进制,表示以此整数为ASCII码的字符。
3.11. 用双引号括起来的一串字符称作C字符串型常量,串中字符数称作串长,可以为0。字符串的存储形式为:依次存储字符串中字符的ASCII码,并追加一个空字符\’\\0\’(1字节无符号整数0)。
3.12. 字符型、整型、实型数据统称数值型数据,不同类型的数值型数据可以混合运算,低精度数据被自动强制转换为高精度数据后方参与运算。另外,字符常量为有符号短整数,两个字符型数据间的运算按有符号短整数处理。
3.13. 如果将数值型数据赋给不同类型的数值型变量,则数值型数据将被自动强制转换为变量的数据类型。
3.14. C允许定义变量的同时赋初值。
3.15. C运算符及其优先级、结合性如附录C(教材第365页)所示。
3.16. 强制数据类型转换的一般形式为:
(类型名)数据
3.17. 自增++、自减–运算只能作用于变量,作用于右侧时,返回变量自增、自减前的值。
3.18. 赋值表达式的格式为:
变量=表达式 或 变量op=表达式
其中,op为运算符 +、-、*、/、%、>>、<<、&、^、| 中某一个。前者将右边表达式的值赋给左边的变量,后者将左边变量的当前值与右边表达式的值作相应运算后仍赋给左边的变量。整个赋值表达式取左边变量所赋的新值。
3.19. 用逗号分隔的一组表达式称作逗号表达式,其一般形式为:
表达式, 表达式, …, 表达式
其功能为:从左至右依次计算各表达式的值,并以最后一个表达式的值为整个逗号表达式的值。
3.20. 将数学式改为C表达式时应注意:
(1) 乘号*不可省略;
(2) 正确改写脚码、运算符、括号等;
(3) 正确书写函数名;
(4) 把握好运算优先级,分数线改为/时,分子、分母相应加括号;
(5) 正确拆分不等式组;
(6) 区分整数除法和实数除法。
4.1. 表达式后缀分号称作表达式语句,即,
表达式;
4.2. putchar、getchar、printf、scanf等输入输出函数的原型在头文件stdio.h中。
4.3. 函数putchar和getchar的格式和功能如下:
(1) putchar
格式:putchar(表达式)
功能:向标准输出设备输出以指定表达式的值为ASCII码的字符,并以该值为函数值(自动强制转换为int型)。
(2) getchar
格式:getchar()
功能:从标准输入设备输入一个字符,并以该字符为函数值。
注意:getchar可提取空格及回车、Tab等部分控制字符,而且只提取输入中相应位置上的一个字符,因此,输入字符间无须分隔,否则也被视为输入字符。
4.4. printf函数的格式和功能如下:
格式:printf(格式控制串, 输出表列)
功能:
(1) 从右至左依次计算输出表列中各表达式的值;
(2) 从左至右依次输出格式控制串中的字符,其中,%引导的格式控制符由输出表列中相应表达式的值所取代。
输出表列是一组用逗号分隔的表达式(又称输出项,可以为0项)。格式控制串为字符串型数据(可以是表达式)。其中,格式符用于控制输出表列中相应表达式的输出格式。格式符及其功能如下表所示:
表4.1 printf格式字符
格式符
说明
d或i
有符号十进制短整数(不输出正号)
u
无符号十进制短整数
o
无符号八进制短整数(无前缀0)
x或X
无符号十六进制短整数(无前缀0x,数字的大小写与x相同)
c
字符
s
字符串
f
定点数(默认6位小数)。
e或E
浮点数(浮点数中e的大小写与格式符e的大小写相同)
g或G
%f和%e中输出宽度较短者(e与g的大小写相同)
附加格式符
说明
l
插在%和d、i、u、o、x、X之间,表示输出相应长整数。
整数
插在%和其它格式符之间,前一个整数的绝对值为输出数据的宽度,后一个整数控制实际输出位数:①输出整数时,指定输出位数,不足左补0,超出保留;②输出实数时,指定输出小数位数,不足右补0,超出四舍五入;③输出字符串时,指定输出字符数。另外,第一个整数为负时,输出数据左对齐,否则右对齐。
.整数
整数.整数
4.5. scanf函数的格式和功能如下:
格式:scanf(格式控制串, 地址表列)
其中,格式控制串为字符串型数据(可以是表达式),地址表列是一组用逗号分隔的地址。
功能:
(1) 右至左依次计算地址表列中各表达式的值;
(2) 从标准输入设备提取数据,并从左至右依次存储到所指定的存储单元。
(3) 地址表列中的地址可用表达式表示,通常形式为:
&变量
其中&是地址运算符,它表示取其后变量的存储(起始)地址。
说明:
(1) scanf函数格式符与printf函数的格式符的功能相似。scanf的合法格式符不区分大小写、实型格式符均等效,另外,
表4.2 scanf的附加格式符说明
附加格式符
说明
正整数
指定输入数据的最大宽度(插在%与其它格式符之间)
*
跳过当前一个数据(插在%与其它格式符之间)
*正整数
跳过当前指定个字符(插在%与其它格式符之间)
(2) 如果格式控制串中有非格式符,则输入数据中对应位置上必须是该字符,且被跳过,这为指定数据间分隔符提供了方便。
(3) printf和scanf格式控制串中的每对%%(从左至右结合)按一个普通字符%对待。
5.1. C逻辑值为短整数(int),真、假分别为1、0。另外,字符、数、指针作为逻辑量时,非0、非空为真(即1),0、空为假(即0)。逻辑运算如下表所示:
表5.1 逻辑运算真值表
左元
右元
!右元
左元&&右元
左元||右元
假(0)
假(0)
真(1)
假(0)
假(0)
假(0)
真(非0)
假(0)
假(0)
真(1)
真(非0)
假(0)
真(1)
假(0)
真(1)
真(非0)
真(非0)
假(0)
真(1)
真(1)
5.2. 对于形如
□||□||…
的逻辑式,从左至右计算□的逻辑值,遇到真则提前终止。
5.3. 对于形如
□&&□&&…
的逻辑式,从左至右计算□的逻辑值,遇到假则提前终止。
5.4. 算术、关系、逻辑运算的优先级参见附录C(教材第365页)。
5.5. if语句的格式和功能如下:
(1) 格式一:if(条件) 语句
功能:如果条件成立,方执行语句。
(2) 格式二:if(条件)语句1 else 语句2
功能 如果条件成立,执行语句1,否则执行语句2。
注意:else不可独立使用,它与其前最近一个尚未配对的if配对,为避免歧义,通常只在else中嵌套if语句。
5.6. 条件表达式的格式和功能如下:
格式:条件?表达式1:表达式2
功能:如果条件成立,取表达式1的值,否则取表达式2的值。
说明:条件表达式可以嵌套,与其前最近一个尚未配对的if配对。
5.7. switch语句的格式和功能如下:
格式:
switch(表达式)
{
…
case 常量i: 语句组i
…
default: 语句组n+1
}
功能:如果表达式的值等于常量i,则从语句组i开始执行,否则执行语句组n+1。
说明:
(1) “表达式”的值和“常量”为整型(包括字符型)。
(2) switch中的每个语句组称作一个分支,为使各分支独立,通常以break、return、exit等语句结尾。另外,“default: 语句组n+1”可以缺省。
5.8. break语句的格式和功能如下:
格式:break;
功能:结束本层switch语句或本层循环语句。
说明:break语句只能用于switch语句和循环。
6.1. while语句的格式和功能如下:
格式:while(表达式)循环体
功能:当表达式的值为真时,重复执行其后循环体。
说明:循环体是循环语句的内嵌语句,可以是空或复合语句(下同)。
6.2. do-while语句的格式和功能如下:
格式:do 循环体 while(表达式)
功能:重复执行循环体,直到表达式的值为假。
说明:do-while循环至少执行一次循环体。
6.3. for语句的格式和功能如下:
格式:for(表达式1; 表达式2; 表达式3) 循环体
功能:
(1) 计算表达式1;
(2) 当表达式2的值为真时,重复执行循环体和计算表达式3。
说明:表达式1、表达式2、表达式3均可缺省,但保留分号。
6.4. continue语句的格式和功能如下:
格式:continue;
功能:跳过循环体中其后程序段(结束本次循环)。
说明:continue语句只能用于循环。
6.5. 掌握以下算法:累加、阶乘、判断素数、分解整数数字、递推数列、打印字符图形。
7.1. 同一类型数据的序列称作数组,数组中数据用相应下标变量访问,因此,数组亦可视为由下标变量组成的序列。
7.2. 定义数组语句的一般格式和功能为:
格式:数据类型名 数组名[第1维长度]…[第n维长度]
功能:为数组分配连续内存单元,用于存储数组中的下标变量(低维优先),并将起始地址(又称基址)赋给数组名。
说明:数组长度只能为整型常量或整型常量表达式。
7.3. 数组的要素有:数据类型、数组名、维数及各维的长度。各维的长度必须是常量,可用常量表达式表示,其值的整数位有效——截断取整。
7.4. 下标变量的格式为:
数组名[第1维下标]…[第n维下标]
7.5. 下标从0开始,可用表达式表示,其值的整数位有效。下标最大值比长度小1。
7.6. 下标变量的使用与普通变量相同。
7.7. 定义数组的同时可对数组中的下标变量赋初值。
格式:数据类型名 数组名[第1维长度]…[第n维长度]={数据表}
功能:定义数组的同时将数据表中数据依次赋给数组中下标变量,未赋值下标变量的初值为相应数据类型的0。
说明:数据表中的数据必须是常量,可用表达式表示。第1维长度可省略,如果省略,其长度由数据表和其它维长度确定——存储所需的最小长度。
7.8. 以字符为数据元素的数组称作字符数组,它由一组字符型下标变量组成。除赋值外,字符数组名的使用与字符串变量相似。字符数组也可用字符串初始化。
7.9. 标准函数库提供许多用于处理字符串的函数。
表7.1 常用字符串处理函数
格式
功能
头文件
puts(串)
依次输出串中字符,遇到\’\\0\’终止,然后换行。
stdio.h
gets(串)
读入一行字符,依次存入所分配的内存空间,并追加\’\\0\’。
strcat(串1, 串2)
将串2复制、连接到串1的第一个\’\\0\’处。
string.h
strcpy(串1, 串2)
将串2复制到串1。
strcmp(串1, 串2)
比较串1和串2的大小。
strlen(串)
求字符串的长度。
strlwr(串)
将串中大写字母均转换为相应小写字母。
strupr(串)
将串中小写字母均转换为相应大写字母。
注意:输出字符串及处理字符串的函数,均忽略字符串中第一个\’\\0\’及其后的字符。
7.10. 掌握冒泡排序。
8.1. 自定义函数的格式为:
函数值类型 函数名(带类型声明的形参表列) {函数体}
8.2. 函数值的默认数据类型为int。
8.3. 如果函数有返回值,则用return语句返回,其格式为:
return 表达式; 或 return(表达式);
8.4. 如果函数无返回值,即函数值类型为void,亦可用格式:
return;
结束本函数并返回调用者。
8.5. 函数一般调用格式为:
函数名(实参表列)
其中,实参表列为一组逗号分隔的表达式。实参按从右至左的次序计算并传递给相应形参。
8.6. 如果函数调用在其定义之前,调用前应作相应声明,声明格式为:
函数值类型名 函数名(形参及其类型声明表列);
其中,形参可省略。
8.7. 函数不可嵌套定义,但允许嵌套调用,亦可直接或间接调用自身(称作递归函数)。
8.8. 递归函数的函数体的一般格式为:(B班同学不作要求)
if(递归条件)语句1 /*递归时,如何递归*/
else 语句2 /*非递归时,如何处理*/
或
if(!递归条件)语句1 /*非递归时,如何处理*/
else 语句2 /*递归时,如何递归*/
8.9. 形参及函数内定义的变量称作局部变量,它从定义处生效,且只在该函数内有效。因此,不同函数中的局部变量可以同名,但同名不同义。
8.10. 在所有函数之外定义的变量称作全局变量,它从定义处生效。
8.11. 如果局部变量与全局变量同名,则同名全局变量被屏蔽。
8.12. 局部变量的存储方式分为:自动(auto,默认)、静态(static)、寄存器(register)。
8.13. 存储方式和数据类型是变量的两个重要属性,必须在定义变量时一并声明,关键字的排列顺序没有限制。变量的默认数据类型为int,默认存储方式为auto,但关键字auto和int不可同时缺省。
8.14. auto型局部变量占用动态数据区,当函数调用结束时释放所占内存。register占用CPU中的寄存器,但寄存器不够用时,占用动态数据区。
8.15. 全局变量和static型局部变量占用静态数据区,默认初值为相应数据类型的0。
8.16. static型局部变量的声明和初始化只执行一次。
8.17. 如果全局变量被声明为static型,则其它程序文件不能使用该全局变量。否则,其它程序文件也可使用该全局变量,但使用前应作extern声明。
8.18. 被声明为static型的函数,只在本程序文件中有效,不能被其它程序文件调用。否则,其它程序文件也可调用此函数,但调用前应作extern声明。
8.19. 常用数学函数在头文件math.h中。掌握基本初等函数。
9.1. 预处理命令在程序编译前执行,其主要功能是“文本置换”。
9.2. 不带参数宏定义的格式和功能如下:
格式:#define 宏名 文本
功能:在预处理时,将程序中宏名用相应的文本置换。
9.3. 带参数宏定义的格式和功能如下:
格式:#define 宏名(形参表列) 文本
功能:在预处理时,将程序中带参数的宏用相应的文本置换,且文本中的形参被相应的实参所置换。
注意:形参无须且做类型声明。
9.4. 终止宏定义的格式如下:
格式 #undef 宏名
9.5. 宏定义可以引用已有的宏,亦可重新定义所代表的文本。
9.6. 预处理命令无须以分号结尾,否则分号也参与置换。
9.7. #include命令的格式和功能如下:
格式一:#include \”文件名\”
格式二:#include <文件名>
功能:在预处理时,用指定文件置换本命令——加载文件。置换后,被包含文件成为本文件的一部分,其函数、全局变量等均可在本文件中直接使用,无须作extern声明。前一种格式先在当前目录中找指定文件,如果未找到,方到存放C头文件的目录中查找。后一种格式直接到存放C头文件的目录中查找指定文件。
9.8. 条件编译命令的格式和功能如下:
格式一:#ifdef 宏名 程序段1 #else 程序段2 #endif
功能:在预处理时,如果指定的宏名已定义,则用程序段1置换本命令,否则用程序段2置换本命令。当程序段2为空时,#else可省略(下同)。
格式二:#ifndef 宏名 程序段1 #else 程序段2 #endif
功能:在预处理时,如果指定的宏名未定义,则用程序段1置换本命令,否则用程序段2置换本命令。
格式三:#if 常量表达式 程序段1 #else 程序段2 #endif
功能:在预处理时,如果指定常量表达式的值为真(非0),则用程序段1置换本命令,否则用程序段2置换本命令。
9.9. 注释命令在预处理时被删除,不影响源程序和目标程序。注释命令的格式如下:
/*注释内容*/
10.1. 内存的基本单位是字节,每个字节都有相应的编号,称作地址或指针。借助于指针,C语言可以直接访问内存,从而对硬件进行操作。
10.2. 变量所占用内存的大小由其数据类型决定,变量所占用内存的第1个字节的地址称作该变量的地址或指针,表为:
&变量名
10.3. 指针所指向数据的类型称作该指针的基类型,它所指向数据用
*指针
访问,可作为普通变量使用。
10.4. 指针本身也是一种数据类型,占用2字节内存,可作为无符号整数输出和参与关系运算、逻辑运算,但指针的其它运算不同于整数运算。
10.5. 指针运算可简单地分为以下五类:
(1) 单目运算有六个:!、&、*、++、–、sizeof。
(2) 双目运算有四种:-、关系运算、逻辑运算、赋值运算。
(3) 指针与整数间的运算有三个:+、-、[ ]。
(4) 强制类型转换运算:( )。
(5) 结构体成员运算:->。
其中,+、-、++、–、+=、-=均以基类型数据为基本单位。
10.6. 一维数组的数组名可作为指针调用,它指向数组中的第一个元素,以数组中元素的类型为基类型。数组名的值不可修改,且sizeof(数组名)的值为整个数组所占内存的字节数。
10.7. 对于一维数组来说,
基址+i 和 &基址[i]
均指向数组中的第i+1个元素(i>=0);
*(基址+i) 和 基址[i]
均表示数组中的第i+1个元素(i>=0)。
10.8. n维数组可看作是以n-1维数组为元素的一维数组,数组名可看作是指向数组中的第一个n-1维数组的指针。
10.9. 下标变量可作为实参,但不可作为形参,实际上,它被误认为指针。
10.10. ※ C源程序经编译后,系统为源程序中的每个函数均分配一个入口地址,称作函数指针。在C源程序中,函数指针用函数名表示,其值不可修改。以函数指针为值的变量称作函数指针变量,其定义格式为:
函数类型名(*函数指针变量名)( );
可用下述格式代替函数名:
(*函数指针)
10.11. ※ 函数返回值可以是指针,定义函数的一般格式为:
基类型 *函数名(形参列表){函数体}
10.12. 不允许将非0数直接赋给指针变量,须做强制转换。当指针变量的值为0时,称之为空指针。
10.13. ※ 以指针为元素的数组称作指针数组。
10.14. ※ 以指针为基类型的指针称作指向指针的指针,以指向指针的指针为值的变量称作指向指针的指针变量,其定义格式为:
存储方式关键字 基类型名 **指向指针的指针变量名
10.15. ※ C源程序经编译、连接所得目标程序(exe文件)可作为DOS外部命令使用,命令行的一般式为:
路径\\目标程序文件名 参数1 参数2 … 参数n
10.16. ※ C主函数main可带两个形参,前者为int型,用于接收命令行中字符串个数,后者为字符串指针数组,用于接收命令行中各字符串。带参主函数的格式为:
void main(int 形参1,char *形参2[ ]) {函数体}
其中,
形参1=参数个数+1
形参2[0]=\”路径\\目标程序文件名\”
形参2[i]=\”参数i\”,i=1,2,…,n
11.1. 声明结构体语句的一般格式为:
struct 标识符{成员表列};
其中,成员表列为一组声明变量的语句,这些变量称作该结构体的成员,又称数据项、分量、域、字段等。语句结尾处的分号不可缺省,标识符可以省略,如果不省略标识符,则新增一个数据类型(名):
struct 标识符
11.2. 定义结构体变量的一般格式为:
struct 标识符 变量表列;
也可在声明结构体的同时定义变量:
struct 标识符{成员表列}变量表列;
11.3. 结构体变量可在定义时赋初值,类似于数组赋初值。
11.4. 结构体变量的整体使用有以下四种:
(1) 赋值:结构体变量=同类型结构体变量
(2) 求存储量:sizeof(结构体变量)
(3) 取地址:&结构体变量
(4) 初始化——与数组初始化相似。
11.5. 结构体中成员可作为普通变量使用,成员的访问格式为:
结构体变量名.成员名 或 结构体指针->成员名
11.6. 结构体中的成员名只在该结构体类数据中有效,因此,不同结构体中的成员可以同名,成员名也可与普通变量同名。
11.7. 结构体中的成员可以是指针,其基类型可是正在定义或尚未定义的结构体。
11.8. 以同一类型结构体为元素的数组称作结构体数组,以结构体为基类型的指针称作结构体指针。结构体数组和指针的定义和使用与基本类型数组和指针相似。
11.9. 共用体与结构体相似,主要区别有:
(1) 定义共用体的保留字为union;
(2) 同一共用体各成员的基址相同,访问成员时必须与最后所存数据的类型相同,共用体数据所占内存与其成员中所占内存最大者相同;
(3) 不可初始化共用体变量。
11.10. 读取共用体成员时,应按最后一次所存入成员的数据类型读取。
11.11. 共用体和结构体的成员可以是已存在的共用体和结构体,但不可嵌套定义。
11.12. 声明枚举类型语句的一般格式和功能为:
格式:enum 标识符{枚举元素列表}变量列表;
功能:
(1) 显式或隐式指定所列枚举元素所代表的整数;
(2) 如果不省略标识符,则定义一个枚举类型(名):
enum 标识符
枚举元素表是一组用逗号分隔的标识符或整数常量赋值表达式,第一个枚举元素的默认值为0,其它枚举元素的值为前者加1。
11.13. typedef语句的格式和功能为:
格式:typedef 数据类型名 别名1,…,别名n;
功能:给指定数据类型增加一组名称。
11.14. typedef语句也可在声明结构体、共用体、枚举类型的同时给它增加一组名称。
13.1. 文件是存储在外部介质(存储器)上的数据集合,每个文件均有标识符,称作文件名。
13.2. C所使用的数据文件分为文本文件和二进制文件。文本文件以字符为基本单位,存储字符所对应的ASCII码,又称TXT文件或ASCII文件;二进制文件中的数据存储形式与内存中存储形式相同。
13.3. 指向文件结构体的指针称作文件类型指针,简称文件指针或FILE指针,其定义格式为
FILE *文件指针;
13.4. 读写文件之前须用fopen打开或创建该文件,访问结束后用fclose关闭该文件。
C语言程序基础
1、C语言简介
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。1972年,贝尔实验室在B语言的基础上设计出了C语言,最初的C语言只是为了描述和实现UNIX操作系统而设计的。随着UNIX的日益广泛使用,C语言也得到广泛推广。1978年以后,C语言先后移植到大中小和微型计算机上。C语言可移植性好,硬件控制能力强,目前C语言的主要用途之一是编写嵌入式系统程序。
2、C程序的数据、运算符和结构
2.1 C程序的数据类型
C程序的数据类型包括整型、实型、字符型、字符串型、符号常量等,其中整型根据能表达的数据大小范围,又可以分为短整型、长整型,实型分为单浮点型和双精度型,整型又分为符号数和无符号数。有符号整型数据最高位数值代表数值的符号,0为正,1为负。如果指定为无符号数,则数值最高位代表数值,不代表符号。单精度浮点型和双精度浮点型主要是表达的数值范围和数值精度不一样。
图1 C程序的数据类型
2.2 C程序的运算符
C语言提供的运算符非常多,本文只介绍其中常用的几个:
(1) 算术运算符:+-*/%++–
(2) 关系运算符:<>
(3) 逻辑运算符
(4) 位运算符
(5) 赋值运算符
C语言的运算符具有优先级和结合性,在表达式求值时,先按运算符的优先级顺序执行,如果在一个运算对象两侧的运算符的优先级相同,则按运算符的结合方向处理。
2.3 C语言的几种结构
C语言的程序结构包括顺序结构、选择结构、循环结构,每种结构都有它对应的语句和关键字。下面根据C语言的基本知识编写了一个冒泡程序,用于排列数的大小。
#include<stdio.h>
int main()
{
int a[10];
int i,j=10,c,k;
printf(\”please input 10 numbers.\”);
for(i=0;i<10;i++)
{
scanf(\”%d\”,&a[i]);
}
printf(\”\\n\”);
for(j=9;j>0;j–)
{
for(i=0;i<j;i++)
{
if(a[i]>a[i+1])
{
c=a[i];
a[i]=a[i+1];
a[i+1]=c;
}
else
;
}
掌握这个程序基本上就掌握了C语言的基本知识,但对于复杂的问题,还要学习指针等知识才行。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。