文档介绍:该【c语言知识点 】是由【秋江孤影】上传分享,文档一共【10】页,该文档可以免费在线阅读,需要了解更多关于【c语言知识点 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。
0804二级C语言知识点汇总以上三类都可以加上修饰符unsigned,以指定是“无符号数”。如果加上
修饰符signed,则指定是“有符号数”。如果缺省,则隐含为有符号
1、c语言程序的构成和格式0704X15(signed)。
(1)C程序是由函数构成的。一个C源程序至少包含一个main函数,类型占位数的范围
也可以包含一个main函数和若干个其他函数。(2)一个函数由两部分
[signed]int32-2147483648-2147483647
组成(3)一个C程序总是从main函数开始执行的,而不论main函数
-231-(231-1)
在整个程序中的位置如何。(4)C程序书写格式自由,一行内可以写几
Unsigned[int]320-4294967295
个语句,一个语句可以分写在多行上。(5)每个语句和数据定义的最
0-(232-1)
后必须有一个分号。(6)C语言本身没有输出语句。输入和输出的操作
[signed]short[int]16-32768-32767
是有库函数scanf和printf等函数来完成的。(7)可以用/*……*/对C
-215-(215-1)
程序中的任何部分作注释。
Unsignedshort[int]160-65535
2、标识符、常量和变量0704X130709X12
0-(216-1)
(1)标识符
Long[int]32-2147483648-2147483647
1)关键字:在程序中都代表着固定的含义,不能另作他用
-231-(231-1)
2)预定义标识符:在程序中预先定义并具有特定含义的标识符,并且
Unsignedlong[int]320-4294967295
允许把它重新定义另作他用,但会失去原有的意义。
0-(232-1)
3)用户标识符:由用户根据需要定义的标识符。
整型常量的类型
(2)常量:在程序运行过程中,其值不能被改变的量。
一个整常量后面加一个字母u或U,认为是unsignedint型,如12345u,
符号常量:用标示符代表一个常量。在C语言中,可以用一个标识符
在一个整常量后面加一个字母l或L,则认为是longint型常量。
来表示一个常量,称之为符号常量。
4、实型数据0704X13
符号常量在使用之前必须先定义,其一般形式为:
实型常量的表示方法:
#define标识符常量
实数又称为浮点数,有两种表示形式:
(3)变量:在程序运行过程中,其值可以改变的量称为变量。
(a)十进制小数形式:由数字和小数点组成(注意必须有小数点)。
变量名和变量值
如:.123、123.、、。(b)指数形式:注意字母e或E之
变量名每个变量都必须有一个名字──变量名,变量命名遵循标识
前必须有数字,且e后面的指数必须为整数。如123e3代表123×103。
符命名规则。
规范化的指数形式:字母e或E之前的小数部分中,小数点左边应有
定义变量名:C语言规定标识符只能由字母、数字、下划线三种字符
一位(且只有一位)非零的数字。,,一
组成,且第一个字符必须是字母或下划线。
个实数在用指数形式输出时,是按照规范化的指数形式输出return(z);
注意:大写字母和小写字母被认为是两个不同的字符。
浮点型变量
sum和SUM是两个不同的变量名。
a)实型数据在内存中的存放形式:一个实型数据一般在内存中占4个
C语言规定:对所有用到的变量要“先定义,后使用”。
字节(32位)。按照指数形式存储,分为小数部分和指数部分
a)凡未被事先定义的,不作为变量名。b)每一个变量被指定为一确定
b)实型变量的分类:C实型变量分为单精度(float型)和双精度型
类型
(double型)两类。
3、整型数据0704X13
类型比特数有效数字数值范围
整型常量的表示方法
C整常数有三种表示方法:float326-7-1038~1038
(1)十进制整数。如123,0.,56(2)八进制整数。以0开头的数
double6515-16-10308~10308
是八进制。如0123表示八进制123。(3)十六进制整数。以0x开头
5、算术运算符和算术表达式
的数是十六进制数。如0x123
基本的算术运算符
整型变量
+-*/%
a)整型数据在内存中的存放形式
说明:(1)如果双目运算符两边运算数的类型一致,则所得到的结果
数据在内存中是以二进制形式存放的。
类型与运算数的类型一致。(2)如果双目运算符两边运算数的类型不
b)整型变量的分类
一致,系统将自动进行类型转换,使运算符两边类型达到一致后,再
基本整型,以int表示值的范围是-215-(215-1)即-32768~32767
进行运算。(3)所有实型数的运算均以双精度方式进行。
短整型,以shortint表示,或以short表示
强制类型转换
长整型,以longint表示,或以long表示。
强制类型转换是通过类型转换运算来实现的。
1
其一般形式为:o以八进制格式输出整型数
(类型说明符)(表达式)X或x以十六进制格式输出整型数
其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。u以无符号十进制形式输出整型数
在使用强制转换时应注意以下问题:(1)类型说明符和表达式都必须f以带小数点的数学形式输出浮点数
加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了E或e以指数形式输出浮点数
把x转换成int型之后再与y相加了。(2)无论是强制转换或是自动转G或g由系统决定采用%f格式还是采用%e格式输出,以使输出
换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转宽度最小
换,而不改变数据说明时对该变量定义的类型。s输出一个字符串,直到遇到“\0”
、赋值运算符和赋值表达式
60704X17p输出变量的内存地址
在c语言中,赋值号“=”是一个运算符,称为赋值运算符,赋值表
%也就是%%形式,输出一个%
达式形式如下:
(在%和格式字符之间)
变量名=表达式
如:长整型数要加l(long)
说明:(1)赋值运算符的优先级只高于逗号运算符,且结合性是从右
向左。(2)赋值运算符不同于数学中的“等于号”。(3)赋值运算符左
1)在%与格式字符之间插入一个整数,指定输出宽度。
侧只能是变量,不能是常量或表达式
说明:,不影响输出(原样输出)
赋值运算中的类型转换----自动转换
度大于数据实际所需,则数据右对齐,左边补以空格.
自动转换发生在不同数据类型的量混合运算时,由编译系统自动完
2)对于float或double类型的实型数,可用“”的形式在指定宽度
成。自动转换遵循以下规则:(1)若参与运算量的类型不同,则先转
的同时指定小数的位数.“m”用以指定输出数据总的所占宽度,“n”表
换成同一类型,然后进行运算(2)转换按数据长度增加的方向进行,
示精度(对于e,E或f,“n”用以指定输出数据小数位所占位数。)
以保证精度不降低。如int型和long型运算时,先把int量转成long
说明:a,当输出数据的小数位多于n指定的宽度时,截去右边多余的
型后再进行运算。所有的浮点运算都是以双精度进行的,即使仅含
小数,并对截去的第一位小数做四舍五入处理;
float单精度量运算的表达式,也要先转换成double型,再作运算。
数位数少于“n”指定的宽度时,在小数的最右边添0。
(3)char型和short型参与运算时,必须先转换成int型。(4)在赋值运
占的宽度大于“m”指定的宽度时,小数位仍按上述规则处理,整数部
算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换
分并不丢失。d另外,也可用“.整数2”的形式。此时输出数据宽度有
为左边量的类型。如果右边量的数据类型长度左边长时,将丢失一部
系统决定。%.0则不输出小数点和小数部分e对于整数,则是用来
分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。
指定必须输出的数字个数。f对于字符串用来指定最多输出的字符个
7、自加、自减运算符0704X18
数
使变量的值增1或减1,如:
注意:输出数据的实际精度并不取决于格式控制中的域宽和小数的
++I,--I(在使用I之前,先使I的值加(减)1)
位宽,而是取决于数据在计算机内的存储精度。如系统对float类型
l++,I--(在使用I之后,使I的值加(减)1)
的数据提供7位有效数字。
8、数据输出---printf函数0704X19
Printf函数是C语言提供的标准输出函数,它的作用是在终端设备(或
在宽度前加一个“-”号可实现数据左对齐
系统隐含指定的输出设备)
+号或-号
调用形式如下:
可以在%和格式字符间(或指定的输出宽度前)加上一个“+”号实现。
printf(格式控制,输出项表)
注意:,再调用输出的库函数之前要求在源程序中
,在输出的16进制数前添加0x
:#include<>
调用printf函数时的注意事项
如果在printf函数调用之后加上”;”,就构成了输出语句.
,系统不报错,
例如:printf(“a=%d,b=%d”,a,b);
数据错误.(特别提醒),格式说明与输出项的个数应
其中printf是函数名;在圆括号中用双引号括起来的字符串,
,除了合法的格式说明外,可以包含任意字符
如”a=%d,b=%d”称为格式控制串;a,b是输出项表中的输出项,它们都
(“原样照印”)%,则应该在格式控制串中用两个
是printf函数的参数.
连续的百分号%%,
printf函数中常用的格式说明
如:i=5,printf(“%d%d\n”,i,i++);则不能保证先输出i的值,然后再求i++,
.
输出一个字符
c9、输出输入---scanf函数0704X160709T06
d或i输出带符号的十进制整型数,%ld为长整型Scanf函数的一般形式:
2
scanf(格式控制,输入项表);3)关系运算符的优先级高于赋值运算符
scanf格式说明关系表达式
c输入一个字符定义:用关系运算符将两个表达式连接起来的式子。
d输入带符号的十进制整型数,%ld为长整型关系表达式的值是一个逻辑值,“真”或“假”。以1代表“真”,以0代
o以八进制格式输入整型数表“假”
x以十六进制格式输入整型数逻辑运算符及其优先次序
u以无符号十进制形式输入整型数&&逻辑与(相当于其他语言中的and)
f(lf)以带小数点的数学形式输入浮点数||逻辑或(相当于其他语言中的OR)
e(le)以指数形式输入浮点数!逻辑非(相当于其他语言中的NOT)。
和双目(元)运算符,它要求有两个运算量(操作数),如
s输入一个字符串,直到遇到“\0”“&&”“||”“
(a>b)&&(x>y),(a>b)||(x>y)。
(1)在格式控制中,格式说明的类型和输入项的类型,应该一一对应
!是一目运算符,只要求有一个运算量。
匹配。如果类型不匹配,系统并不给出出错信息,但不可能得到正确“”“”
逻辑表达式
的数据。(2)在scanf函数中的格式字符前可以用一个整数指定输入数
判断一个量是否为真,以0代表假,以非0代表真。
据所占宽度。但不可以对实型数指定小数位的宽度。(3)在格式控制“”“”“”
注意:在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,
串中,格式说明的个数应该与输入项的个数相同。多余的数据项并没
只是在执行下一个逻辑运算符才能求出表达式的解时,才执行该运算
从终端接受新的数据;若格式说明的个数多于输入项的个数时,scanf
符。
函数同样也结束输入。(4)当输入的数据少于输入项时,程序等待输
、语句
入,直到满足要求为止。当输入的数据多于输入项时,多余的数据并12if0704X200704X400709X210709T07
定义:if语句是用来判定所给定的条件是否成立,根据判定的结
不消失,而是留作下一个输入操作时的输入数据
果(真或假)决定执行给出的两种操作之一。
从键盘中输入数据
形式:
1)输入数值数据:输入的数值之间可以用间隔符隔开(空格制表,回车)
1if(表达式)语句
2)如果在%后有一个“*”,表示跳过它指定的列数。
2if(表达式)语句1
3)在格式控制串中可以插入其他字符如提示语句标点符号等
else语句2
使用scanf函数应该注意的问题
3if(表达式1)语句1
(1)scanf函数中的“格式控制”后面应当是变量地址,而不是变量名。
elseif(表达式2)语句2
如scanf(“%d%d”,x,y);是错误的(2)如果在“格式控制”字符串中除
表达式3语句3
了格式说明以外还有其他字符,则在输入数据时在对应位置输入与这elseif()
elseif(表达式m)语句m
些字符相同的字符(3)在用“%c”格式输入字符时,空格字符和“转义字
else语句n
符”都作为有效字符输入:(4)在输入数据时,遇以下情况时该数据认
说明:1)三种形式的if语句中在if后面都有“表达式”,一般为逻辑
为结束:1)遇空格,或按“回车”或“跳格”键2)按指定的宽度结束,
表达式或关系表达式。2)第二、三种形式的if语句中,在每个else
如“%3d”只取3列3)遇非法输入如scanf(“%d%c%f”,&x,&y,&z);
前面有一个分号,整个语句结束处有一个分号。3)在if和else后面
10、复合语句和空语句
可以只含一个内嵌的操作语句,也可以有多个操作语句,此时用花括
复合语句
号“{}”将几个语句括起来成为一个复合语句。
复合语句使用“{”和“}”括起来的语句组,语法上被视为一条语句。
if语句的嵌套
空语句
一般形式:
空语句由一个分号构成,但它是一个c语句,程序执行空语句时不产
if()
生任何操作,但不正确地使用分号,会使程序产生错误的运行结果。
if()语句1
11、关系运算和逻辑运算0704X21
else语句2
关系运算符
else
所谓“关系运算”实际上就是“比较运算”,即将两个数据进行比较,判
if()语句3
定两个数据是否符合给定的关系。
else语句4
C语言提供6种关系运算符
条件运算符
<、<=、>、>=、==、!=
若if语句中,在表达式为真和假时,且都只执行一个赋值语句
关系优先次序“”“”
给同一个变量赋值时,可以用简单的条件运算符来处理。
1)前四种关系运算符相同,后两种也相同
条件表达式的一般形式为:表达式1?表达式2:表达式3?
2)关系运算符优先级低于算术运算符
3
运算符?:-唯一的三目运算符15、while语句0709T08
说明:(1)条件运算符的执行顺序:先求解表达式1,若为非0(真)while一般形式与执行过程
则求解表达式2,此时表达式2的值就作为整个条件表达式的值。:
表达式1的值为0(假),则求解表达式3,表达式3的值就是整个while<表达式>语句
条件表达式的值。(2)条件运算符优先于赋值运算符,因此上面赋值当表达式为非0时,执行while语句中的内嵌语句。
表达式的求解过程是先求解条件表达式,再将他的值赋给(3):1)求解“循环继续条件”表达式。如果其值为非0,转
算符的结合方向为“自右至左”。(4)条件表达式中,表达式1的类型2);否则转3)。2)执行循环体语句组,然后转1)。表达式语句3)
可以与表达式2和表达式3的类型不同执行while语句的下一条。
13、switch语句与选择结构0704X230704T09需要注意:1)循环体如果包含一个以上的语句,应该用花括号括起
switch语句的一般形式:来,以复合语句的形式出现,如果不加花括弧,则while语句的范围
switch(表达式)只到while后面第一个分号处。2)在循环体中应有循环趋向于结束
{case常量表达式1:语句组;break;的语句。
case常量表达式2:语句组;break;16、do-while语句0709X19
......
case常量表达式n:语句组;break;do{循环体语句组;}
[default:语句组;[break;]]while(表达式);/*本行的分号不能缺省*/
}当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。
说明:1)switch是关键字,switch后的{}称为是switch语句体2)(1)执行循环体语句组。(2)计算“循环继续条件”
义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式。如果“循环继续条件”表达式的值为非0(真),则转向(1)
表达式的值与某个常量表达式的值相等时,即执行其后的语句,然继续执行;否则,转向(3)。(3)执行do-while的下一条语句。
后不再进行判断,继续执行后面所有case后的语句。如表达式的值do-while循环语句的特点是:先执行循环体语句组,然后再判断循
与所有case后的常量表达式均不相同时,则执行default后的语句。环条件。
3)关键字case与常量表达式后必须有空格4)必要时语句可以省略17、for语句0704X24
)Default的位置可以在任何位置,最适用范围:不仅可以用于循环次数已经确定的情况,还可以用于循环
。完全可以代替while语句。
执行过程:(1)当switch后面“表达式”的值,与某个case后面的“
表达式”的值相同时,就执行该case后面的语句(组);当执行到breakfor(表达式1;表达式2;表达式3)
语句时,跳出switch语句,转向执行switch语句的下一条。(2)如果{循环体语句组;}
没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,for(i=1;i<=100;i++)sum=sum+i;
则执行default后面的语句(组)。然后,:(1)求解“变量赋初值”表达式。(2)求解
条。“循环继续条件”表达式。如果其值非0,执行(3);否则,转至(4)。
注意:(1)switch后面的“表达式”,可以是int、char和枚举型中的(3)执行循环体语句组,并求解“循环变量增值”表达式,然后转向
一种。(2)每个case后面“常量表达式”的值,必须各不相同,否则(2)。(4)执行for语句的下一条语句。
会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的说明:(1)“变量赋初值”、“循环继续条件”和“循环变量增值”部分均可
执行方案)。(3)case后面的常量表达式仅起语句标号作用,并不进缺省,甚至全部缺省,但其间的分号不能省略。For(;i<=100;i++)
行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进sum=sum+i;(2)如果表达式2省略,即不判断循环条件,循环无终止
行标号判断,所以必须加上break语句,以便结束switch语句。进行下去。(3)表达式3也可以省略,但此时程序设计者应另外设法
14、语句标号和goto语句保证循环正常结束。(4)可以省略表达式和表达式,只有表达式2,只
语句标号形式给循环条件。(5)3个表达式都可省略(6)表达式1可以是设置循环变量
语句标号:语句;初值的赋值表达式,也可以是与循环变量无关的其他表达式。
goto语句标号;18、循环语句的嵌套0709X24
注意:语句标号必须符合命名规则.(1)循环语句的循环体内,又包含另一个完整的循环结构,称为循
Goto为无条件转向语句环的嵌套。循环嵌套的概念,对所有高级语言都是一样的。(2)for
Goto语句标号;语句和while语句允许嵌套,do-while语句也不例外。三种循环可以
作用:把程序的执行转向语句标号的位置,这个语句必须与goto语互相嵌套。外层循环转一圈,内层循环转多圈。循环的嵌套可以多层,
。
4
19、break语句与continue语句0704X22\n回车换行
break语句\t横向跳若干格
break语句可以用来从循环体内跳出循环体,即提前结束循环,接着\v竖向跳格
执行循环体下面的语句。\r回车符
break语句的一般形式:break;\f换页符
注意:break语句不能用于循环语句和switch语句之外的任何其他语\b退格符
句中。\\反斜杠字符“\“
语句
continue\‟单引号“‘“
一般形式为:continue;
\”双“”“
其作用为结束本次循环,跳出循环体中下面未执行的语句,接着进行
\ddd三位八进制代表一个ASCII字符
下一次是否执行循环的语句。
\xhh二位十六进制代表一个ASCII字符
Continue语句和break语句的区别是:continue语句只结束本次循环,
\0空值
而不是终止整个循环的执行。而break语句则是结束整个循环过程,
注意:(1)转义字符常量只代表一个字符(2)„\‟后的八进制可以不用0
不再判断执行循环的条件是否成立。
.(3)„\xhh‟只由
while(表达式)
小写x开头,不允许用大写,也不允许用‟0x‟开头
{……if(表达式2)
字符串常量
break;
字符串常量是一对双括起来的字符序列。
……}
注意:(1)“a”与„a‟(2)不能把一个字符串赋给一个字符变量。
while(表达式)
字符常量间的运算:(1)字符常量之间可以相互加减,结果是一个整
{……
数(2)字符常量可以和整数加减,结果为一个字符常量(3)逻辑运算的
if(表达式2)
值均为非零.(4)字符常量的关系运算即为相应整数的关系运算.(5)
continue;
数字常量和数字的区别,„9‟和9.
……}
字符变量
功能(1)break:强行结束循环,转向执行循环语句的下一条语句。
字符型变量用来存放字符常量,只能放一个字符,不能在一个字符变
(2)continue:对于for循环,跳过循环体其余语句,转向循环变量
量中放一个字符串。
增量表达式的计算;对于while和do-while循环,跳过循环体其余语
字符变量的定义如下:
句,但转向循环继续条件的判定。
charc1,c2;
说明(1)break能用于循环语句和switch语句中,continue只能用于
c1=‟a‟;
循环语句中。(2)循环嵌套时,break和continue只影响包含它们的
c2=‟b‟;
最内层循环,与外层循环无关。
字符数据在内存中的存储形式及其使用方法
20、字符型常量与字符变量0704X250704X270704T10
字符数据在内存中以ASCII码存储,存储形式同整数的存储形式类
字符常量
似,这样使得字符型数据和整型数据之间可以通用。一个字符数据既
定义:C的字符常量是用单引号括起来的一个字符。
可以以字符形式输出,也可以以整数形式输出。
注意:(1)‟a‟和„A‟是不同的字符常量。(2)„‟也是字符常量,和‟‟不同.
21、字符的输入与输出0704T07
(3)字符常量只包含一个字符.(4)‟a‟与”a”不同,后者不是字符变量,是
调用printf和scanf函数
一个字符串.(5)字符常量在内存中占一个字节,
基本形式:charch1,ch2,ch3;
scanf(“%c,%c,%c”,&ch1,&ch2,&ch3);
ASCII表
printf(“%c,%c,%c”,ch1,ch2,ch3”);
需要记忆的ASCII值„A‟-65,‟a‟-97,‟Z‟-90,‟z‟-122,‟
注意:输入数据的时候不应该有空格,否则也当做一个字符而赋值到
„-32,‟0‟-48,‟9‟-57,‟‟-0
字符变量
需要注意:1)大写字母的ASCII值比小写字母要小,)字母
从键盘中输入数据的形式
的ASCII按照字母表的顺序逐个增加一,‟z‟,„a‟)数字字
(1)带有输入字符长度的必须严格按照长度的要求输入
符与字母一样,)字符变量也可以定义成整型,
scanf(“%4d%4d”,&ch1,&ch2);应该输入的形式为A[][][]B[][][]回车
字符变量也可以整型数据形式输出.
(2)字符和数据的混合输入
转义字符
调用putchar和getchar函数
定义:一种特殊形式的字符常量,是以反斜杠“\”开头的转义字符。
(1)调用这两个函数之前必须包含头文件
5
1给指针变量赋地址值(1)通过取址运算符(2)通过指针变量获得一维数组和指针
地址值一维数组的数组名可以认为是存放地址值的指针变量名,其中的地址
2给指针变量赋空值值是数组第一个元素的地址,即数组的起始地址。
p=NULL;p=„\0‟;表示该指针具有一个确定的值-空,一个空指针不能注意:(1)指针变量的地址值不可以改变,即不可给数组名以重新赋
访问一个确定的存储单元,否则出错值.(2)用一个数组名加整数的方法表示来表达各元素的地址.
30、函数之间的地址值的传递0704X28数组元素的引用
、若指针p指向数组a,虽然p+i与a+i、*(p+i)与
*(a+i)意义相同,但仍应注意p与a的区别(a代表数组的首地址,是
31、一维数组0704X310704X320704X36不变的;p是一个指针变量,可指以向数组中的任何元素),2、指针
定义变量可指以向数组中的任何元素,注意指针变量的当前值。3、使用
,也必须先定义、后使用。指针时,应特别注意避免指针访问越界。在上例中,第二次for循环,
一维数组是只有1个下标的数组,定义形式如下:p已经越过数组的范围,但编译器不能发现该问题。4、指针使用的
数据类型数组名[常量表达式];几个细节。
如:inta[10];设指针p指向数组a(p=a),则:①p++(或p+=1),p指向下一
它表示数组名为a,该数组有10个元素。个元素。②*p++,相当于*(p++)。因为,*和++同优先级,++是右
2说明:(1)“数据类型”是指数组元素的数据类型。(2)数组名,与结合运算符。③*(p++)与*(++p)的作用不同。*(p++):先取*p,
变量名一样,必须遵循标识符命名规则。(3)“常量表达式”必须用方再使p加1。*(++p):先使p加1,再取*p。④(*p)++表示,p指
括号括起来,指的是数组的元素个数(又称数组长度)。如:a[5]表示向的元素值加1。⑤如果p当前指向数组a的第