版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、煜儿出品,必属精品你只管精彩,生命自有安排。C程序设计课本总结一、 概述(一) 程序:所谓程序,就是一组计算机能识别和执行的指令。(二) 计算机语言1. 机器语言 机器指令:计算机能直接识别和接受的二进制代码称为机器指令。 机器语言:机器指令的集合就是该计算机的机器语言。2. 符号语言(符号汇编语言、汇编语言) 符号语言:用一些英文字母和数字表示一个指令。 一般一条符号语言的指令对应转换为一条机器指令。 不同型号的计算机的机器语言和汇编语言是互不通用的。 机器语言和符号语言称为计算机低级语言。3. 高级语言 高级语言:以人类日常语言为基础的一种编程语言。 高级语言的语言功能很强。 高级语言的一
2、个语句往往对应多条机器指令。 高级语言写出的程序对任何型号的计算机都适用。 通用语言:fortran;basic;c数据库语言:foxbase;FoxPro网页制作语言:HTML;Java(三) C语言特点1. 语言简洁、紧凑,使用方便、灵活。C语言一共只有37个关键字、9种控制语句。 C语言中的37个关键字auto、break、case、char、const、continue、default、do、double、else、enum、extern、float、for、goto、if、inline、int、long、register、restrict、return、short、signed、si
3、zeof、static、struct、switch、typedef、union、unsigned、void、volatile、while、_bool、_Complex、_Imaginary关键字分类关键字功能数据类型关键字(12)char声明字符型变量或函数double声明双精度变量或函数enum声明枚举类型float声明浮点型变量或函数int声明整型变量或函数long声明长整型变量或函数short声明短整型变量或函数signed声明有符号类型变量或函数struct声明结构体变量或函数union声明共用体(联合)数据类型unsigned声明无符号类型变量或函数void声明函数无返回值或无参数,
4、声明无类型指针控制语句关键字(12)循环语句fordo循环语句的循环体while循环语句的循环条件break跳出当前循环continue结束当前循环,开始下一轮循环条件语句if条件语句else条件语句否定分支goto无条件跳转语句开关语句switch用于开关语句case开关语句分支default开关语句中“其他”分支返回语句return子程序返回语句储蓄类型关键字(4)auto声明自动变量extern声明变量是在其他文件正声明register声明寄存器变量static声明静态变量其他关键字(4)const声明只读变量sizeof计算数据类型长度typedef用已给数据类型取别名volatile
5、说明变量在程序执行中可被隐含地改变C99新增(5)inline用来定义一个类的内联函数restrict用于限定指针_Bool表示布尔值_Complex and _Imaginary定义的复数类型 9种控制语句goto语句(转向语句)、if语句(条件语句)、while语句(循环语句)、do-while语句(循环语句)、for语句(循环语句)、break语句(中止执行switch语句或循环语句)、continue语句(结束本次循环语句)、switch语句(多分支选择语句)、return语句(从函数返回语句)2. 运算符丰富。C语言共有34种运算符3. 数据类型丰富。4. 具有结构化的控制语句。5.
6、 语法限制不太严格,程序设计自由度大。6. C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。7. 用C语言编写的程序可移植性好。8. 生成目标代码质量高,程序执行效率高。(四) C语言程序的结构1. 一个程序由一个或多个源程序文件组成。 在一个源程序文件中可以包括3个部分:a) 预处理指令。如#include指令是将stdio.h头文件的内容读进来,放在#include指令行。(stdio是standard input & output的缩写,h是header的缩写)b) 全局声明。即在函数之外进行的数据声明。在函数外面声明的变量称为全局
7、变量。在函数中声明的变量是局部变量,只在函数范围内有效。c) 函数定义。2. 函数是C程序的主要组成部分。1) 一个C程序有且只有一个main函数。程序总是从main函数开始执行的。不论main函数在整个程序中的位置。2) 一个函数包括两个部分。a) 函数首部。即函数的第1行,包括函数名、函数类型、函数属性、函数参数名、参数类型。注:一个函数名后面必须跟一对圆括号( ),括号内写函数的参数名及其类型。如果函数没有参数,可以在括号中写void或者是空括号。b) 函数体。即函数首部下面的花括号内的部分。函数体一般包括声明部分(定义在本函数中所用到的变量+对本函数所调用函数进行声明)和执行部分。3)
8、 程序中对计算机的操作是由函数中的C语句完成的。4) 在每个数据声明和语句的最后必须有一个分号“;”(且必须是英文输入状态下的分号)5) C语言本身不提供输入输出语句。输入和输出操作是由C标准函数库中的函数实现的。a) 标准输入输出函数:putchar(输出字符)、getchar(输入字符)、printf(格式输出)、scanf(格式输入)、puts(输出字符串)、gets(输入字符串)。b) printf函数i. 一般形式printf(格式控制,输出表列)ii. 格式控制(转换控制字符串、格式字符串):用双撇号括起来的一个字符串。iii. 格式控制=格式声明(% 附加字符 格式字符)+普通字
9、符(原样输出地字符)printf函数中用到的格式字符格式字符说明d,i以带符号的十进制形式输出整数(正数不输出符号)o以八进制无符号形式输出整数x,X以十六进制无符号形式输出整数u以无符号十进制形式输出整数c以字符形式输出,只输出一个字符s输出字符串f以小数形式输出单、双精度数,隐含输出6位小数e,E以指数形式输出实数g,G选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0printf函数中用到的格式附加字符字符说明l用于长整型整数,可加在格式符d、o、x、u前面m(正整数)数据最小宽度n(正整数)对实数,表示输出n位小数;对字符串,表示截取的字符个数-输出的数字或字符在域内向左靠i
10、v. 如果想输出字符“%”,则在“格式控制字符串”中用连续两个“%”表示。c) scanf函数i. 一般形式scanf(格式控制,地址表列)ii. 地址表列是变量地址,不是变量名。记得加“&”取地址。iii. 输入数据时应在对应位置上输入除了格式声明以外的其他字符。(一一对应,必须对应)iv. 输入数值时,在两个数值之间需要插入空格(或其他分隔符);连续输入字符是,在两个字符之间不要插入空格或其他分隔符。v. 输入数值数据时,输入空格、回车、Tab键或遇到非法字符(不属于数值的字符),认为该数据结束。d) putchar函数(输出一个字符)i. 一般形式putchar(c)ii. putcha
11、r输出一个字符。c可以是字符常量、整型常量、字符变量、整型变量(其值在字符的ASCII代码范围内)。iii. putchar也可以输出转义字符。e) gerchar( )函数(输入一个字符)i. 一般形式getchar( )ii. gerchar函数没有参数,从计算机终端输入一个字符。iii. 只能接收一个字符,想输入多个字符要用多个getchar函数。f) puts函数(输出一个字符串)i. 一般形式puts(字符数组)ii. 用puts函数输出的字符串中可以包含转义字符。g) gets函数(输入一个字符串)i. 一般形式gets(字符数组)ii. 向字符数组输入一个字符串。送给数组的0占一
12、个字符。3. 程序应当包含注释。 C语言允许用两种注释方式:1) 以/开始的单行注释。这种注释的范围从/开始,以换行符结束。这种注释不能跨行。注释内容一行写不下,可以用多个单行注释。2) 以 /*开始,以*/结束的块式注释。编译系统在发现一个/*后,开始找注释结束符*/,把二者间的内容作为注释。 注释只给人看,计算机不执行。(在程序进行预编译处理时将每个注释替换为一个空格,在编译时注释部分不产生目标代码。)(五) 运行C程序源程序目标程序可执行程序内容程序设计语言机器语言机器语言可执行否否是文件名后缀.c.obj.exe二、 算法算法+数据结构=程序求解问题的步骤分析问题算法分析程序设计程序调
13、试运行与维护分类计算计算法分为数值运算算法和非数值运算算法。特点1. 有穷性。一个算法应包含有限的操作步骤,不能是无限的。2. 确定性。算法中的每一个步骤应当是确定的,不能含糊不清。3. 有零个或多个输入。4. 有一个或多个输出。没有输出的算法是没有意义的。5. 有效性。(比如不能让0做除数)表示方法1. 自然语言2. 流程图1) 流程图符号起止框输入输出框处理框判断框连接点流程线注释框2) 三种基本结构 顺序结构 选择结构 循环结构当型(while型)循环结构 直到型(until型)循环结构3) N-S流程图4) 伪代码伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。(只要把意
14、思表达清楚就行)5) 计算机语言三、 数据类型(一) 常量1. 直接常量1) 整型常量2) 实型常量(a) 十进制小数形式(b) 指数形式(e或E之前必须有数字,之后必须为整数)3) 字符常量(a) 普通字符。用单撇号括起来的一个字符。如a(b) 转义字符转义字符及其作用转义字符字符值输出结果一个单撇号()具有此八进制码的字符一个双撇号()输出此字符?一个问号(?)输出此字符一个反斜线()输出此字符a警告(alert)产生声音或视觉信号b退格(backspace)将当前位置后退一个字符f换页(form feed)将当前位置移到下一页的开头n换行将当前位置移到下一行的开头r回车(carriage
15、 return)将当前位置移到本行的开头t水平制表符将当前位置移到下一个tab位置v垂直制表符将当前位置移到下一个垂直制表对齐点o,oo,oo其中o代表一个八进制数字与该八进制码对应的ASCII字符与该八进制码对应的字符xhh其中h代表一个十六进制数字与该十六进制码对应的ASCII字符与该十六进制码对应的字符4) 字符串常量。用双撇号把若干个字符括起来,字符串常量是双撇号中的全部字符(不包括双撇号本身)。如:”boy”2. 符号常量。用#define指令,指定用一个符号名称代表一个常量。如:#definePI3.1416/注意行末没有分号好处: “见名知意”“一改全改” 符号常量在程序中不能重
16、新赋值。 注:区分符号常量和变量。符号常量不占内存,只是一个临时符号,在预编译后这个符号就不存在了,不能对符号常量赋新值。(二) 变量1. 定义:在程序运行过程中,其值可以改变的量称为变量。变量代表一个有名字、具有特定属性的一个储存单元。2. 2个要素变量名:以一个名字代表的一个储存地址。变量值:变量值储存在内存中。3. 变量必须先定义、后使用。(三) 常变量如:const int a=3表示a被定义为一个整型变量,指定其值为3,而且在变量存在期间其值不能改变。1. 常变量具有变量的基本属性:有类型,占储存单元,便于在程序中被引用。2. 常变量与常量的区别常变量是有名字的不变量,常量是没有名字
17、的不变量。(四) 标识符1. 定义:在计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符。2. 规定:标识符只能由字母、数字和下划线3中字符组成。(五) 数据类型1. 定义:类型是对数据分配储存单元的安排,包括储存单元的长度和数据的储存形式。2.3. 整型数据1) 基本整型、短整型、长整型、双长整型,变量值在储存单元中以补码形式储存,储存单元中的第1个二进位制代表符号。整型数据常见的储存空间和值的范围类型字节数取值范围int(基本整型)2-32768327674-231(231-1)unsigned int(无符号基本整型)20(216-1)40(232
18、-1)short(短整型)2-215(215-1)unsigned short(无符号短整型)20(216-1)long(长整型)4-231(231-1)unsigned long(无符号长整型)40(232-1)long long(双长整型)8-263(263-1)unsigned long long(无符号双长整型)60(264-1)4. 字符型数据1) 字符是按其代码(整数)形式储存的。指定用1个字节(8位)储存一个字符。2) 大写英文字母A065小写英文字母a097数字00483) 一个字符型数据,既可以字符形式输出,也可以整数形式输出。字符型数据常见的储存空间和值的范围类型字节数取值
19、范围signed char(有符号字符型)1-128127unsigned char(无符号字符型)102555. 浮点型数据1) 浮点型数据用来表示具有小数点的实数。浮点数:实数的指数形式。规范化的指数形式:小数部分中小数点前的数字为0、小数点后第1位数字不为0的指数表示形式。浮点型数据常见的储存空间和值的范围类型字节数有效数字数值范围float(单精度浮点型)46-3.4*1038-1.2*10(-38)、0、1.2*10(-38)3.4*1038double(双精度浮点型)815-1.7*10308-2.7*10(-308)、0、2.7*10(-308)1.7*10308long dou
20、ble(长双精度)815-1.7*10308-2.7*10(-308)、0、2.7*10(-308)1.7*103081619-1.1*104932-3.4*10(-4932)、0、3.4*10(-4932)1.1*104932四、 运算符运算符和结合性优先级运算符含义要求运算对象的个数结合方向1()圆括号自左至右下标运算符-指向结构体成员运算符.结构体成员运算符2!逻辑非运算符1(单目运算符)自右至左按位取反运算符+自增运算符-自减运算符-负号运算符(类型)类型转换运算符*指针运算符&取地址运算符sizeof长度运算符3*乘法运算符2(双目运算符)自左至右/除法运算符%求余运算符4+加法运算
21、符2(双目运算符)自左至右-减法运算符5右移运算符6小于运算符2(双目运算符)自左至右大于运算符=大于等于运算符7=等于运算符2(双目运算符)自左至右!=不等于运算符8&按位与运算符2(双目运算符)自左至右9按位异或运算符2(双目运算符)自左至右10|按位或运算符2(双目运算符)自左至右11&逻辑与运算符2(双目运算符)自左至右12|逻辑或运算符2(双目运算符)自左至右13?:条件运算符3(三目运算符)自右至左14=赋值运算符2(双目运算符)自右至左+=加后赋值运算符-=减后赋值运算符*=乘后赋值运算符/=除后赋值运算符%=取余后赋值运算符=右移后赋值运算符=左移后赋值运算符&=按位与后赋值运
22、算符=按位异或后赋值运算符|=按位或后赋值运算符15,逗号运算符(顺序求值运算符)自左至右(一) 两个整数相除的结果为整数,舍去小数部分。 两个实数相除的结果是双精度实数。除数或被除数中有一个为负值,舍入的方向不固定。C编译系统采取“向零取整”。 %运算要求参加运算的对象为整数,结果也是整数。(二) 自增运算符+i(在使用i之前,先使i的值加1)-i(在使用i之前,先使i的值减1)i+(在使用i之后,使i的值加1)i-(在使用i之后,使i的值减1) 注:自增自减运算符只能用于变量,不能用于常量或表达式。(三) 强制类型转换运算符1. 一般形式(类型名)(表达式)2. 表达式应用括号括起来(in
23、t)(x+y)(将x+y的值转换成int型)(int)x+y(将x的值转换成int型,然后与y相加)3. 强制类型转换得到的是临时数据,原来变量的类型未发生变化。(四) 逻辑运算符逻辑运算的真值表ab!a!ba&ba|bTRUE TRUE FALSEFALSETRUE TRUE TRUE FALSEFALSETRUE FALSETRUE FALSETRUETRUE FALSEFALSETRUE FALSEFALSETRUE TRUE FALSEFALSE1. 优先次序高低!(非)算术运算符关系运算符&和|赋值运算符记忆:!(非) (+、-、- )(* / %)(+ -)( =)(= !=) (
24、& |)(=)五、 表达式(一) 算术表达式(二) 赋值表达式1. 一般形式变量赋值运算符表达式2. 不能给算术表达式或常量赋值。3. 表达式具有计算和赋值的双重功能。4. 表达式也有值。如:赋值表达式a=3*5,表达式的值和变量a的值都是15。5. 可以在定义变量时对变量赋以初值。如:int a=3,b=3,c=3;但不能写int a=b=c=3;(三) 关系表达式1. 关系表达式:用关系运算符将两个数值表达式连接起来的式子。2. 关系表达式的值:关系表达式的值是一个逻辑值,即“真”或“假”。“真”表达式的值为1,“假”表达式的值为0.3. 特别注意:判断必须一步一步来。关系运算符是自左至右
25、的结合方向。 abc先判断“ab”得值为1或0,再用“1或0c”得值为1或0。(四) 逻辑表达式1. 判断一个“量”的真假:非0代表“真”,0代表“假”;判断一个逻辑表达式的真假:1代表“真”,0代表“假”。逻辑运算的真值表ab!a!ba&ba|b非0非00011非0001010非010010011002. 逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。a) a&b&c。如果a为假,就不必判别b和c,此时整个表达式已经为假。如果a为真,b为假,不判别c。b) a|b|c。只要a为真,就不必判别b和c。a为假,才判别b。a
26、和b都为假才判别c。3. 量、关系表达式、逻辑表达式都有真假,可以作为if语句中的表达式。(五) 条件表达式1. 一般形式表达式1? 表达式2: 表达式3执行顺序(六) 逗号表达式1. 一般形式(表达式1,表达式2,表达式m)2. 在逗号表达式内按自左至右顺序求解,整个逗号表达式的值为最后边的表达式的值。六、 语句(一)(二) 实现顺序结构的语句1. 赋值语句1) 定义:由赋值表达式加上一个分号构成。2) 一般形式变量名=表达式;2. 函数调用语句1) 一般形式函数名(参数表列);2) 分类:标准库函数,用户定义函数。3. 复合语句1) 定义:由一组语句组成,并放在一对花括号“”中间。2) 一
27、般形式说明部分;执行部分;3) 复合语句是一个整体,在语法结构上与一个单一语句相同。4) 在复合语句中的“内部数据描述语句”中定义的变量是局部变量,仅在复合语句中有效。5) 复合语句结束的“ ”之后,不需要分号。(三) 实现选择结构的语句1. if语句1) 一般形式if(表达式)语句1else语句2) 变形形式a) if(表达式)语句1b) if(表达式)语句1else语句2c) if(表达式1)语句1else if(表达式2)语句2else if(表达式m)语句melse语句m+13) if和else后面没有分号“;”,语句后边必须有分号“;”4) 复合语句要用花括号括起来。5) if语句的
28、嵌套if( )if( )语句1else语句2elseif( )语句3else语句4 else总是与它上面的最近的未配对的if配对2. switch语句(多分支选择语句)1) 一般形式switch(表达式)case常量1:语句1case常量2:语句2case常量n:语句ndefault:语句n+12) switch后面括号内的“表达式”,其值的类型为整数类型(包括字符型)。3) 每一个case常量必须互不相同。4) 一般情况下,在执行一个case子句后,应当用break语句使流程跳出switch结构。否则会不加判断,从执行完的case标号后面依次执行下面语句。5) 多个case标号可以共用一组执
29、行语句。如:case常量1:case常量2:case常量3:语句3(四) 实现循环结构的语句1. while语句1) 一般形式while(表达式)语句2) 只要循环条件表达式为真,就执行循环体语句。先判断条件表达式,后执行循环体语句。3) 循环体中一般有改变循环变量的语句,不可以写死循环,记得赋初值。2. dowhile语句1) 一般形式do语句while(表达式);2) 先无条件执行循环体,再判断循环条件是否成立。表达式为真,执行循环体语句;表达式为假,循环结束。特别注意和until循环结构不同,until型是表达式为假,执行循环体语句,表达式为真,循环结束。3) while语句和dowhi
30、le语句在while表达式一开始就为假时,两种循环的结果不同。4) dowhile后面加分号;if for while后面不加。3. for语句1) 一般形式for(表达式1;表达式2;表达式3)语句即for(循环变量赋初值;循环条件;循环变量增值)语句执行顺序2) 表达式1、2、3都可以省略,但省略后表达式之间的分号“;”不能省略。表达式1可以省略,即不设置初值。表达式1省略应在for语句之前赋初值。 表达式2 可以省略,即不判断循环条件,循环无终止进行。 表达式3可以省略,但应保证循环能正常结束。3) 表达式1、2、3可以是逗号表达式。4) 所有定义的变量的有效范围只限于for循环中。4.
31、 终止循环1) 用break语句提前终止循环 break语句只能用于循环语句和switch语句中,不能单独使用。 循环的嵌套中,一个break只能终止一个内循环2) 用continue语句提前结束本次循环七、 数组(一) 数组是一组有序数据的集合。数组中的每一个元素都属于同一个数据类型。(二) 定义数组1. 定义一维数组1) 一般形式类型符数组名常量表达式2) 定义数组时,方括号中的常量表达式表示元素的个数,即数组长度。它可以是常量和符号常量,不能包含变量。注意:下标是从0开始的。定义a10数组不存在数组元素a10。2. 定义二维数组1) 一般形式类型说明符数组名常量表达式常量表达式2) 二维
32、数组中元素排列的顺序是按行存放的3. 定义字符数组一般形式char数组名常量表达式(三) 引用数组1. 引用一维数组的元素1) 表示形式数组名下标注意:只能引用数组元素二不能一次整体调用整个数组全部元素的值。2) 下标可以是整型常量或整形表达式。2. 引用二维数组的元素1) 表示形式数组名下标下标2) 引用数组元素时,下标值应在已定义的数组大小的范围内。注意行列的下标都从0开始。3. 引用字符数组的元素(四) 初始化数组1. 一维数组的初始化(“初始化列表”方法)1) 在定义数组时对全部数组元素赋予初值。2) 给数组中的一部分元素赋值,系统自动给之后的元素赋初值为0(字符型数组初始化为0,指针
33、型数组初始化为NULL).3) 对全部数组元素赋初值,可以不指定数组长度。2. 二维数组的初始化1) 分行给二维数组赋初值。(每行数据用一个花括号括起来)2) 按数组元素在内存中的排列顺序对个元素赋初值。3) 对部分元素赋初值。其余元素值自动为0。4) 对全部元素赋初值,则可以省略行的长度,但不能省略列的长度。3. 字符数组的初始化1) 逐个元素初始化若提供的初值个数与预定的数组长度相同,定义时可以省略数组长度。若提供的初值个数大于数组长度,则出现语法错误。若提供的初值个数小于数组长度,其余的元素自动为空字符(0)2) 字符串初始化(五) 字符数组的输入输出1. 字符数组存储字符串常量时会自动
34、加一个0作为结束符。(此时数组长度是看到的字符串长度+1,增加的存放字符0其ASCII值为0) 2. 字符串的输入输出1) 用“%c”格式符,逐个字符输入输出。2) 用“%s”格式符,整个字符串输入输出。scanf(“%s”,c);printf(“%s”,c); 注意:i. printf函数中的输出项是字符数组名,不是数组元素名。如:printf(“%sn”,c)正确,printf(“%sn”,c0)错误。ii. 用“%s”格式输出字符数组时,遇0结束输出,且输出字符中不包含0。iii. 若数组中包含一个以上0,则遇第一个0时即结束输出。用“%s”格式输入字符数组时, scanf函数中的输入项
35、是字符数组名,它是该数组的起始地址地址,前面不再加地址符“&”。iv. 用函数scanf输入多个字符串,输入时应以空格键或回车键作为字符串间的分隔。输入遇到空格或回车就结束。3) 使用字符串处理函数puts函数、gets函数(之前介绍过)3. 字符串处理函数(使用时在程序头文件出添加声明#include)1) strcat函数字符串连接函数i. 功能:把字符数组2连到字符数组1后面。ii. 一般形式strcat(字符数组1,字符数组2)iii. 返值:返回字符数组1的首地址。iv. 注意:字符数组1必须足够大。连接前,两字符串均以0结束;连接后,字符串1后面的0取消,只在新字符串最后保留0。2
36、) strcpy函数字符串复制函数i. 功能:将字符串2复制到字符数组1中。ii. 一般形式strcpy(字符数组1,字符串2)iii. 返值:返回字符数组1的首地址。iv. 注意:字符数组1必须足够大。字符数组1必须写成字符数组名,字符串2可以是字符数组名或字符串常量。 拷贝时0一同拷贝。 不能使用赋值语句为一个字符数组赋值,只能用strcpy函数。3) strncpy函数字符串复制函数i. 功能:将字符串2中前面n个字符复制到字符数组1中。ii. 一般形式strncpy(字符数组1,字符串2,n)iii. n不应多于字符数组1中原有的字符(不包括0)。4) strcmp函数字符串比较函数i
37、. 功能:比较字符串1和字符串2。ii. 比较规则:将两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到0为止。如果全部字符相同,则认为两个字符串相等。若出现不相同的字符,则以第1对不相同的字符的比较结果为准。iii. 返值:字符串1=字符串2,则函数值为0;字符串1字符串2,则函数值为一个正整数;字符串1字符串2,则函数值为一个负整数。5) srelen函数测字符串长度的函数i. 功能:测试字符串长度。ii. 一般形式strlen(字符数组)iii. 返值:字符串中的实际长度(不包括0)。6) strlwr函数转换为小写的函数i. 功能:将字符串中大写字母换
38、成小写字母。ii. 一般形式strlwr(字符串)7) strupr函数转换为大写的函数i. 功能:将字符串中小写字母换成大写字母。ii. 一般形式strupr(字符串)八、 函数(一) 概述1. C语言用函数实现程序模块化。2. 一个源程序文件由一个或多个函数组成;一个程序由一个或多个源程序文件组成。3. 函数就是功能。每一个函数用来实现一个特定的功能。4. C程序的执行从main函数开始,并回到main函数结束。5. 函数之间可以相互调用,或调用自身。不能调用main函数。6. 函数之间相互独立,不存在从属关系。(二) 分类(三) 函数的定义1. 定义无参函数1) 一般形式函数类型函数名(
39、void)函数体(声明部分+语句部分)2) 函数类型指函数返回值的类型。若无返回值,则定义返回类型为void。若省略此项,则认为返回类型是int。void表示”空”,没有函数值。可以省略。2. 定义有参函数1) 一般形式函数类型函数名(形式参数表列)函数体(声明部分+语句部分)2) 形式参数定义格式:类型形参名,类型形参名,3. 定义空函数1) 一般形式函数类型函数名() 例:dummy()/* does nothing & returns nothing */(四) 函数的调用1. 一般形式函数名(实参表列)2. 数据传递1) 实际参数:在主调函数中调用一个函数时,函数名后面括号中的参数。形
40、式参数(虚拟参数):在定义函数时函数名后面括号中的变量名称。2) 单向值传递:函数调用过程中,系统把实参的值传递给被调用函数的形参。且只能由实参传给形参。3) 形参在函数被调用前不占内存。函数调用时为形参分配内存。调用结束,内存释放。4) 实参必须有确定的值。可以是常量、变量或表达式。形参必须指定类型。形参与实参类型一致,个数相同。若形参与实参类型不一致,自动按照形参类型转换。5) 数组元素只能作函数实参,采用“值传递”从实参传到形参。数组名作函数实参,向形参(数组名或指针变量)传递的是数组首元素的地址。形参的值改变,实参的值也改变。6) return语句(函数返回语句)i. 功能:结束函数调
41、用;函数返回语句;带回函数返回值。ii. 函数返回值的类型在定义函数时制定。函数返回值通过函数中的return语句获得。iii. return语句后的表达式类型,与函数返回值类型不同时,自动按函数类型转换。函数类型决定返回值的类型。iv. 函数需要返回值时,若缺少return语句或return语句未带返回值,则返回一个不确定值。 (注意看有没有return语句)v. 对于不带回值的函数,应当用定义函数为”void”函数。此时函数体中不得出现return语句。(五) 调用函数的条件1. 被调用的函数是已经定义的函数。1) 如果使用库函数,应在本文件开头用#include指令将调用有关库函数的信息
42、包含到本文件中。2) 如果使用用户自己定义的函数,且被调函数的位置在主调函数的后面(同一个文件中),应该在主调函数中对被调用的函数作声明。(六) 函数的声明1. 一般形式函数类型函数名(参数类型1参数名1,参数类型2参数名2,参数类型n,参数名n);函数类型函数名(参数类型1,参数类型2,参数类型n)(七) 函数的嵌套调用(在调用一个函数的过程中,又调用另一个函数)和递归调用(在调用一个函数的过程中直接或间接地调用该函数本身)(八) 局部变量与全局变量1. 定义:在函数内定义的变量是局部变量,在函数外定义的变量是全局变量。2. 全局变量作用是增加函数间数据联系的渠道。同一文件中的所有函数都能引
43、用全局变量的值,如果在一个函数中改变了全局变量的值,就能影响到其他函数中全局变量的值。3. 通过全局变量使函数调用能得到一个以上的值。4. 全局变量可以被局部变量屏蔽。5. 变量的储存方式九、 指针(一) 指针:一个变量的地址。指针变量:专门存放变量地址的变量。它的值是某个内存单元的地址。指向:指针变量指向变量。(二) 定义指针变量1. 一般形式类型名*指针变量名2. 定义指针变量必须指定基类型。指向整型数据的指针类型表示为”int*” 指向int的指针、int指针(int*),(float*),(char*)是不同类型3. 指针变量前面的*表示该变量类型为指针型变量。(只在定义时)例:int
44、 *p;变量名是p。(三) 指针变量的引用1. 给指针变量赋值。如p=&a 把a的地址赋给指针变量p,指针变量p的值是变量a的地址,p指向a。2. 引用指针变量指向的变量。如果已执行“p=&a;”,即指针变量p指向了整型变量a,则printf(“%d”,*p);其作用是以整数形式输出指针变量p所指向的变量的值,即变量a的值。如有以下赋值语句:*p=1;表示将整数1赋给p当前所指向的变量,如果p指向变量a,则相当于把1赋给了a,即“a=1;”。3. 引出指针变量的值。如: printf(“%o”,p);作用是以八进制数形式输出变量p的值,如果p指向了a,就是输出了a的地址,即&a。4. & 取地
45、址运算符 * 指针运算符(间接访问运算符) 5. 注意1) 指针变量必须先赋值,再使用,只能保存地址。2) 一个指针变量只能指向同一类型的变量。3) &和*运算符互为逆运算。若:int a=10,*pt=&a; 则: &a、pt 、 &*pt是等价的 则: *&a、*pt、a 是等价的(四) 通过指针引用数组1. 数组元素的指针就是数组元素的地址。2. 指向数组元素的指针例:int a10;int *p;p=a;数组名a不代表整个数组,上述“p=a;”的作用是把a数组的首元素的地址赋给指针变量p,而不是把数组a各元素的值赋给p;3. 对应关系1) p+i a+i &ai2) *(p+i) *(
46、a+i) ai3) 指向数组元素的指针变量也可带下标: pi *(p+i) 。 即有*(p+i) *(a+i)ai pi注:数组名是数组的首地址,因此 p=&a0 与 p=a 等价。 指针变量可以实现使本身的值改变,数组名不可以。 例: p+正确 a+不正确 要注意指针变量的当前值,指针变量可以指到数组后的内存单元。即指针变量的越界问题。4. 指针变量的运算例:int a10;int *p;p=a;i. p+ (或p+=1) 指向下一个元素。ii. *p+等价于*(p+)先得到p指向的变量的值,p再加1。iii. *(p+)与*(+p)作用不同,前者先取*p,后使p加1;后者相反。iv. (*
47、p)+表示p所指向的元素值加1。v. 若p当前指向a数组第i个元素,则: *(p-)相当于ai-,先取p值作*运算,再使p自减; *(+p)相当于a+i,先使p自加,再作*运算; *(-p)相当于a-i,先使p自减,再作*运算。5. 通过指针引用多维数组1) int *p,a10;p=a;一维数组a的有关指针表示形式含义a一维数组名,数组首元素的地址,指针型常量&ai,a+i,p+i元素ai的地址ai,*(a+i),*(p+i)元素ai的值2) int *p,a34;p=a;二维数组a的有关指针表示形式含义a二维数组名,指向一维数组a0,即0行首地址a0,*(a+0),*a0行0列元素地址a+
48、i,&aii行首地址ai+j,*(a+i)+j,&aiji行j列元素aij的地址*(ai+j),*(*(a+i)+j),aiji行j列元素aij的值(五) 通过指针引用字符串1) 字符指针:基类型是char类型的指针,可以指向一个字符串,即保存字符串首字符的地址2) 字符指针变量与字符数组的区别字符指针变量中存放的是地址,决不是将字符串放到字符指针变量中。赋初值的方式:对数组可以在变量定义时整体赋初值,但不能在赋值语句中整体赋值。 指针变量的值是可以改变的,而数组名所指的地址是固定的。 八、 应用举例(一) 两个数对换 t=a;a=b;b=t;(二) 数组的输入和输出数组的输入和输出要用循环 int a10,i; for(i=0;i10;i+) scanf(%d,&ai); for(i=0;i=0; int a10,i; for(i=0;i=0;i-) printf(%dt,ai); return 0;(四) 数组处理输出斐波那契数列前20项 int i,f20=1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年济南客运资格证考试答题
- 2024年成都驾考客运资格证考试
- 2024年南宁考客运资格证需要什么条件
- 2024年企业园区护栏安全更新项目合同
- 2024年三门峡客运从业资格证考试网
- 2024年上饶客运从业资格证报名考试题目
- 2024年度建筑工程塔吊租赁合同
- 2024年度网络安全与数据保护合同
- 初中历史大单元教学实践举隅
- 高速桥梁锚下有效预应力检测技术实施方案
- GB/T 17892-2024优质小麦
- 调酒初级基础理论知识单选题100道及答案解析
- 危废治理项目经验-危废治理案例分析
- 南京市2024-2025学年六年级上学期11月期中调研数学试卷二(有答案)
- 汽车防冻液中毒
- 粉条产品购销合同模板
- 2024至2030年中国自动车配件行业投资前景及策略咨询研究报告
- 2024-2030年中国蔗糖行业市场深度调研及发展趋势与投资前景研究报告
- 北师版 七上 数学 第四章 基本平面图形《角-第2课时 角的大小比较》课件
- 外研版小学英语(三起点)六年级上册期末测试题及答案(共3套)
- 北师大版(2024新版)七年级上册生物期中学情调研测试卷(含答案)
评论
0/150
提交评论