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