c语言基础复习

上传人:无*** 文档编号:168551754 上传时间:2022-11-10 格式:DOCX 页数:49 大小:257.74KB
收藏 版权申诉 举报 下载
c语言基础复习_第1页
第1页 / 共49页
c语言基础复习_第2页
第2页 / 共49页
c语言基础复习_第3页
第3页 / 共49页
资源描述:

《c语言基础复习》由会员分享,可在线阅读,更多相关《c语言基础复习(49页珍藏版)》请在装配图网上搜索。

1、C语言基础复习第一章.程序设计和c语言、何为计算机语言?人与计算机交流的工具。二、计算机语言经历了四代发展:第一代:机器语言(低级语言)。第二代:汇编语言(符 号语言,面向机器)。第三代:高级语言(面向问题)。第四代:甚高级语言(面向对象或面 向问题)。三、C语言的特点:(1)语言简洁、紧凑,使用方便、灵活。程序书写形式自由。共有32个关键字(附录II), 9种控制语句。(2)运算符丰富,包括算术、逻辑、逗号运算、移位运算等等,多达44种的运算符(附录III),(3)数据结构丰富。有整型、实型、字符型、数组类型,指针类型、结构类型、共同体类 型等等。(4)具有结构化的控制语句,函数模块化。(5

2、)语法限制不太严格,程序设计自由度大。(6) C语言能进行位操作,实现汇编语言的大部分功能,可以直接对硬件进行操作。(7)生成代码质量高,程序执行效率高。(8)可移植性好。四、C的性质:(1) C程序是由函数构成的。每个程序由一个或多个函数组成,其中必须有且仅有一个主 函数main()。函数容易实现程序的模块化.。(2) - 个可执行的C语言程序总是从main函数开始执行,而不论其在整个程序中的位置如 何。(3) 3.每条语句或数据定义的最后必须有一个分号“。 说明:在以下三种情况下不允许有分号:a.在右花括号“”后面不使用分号;b.所定义的函数的名称后面不使用分号;c,预处理语句后面不使用分

3、号。(4) C对输入输出实行函数化。(5) C程序书写格式自由,一行内可以写几个语句,一个语句也可以分写在多行上。(6)可用/*/对C程序中的任何部分作注释,注释可以写在程序的任何位置上,“/*” 与“*/”也可不在同一行上。(7)也可用“二 本行中“”之后的文字都视为注释。(8)在C语言中,大小写字母是有区别的。(C语言习惯用小写字母)。五、函数的一般结构任何函数(包括主函数main。)都是由函数说明和函数体两部分组成。其一般结构如下:函数说明部分函数体部分函数类型函数名(函数参数表)( 说明语句部分; 执行语句部分;I1 .函数说明函数说明由三部分组成:(1)函数类型(可缺省)(2)函数名

4、(3)函数参数表,其中函数参数表的格式为:数据类型形参,数据类型形参2例如,例L3中的函数max(),其函数说明各部分如下所示。函数类型函数名函数参数表I IIint max ( int x , int y )2 .函数体函数体一般由说明语句和可执行语句两部分构成。在函数说明部分的下面,对内的部分。大括号必须配对使用(1)说明语句部分说明语句部分由变量定义、自定义类型定义、自定义函数说明、外部变量说明等组成。int a, b;float k, h;(2)可执行语句,一般由若干条可执行语句构成。六、C语言的关键字和语句C语言的关键字共有32个,可分为四类。(1)数据类型关键字(12个):char

5、, double, enum, float, int, long, short, signed, struct,union, unsigned, void(2)控制语句关键字(12个):break, case, continue, default, do, else, for, goto, if, return,switch, while(3)存储类型关键字(4个):auto, extern, register, static(4)其它关键字(4个):const, sizeof, typedef, volatile (易变)七、C语言的语句按照语句功能或构成的不同,可将C语言的语句分为五类。(

6、1)函数调用语句函数调用语句由一次函数调用加一个分号(语句结束标志)构成。例如 printf(*This is a C statement. *);(2)表达式语句表达式语句由表达式后加一个分号构成。例如在赋值表达式后加一个分号构成的赋值语句。num=5i是个赋值语句num=5只是个赋值表达式(3)控制语句控制语句完成程序中特定的控制功能。C语言只有9条控制语句,又可细分为三 种:选择结构控制语句if else ,switch () 循环结构控制语句dwhile。,for , while() ,break, continue其它控制语句goto , return(4)空语句空语句仅由一个分号构

7、成:;空语句什么操作也不执行。(5)复合语句复合语句是由大括号括起来的组语句构成,右括号后不需要分号。复合语句格式:语句组例如: a=a*3; b=a+b; c=a*b;复合语句的性质:复合语句在语法上和单语句使用相同,即单语句可以出现的地方,也可以使用复合 语句。复合语句可以嵌套,即复合语句中也可出现复合语句。、C语言源程序书写格式1 . C语言程序使用英文小写字母书写。C语言区分字母大小写,大写字母一般符号常量或 特殊用途使用。2 .所有语句都必须以分号“;”结束,作为语句之间的分隔符。函数的最后个语句也必须以分号“;”结束。3 .程序行的书写格式自由。既允许1行内写几条语句,也允许1条语

8、句分写在几行上。4 . C语言程序不使用行号。5 .必须配对使用的符号:例如注释符号/* */、函数体的起止标识符( 花括号)、圆括号()等。在输入时,可连续输入这些起止标识符,然后再在其中进行插入来完成内容的编辑。第二章.C语言数据类型C语言提供的数据结构,是以数据类型形式出现的。1 .基本类型整型、实型(又称浮点型)、字符型、空类型2 .构造类型数组类型、结构类型、共用类型、文件类型3 .指针类型4 .用户自定义型C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。 、数值的定点表示和浮点表示1 .定点数:不帯指数部分的数2 .浮点数:由数字(尾数)和指数(阶码)两部分表示如:3.

9、 14159e0, 0. 314159e+l, 0. 0314159e+2, 31.4159eT, 314. 159e-2注:计算机中凡是实数都以浮点形式存储二、整型数据在内存中的存放形式int i;i=10;10=(1010)2有符号整数(补码表示法:便于加减运算)原码:最高位为符号位,其余各位为数值本身的绝对值反码:正数:反码与原码相同负数:符号位为1I其余位对原码取反补码:正数:原码、反码、补码相同负数:最高位为1,其余位为原码取反,再对整个数加1例如:T0补码的表示法为:10的原码0000 0000 0000 101010 取反 !111 1111 1111 0101+11111 11

10、11 1111 0110:.TO 的补码 1111 1111 1111 0110三、各种进制之间的转换二进制、进制、十六进制转换成十进制方法:按权相加十进制转换成二进制、进制、十六进制方法:连续除以基,从低到高记录余数,直至商为。二进制与八进制之间的转换二进制转换成进制:从右向左,每3位组(不足3位左补),转换成八进制进制转换成二进制:用3位二进制数代替每一位进制数二进制与十六进制之间的转换二进制转换成十六进制:从右向左,每4位组(不足4位左补),转换成十六进制十六进制转换成二进制:用4位二进制数代替每一位十六进制数例 (11010101111101)2=(0011,0101,0111,110

11、1)2=(3570)16(4B9E)16=(0100, 1011, 1001, 1110)2=(100101110011110)2四.字节(Byte)、字word字节是计算机中的最基本的存储单位,是指8位二进制码所占的存储空间称为个字节 (Byte),每个字节都有一个地址。字是指计算机一次可以处理的最大二进制位数,称个机器字,简称字。个字所包含的二 进制数的位数称为字长。五、类型宽度与取值范围1.位:bit 字节:byte (B)1 B = 8 bit2 .带符号整数范围:-2 (n-l)2* (n-l)-l不带符号整数范围:02n-l3 .测定数据类型所占存储空间长度sizeof (类型表示

12、符)例如:sizeof (char) sized. 23)2.2数据常量、整型常量三种进制:八进制、十六进制和十进制进制整常数:进制整常数必须以开头,即以作为进制数的前缀。数码取值为07。进制数通 常是无符号数。十六进制整常数:十六进制整常数的前缀为OX或Ox。其数码取值为、9, AF或af。十进制整常数:十进制整常数没有前缀。其数码为09。二、整型常量类型的确定整型常数的后缀在16位字长的机器匕 基本整型的长度也为16位,因此表示的数的范围也是有限定的。十进制无符号整常数的范围为65535,有符号数为32768+32767。进制无符号数的表示范围为0177777。十六进制无符号数的表示范围为

13、0XOXFFFF或OxOxFFFF如果使用的数超过了上述范围,就必须用长整型数来表示。长整型数是用后缀“L”或“1” 来表示的。例如:十进制长整常数158L (十进制为158)十进制长整常数-358000L (十进制为358000)进制长整常数012L (十进制为10)进制长整常数077L (十进制为63)进制长整常数0200000L (十进制为65536)十六进制长整常数0X15L (十进制为21)十六进制长整常数0XA5L (十进制为165)十六进制长整常数0X10000L (十进制为65536)三、字符类型及其常量字符常量(1)可打印字符常量用对单引号括起来的一个字符,是可打印字符常量,

14、例如 匕、,A、,? 、 3都 是可打印字符常量。注:单撇号只是字符与其他部分的分隔符,输出字符常量时不输出单撇号。不能用双撇号代替単撇号,“ a不是字符常量。单撇号内的字符不能是单撇号或反斜杠。(2) 个字符型数据,既可以字符形式输出,也可以整数形式输出。转义字符C语言还允许用种特殊形式的字符常量,就是个以“”开头的字符序列(包括一些不 可打印字符常量),这种反斜杠字符常量又称转义字符。注:反斜杠后面跟个字母代表一个控制字符(不可打印字符)表示”,代表撇号字符、后跟13位进制代表ASCI!码为该进制的字符x后跟12位十六进制数代表ASCII码为该十六进制的字符以“”开头的字符在printf函

15、数中控制输出格式:n 换行t横向跳格(下个输出区( 8列)v竖向跳格b退格r回车f走纸换页反斜杠字符、单引号ddd 1到3位8进制数所代表的字符。如:101 = Axhh !到2位!6进制数所代表的字符。允许对字符数据进行算术运算,此时就是对它们的ASCI!码值进行算术运算。字符串常数字符串常量的概念和字符串长度字符串常量:是用对双引号括起来的若干字符序列。字符串长度:字符串中字符的个数称为。空串:长度为的字符串(即个字符都没有的字符串),表示为“”(对紧连的双引 号)。例:“How do you do. ” 长度为14 (空格也是个字符)Good morning. 长度为 13字符串的存储C

16、语言规定:在存储字符串常量时,由系统在字符串的末尾自动加一个0作为字符串的结束标志。如 果有一个字符串为CHINA”,则它在内存中的实际存储如下所示:C H I N A 0最后个字符、0是系统自动加上的,它占用6字节而非5字节内存空间。字符常量A 与字符串常量A 的区别:(1)定界符不同:字符常量使用单引号A,而字符串常量使用双引号”;(2)长度不同:字符常量的长度固定为1,而字符串常量的长度,可以是,也可以是某个整数;(3)存储要求不同:字符常量存储的是字符的ASCII码值,而字符串常量,除了要存储有效的字符外,还要存储一个结束标志、0。实型常量1.实型常量(实数,又称浮点数)表示形式:(1

17、)十进制形式例如:3.14、 9.8(2)指数形式尾数E (e)整型指数例如:3. 02E +534.42367750E +7实型常量分为float型、double型和!ong double型。E左边可以是整数也可以是小数,右边必须是整数变量的声明变量:其值可以被改变的量,用标识符表示。一般格式:数据类型变量1,变量2,变量n;整型变量有符号无符号整型intunsigned int短整型short 或 short intunsigned short长整型long 或 !ong intunsigned long整型变量的声明int a,b;/指定变量a、b为整型/unsigned int c,

18、d;/指定变量c、d为无符号短整型/long e, f;/指定变量e、f为长整型/实型变量精度单精度实型变量float6位有效数字双精度实型变量double16位有效数字实型变量的声明float x.y;/指定变量x、x为单精度实型/double m, n;/指定变量m、n为双精度实型/字符型变量有符号字符型变量char无符号字符型变量unsigned char字符型变量的声明char cl,c2;/指定变量cl、c2为有符号字符型/unsigned ncl, nc2; /指定变量ncl、nc2为无符号字符型/ 字符变量在内存中占字节。字符变量存放字符的ASCII码。char型与int型数据间

19、可进行算术运算。在C语言中,没有字符串变量,字符串用字符数组存放。13类 2. 2. 5变量和对变量的赋值X在C语言中可以在声明变量的同时指定其初值(初始化)。2. 3运算符与表达式运算(也叫做操作)就是对数据的加工。三大运算符:算术运算、关系与逻辑运算、位操作运算。算术运算符+、-、八%关系运算符、=、=、! 逻辑运算符L &、 !V位运算符、&-赋值运算符二条件运算符?.逗号运算符指针运算符*、&求字节运算符sizeof强制类型转换运算符(类型)分量运算符.(点)、下标运算符其他函数调用运算符()2. 3.1算术运算(一)双元算术运算运算符名称功能*乘求a与b之积/除求a除以b之商+加求a

20、与b之和减%模(求余)求a除以b之余数优先级:* / %高于+ -,结合方向为“从左至右”例:5/2 =25%2 二 1-5/2. 0 =-2.55. 5%2 = X赋值运算符符号:=,自右向左结合格式:变量标识符=表达式作用:将一个常量或表达式赋给个变量。(-)自反算术赋值运算符运算符名称功能*自反乗赋值a = ba = a * b/=自反除赋值a /= ba = a / b+=自反加赋值a += ba = a + b自反减赋值a -= ba = a - b%=自反模赋值a %= ba = a % b自反算术赋值运算举例: 例1: c = b *= a + 3;相当于:c = b *= (a

21、 + 3);c = b = b * (a + 3);例2:设i, j的初值分别是3和4,执行j += i -= 1 后,i、j的值是多少?j += i -= 1;j += i = i - 1;43j+=(i = i- 1); j-j + (i = i- l);62(三)自加和自减运算作用:使变量值加1或减1种类:前置+i, - i (先执行i=i+l或i-1再使用i值)后置i+, i(先使用i值,再执行!=i+1或i-1i =3;k=+i;k=4, i = 4i =3;k=i+;k=3, i = 4i = 3; printf +i) ;4, i = 4i = 3; printf (%d”, i

22、+) ;3, i = 4a =3;b=5; c=(+a)*b;c=20, a = 4a =3;b=5; c=(a+)*b;c=15, a = 4若i=3,那么以下二个式子的值和i的值分别是多少?y = (i+) + (i+)+ (i+) ;y = 9; (3) +(3) + (3), i=6y = (+i) + (+i) + (+i) ;y = 18; (6) + (6) + (6), i=6思考:若y = (+i) + (i+) + (+i);,那么y的值是多少?凡是赋值运算符及其变种(自反、自加减、正负号运算) 的结合方向都是自右向左的。不能用干常量和天伙式一如6+. (x+v)+(四)正

23、负号运算正负号运算符为+ (正号)和一(负号),它们是一元运算符,其优先级别高于、/运算符。结 合方向是从右向左。如:-a*b; -a*-b:相当于(-a)*b; (-a)*(-b)2. 3.2关系运算、逻辑运算与条件运算(-)关系运算关系运算符:;=; 关系运算 赋值运算注意:(1)数学中的表达式aWx b和c语言中的表达式a=x278在数学中是非法的,但在c语言中是合法的表达式。(3)在c语言中关系表达式是整形表达式,可与其它数据进行运算。例如:int i = 1, j = 7, a; a = i + ( j % 4 != 0);(4)字符数据的比较按照该字符的ASCII码进行。例如:a

24、15结果为1A 100结果为0(二)逻辑运算三种逻辑运算:& (逻辑与)、| (逻辑或)、!(逻辑非)C语言中,运算量:表示“假”;非表示“真”;运算结果:表示“假;1表示“真”;优先级:!、+、- 算术运算符 关系运算符& ,丨| 赋值例如:a = 4; b = 5;0!a1a &b1a I Ib1!a | b14 & 0 | 2153&2|8b?a:cd?c:d ab?a: (cd?c :d)2. 5.1 printf函数(格式输出函数)作用:格式化输出任意数据列表。格式:printf (格式控制参数,输出项1,输出项2,);包含两种信息:机修饰符格式字符:用于指定输出格式普通字符或转义序

25、列:原样输出格式字符d,i十进制整数int x=567; pr intf C%d*, x);0567x,X十六进制整数int x=255; pr intfx);FF进制整数int x=65; printfx);101U无符号十进制整数int x=567; pr intf (*%*, x);567C单一字符char x=65; printfl %c , x);AS字符串printf*AB(T);ABCe, E指数形式浮点数float x=567. 89; printfx);5. 67890ef小数形式浮点数float x=567. 89; printf (%f”, x);567. 890015g

26、e和f中较短种float x=567. 89; printfx);567. 89百分号本身printf1. 0/3);0.33%A格式字符除X、E可以用大写外,其余都要用小写;A格式字符与输出项个数应相同,按先后顺序一对应;A格式字符与输出项类型不一致,同类数据按指定格式输出。修饰符(附加格式说明符)修饰符功能m输出数据域宽,数据长度m,左补空格;否则按实际输出n对实数,指定小数点后位数(四舍五入) 对字符串,指定实际输出位数输出数据在域内左对齐(缺省右对齐)0输出数值时指定左面不使用的空位置自动填。u在进制和十六进制数前显示前导, Ox1在d, , x, u前,指定输出精度为long型 在e

27、,f, g前,指定输出精度为double型2. 5. 2 scanf 函数格式:scanf (格式控制参数,变量地址1,变量地址2,)格式控制参数的组成:机修饰符格式字符修饰符1用于长整型数(ld、lo、%lx)或double型实数(lf、%le)h用干短整型和(%hd、%h。、%hx)m域密小F就約.指定蛤入所占歹II富*去示对应蛤入昌不赋给个期曷(点注、dscanf的格式字符用于输入十进制数用于输入进制数X用于输入十六进制数c用于输入单个字符s用于输入字符串(非空格开始,空格或回车结 束,输入字符串在内存中以结尾)f用于输入实数(小数或指数形式均可)e与f相同(可与f互换)使用scanf函

28、数的几个注意事项1 . scanf ()中不使用%u说明符。对unsigned型数据,以观、%、%x格式输入。2 .输入实数不能规定精度,如scanf (线7.2f,&a);3. scanf ()中的变量必须使用地址2. 5. 3 getchar 函数与 putchar 函数字符输入函数getchar()功能:从键盘上接收单个字符说明:无参数:执行到getchar函数时程序暂停运行,等待从键盘上输入一个字符,再回车;通过赋值语句将函数的返回值送到一字符型变量中。函数格式:ch = getchar ();字符输出函数putchar()功能:将所带的字符型变量的内容或字符常量输出到显示器屏幕的当前

29、光标处函数格式:putchar(字符常量);注:字符也可以是转义字符循环控制用while语句实现循环while语句用来实现“当型”循环结构。一般形式:while (表达式)语句当表达式为非值时,执行While语句中的内嵌语句。其特点是:先判断表达式,后执 行语句。注意:(1)循环体如果包含个以上的语句,应该用花括弧括起来,以复合语句形式出现。(2)在循环体中应有使循环趋向于结束的语句。如果无此语句,则i的值始终不改变,循 环永不结束。用do-while语句实现循环do-while语句的特点:先执行循环体,然后判断循环条件是否成立。一般形式:do循环体语句while (表达式);执行过程:先执行

30、次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”) 时,返回重新执行循环体语句,如此反复,直到表达式的值等于O为止,此时循环结束。while语句和用do-while语句的比较:在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分是 样的,它们的结果也样。但是如果while后面的表达式开始就为假(0值)时,两种循 环的结果是不同的。用for语句实现循环(核心)C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语 一般形式:求解表达式】for (表达式

31、1;表达式2;表达式3)语句 for语句的执行过程:(1)先求解表达式1。(2)求解表达式2,若其值为真(值为非),则执 行for语句中指定的内嵌语句,然后执行下 面第(3)步。若为假(值为0),则结束循环, 转到第(5)步。(3)求解表达式3。(4)转回上面第(2)步骤继续执行。for语句的 下语句说明: for(i=0; (c=getchar () ! = n ; i+=c);在表达式2中先从终端接收个字符赋给c,然后判断此赋值表达式的值是否不等于 n(换行符),如果不等于n,就执行循环体。注意:此for语句的循环体为空语句,把本来要在循环体内处理的内容放在表达式3中,作 用是样的。可见f

32、or语句功能强,可以在表达式中完成本来应在循环体内完成的操作。几种循环的比较(1)四种循环都可以用来处理同一问题,般情况下它们可以互相代替。但般不提倡用 goto型循环。(2)在while循环和do-while循环中,只在while后面的括号内指定循环条件,因此为了使 循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i+,或i=i+l等)。for循 环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达 式3中。因此for语句的功能更强,凡用while循环能完成的,用for循环都能实现。(3)用while和do-while循环时,循环变量初始化的操作应在whi

33、le和do-while语句之前 完成。而for语句可以在表达式1中实现循环变量的初始化。(4) while循环、do-while循环和for循环,可以用break语句跳出循环,用continue语句 结束本次循环(break语句和continue语句见下节)。而对用goto语句和if语句构成的循 环,不能用break语句和continue语句进行控制。break语句和continue语句break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句-一般形式:break;注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。例:float pi=3.

34、14159;for(r=l;r=10;r+) area=pi*r*r;if(area100) break;printf( r=%f, area-%fn , r, area);)程序的作用是计算r=l到r=10时的圆面枳,直到面积area大于100为止。从上面的for 循环可以看到:当area100时,执行break语句,提前结束循环,即不再继续执行其余的 几次循环。continue 语句作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循 环的判定.一般形式:continue;continue语句和break语句的区别continue语句只结束本次循环,而不是终止整个

35、循环的执行。while(表达式 1) forif (表达式 2) continue;0break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。while(表达式 1) forif (表达式 2) break;穷举与迭代算法(一)穷举(枚举):对问题的所有可能态测试,直到找到解或穷尽所有的状态。(见例题9)(二)迭代(递推):不断用新值取代变量的旧值,或由旧值递推出变量的新值的过程。 (见例题10)第四章模块化程序设计函数4. 1. 1 C程序结构用C语言设计程序的过程就是编写函数的过程。(库函数(标准函数):,使用情况,系统提供,无须定义,可以直接使用自定义函数:解决用户的专门需要

36、函数分类无参函数:函数形式主调函数与被调函数之间没有数据传递有参函数:1任务情况带返回值不带返回值主调函数与被调函数之间有数据传递函数定义与函数声明 main()double new_style(int a, double x).函数声明:double new_style(int a, double x) 将函数的名字、函数类型以及形参的类型、个(一)函数定义函数定义的内容:函数类型(即函数值类型)函数名形式参数的数目、类型函数体内容:数和顺序通知编译系统。函数定义:指对函数功能的确立,包括指定函 数名、函数值类型、形参及其类型、 函数体等,是个完整的、独立的 函数单位。一:函数名函数名应符合

37、c语言对标识符的规定。二:形式参数一函数名后面一对括号内的参数。1用于从主调函数中接收规定类型的数据。2在函数体中形式参数是可以被引用的,可以输入、输出、赋值和参与运算。程序进行编译时并不为形式参数分配存储空间,只有在 被调用时,形参临时占用存储空间,从主调函数中获 得值。传值过程如下图所示:main( )fun(int a, int b ) 形参名可以选用(./( .I 、合适的标识符,二、I.,关键在形参的数fun(x, y);.,量和类型. x/ main 函数x E y EZJ(实参)(形参)fun函数3函数体一分程序结构,变量定义部分+C语句。4函数的返回一return语句。使流程返

38、回调用函数。有返回值:return(x); return(x+y); return(x=O?x:-x);无返回值:return语句可缺省。C程序中允许有多个return语句。5函数的类型一函数定义时指定的类型为函数的类型,也是该函数返回值的类型。 如果不指定函数的类型,那么系统将隐含指定函数为int型(即缺省类型为int型)。 如果函数没有返回值,应将函数指定为void型。6函数定义的外部性一函数不能嵌套定义,不能定义在另个函数的内部。(二)函数声明 在主调函数中,要对在本函数中将要调用的函数事先声明。 函数声明的一般格式: 函数类型函数名(类型名形参1,类型名形参2,);、float fun

39、 (double a, int b, float c);、float fun (double, int, float);、float fun():不推荐使用main()(void printstar(int n);void print_message ( ) ;printstar(20);被调用函数声明可以放在调用函数开 头的部分或该函数调用之前的地方。print_message( );printstar(20);void printstar(int n)void print_message( ) void printstar(int n)二若函数定义在前,调用在后时,函数的声明可以省略。vo

40、id print_message( )main()(printstar(20);print_ message();printstar(20);如果已在所有函数定义之前,在函数的外部已 作了函数声明,则在调用函数中就不必对被调 用的函数再作声明。void printstar(int n); void print_message(); main()printstar(20);print_message(); printstar(20);void printstar(int n) void print_message()函数的嵌套调用C语言的函数定义都是互相平行的、独立的,即不允许嵌套定义函数:但是

41、,可以嵌套调用 函数,即程序在调用个函数的过程中,该被调函数又可以调用其它函数。函数的递归调用函数的递归调用概念:在函数体内部直接或间接的调用自己,即函数的嵌套调用杲函初本身.int f (int x)int fl (int x)int f2 (int t)(|(int y, z;int y, z;int b, c;z = f (y);z=f2(y);c=fl(a);return(z*z);retum(z);retum(3+c);递归法:类似于数学证明中的反推法,从后一结果与前结果的关系中寻找其规律性。 递推法一从初值出发,归纳出新值与旧值间直到最后值为止存在的关系。要求通过分析得到:初值+递

42、推公式编程:通过循环控制结构实现(循环的终值是最后值)要求通过分析得到:初值+递归函数一般形式:递归函数名f (参数X) if ( n =初值)结果=;else结果二含f( x-1 )的表达式;返回结果(return);在c语言中,存储属性分为4类: 1、 register 2、 auto 3、 static 4、 extern 寄存器变量、自动变量、静态变量、外部变量的性质存储属性registerautostaticextern存储位置寄存器存储器(RAM)生存期动者静话作用域局部局部或全局全局动态、静态局部变量归纳registerautostatic存储区寄存器动态区静态区生存期函数执行

43、期函数执行 期整个程序运 行期赋初值的每次函数每次函数运行前时间调用时调用时(仅一次)未赋初值时 变量的值不确定不确定。或、变量的存储类别小结1,1自动变量auto 函数完毕,值消失2 .静态变量static函数完毕,值保留作域度分从用角划3 .寄存器变量register 同auto4 .形参可定义为auto或register,但不可 定义为static同auto全局1静态全局变量只有本文件可以使用变量v 2.普通外部变量其他文件也可以使用变量的存储类别小结21.自动变量本函数内有效,动态存储2.寄存器变量本函数内有效3.形参本函数内有效1.静态局部变量函数内部有效、静态存储2.静态外部变量本

44、文件内有效3.外部变量其他文件可以引用从生存期J 角度划分1变量的存储类别小结31.静态局部变量r内存的静态存储区2.静态外部变量3,外部变量从变量值的1自动变量存放位置划内存的动态存储区分2.形参【CPU的寄存器中1.寄存器变量变量的作用域和生存期览表变量存储类别函数内函数外作用域存在性作用域存在性自动变量和寄存器变量XX静态局部变量X静态外部变量外部变量编译预处理r宏替换种类1文件包含 1条件编译作用:对源程序编译之前做些处理,生成扩展C源程序。#define#include#ifdef .#else .#endifr以#开头格式,占单独书写行语句末尾不加分号预处理命令不是C语言的组成部分

45、,或者说它不是C语句,而是C语言编译器的组成部分。宏替换(-)字符串宏替换用程序中用一个指定的标识符(宏名)来代替一个字符串(宏体) 一一般形式为:define宏名宏体ftdefine YES 1 ftdefine NO 0 ftdefine PI 3.1415926ftdefine PRT printf(*Hello, World!*)宏的定义位置:任意(一般在函数外面、源程序的开头) 宏的作用域:从定义命令处到文件结束在程序预编译处理过程中,凡是出现宏名的地方,都将用宏体替换掉宏名一宏展开ttdefine PI 3. 14159 ftdefine RADIUS 2.0double circ

46、umO return (2. 0*3. 14159*2. 0);)double area() return (3. 14159*2. 0*2. 0);)宏定义可嵌套,但不能递归带参数的宏与函数的区别:用宏定义和函数有时可以实现同样的功能:#define MAX(x, y) (x)(y)?(x) : (y) main() int a, b, c, d, t;t=MAX(a+b, c+d);宏展开:t= (a+b) (c+d)?(a+b): (c+d); int max(int x,int y) return(xy?x:y);main() int a, b, c, d, t;t=max(a+b,

47、c+d);带参数的宏函数处理时间第译时程序运行时参数类型无类型问题定义实参,为参类型处理过程不分配内存,简单的 字符置换分配内存,先求实参 值,再代入形参程序长度变长不变运行速度不占运行时间调用和返回占时间第五章数组构造数据类型之数组:有序数据的集合,用数组名标识元素:属同一数据类型,用数组名和下标确定5.1 维数组维数组的定义:存储类型数据类型标识符数组名常量表达式:内存字节数=数组维数 sizeof(元素数据类型)5.1.2 维数组的初始化初始化:在定义时指定初始值,编译器把初值赋给数组变量。一般初始化int a5 = 1, 2, 3, 4, 5);等价于:a0=l; al=2; a2=3

48、; a3=4; a4=5;部分元素初始化int a 5 = 1,2,3;等价于:a0=l; al=2; a2 =3; a3=0; a4=0;全部元素均初始化为int a5 = 0;如果全部元素均指定初值,定义中可以省略元素的个数int a = 1,2, 3, 4, 5,11,22,33, 44, 55 );5.1.3 数组元素的引用C语言规定,不能引用整个数组,只能逐个引用元素,元素引用方式: 数组名下标例 1: a0 = a5 + a7 - a2*3;例2:使数组元素a0a9的值为110,然后逆序输出 main() int i, a10;for (i=0;i=9;i+) ai = i+1;f

49、or (i=9;i=0;i-) printf(飞d ”,ai);5.1.4 数组作为函数的参数1、数组元素作为函数参数数组元素作为函数的实参,传递的是数组元素的值 mainOave=average(a0, al, a2);float average(float a, float b, float c) float sum, aver;sum=a+b+c;return(sum/3. 0);)5.1.5 维数组名作为函数参数地址传递在主调函数与被调函数中分别定义数组,且类型应一致形参数组大小可不指定形参数组名是地址变量5.2 二维数组和多维数组5. 2. 1二维数组和多维数组的概念及其定义二维数组

50、定义的一般形式:存储类型数据类型数组名常量表达式常量表达式二维数组的理解例:二维数组aa3 4理解为:由三个元素aa0、aal、aa2组成每个元素是个又包含有4个元素的数组5. 2.2二维数组和多维数组的引用多维数组元素的引用的一般形式:数组名下标下标;5. 2. 3二维数组和多维数组的初始化初始化时分行赋值int aa3 4 = 1,2, 3,4, 5,6, 7,8, 9, 10, 11, 12);初始化时按顺序赋值int aa3 4 = 1,2,3, 4, 5,6, 7, 8, 9, 10, 11, 12;100050009000初始化时部分元素赋值int aa34 = l,5,9;int

51、 aa3 4 = 1, 0,6, 0,0, 1, 1);1000060000 1 1如果对全部元素赋初值,则第一维的长度可以不指定,但必须指定第二维的长度 int aa3 4 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12;等价于 int aa 4 = 1,2, 3, 4, 5, 6, 7,8, 9, 10, 11, 12;二维数组中数组元素顺序号的计算:假设有一个mXn的二维数组a,其中第i行j列元素ai j在数组中位置的计算公式为: iXn+j+15. 3字符数组和字符串5. 3. 1字符串和字符串的存储方法字符数组:存放字符数据的数组,每个数组元素存放个字

52、符。字符数组的定义:char数组名常量表达式例:char c10;c=C ;cl=O;c2=m;c3= p :c4= u ;c5=t;c6=e ;c7=r ;c8=&;c9= C ;字符串:用”号括起来的字符序列。字符串的存储方式:存放在字符数组中,结尾有一个表示字符串结尾的、。 例:char cl 1;cO=C ;cl= o ;c2=m;c3= p ;c4= u ;c5=t;c6=e ;c7=r ;c8=&;c9=C ;c10= 0;5. 3. 2字符数组的初始化1、逐个字符赋给数组中的元素:逐个元素初始化char c5 = C, h, i, n, a;初始化数据少于数组长度,多余元素自动赋

53、值为、0。char c10 = N,A,N,J,I,N,G;cO cl c2 c3 c4 c5 c6 c7 c8 c9 指定初值时,若未指定数组长度,则长度等于初值个数 char cL J-t C , m , p , u , t , e , r );2,用个字符串给个字符数组赋值:char数组名=字符串;char数组名=字符串;字符串和字符数组的区别char c = 七, C I H | I N Achar c =*China*);D=c I C H I I N A I 0char c5=China;I C H I I N A .char c8=China);5. 3.3字符串的输入用scan

54、f函数:祝:向字符数组中输入单个字符char str9;scanf (%c”,&str 0);版:向字符数组中输入字符串char str9;scanf1 s , str);用scanf函数输入字符串的注意事项:输入遇回车键结束,但获得的字符中不包含回车键本身(OxOD),而是在字符串末尾添、。 个scanf函数输入多个字符串,输入时以“空格”键作为字符串间的分隔。char strl5, str25, str35;scanf(*%s%s%s*, strl, str2, str3);输入数据:How are you?char str15;scanf1 %s , str);输入数据:How are

55、you?!如要使str获得全部输入(包含空格及其以后的字符),程序应设计为: char str15;int i=0;for( ;(stri=getchar( )!=n;i+);stri = 0;若有定义:char c,s20;int k;要将字符串This is a string.”记录下来,正确的输入语句应当是:for(k=0;k17;k+) sk=getchar();sk=0;while(c=getchar()!= n ) sk+=c;sk=0;用gets函数:专门用于输入字符串的函数。从终端输入一个字符串(直到回车键)到字符数组中。格式:gets (字符数组)char str9;gets (str);使用gets函数输入字符串时可以包含空格,直到遇到回车符时结束输入。并在字符串的 末尾添加、。5. 3.4字符串的输出1 .用printf函数:用格式字符%c控制输出:printf (%c, stri);printf (%s, %s”, strl, str2);2 .用puts函数:将一个字符

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!