C语言的总结
(一) 软件开发概述
(一) 1.软件:软件是为完成某些特定功能而编制的一到多个程序文件的集合。
(一) 程序语言:程序语言是软件工程师用来编写程序。制作软件的工具,是规则与符号的集合,是与计算机交流的语言。
(一) 2.程序语言的发展
(一) 计算机语言:从第一代计算机到现代的计算机,虽然其制造工艺有了巨大的变化,但是它始终是采用电子元件制造出来的。
(一) 汇编语言:机器语言和汇编语言都是围绕特定的计算机或计算机族而设计的,是面向计算机的语言。
(一) 高级语言:高级语言总是尽量接近“高级动物”的自然语言和思维方式。
(一) 3.软件开发的基本方法与步骤
(一) 1.分析问题 ,确立数据模型2.确定数据结构和算法 3. 编制程序 4.调试程序
(一)4.任何解决问题的过程都是由一定的步骤组成的,解决问题确定的方法和有限的步骤称作算法。
(一)5.算法具有以下基本特征:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。
(一)6.所谓流程图,就是对给定算法的一种图形解法。流程图又称为框图,它规定的一系列图形。流程图及文字说明来表示算法中的基本操作和控制流程。
(一)7.程序中最易出现的几种不同类型错误是语法错误、逻辑错误和运行错误。
(一)8.学习C语言我们要学会去理解其中的道理,还要理清思路,不然很容易使自己的头脑混乱。
(二) 编程语言概述(在C语言中有:基本字符集、标识符、关键字、语句和标准库函数等。)
(二)
(二)字符集:
(二) 数字符:0, 1, 2, 3, 4, 5, 6, 7, 8, 9。
(二) 拉丁字母:A, B, C,......,a, b, c,.......。(注意:字母的大小写是必须区分的。)
(二)
(二)运算符:“+”、“-”、“*”、“/”、“%”、“=”、“<”、“>”、“<=”、“>=”、“!=”、“==”、
(二)“&&”、“^”...................。
(二)特殊符号和不可显示字符:_(连字符或下划线)、空格、换行、制表符。
(二)标识符:变量名,常数名,数组名,函数名,文件名,类型名。
(二)
(二)C语言规定,标识符由C语言字符集中的字母、数字或下划线(_)
(二)组成,它的第一个字符必须是字母或下划线。
(二)
(二)语句:
(二) 选择语句:if、switch
(二) 流程控制语句及循环语句:for、while、do_while
(二) 转移语句:break、continue、return、goto
(二) 表达式语句
(二) 复合语句
(二) 空语句
(二)
(二)C程序的上机执行过程一般要经过四个步骤,即编辑,编译,
(二)链接和运行。
(三) 数据的存储与输入输出:
整数的表示方法:一个字节中只能存储0和1,按照二进制的十进制的转换规则,一个字节只能存储0到128之间的正整数。用字节位中的最高位来表示正号、负号(称为符号位,如
果符号位为0,则代表正数;如果符号位为1,则代表负数)用其余的字节位表示数值
实数的表示方法:实数是以浮点数形式存储的。浮点数在计算机中是按指数形式存储的,
即把一个实行数据分成小数和指数两部分。即:小数点放在第一个有效数字前面,使小数部分存放于小于1的纯小数
字符的表示方法:计算机只能存储0和1。计算机系统中保留一个字节的长度来表示常用的128个英文字符。美国国家标准协会(ANSL,一个标准化组织)定义一个ANSL9(美国信息交换标准码)码表。
注意:一个字符串在内存中就是按照逐个字符的ASCII码连续存放的。
在编程语言中对数据分类:
数值可以分两大类:
整型:存储没有小数的数值(即整数),分两类:有符号整型变量和无符号变量,前者可以存储正值和负值,后者只能存储正值和0
浮点型:存储带小数的值(即实数)
char的大小为一个字节
short的长度不会超过long
int的长度不会超过long
unsigned的长度等于int
float的长度不会超过double数据在编程语言中的形式:
c语言中,表达常量的方式有两种,分别是字面量和符号常量
字面量:字面量是在源代码中直接输入的值。分为整型常量、实型常量、字符常量和字符串常量。
1)整型常量:表示现实中没有小数点的数字。在c语言中,整型常量可
以用十进制、八进制和十六进制三种形式
2)实型常量:称为实型数或浮点数,表示现实世界中带有小数点的数字。
在c语言中有小数形式和指数形式。
3)字符型常量:编程语言中用字符常量来表示
4)字符串常量:在c语言中是用一对双引号括起来的字符序列
5)符号常量:c语言中即用指定的标识符来表示某个常量,在程序中需要使用该常量时就可以直接引用标识符
(四)运算符、表达式、语句
表达式:
1.简单表达式:只包含单独的一个操作数,如:一个简单变量、字面常量或符号常量。
2.复杂表达式:有多个简单表达式组成,个体的简单表达式称为子表达式。
运算符:
1.算术运算符:
① 加法运算符:+
② 减法运算符:—
③ 乘法运算符:*
④ 除法运算符:/
⑤ 取模运算符:%
2.赋值运算符:使用 = 来给变量赋值。
3.增量和减量运算符:
① 前缀形式:++变量、——变量:表示在变量使用前加1或减1。
② 后缀形式:变量++、变量——:表示在变量使用后加1或减1。4.关系运算符:
① 相等运算符:==
② 不相等运算符:!=
③ 大于运算符:>
④ 大于等于运算符:>=
⑤ 小于运算符:<
⑥ 小于等于运算符:<=
5.逻辑运算符:
① 逻辑与:”&&”指连接两个关系表达式的值同时为1,则逻辑表达式也为1否则为0
② 逻辑或:”||”表达式中一个关系式为1则为1,否则为0
③ 逻辑非:”!”逻辑表达式中关系式为0则表达式为1,否则为0
6.条件运算符:也称三目运算符。
7.数据类型强制转换运算符:
① 自动类型转换:
② 强制转换:
8.特殊运算符:
① 长度运算符:sizeof
② 取址运算符:&
语句:
1.流程控制语句:
① 选择语句:if、switch
② 循环语句:for、while、do...while
③ 转移语句:break、continue、return、goto
2.表达式语句:
3.复合语句:用一对大括号括一条或多条语句。
4.空语句:以分号作为一个语句
(五)选择结构的程序设计:
C语言中if语句有两种形式:简单的if和if-else语句。
switch语句
1.switch后面括号中可以是任何表达式,取其整数部分与各常量表达式进行比较。
2.常量表达式中不能出现变量,且类型必须是整型、字符型或枚举型,各常量表达式各不相同。
3.default语句一般出现在所有case语句之后,也可以出现在case语句之前或两个case语句之间。
default语句可以缺省。
4.break的功能:
终止它所在是switch语句或循环语句的执行。
5.嵌套switch语句
在switch语句中,每个case后面可以出现任意合法C语句,因此,也可以出现另一个switch语句,
从而形成嵌套switch语句。
6.无条件转向语句
C语言中的goto语句可以转向同一函数内任意指定位置执行,称为无条件转向语句。
使用goto语句,可以将程序执行流程无条件转移。
(六)循坏结构的程序设计:
1.循坏控制语句是指:控制一个代码多次执行,直到某个条件被满足。
2.循坏结构是指满足循坏条件时,重复执行某程序段,直到循坏条件不满足为止。重复执行的程序段被称为循坏体。
3.循坏结构有两种:直到型和当型。
4.直到型循坏的特点是:先判断表达式的真假,若为“真”则反复执行表示循坏体,若为假就结束循坏。“真”用Y,“假”用N表示。
5.用while语句设计当型循坏结构程序,其语法形式为:
while(表达式){
循坏体
}
6.用while语句设计当型循坏结构程序,其功能有:首先计算表达式的值,若为“真”,则执行循坏体语句,执行完毕后,再计算表达式的值,若仍为“真”,则重复执行循环体语句。直到表达式为“假”,结束while语句的执行,继续执行while语句后面的语句。
7.用while语句设计当型循坏结构程序,说明:表达式是控制循环的条件,表达式可以是任何类型的语句,循环体内若有多条语句,必须用花括号括起来,若while语句一开始就为“假”,那么循环一次也不用执行。
8.用do_while语句可以设计直到型循环结构程序,其语法形式为:
do{
循环体语
}while(表达式);
9.用do_while语句可以设计直到型循环结构程序,其功能有:首先执行循环体语句,然后检测循环控制条件表达式的值,若为“真”则重复执行循环体语句,否则退出循环。
10.用do_while语句可以设计直到型循环结构程序,说明:do_while语句的表达式是任意表达式,是控制循环的条件。
11.用do_while语句的特点是先执行后判断,因此,循环体至少执行一次。
12.用do_while语句实现的循环与while语句不同,do_while重复执行循环体,直到表达式为“假”才退出循环。
13.用for语句设计循环结构程序,其基本的语法形式为:
for(表达式1;表达式2;表达式3){
循环体语句;
}
14. 用for语句设计循环结构程序的说明:表达式1通常为循环变量赋初始值;表达式2是控制循环的表达式;表达式3通常是改变循环变量值的表达式。
15.break与continue语句:
break语句的语法形式:
break;
break语句的功能:终止它所在的switch语句或循环语句的执行。
continue语句的语法形式:
continue;
continue语句的功能:结束本次循环(而不是终止整个循环),即跳过循环体continue语句后面的语句,开始下一次循环。
continue语句说明:
² continue语句只能出现在循环语句的循环体中。
² 若执行while或do_while语句中continue语句,则跳过循环体中continue语句后面的语句,直接转去判别下次循环控制条件,若continue语句出现for语句中,则执行continue语句就是跳过循环体中continue语句后面的语句,转而执行for语句的表达式3.
16.几种循环的比较:
² for语句和while语句先判断循环控制条件,后执行循环体;do_while先执行循环体后判断循环条件;
² for语句和while语句为当型循环,do_while语句是直到型循环,do_while语句至少循环一次。
² do_while语句和while语句多用于循环次数不定的情况下。
² do_while语句更适合用于第一次肯定执行的场合。
17.编写循环体应注意几点:
² 确定循环体内包含一个语句是循环体最终结束。
² 确定循环体正确的循环次数。
² 如果想执行n次,那么就让初始化计数器counter为0,使用测试条件counter<0;或者让初始化计数器counter为1,使用测试条件counter<=n。
(七)数组和字符串
1.数组的基本概念:就是按照一定顺序排列,具有某种相同性质的同类型变量的集合。
2.下标变量:具有相同的名字和数据类型,在内存中按顺序排列,并通过下标相互区分。(下标必须从零开始)
3.数组定义形式:
数据类型 数组名[整型常量表达式]
说明:
Ø 数据类型是数组中全体数组元素的数据类型。
Ø 数组名用标识符表示,整形常量表达式代表数组具有数组元素的个数。
Ø 数组元素必须从0开始。
Ø 编译程序为数组开辟连续的存储单元,用来顺序存放数组的各组元素。用数组名表示该数组存储区的首要地址。
4.一维数组:
引用形式:
数组名[下标表达式]
初始化形式:
数据类型 数组名[整形常量表达式]={初始值1,初始值2,等等}
因为初始值按顺序赋值,所以初始值小于数组元素,那么其余的用0代替。
5.二维数组:
定义形式:
数据类型 数组名[整形常量表达式1] [整形常量表达式2]
比如:int[2][3] 就表示2行3列,共有2*3=6个元素。
初始化形式:
数据类型 数组名[整形常量表达式1] [整形常量表达式2]={初始化数据}
注意:可以省略第一维的定义,但不能省略第二维的定义,省略省略第一维的定义时,第一维的大小按如下规则确定:初值个数能被第二维整除,所得商就是第一维的大小,如果不能整除,则第一维的大小为商在家1.
6.c语言使用字符数组来存放字符串,该字符串中包含一个\0字符,代表字符串的结束,并且也要加上\0的字节数。
(八)复杂数据类型:
1.C语言的数据类型包括:基本类型(整型,浮点型,字符型),指针类型,构造类型(数组,结构型,联合型,枚举型),空类型。
2.结构类型的声明格式:
struct 结构名{
数据类型1 成员名1;
数据类型2 成员名2;
数据类型3 成员名3;
}结构变量(zhangsan);
3.访问结构体变量的成员的格式:
结构变量名 .成员名(.表示成员选择符)
4.结构体变量的存储结构:一个结构变量所占内存空间大小,大于等于结构变量中所有成员变量空间之和。
5.共用体类型:
概念:让几个不同类型的成员变量共享同一个存储区。
声明格式:
union 共用体名{
数据类型 成员名;
数据类型 成员名;
数据类型 成员名;
7855555722412 0024 }共用体变量名;
6.共用体类存结构:共用体变量所占的内存长度等与最长成员的长度。
715.使用共用体类型数据时应注意:
1) 同意内存段可以存放不同类型的成员,但是某一刻只能存放其中一种,也就是说在某一瞬间只有一个成员起作用。
2) 共用体变量中起作用的是最后一个存放的成员,在存放一个新成员后,原有的成员就失去了作用。
3) 共用体变量的地址和其他成员都是同一地址。
4) 不同对共用体变量赋值,也不能在定义共用体变量是对其初始化。
8.枚举类型:
语法形式:
enum 枚举名{
777777777777788 标识符[整型常量],
标识符[整型常量],
};
注:
l 当遇到枚举元素列表时,编译器,就把其中第一个元素赋值为0,第二赋值为1,第三个赋值为2,因此,当枚举值赋值给枚举变量,该变量实际得到一个整数值。
l 枚举中的每个成员(标识符)的结束符是”,”,不是”;”,最后一个成员可省略。
l 初始化可以赋负数,以后枚举元素仍一次加1。
l 枚举变量只能取枚举说明结构中的某个元素。
9.指针类型:
u 指针类型的变量专门用来存储某个变量的内存地址,这样,我们就可以从指针取得运行时确切的内存地址。
u 指针变量:其内容存储了另一个变量的地址。
u 声明指针类型的变量
指向的变量的类型名 * 指针类型名;
u 指针的使用:我们可以使用间接运算符,来访问被一个指针指向的变量的值。
56525555555555555552254545545456563663636411341413611111133333355555555554555555555512544141411116666666666666666666666666666666666666666666666666614444444444444444444444444444444444444444444444444444444444444633333333333333333333333333333333333311111111136666666666612666666666666666666666666666666666666666666666125555555555555555555555555555555555582
4
(九)模块化程序设计方法与函数:
1.函数的分类:标准库函数与用户自己定义的函数
2.函数的定义就是写出函数的全部内容来,即完成函数功能的程序块,他的一般格式:
函数类型 函数名称(形式参数){
说明语句序列
可执行语句序列
}
ü 函数名是唯一标识一个函数的名字,它的命名规则同变量完全一样。在一个程序中,不同的函数其名字也不能相同,为了增加函数的可读性,一般采取有助于记忆的名字来作函数的名字。
ü 函数类型,从语法规则来讲,函数的类型可以是除函数和数组以外的任意类型,可以是int型也可以是char型。但对于一个具体的函数而言,它的类型是唯一的,并且通常与函数的返回值类型一致,如果缺少类型说明,那么编译程序将认为该函数的类型是int型。
ü 形式参数是用于调用函数和被调用函数之间的数据传递,因此,它也需要进行类型说明,这是由参数说明部分完成的,形参可以是空的,也可以是由多个形参组成,当形参列表中有多个形参时,每个形参之间用逗号隔开,不管形参中是否有参数,都要用左、右圆括号括起来。
ü 函数体是由一对花括号{}括起来的,其中可以包括说明语句和执行语句,函数功能是由函数体内部的各个语句来实现的。
3.函数可以分为:
n 无参函数:在调用无参函数时,主调函数不将数据传递被调用函数,无参函数带不带返回值都无所谓。
n 有参函数:在调用函数时,在主调函数和被调函数之间邮局的传输。
n 当被调用函数是有参函数时,主调函数和被调函数之间有数据关系,应注意:
l 定义函数时的参数称为有参函数,简称形参。形参在函数未被调用时没有确定值,只是形式上的参数,调用函数时的参数称为实参,实参可以是变量、常量或者表达式,有确定值,是实实在在的参数,函数定义时的形参不占内存,只有发生调用时,参数才被分配内存单元,接受实参传来的值。
l 定义函数时必须定义形参的类型,函数的形参和实参的个数要求相等,对应类型一致。并且顺序相同。形参和实参可以同名,形参是局部该函数的变量,即使形参和实参同名,也是两个不同的变量,占用不同的内存单元。
l 形式参数用于调用函数和被调用函数之间的数据传递,在函数体内对其操作,因此,它也需要进行类型说明,这由形式参数说明部分完成。
4.函数的返回值:
² 无返回值的函数:即void函数,无函数值的函数,一般用来执行指定的一组,类似其他高级语言中的过程。
² 有返回值的函数:调用函数后,可以通过函数名带回函数值供主调函数使用。
5.函数返回值由return语句返回。一般格式为:
return 表达式;
6.函数的传递方式:
u 普通变量作为函数参数:变量在不同内存空间。
u 数组作为函数参数:变量在同一个区域,地址是一样的。
7.函数的嵌套调用:是指一个函数可以被其他函数调用,同时,它可以调用其他函数。函数的嵌套为自上而下,逐步求精及模块化。
8.函数的递归调用:
l 直接递归调用:即一个函数可直接调用该函数本身。
l 间接递归调用:即一个函数可间接调用该函数本身。