C语言总结.docx
- 文档编号:29034045
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:39
- 大小:65.77KB
C语言总结.docx
《C语言总结.docx》由会员分享,可在线阅读,更多相关《C语言总结.docx(39页珍藏版)》请在冰豆网上搜索。
C语言总结
第三章:
数据类型、运算符与表达式
3.1.C语言的数据类型
短整型(shortint)
整型基本整型(int)
长整型(longint)
字符型(char)
基本类型单精度型(float)
浮点型双精度型(double)
长双精度型(longdouble
枚举类型
数据类型数组类型
构造类型结构体类型(struct)
共用体类型(union)
指针类型(*)
空类型(void)
3.5、字符型数据
字符形式
含义
ASCⅡ代码
\n
换行,将当前位置移到下一行开头
10
\t
水平制表(跳到下一个Tab位置)
9
\b
退格,将当前位置移到前一列
8
\r
回车,将当前位置移到本行开头
13
\f
换页,将当前位置移到下页开头
12
\\
代表一个反斜杠字符
92
\’
代表一个单引号字符
39
\”
代表一个双引号字符
34
\ddd
1到3位八进制数所代表的字符
\xhh
1到2位十六进制数所代表的字符
3.7、各类数据类型之间的混合运算
1、
doublefloat
高
long
unsigned
低
intchar、short
2、强制类型转换
一般形式为:
(类型名)(表达式)
注:
1、表达式应该用括号括起来
2、在强制类型转换时,得到一个所需类型的中间数据,原来的变量类型未发生变化。
3、自增、自减运算符
作用是使变量的值增1或减1;
++i、--i(在使用i之前,先使i的值增1或减1)先增减、后使用
i++、i--(在使用i之后,使i的值增1或减1)先增减、后使用
3.10、逗号运算符和逗号表达式
逗号表达式的一般扩展为:
表达式1,表达式2,表达式3,…….,表达式n
它的值为表达式n的值;
逗号运算符是所有运算符中级别最低的。
第四章:
最简单的C程序设计——顺序程序设计
4.1、C语句概述
C语句分为以下五类:
(1)、控制语句。
控制语句用于完成一定的控制功能。
C只有九种控制语句。
if()…..else…..(条件语句)
for()…(循环语句)
while….(循环语句)
do…while()(循环语句)
continue(结束本次循环语句)
break(中止执行switch或循环语句)
switch(多分枝选择语句)
goto(转向语句)
return(从函数返回语句)
(2)、函数调用语句。
(3)、表达式语句。
(4)空语句。
(5)复合语句。
4.4、字符数据的输入输出
1、putchar(c)
输出一个字符,c可以是字符型变量或整型变量。
2、getchar(c)
输入一个字符;
4.5、格式输入与输出
一、printf函数
一般格式为:
Printf(格式控制,输出表列)
括号内包括两部分:
(1)、“格式控制”是用双撇号括起来的字符串,也称“转换控制字符串”,他包括两种信息:
格式说明。
格式说明由%和格式字符组成,如:
%d;格式字符总是由%开始,他的作用是将输出的数据转化为指定的格式输出。
普通字符。
普通字符即需要原样输出的字符。
(2)、“输出表列”是需要输出的一些数据,可以是表达式。
1、格式字符
在输出时,对不同类型的数据要使用不同的格式字符。
通常有以下几种格式字符。
(1)、d格式符,用来输出十进制数。
%d。
按十进制整数数据的实际长度输出。
%md。
m为指定的输出字段的宽度,如果数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。
%ld。
输出长整型数据。
(2)、o格式符。
以八进制整型形式输出,不会出现负数。
(3)、x格式符。
以十六进制数的形式输出,同样没有负数。
(4)、u格式符。
用来输出十进制无符号数。
(5)、c格式符。
用来输出一个字符。
(6)、s格式符。
用来输出一个字符串。
%s。
输出字符串。
%ms。
输出的字符串占m列,如果字符串本身长度大于m,则突破m的限制,将字符串全部输出。
若长度小于m,则左补空格。
%—ms。
如果串长小于m,右补空格。
%m.ns。
输出占m列,但只取字符串中左端n个字符。
这n个字符输出在m列的右侧,左补空格。
%—m.ns。
其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。
如果n>m,则m自动取n值,即保证n个字符正常输出。
(7)、f格式符。
用来输出实数,以小数形式输出,
%f。
不指定字符段宽度,由系统自动指定,使整数部分全部输出,并输出6位小数。
%m.nf。
指定输出的数据共占m列,其中有n位小数。
如果长度小于m,则左端补空格。
%—m.nf。
与上基本相同,只是输出的数据向左端靠,右补空格。
(8)、e格式符。
以指定数形式输出。
%e。
不指定输出数据所占的宽度和数字部分的小数位数。
%m.ne和%—m.ne。
m、n和“—”的含义和前面相同。
此处n指输出的数据的小数部分的小数位数。
(9)、g格式符,用来输出实数,它根据数值的大小,自动选f格式或e格式,且不输出无意义的零。
Printf格式字符
格式字符
说明
d,i
以带符号的十进制输出整数(正数不输出符号)
o
以八进制无符号形式输出整数(不输出前导符o)
X,X
以十六进制无符号形式输出整数(不输出前导符ox),用x则输出十六进制数的a~f以小写形式输出。
用X则以大写形式输出。
u
以无符号十进制形式输出
c
以字符形式输出,只输出一个字符
S
输出字符串
f
以小数形式输出单、双精度数,隐含输出六位小数
E,E
以指定形式输出实数,用e时指定数以e表示,用E时指定以E表示
g,G
选%f或选%e格式中输出宽度较短的一种格式,不输出无意义的o。
用G时,若以指数形式输出,则指数以大写表示
Printf的附加格式说明字符
字符
说明
l、L
用于长整型整数,可加在格式符d、o、x、u前面
m(代表一个正整数)
数据最小宽度
n(代表一个正整数)
对实数,表示输出n位小数;对字符串,表示截取的字符个数
—
输出的字符或字符在域内向左靠
注:
(1)、除了X、E、G外,其他格式字符必须用小写字母。
(2)、可以在printf函数中的“格式控制”内包含3.5.1中的“转义字符”,如“\n”等。
(3)、上面介绍的d、o、x、u、c、s、f、e、g等字符,如用在“%”后面就作为格式字符。
一个格式说明一“%”开头,以上述9个格式字符之一为结束,中间可以插入附加格式字符(也称修饰符)。
(4)、如果相输出字符“%”,则应该在“格式控制”字符串中用连续两个%表示。
二、scanf函数
一般形式:
Scanf(格式控制,地址表列)
“格式控制”的含义同printf函数;”地址表列“是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。
1、格式说明
、对unsigned型变量所需的数据,可以用%u,%d、%o或%x格式输入。
、可以指定输入数据所占的列表,系统自动按它截取所需数据。
、如果在%后有一个*附加说明符,表示跳过它指定的列数。
、输入数据时不能规定精度。
2、使用scanf函数时应注意的问题
、scanf函数中的“格式控制”后面应当是变量地址,而不是变量名。
、如果在“格式控制”字符串中除了格式说明还有其他字符,则在输入数据时在对应的位置应输入与这些字符相同的字符。
、在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入。
、在输入数据时,遇到以下情况时认为该数据结束。
、遇空格,或“回车”或“跳格”(Tab)键。
、指定的宽度结束,如“%3d”只取3列。
、遇非法输入。
第五章:
选择结构程序设计
1、关系运算符及其优先顺序
算数运算符(高)
关系运算符
赋值运算符(低)
2、逻辑运算符及其优先顺序
C语言中的三种逻辑运算符
(1)、&&逻辑与(相当于其他语言中的AND)
(2)、||逻辑或(相当于其他语言中的OR)
(3)、!
逻辑非(相当于其他语言中的NOT)
优先顺序
!
(非)(高)
算术运算符
关系运算符
&&和||
赋值运算符(低)
3、逻辑表达式
(1)、a&&b&&c只有a为真时才需要判断b的值,只有a和b都为真时才需要判断c的值,只要a为假,就不判断b和c了,如果a为真,b为假,不判断c。
(2)、a||b||c只要a为真,就不必判断b和c。
只有a为假,才判断b,a、b都为假才判断c。
5.3、if语句
1、if语句的三种形式:
(1)
If(表达式)语句;
例如:
If(a>b)printf(“%d”,x);
(2)
If(表达式)语句1else语句2;
例如:
If(x>y)
Printf(“%d”,x);
else
printf(“%d),y);
(3)、if(表达式1)语句1;
elseif(表达式2)语句2;
elseif(表达式3)语句3;
.
.
.
elseif(表达式m)语句m;
else语句n;
2、条件运算符
一般形式:
表达式1?
表达式2:
表达式3
例如:
max=(a>b)?
a:
b;
相当于:
if(a>b)
max=a’
else
max=b;
说明:
(1)、条件运算符的执行顺序:
先求解表达式1,若为非0则求解表达式2,此时表达式2的值就作为整个条件表达式的值;若表达式1的值为0,则求解表达式3,表达式3的值就是整个条件表达式的值。
(2)、条件运算符优先于赋值运算符,因此上面赋值表达式的求解过程是先求解条件表达式,再将它的值赋给max。
(3)、条件运算符的结合方向为“自右至左”。
若果有一下条件表达式:
a>b?
a:
c>d?
c:
d
相当于:
a>b?
a(c>d?
c:
d)
(4)、条件表达式中“表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式
(5)、条件表达式中,表达式1的类型可以与表达式2和表达式3的类型不同。
5.4、switch语句
一般形式为:
Switch(表达式)
{
case常量表达式1:
语句1;
case常量表达式2:
语句2;
.
.
.
Case常量表达式n:
语句n;
Default:
语句n+1;
}
说明:
(1)、switch后面括号内的“表达式”,其值可以是整型、字符型、枚举型数据。
(2)、当表达式的值与某一个case后面的常量表达式的值相等时,就执行此case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值匹配时,就执行default后面的语句。
(3)、每一个case的常量表达式的值必须互不相同,否则就会出现互相矛盾的对象。
(4)、执行完一个case后面的语句后,流程控制转移到下一个case继续执行。
“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。
在执行case语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。
因此,应该在执行一个case分支后,使流程跳出switch结构,即终止switch语句的执行,可以用break语句来达到此目的。
最后default语句可以不加break语句。
(5)、上面的switch结构中,各个case的出现次序不影响执行结果。
(6)、多个case分支可以共用一组执行语句。
第六章:
循环语句
6.2、goto语句以及用goto语句构成循环
一般形式:
goto语句标号;
说明:
1、语句标号用标识符表示,它的命名规则与变量名相同,即由字母、数字、和下划线组成,其第一个字符必须为字母或下划线。
不能用整数来做标号。
2、结构化程序设计方法主张限制使用goto语句,因为滥用goto语句将使程序流程无规律、可读性差一般有两种用途:
(1)、与if语句一起构成循环语句。
(2)、从循环体中跳到循环体外。
可用于从多重循环体中的内层循环跳到外层循环。
6.3、while语句实现循环
一般形式:
While(表达式)语句;
先判断表达式,后执行语句。
注意:
(1)、循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句形式出现。
如果不用花括号,则while语句的范围只到while后面第一个分号处。
(2)、在循环体中应有使循环趋于结束的语句。
6.4、用do…..语句实现循环
一般形式为:
do
循环体语句
While(表达式);
它的执行顺序是:
先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零时,返回重新执行循环体语句,如此反复,直到表达式的值等于零为止,此时循环结束。
6.5、用for语句实现循环
1、一般形式为:
for(表达式1;表达式2;表达式3)语句;
它的执行过程如下:
(1)先求解表达式1.
(2)求解表达式2,若其值为真,则执行for循环指定的内嵌语句,然后执行下面第(3)步。
若为假,则结束循环,转到第(5)步。
(3)求解表达式3.
(4)转回上面第二步继续执行。
(5)循环结束,执行for语句下面的一个语句。
其简易形式可以写成:
for(循环变量赋初值;循环条件;循环变量增值)语句;
2说明:
(1)for循环的一般形式中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。
注意,省略表达式1时,其后的分号不能省略。
(2)如果表达式2省略,即不判断循环条件,循环无终止的进行下去,也就是认为表达式2始终为真。
(3)表达式3也可以省略,此时程序设计者应另外设法保证循环能正常结束。
(4)可以省略表达式1和表达式3,只有表达式2,即只给循环条件。
在这种情况下,完全等同于while语句。
(5)3各变量都可省略,即不设初值,不判断条件,循环变量不增值。
无终止的执行循环体。
(6)表达式1可以是设置循环变量初值的赋值表达式,也可以是循环变量无关的其他表达式。
表达式3也可以是与循环控制无关的任意表达式。
表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式。
(7)表达式一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。
6.8、break语句和continue语句
1、break语句
一般形式为:
break;
break语句不能用于循环语句和switch语句之外的任何其他语句中。
2、continue语句
一般形式为:
Continue;
其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。
continue语句和break语句的区别是:
continue语句只结束本次循环,而不是终止整个循环的执行。
而break语句则是结束整个循环过程,不在判断执行循环的条件是否成立。
第七章:
数组
7.1、一维数组的定义和引用
1、一维数组的定义
一维数组的定义方式为:
类型说明符数组名[常量表达式];
说明:
(1)数组名的命名规则和变量名相同,遵循标识符命名规则。
(2)在定义数组时,需要指定数组中元素的个数,方括号内的常量表达式用来表示元素的个数,即数组长度。
(3)常量表达式中可以包括常量和符号常量,不能包含变量,也就是说,C语言不容许对数组的大小做动态定义,即数组的大小不依赖于程序运行过程中变量的值。
2、一维数组的引用
数组名[下标]
注意:
下标是从0开始的!
3、一维数组的初始化
对数组的初始化可以用以下方法实现:
(1)在定义数组时对数组元素赋初值:
将数组元素的初值依次放在一对花括号内,中间用逗号隔开。
(2)可以只给一部分元素赋值,其余元素为0.
(3)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。
7.2二维数组的定义和引用
1、二维数组的定义
二维数组定义的一般形式为:
类型说明符数组名[常量表达式][常量表达式]
C语言中,二维数组中元素排列的顺序是按行存放的,即在内存中先顺序存放第一行的元素,再存放第二行的元素。
2、二维数组的引用
数组名[下标][下标]
3、二维数组的初始化:
可以用下面的方法对二维数组初始化:
(1)分行给二维数组赋值。
把第一个花括号内的数据给第一行,第二个花括号内的数据给第二行,即按行赋值。
(2)可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。
(3)可以对部分元素赋初值。
(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省略。
7.3、字符数组
1、字符数组的定义与一维数组相同。
2、字符数组的初始化与前面数组的初始化相似。
3、字符串常量来使字符数组初始化:
用一个字符串(字符串的两端是用双撇号)作为初值。
4、字符串结束标志:
C语言规定了一个“字符串结束标志”,以一个“\0”作为标志。
系统对字符串常量也自动加一个“\0”作为结束标志。
5、字符数组的输入输出:
(1)逐个字段输入输出:
用格式符“%c”输入或输出一个字符。
(2)将整个字符串一次输入或输出。
用“%s”格式符。
注意:
输出字符不包括格式符“\0”。
用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素。
如果数组长度大于字符串的实际长度,也只输出到遇“\0”结束。
如果字符数组中包含一个以上“\0”,则遇到第一个时输出就结束。
scanf函数中的输入项如果是字符数组名,不能再加地址符&,因为在C语言数组名代表该数组的起始地址。
6、字符串处理的函数。
(1)puts函数:
一般形式为:
puts(字符数组);
其作用是:
将一个字符串输出到终端。
(2)gets函数:
一般形式为:
gets(字符数组);
其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。
该函数值是字符数组的起始地址。
注:
用以上两种函数只能输出或输入一个字符串。
(3)strcat函数:
一般形式为:
strcat(字符数组1,字符数组2);
其作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符串1中,函数调用后得到一个函数值——字符数组1的地址。
说明:
字符数组1必须足够大,一边容纳连接后的新字符串。
连接前两个字符串后面都有“\0”,连接时将字符串1的去掉,只在新的字符串后面保留。
(4)strcpy和strncpy函数:
一般形式为:
Strcpy(字符数组1,字符串2);
Strcpy是字符串复制函数,作用是将字符串2复制到字符数组1中去。
说明:
字符数组1必须定义的足够大,以便容纳被复制的字符串。
“字符数组1”必须写成数组名形式,“字符串2”可以是字符数组名,也可以是一个字符串常量。
如果在复制前未对数组1赋值,则数组1各字节中的内容是无法预知的,复制时将数组2中的字符串和其后的“\0”一起复制到字符数组1中,取代字符数组1中的前面字符,最后几个字符并不一定是“\0”,而是数组1中原有的最后几个字节的内容。
不能用赋值语句将一个字符串赋值到另一个字符数组中去。
用赋值语句只能一个字符赋值给一个字符型变量或字符数组元素。
可以用strncpy函数将字符串2中的n个字符复制到字符数组1中去(不包括“\0”)。
Strncpy(字符数组1,字符串2,n);
(5)strcmp函数:
一般形式为:
strcmp(字符串1,字符串2);
作用是比较字符串1和字符串2.
比较结果由函数值带回:
如果字符串1=字符串2,则函数值为0。
如果字符串1>字符串2,则函数值为一个正整数。
如果字符串1<字符串2,则函数值为一个负整数。
(6)strlen函数:
一般形式为:
Strlen(字符数组);
测试字符串长度的函数(不包括“\0”)。
(7)strlwr函数:
一般形式为:
strlwr(字符串);
作用是将字符串中大写字母换成小写字母。
(8)strupr函数:
一般形式为:
Strupr(字符串);
作用是将字符串中的小写字母换成大写字母。
第八章:
函数
8.2函数定义的一般形式:
1、无参函数定义的一般形式:
类型标识符函数名()
{
声明部分
语句部分
}
2、有参函数定义的一般形式:
类型标识符函数名(形式参数表列)
{
声明部分
语句部分
}
3、空函数
类型标识符函数名()
{
}
8.3函数参数和函数的值
1、形式参数和实际参数
(1)在定义函数中指定的形参,在未出现函数调用时,它们并不占内存中的存储单元。
只在发生函数调用时,函数中的形参才被分配内存单元。
在调用结束后,形参所占的内存单元才被释放。
(2)实参可以是常量、变量或表达式。
(3)在被定义的函数中,必须指定形参的类型。
(4)实参与形参的类型应该相同或赋值兼容。
(5)实参向形参的数值传递是“值传递”,单向传递,只由实参传给形参,而不能由形参传回给实参。
在内存中,实参单元与形参单元是不同的单元。
2、函数的返回值
(1)函数的返回值是通过函数中的return语句获得的。
如return语句将被调用函数中的一个确定值带回主调函数中去。
一个函数可以有一个以上的return语句,执行到哪一个,哪一个就起作用。
return语句后面的括号也可以不要。
Return后面的值可以是一个表达式。
(2)函数值的类型。
既然函数有返回值,这个应当属于某一确定的类型,在定义函数时应当指定函数值的类型。
(3)在定义函数时指定的类型一般应该和return语句中表达式的类型一致。
如果函数值的类型和return语句中表达式的值不一致,则以函数类型为准。
对数值型数据,可以自动进行类型转换。
即函数类型决定返回值的类型。
(4)对不带回值的函数,应该用“void”定义函数为空类型。
此时在函数中不得出现return语句。
8.4、函数的调用
1、函数调用的方式
(1)函数语句:
函数名(实参表列)
(2)函数表达式:
函数出现在一个表达式中,这种表达式称为函数表达式,这时要求函数带回一个确定值以参加表达式的运算。
(3)函数参数:
函数调用作为一个函数的实参。
函数调用作为函数的参数,实际上也是函数表达式形式调用的一种,因为函数的参数本来就要求是表达是形式。
2、被调用函数的声明和函数原型
在一个函数中调用另一个函数需要具备的条件如下:
(1)首先被调用的函数必须是已经存在的函数。
(2)如果使用函数库中的函数,还应该在本文件开头#include命令将调用有关库函数时所需要用到的信息包含到本文件中来。
(3)如果使用用户自己定义的函数,而该函数的位置在调用它的函数后面,应该在主调函数中对被调函数进行声明。
如果被调用的函数定义出现在主调函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 总结