C语言的基础知识
1. 熟悉vc++
1) VC是软件,用来运行写的C语言程序。
2) 每个C语言程序写完后,都是先编辑,编译,后链接,最后运行。
3) 程序结构是三种: 顺序结构 、选择结构(分支结构)、循环结构。
4) 读程序都要从main()入口, 然后从最上面顺序往下读(碰到循环做循环,碰到选择做选择),有且只有一个main函数。
概念:
1、编译预处理 #include “stdio.h”…
2、每个C语言程序中main函数是有且只有一个。
4、算法:可以没有输入,但是一定要有输出。
5、break可用于循环结构和switch语句。
一、常量
? 数字常量
i. 普通数字:1,35,2.7
ii. 指数形式:2.45e-2等价于2.45*10-2 注意ee能省,就算是1也不能省,后面的数字一定要是整数
iii. 长整型,单精度浮点型:3235L,32.5F 分别表示3235是长整型数据,32.5
是单精度浮点型左,若不写上L,F则表示3235是整型,32.5是双精度浮点型,L,F大小写皆可
? 字符常量
i. 普通字符常量:用单引号把一个字符括起来,如’A’,’@’
ii. 转义字符常量:一对单引号括起来并以“\”开头的字符序列,如’\n’(回
车)、’\123’(8进制123对应的字符), ’\x23’(16进制23对应的字符)
二、 标识符
? 命名规则
以数字,字母,下划线这三类字符组成,但只能以字母或下划线开头,而不
能也数字开头,另外不能将关键字做为标识符。32个关键字表在P365附录B
? 变量名,函数名,数组名全都是标识符
三、 变量
? 变量的定义格式
类型名 变量名;
如 int a;定义了一个整型常量a。变量名是由人类随便定义的,符合命名规则的前提下,爱写啥就写啥。所以什么flag,cc,y1或者函数名fun,find等全部是自定的用来做为名字而已,没有更特别的意义。
? 类型名
int 整型,long 长整型: 用于存放整数,只是数值范围不同
float 单精度浮点型 double 双精度浮点型:用于存放实数,数值范围,精度不同
char字符型:用于存放字符
? 变量赋值,初始化
int a=3;定义的同时初始化
a=6*9;定义后在程序中进行赋值
? 变量的值
只有在赋值操作时才会被改变,即将其放在等号左边时才会改变它的值,或自增自减操作:a=5,a++,a--,像a+3并未改变a的值,只是使用了a的值而已.
? 自增自减运算
变量++,++变量,变量--,--变量 使变量的值自增1或自减1
等价于 变量=变量+1 变量=变量-1
++,--放于变量前后效果的区别:
当自增自减运算做为表达式的一部分时,++,--放在变量前面是先自增自减再使用变量的值,放在变量后面则是先使用变量的值,再自增自减。 如x=3; printf(“%d”,++x);则相当于执行了++x; printf(“%d”,x);这样的操作所以打印出4
再如x=3; printf(“%d”,x++);则相当于执行了printf(“%d”,x); x++;这样的操作,则打印出3,当然最后x的值还是4。
四、 表达式
? 算术表达式
i. 算术运算符:+,-,*,/,%(求余)
ii. 由算术运算符加上运算对象构成算术表达式,如3+3*6-9/2
iii. 值:跟我们小学时学的一样,就是表达式的计算结果
iv. 整数除以整数结果取整数部分,故1/3得到的值是0
v. 5%3 结果为2,想想小学除法,求余得到的是余数不是商。 ? 关系表达式
i. 关系运算符:< , > , <=, >=, = =(等于), !=(不等于)
ii. 由关系运算符加上运算对象构成关系表达式,如3>=4, 2==a
iii. 值:满足相应运算符所指定的关系的值为1,否则为0
? 逻辑表达式
i. 逻辑运算符:&&(且) , ||(或) , !(非)
ii. 由逻辑运算符加上运算对象构成逻辑表达式,如3&&4, x||!y
iii. 值:满足相应运算符所指定的关系的值为1,否则为0
iv. 进行 ||或 运算时,若||左边的表达式值为1,则不再对右边的表达式进v. 行运算。 进行 &&且 运算时,若&&左边的表达式值为0,则不再对右边的表达式进
行运算。
五、 输入输出函数
? scanf(“格式控制串”,变量地址表列);
如scanf(“%d%c%d”,&a,&ch,&b); scanf(“%4f”,&x);
? printf(“格式控制串”,输出项表列);
如float x=7.5; printf(“%8.2f”,x);此处的意思是将x打印出来,且占8列,保留两位小数。
常用格式符汇总:
i. %d:输入输出整型数据, %c:输入输出字符型数据
ii. %f:输出单(双)精度浮点型数据,输入单精度型数据。
iii. %s:输入输出一个字符串,用printf输出字符串时,输出项书写时可为字
符串常量,或字符数组名。
如printf(“%s”,”hello”);或char str[10]=”hello”; printf(“%s”,str);
六、 C语言的语句
?
?
?
? 表达式语句:由表达式末尾加上分号构成。 选择结构语句:if语句 switch语句 循环语句:for语句 while语句 do while语句 复合语句:用花括号{}将以上任意语句括起来构成一条复合语句。
七、 C程序的基本结构
int max()
{
return 0;
}
八、 选择结构语句
? if(表达式) 语句1 else 语句2
如果if语句的圆括号内的表达式值为非0,则执行语句1,值为0则执行语句2。 i. 表达式可为任意表达式,if语句执行的实质是判断表达式的值是否为0来
决定执行语句1还是语句2。
ii. 语句1和语句2都只能是一个语句,若要跟多条语句,切记用一对{}括起
来,构成复合语句;
iii. if语句的三种结构
1. 单边: if(表达式) 语句
2. 双边:if(表达式) 语句1 else 语句2
3. 多层(重点掌握):
if(表达式1) 语句1
else if(表达式2) 语句2
else if(表达式3) 语句3
…
else 语句n
? 条件运算符 表达式1? 表达式2 : 表达式3
若表达式1的值非0,则取表达式2的值做为整个表达式的值,否则取表达式3
的值为整个表达式的值。如 3>4? 1:2 该表达式的值为2
? switch语句
switch(表达式)
{
case 表达式1:语句
case 表达式2:语句
…
case 表达式n:语句
default: 语句
}
语句执行过程:先计算表达式的值,然后判断该值与表达式1到表达式n中的
哪个相等,若与表达式i的值相等,则执行表 达式i后的所有语句,当遇到break;语句时结束整个switch语句的执行。
循环结构
三种循环结构:
a)for() ; while(); do- while()三种。
b)for循环当中必须是两个分号,千万不要忘记。
c)写程序的时候一定要注意,循环一定要有结束的条件,否则成了死循环。
d) do-while()循环的最后一个while();的分号一定不能够丢。,do-while循环是至少执行一次
循环。
2) break 和 continue的差别
记忆方法:
break:是打破的意思,(破了整个循环)所以看见break就退出整个一层循环。
continue: 是继续的意思,(继续循环运算),但是要结束本次循环,就是循环体内剩下的
语句不再执行,跳到循环开始,然后判断循环条件,进行新一轮的循环。
3)嵌套循环
九、 数组
? 定义格式:数据类型 数组名[整型常量];如 int a[10]; 定义了一个整型数组,数组名为a,这个数组含有10个元素。
? 引用数组元素: 格式:数组名[下标] 切记下标值从0开始。下标可为常量,表达式,变量等,如int i=3; a[0]=5;a[3*2]=9; a[i]=7;
? 初始化:数据类型 数组名[整型常量]={数据表列};将数据表列的各个值依次赋值给数组的各个元素。如int a[5]={0,1,2,3,4};则数组a各元素a[0]到a[4]的值分别为0,1,2,3,4
? 整型数组
int a[10]; 整型数组里的各个元素存放的是整数。a[3]=3;
? 字符型数组
char str[20];字符型数组里的各个元素存放的是字符。 str[3]=’A’;
十、 字符串函数
? gets(字符数组名或字符指针变量);
如char str[10],* str2; str2=str;则gets(str);或gets(str2);都是接收用户输入的字符串如“ABC”存入到字符数组str中
? puts(字符数组名或字符指针变量或字符串常量);
如char str[10]=”china”; char *str2;str=str2; 则puts(str); 或puts(str2); 或 puts(“china”);都会在屏幕上打印出 china
? strlen(字符数组名或字符指针变量);字符串测长函数
char str[20]=”hello world!”;
int len;len=strlen(str);得出的结果是len的值为12
? strcat(字符串1的地址,字符串2的地址);
将字符串2的内容连接到字符串1的尾部。
char str1[20]=”ABC”,str2[20]=”xyz”;
strcat(str1,str2);
则程序运行的结果是str1内存放的字符串变为ABCxyz,当然str2存放的字符串还是xyz。
? strcmp(字符串1的地址,字符串2的地址);
比较串1和串2哪个比较大。
? strcpy(字符串1的地址,字符串2的地址);
将字符串2的内容复制到字符串1内。
char str1[20]=”ABC”,str2[20]=”xyz”;
strcpy(str1,str2);此时str1的内容为”xyz”,当然str2的内容没变
strcpy(str1,”uvw”);此时str1的内容又变成了“uvw“。
注意:要用上述str函数时必须包含头文件”string.h”
都懂了,一定过!
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. 算法的基本结构分为:顺序结构、选择结构、循环结构。
图2.2 顺序结构 图2.3 选择结构 图2.4 当循环 图2.5 直到循环
图2.6 顺序结构 图2.7 选择结构 图2.8 当循环 图2.9 直到循环
2.5. 由三种基本结构组成的程序称作结构化程序,结构化程序中的每个模块只有一个入口和一个出口。结构化程序设计通常采用“自顶向下、逐步细化”的设计方法。
3.1. C的数据类型如下所示:
表3.1 C语言的数据类型
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格式字符
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 逻辑运算真值表
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 常用字符串处理函数
注意:输出字符串及处理字符串的函数,均忽略字符串中第一个'\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. ※[1] 函数返回值可以是指针,定义函数的一般格式为:
基类型 *函数名(形参列表){函数体}
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[ ]) {函数体}
其中,
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关闭该文件。
[1] 标注※表示此部分为非考试内容。
总体上必须清楚的:1)程序结构是三种:顺序结构,循环结构(三个循环结构),选择结构(if和switch)2)读程序都要从main(…
好老师重庆市二级C语言基础知识点总结以及题目订正第一章1,函数是从主函数(main())开始执行,回到主函数(main())结束;…
浮点数floatx=123.45e-2F;//x的值为1.2345123.45e-2默认为double型3、常量整数是以补码的形式…
二级C语言基础知识点总结第一章1,函数是从主函数(main())开始执行,回到主函数(main())结束;2,一个程序的编译是从第…
二级C语言公共基础知识部分知识点总结~来源:吕濛??的日志数据结构与算法1算法算法:是指解题方案的准确而完整的描述。算法不等于程序…
二级C语言基础知识点总结第一章1,函数是从主函数(main())开始执行,回到主函数(main())结束;2,一个程序的编译是从第…
浮点数floatx=123.45e-2F;//x的值为1.2345123.45e-2默认为double型3、常量整数是以补码的形式…
学习C语言的准备知识3)计算机的数据在电脑中保存是以二进制的形式存入,数据存放的位置就是它的地址。4)bit位是指为0或者1。by…
C语言复习资料(到循环)第六章总体上必须清楚的:1)程序结构是三种:,三个循环结构),和switch)2)读程序都要从main()…
第一章C/C++程序设计——来源于程序员面试宝典知识点总结、C++Primer1.位操作判断一个数X是否是2的N次方:if(!X&…
好老师重庆市二级C语言基础知识点总结以及题目订正第一章1,函数是从主函数(main())开始执行,回到主函数(main())结束;…