




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第章 C 语言简介学习内容11 C语言与TURBO C12 TURBO C的特点和配置要求13 简单C程序介绍14 C语言可执行程序的产生过程目的要求: 掌握C语言格式特点熟悉C语言的编辑环境重点难点: C语言格式特点 TC编辑器的运行、操作重点难点详解: 【例1.3】通过调用子函数求两个数的和。main() /* 主函数 */int a,b,sum; /* 定义变量 */ a=3;b=4; /* 变量赋值 */ sum=add(a,b); /* 调用add函数*/ printf(sum=a+b=%d.n,sum);int add(int x,int y) int z; z=x+y; return(z); /* 将z的值返回 */C程序的组成规则:1、C 程序是由函数构成的。C语言是函数的语言,一个程序是由一个或多个函数构成的。2、一个函数有两部分组成:(1)函数的首部(函数的第一行)。(2)函数体 即函数首部下面的大括弧内的部分。(3)一个C 程序总是从main 主函数开始执行。无论位置如何。(4)每个语句和数据定义的最后必须有一个分号“;”。(5)C语言本身没有输入/输出语句,是库函数scanf 和 printf 等函数来完成的。(6)用/* */ 作注释,以用于增加可读性。TC编辑器的运行、操作1. 编辑源文件2.源文件的编译3.目标程序的连接4.执行程序 查看结果 操作步骤 Alt+F9 Ctr+F9 Alt+F5 第二章 基本数据类型、运算符与表达式学习内容21基本数据类型22 标识符、常量、变量及其初始化2.3 算术运算符及表达式24 赋值运算符及表达式2.5类型转换运算符26 逗号运算符和逗号表达式目的要求: 掌握整数类型与浮点型数据类型 掌握标识符的命名规则 数据的储存方式 字符型数据 标识符、常量、变量及初始化 掌握运算符及其表达式 掌握赋值运算符和赋值表达式重点难点: 整数类型与浮点型数据类型 标识符的命名规则 复合赋值运算符 运算符及其表达式重点难点详解:整型数据1. 整型数据的在内存中的存放形式 2. 整型变量的分类 1)基本整型 一般为2字节 2)短整型 一般为2字节 3)长整型 一般为4字节 3.整型数据的溢出 如何判断整型常量的类型。 若在-3276832767之间,可认为是普通整型int型或短整型(short型)。 若超出了-3276832767,而在-2147483648+2147483647之间,则认为是长整型(long型)。若认为是int类型的,系统不做检查,但数据会丢失。4.整型常量的类型 (1)十进制整型常量:289、-183等。每个数位都可以是(0 9)十个代码。(2)八进制整型常量:以o开头,如(128)10 =o200 。(3)十六进制整型常量:以ox开头,如(128)16 =ox80。如何判断整型常量的类型。 若在-3276832767之间,可认为是普通整型int型或短整型(short型)。 若超出了-3276832767,而在-2147483648+2147483647之间,则认为是长整型(long型)。若认为是int类型的,系统不做检查,但数据会丢失。 若常量是无符号型(unsigned型),那么一个非负值的整数可以赋值给unsigned型变量,但要注意其范围。50000可赋给unsigned int型,70000却不可以。(无符号整型变量最大值 65535.) 如一整型常量后有L或l则表示为long int型的。常用于函数的调用中。 5.整型变量的定义 变量定义的一般格式 存储类型 数据类型 变量名, 变量名2;例如,int d, l, a;定义变量时指定变量的类型,在编译时好为其分配相应的存储单元。另外,还可在编译时检查该变量所做运算是否合法。一般称在定义变量的同时进行赋初值的操作为变量初始化。 变量初始化的一般格式 存储类型 数据类型 变量名=初值,变量名2=初值2,;例如,int d=2, l=6, a;浮点型数据类型1 浮点型常量的表示方法 (1)十进制小数形式:由整数部分、小数点和小数部分组成。(2)指数形式:由实数部分、E(e)和整数部分组成。2. 浮点型数据的在内存中的存放形式 3. 浮点型变量的分类 单精度型:关键字float,一般占字节(32位),提供位有效数字。 双精度型:关键字double,一般占个字节、提供1516位有效数字。 长双精度型:关键字long double,3.实型数据的舍入误差 请注意有效为数。4.浮点型常量的类型 一个实型常量赋值给一个实型变量时,只根据实型变量表示的有效数字的位数,在实型常量中按从左向右的方向截取数据。Float型的变量只能保存七位有效数字,double型的变量只能保存1516位有效数字。5. 浮点型变量的定义 和前面整型变量的定义的方法一样。标识符的命名规则标识符是一个字符序列,用来标识C语言程序中一个对象的名字。命名时应注意以下几点:1)标识符是一串英文字母或下划线开头的由字母、数字和下划线组成的字符串。例如:a aBC x2z y_1 _A n0都是合法的标识符;而3d #asd 110 A*C 都是非法标识符。2)C语言本身并没有要求标识符的长度,不同的C编译系统允许包含的字符个数有所不同,通常标识符的长度可识别的标识符长度常限制为8个字符。3)标识符大小字母含义不同。比如abc Abc ABC 代表三个不同标识符,这一点一定要牢记。复合赋值运算符合赋值运算符是由赋值运算符之前再加一个双目运算符构成的。 复合赋值运算的一般格式为: 变量 双目运算符 = 表达式 复合赋值运算符它等价于:变量 = 变量 双目运算符 (表达式)。 当表达式为简单表达式时,表达式外的一对圆括号才可缺省,否则可能出错。例如:x += 3 /* 等价于x=x+3 */ y *= x + 6 /* 等价于y=y*(x+6),而不是y=y*x+6 */C语言规定的10种复合赋值运算符如下: +=,-=,*=,/=,%=;/*复合算术运算符(5个)*/ &=,=,|=,=;/*复合位运算符(5个)*/其中后五种是位运算的运算符,在位运算那章介绍。运算符及其表达式算术运算符和算术表达式 1.基本的算术表达式+ 加法运算符或正值运算符 - 减法运算符或负值运算符 * 乘法运算符 / 除法运算符 TC2.0采取“向零取整”法 % 模运算符或称求余运算符 该运算符的两边只能是整型数据。2.算术表达式和运算符的优先级与结合性 左结合性、右结合性3.强制类型转换运算符 除自动转换外,语言也允许强制转换。 数据类型强制转换的一般格式为: (要转换成的数据类型)(被转换的表达式)(类型)(表达式)例如: (int)(x+y) /*将x+y的结果转换成int型*/ (float)5/2(等价于(float)(5)/2) /*将5转换成实型,再除以2(=2.5)*/(float)(5/2) /*将5整除2的结果(2)转换成实型(2.0)*/注意:强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。例如,(double)a 只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。4. 自增、自减运算符(+、-) (1)作用 自增运算使单个变量的值增,自减运算使单个变量的值减。(2)用法与运算规则 自增、自减运算符都有两种用法。 a)前置运算运算符放在变量之前:变量、变量 先使变量的值增(或减),然后再以变化后的值参与其它运算,即先增减,后运算。b)后置运算运算符放在变量之后:变量、变量 变量先参与其它运算,然后再使变量的值增(或减),即先运算,后增减。例如: k=1; k=1;演示 j=+k; j=k+; 左边: k先变成2 , j=2 右边: k为1,j=1然后k为2。 使用中的问题说明:(1) 这两种、运算符只能用于变量,而不能用于常量或表达式。(2) +、-运算符的优先相同,但比算术运算符优先级要高。其结合性是“从右至左”的。 i=3; j=-(i+);i=3; j=+(+i); printf(“%d,%d”,i,j); printf(“%d,%d”,i,j);结果是:,-3 结果是:,4第三章 结构化程序设计学习内容:31 结构化程序设计方法32 顺序结构3.3选择结构34 循环结构目的要求:掌握顺序结构程序设计方法掌握数据的输入输出掌握关系运算符逻辑、条件运算符及其它们的表达式掌握if语句掌握switch语句掌握while语句、do-while语句、for语句掌握循环的嵌套重点难点:数据的输入输出掌握关系运算符逻辑、条件运算符及其它们的表达式掌握if语句掌握switch语句for语句Break和continue语句重点难点详解:数据的输入输出1. printf函数(格式输出函数)printf()函数的作用:向计算机系统默认的输出设备(一般指终端或显示器)输出一个或多个任意类型的数据。(1)printf函数调用的一般形式为: printf(“格式字符串”,输出表列);例如:printf(radius=%fnlength=%7.2f,area=%7.2fn, r, l, a);格式字符串也称格式控制字符串或格式转换字符串,其中可以包含下列三种字符: 格式指示符:由“%”和格式字符组成,例如“%f”、“%7.2f”等,这总是由“%”字符开始,到格式字符终止。它的作用是将输出的数据项转换为指定的格式输出。输出表列中的每个数据项对应一个格式指示符。 转义字符:这些字符通常用来控制光标的位置。 普通字符:除格式指示符和转义字符之外的其他字符,这些字符输出时原样输出,例如上面例子中的“radius=”等。 (2) 类型字符: %d 十进制整数 int a=567;printf ( “%d”,a); 567%o 八进制无符号整数 int a=65;printf(“%o”,a);101%x或X十六进制无符号整数 int a=65;printf(“%x”,a);ff%u不带符号十进制整数 int a=567;printf(“%u”,a);567%c 单一字符char a=65;printf(“%c”,a);A%f 小数形式浮点小数float a=456.789;printf(“%f”,a); 456.789000%s 字符串printf(“%s”,“ABC”);ABC%e或E 指数形式浮点小数 float a=456.789;printf(“%e”,a); 4.567890e+02 %g或G e和f中较短一种float a=456.789;printf(“%g”,a); 456.789说明: 格式字符要用小写 格式字符与输出项个数应相同,按先后顺序一一对应 输出转换:格式字符与输出项类型不一致,自动按指定格式输出2.scanf函数(格式输入函数)(1). scanf函数的一般形式 格式:scanf(“格式控制字符串”,地址表列);功能:按指定格式从键盘读入数据,存入地址表 指定的存储单元中,并按回车键结束返值:正常,返回输入数据个数地址表列:变量的地址,常用取地址运算符&格式字符:d,i,o,x,u,c,s,f,e使用scanf()时应注意的一些问题:scanf函数中没有精度控制,不能企图用格式控制符来规定输入数据的精度scanf(“%5.2f”,&a)scanf中要求给出变量地址,如给出变量名则会出错。如 scanf(%d,a);是非法的,应改为scnaf(%d,&a);才是合法的。在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。 在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。在输入数据时遇到以下情况之一认为一个数据输入结束字符数据的输入输出1.putchar 函数(字符输出函数)putchar 函数是字符输出函数,其功能是在显示器上输出单个字符。其一般形式为:putchar(字符变量)例如:putchar(A); (输出大写字母A)putchar(x); (输出字符变量x的值)putchar(n); (换行)2.getchar函数(键盘输入函数)getchar函数的功能是从键盘上输入一个字符。其一般形式为:getchar();通常把输入的字符赋予一个字符变量,构成赋值语句,如:char c;c=getchar();If语句用if语句可以构成分支结构。它根据给定的条件进行判断, 以决定执行某个分支程序段。语言的if语句有三种基本形式。1.第一种形式为基本形式 if(表达式) 语句; 其语义是:如果表达式的值为真,则执行其后的语句, 否则不执行该语句。2.第二种形式为if-else形式 if(表达式) 语句1; else 语句2; 其语义是:如果表达式的值为真,则执行语句1,否则执行语句2 。3.第三种形式为if-else-if形式 前二种形式的if语句一般都用于两个分支的情况。 当有多个分支选择时,可采用if-else-if语句,其一般形式为: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式m) 语句m; else 语句n; 其语义是:依次判断表达式的值,当出现某个值为真时, 则执行其对应的语句。然后跳到整个if语句之外继续执行程序。 如果所有的表达式均为假,则执行语句n 。 然后继续执行后续程序。 if-else-if语句的执行过程如图33所示。4. 在使用if语句中还应注意以下问题(1) 在三种形式的if语句中,在if关键字之后均为表达式。 该表达式通常是逻辑表达式或关系表达式, 但也可以是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如: if(a=5) 语句; if(b) 语句; 都是允许的。只要表达式的值为非0,即为“真”。如在if(a=5);中表达式的值永远为非0,所以其后的语句总是要执行的,当然这种情况在程序中不一定会出现,但在语法上是合法的。(2) 在if语句中,条件判断表达式必须用括号括起来, 在语句之后必须加分号。(3) 在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用 括起来组成一个复合语句。但要注意的是在之后不能再加分号。Switch语句语言还提供了另一种用于多分支选择的switch语句, 其一般形式为: switch(表达式) case常量表达式1: 语句1; case常量表达式2: 语句2; case常量表达式n: 语句n; default : 语句n+1; 其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。 如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。在使用switch语句时还应注意以下几点:1.在case后的各常量表达式的值不能相同,否则会出现错误。2.在case后,允许有多个语句,可以不用括起来。3.各case和default子句的先后顺序可以变动,而不会影响程序执行结果。4.default子句可以省略不用。for语句for语句是C语言中所提供的功能最强、使用最为灵活的一种循环语句。特别适用于循环次数固定而循环条件不确定的情况。 for语句的一般形式如下:for(表达式1;表达式2;表达式3) (1)表达式1通常是用来给循环变量赋初值,一般是赋值表达式。也允许在for语句之外给循环变量赋初值,此时可省略该表达式;(2)表达式2通常是循环条件,一般为关系表达式或逻辑表达式,也可以是其它表达式; (3)表达式3通常可用来修改循环变量的值,一般是赋值表达式。 三个表达式都是可选项,都可以省略。但特别提请注意的是,表达式1和表达式2后的分号“;”不能省略。 for语句的执行过程如下:(1)首先计算表达式1的值;(2)再计算表达式2的值,若值为真(非0)则执行循环体语句一次,否则跳出循环;(3)循环体语句执行完后,再计算表达式3的值,转(2)步去执行。在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次。 for语句的流程图for语句最主要的特点是:特别适合已知循环次数的循环语句,下面介绍一下for语句中循环次数的计算方法。根据for循环的循环变量的变化情况。循环次数的计算可以用公式进行计算: n=(int)(终值-初值+步长)/步长) 其中,初值指循环变量的初始值,终值指循环变量满足条件的最终值,步长指循环变量每循环一次所变化的量。 例如:循环语句for(n=1;n=100;n+)(设n为整形变量)控制循环体反复执行的次数为 n=(int)(100-1+1)/1)=100 又如:循环语句for(n=100;ny) return x; else return y;/*现代的定义形式*/int max(int x,int y) if(xy) return x; else return y;现在各种书中一般都采用现代的定义形式,以后例子中我们都是采用现代的定义形式,针对现代定义形式,进行说明: (1)定义形式中最上面的一行是函数的头。函数的头一般描述了这个函数的返回值类型、函数名和形式参数。由一对花括号“ ”括起来的部分称为函数体,函数体是书写语句的地方,是函数的功能实现部分,在这里语句的书写方式和以前所讲过的main函数的书写方式是一样的。(2)函数名是唯一标识一个函数的名字,它的命名规则与变量的命名规则相同。在一个程序中,除main函数外,其它的自定义函数的名字都是由用户指定的,命名时除了不要与系统的关键字、库函数的名字相同外,用户要同变量命名一样做到“见名知义”。(3)当函数名前的类型标识符指定为“void”时,这样的函数是一个无返回值的函数,对应的函数体中是不需要return语句的。当函数名前的类型标识符为一种类型的关键字或未指定(默认为int)时,函数体中的return语句是需要的,这就说明这个函数是一个有返回值的函数,当函数执行完毕时将带回一个类型为所指定(未指定时默认为int)的值给主调函数。当定义了返回值类型,而在函数体中不用return语句,这样函数会带回一个不确定的值,这样的值是没有用的,所以当不需要一个函数的返回值时,最好定义成无返回值的类型(用void指定)。(4)函数名后面的一对圆括号中为函数的形式参数定义,当括号为空的时候,表示这个函数是一个无参数的函数,调用时不需要提供参数。当括号内为非空时,则代表调用这个函数时需要提供参数,参数的定义形式同定义一个变量是一样的。当有多个参数时,各参数之间用逗号分割。函数的调用1.函数的调用方式当函数定义好后,就可以在主函数中调用了,这是最简单的调用形式了。语言中,函数调用的一般形式为: 函数名(实际参数列表)在函数调用中,对于无参函数调用时是没有实际参数列表。实际参数列表中的参数可以是常数,变量或其它构造类型数据及表达式,各实际参数之间用逗号分隔。(1)函数表达式:函数作为表达式中的一项出现在表达式中,这种形式是使用函数的返回值参与了表达式的运算,这种方式要求函数是有返回值的。当是无参数函数调用时实际参数列表是空的,但后面的一对圆括号是不能缺少的,当有参数时要在圆括号中提供实际参数。例如:z=max(x,y)是一个赋值表达式,把调用max函数的返回值赋给变量z。(2)函数语句:函数调用的一般形式加上分号即构成函数语句,这种调用形式可以是无返回值的函数调用形式,或有返回值的并不使用这个函数返回值也可以这样调用。例如:printf(%d,a);、print_star();都是以函数语句的方式调用函数的。 (3)函数实参:一个函数调用作为另一个函数调用的实际参数出现。这种情况是把该函数的返回值作为另外一个函数的实际参数进行使用,因此要求该函数必须是有返回值的。函数的嵌套语言中不允许嵌套的函数定义。因此各函数之间是平行的,不存在上一级函数和下一级函数的问题。但是语言允许在一个函数的定义中出现对另一个函数的调用。这样就出现了函数的嵌套调用。即在被调函数中又调用其它函数。函数的嵌套调用为自顶向下、逐步求精及模块化的结构化程序设计提供了最基本的支持。其关系可表示如图。 main()a();a()b();b()函数嵌套调用的执行过程图表示了两层嵌套的情形。main函数中调用a函数,在a函数中又调用b 函数,嵌套调用程序的执行是一个逐层深入,然后再逐层退出的过程,具体过程如下:(1)程序开始执行main函数,顺序执行main函数中的语句,即第步。(2)当执行到调用a函数时,main函数停止执行,转而去执行a函数。(3)顺序执行a函数中的语句,即第步。(4)在a函数中遇到调用b函数的语句,a函数停止执行,转而去执行b函数。(5)顺序执行b函数中的语句,即第步,如果还有函数调用,则继续进入执行。(6)当b函数执行完毕,返回到主调函数a函数的断点继续执行剩下的语句,即第步。(7)当a函数执行完毕,返回到主调函数main函数的断点继续执行剩下的语句,直到main函数结束,则程序结束。即第步。 四种存储类别C语言中对变量的存储类型说明有以下四种:auto 自动变量register 寄存器变量static静态变量extern外部变量自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式,在定义变量的时候要加上变量的存储类型定义。一般形式如下(即在数据类型前面加上存储类型定义): 存储类型说明符 数据类型说明符 变量列表; 例如:auto int a,b;static float c4=1,8,4,7;register int w;extern double x,y; 1.自动变量(auto)自动变量的说明符为auto。这种存储类型是C程序中最广泛应用的一种类型。C语言规定,在函数内凡未加存储类型说明的变量都视为自动变量,即,自动变量可以省去auto关键字。自动变量有以下特点:(1)自动变量只能定义在函数内部,形参、返回值的数据类型前面不能加auto关键字,否则TURBO C 2.0提示错误。(2)自动变量采用动态存储方式,当程序执行进入它的作用域,就分配内存,可以访问,当程序出了它的作用范围,变量内存就被回收,变量不可使用。(3)自动变量和我们以前使用的局部变量是等价的,使用方法也一样,其实以前我们使用的局部变量就是自动变量。如:auto int b,c=3; 等价于 int b,c=3; (相当于省略了auto关键字)2.寄存器变量(register) 我们知道当前所用到的变量都是在内存中开辟空间的,当一个变量频繁的读写就要反复不断地访问内存,从而浪费了大量的时间。众所周知CPU中寄存器的存取速度是非常快的,为了提高效率,C语言允许将局部变量存放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register声明。 使用寄存器变量要注意的问题:(1)只有局部自动变量和形式参数可以作为寄存器变量;(2)一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;(3)局部静态变量(下面讲的)不能定义为寄存器变量。 3.外部变量(extern)外部变量(即全局变量)是在函数的外部定义的,外部变量的存储空间分配方法是静态存储分配方式,即程序开始运行时,就分配存储空间,当程序结束时才回收存储空间。它的作用域为从变量定义处开始,到本程序文件的末尾,如果在定义点之前的函数或其它源文件中的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”。表明该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,到文件结束,合法地使用该外部变量,即用extern可以扩展外部变量的作用域。4.静态变量(static) 静态变量的说明符是static,用static关键字定义的变量才是静态变量。静态变量分配存储空间采用的是静态存储方式。即,当程序运行时就在用户的静态存储区分配了空间,当程序运行结束的时候才回收内存。我们知道变量按作用域分是有全局变量和局部变量之分的。同样,静态的局部变量和静态的全局变量是不同的。 (1)用static声明的静态局部变量函数中的局部变量在调用函数后要回收空间,变量的值也随之消失。有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,当下次再调用这个函数的时候继续使用保留的值,这时就应该指定局部变量为“静态局部变量”,即用关键字static进行声明。1)静态局部变量属于静态存储类别,程序开始运行时(而不是函数发生调用时,这一点一定要注意)在静态存储区内分配存储单元。在程序整个运行期间都不释放,每次调用函数时静态变量的值都是上次调用后的值。而自动变量(即动态局部变量)属于动态存储类别,在动态存储区内分配空间,函数调用结束后就释放。2)静态局部变量的作用域和动态局部变量的作用域是一致的,虽然静态局部变量在整个程序运行过程中都存在,但在其它函数中并不能使用该变量。3)静态局部变量在程序开始执行前赋初值,即只赋一次初值;而自动变量赋初值是在函数调用时进行的,每调用一次函数就对自动变量重新赋一次初值。4)如果在定义局部变量时不赋初值,则对静态局部变量来说,运行时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。5)局部静态变量不能定义为寄存器变量。 (2)用static声明静态外部变量 外部变量虽然采用的是静态存储方式,但不能说外部变量是静态变量,当外部变量使用static关键字定义时,这就是静态外部变量。我们知道外部变量的作用域可以使用extern关键字进行拓展,而静态外部变量是不能拓展,即使用了extern关键字也不能拓展它的作用域。外部变量和静态外部变量都采用的是静态存储方式,唯一不同的就是作用域。 第五章 预处理命令学习内容:5.1 宏定义5.2 文件包含5.3条件编译目的要求:掌握常用的预处理命令与文件包含重点难点:宏定义的应用重点难点详解:宏定义的应用:宏定义功能是定义符号常量和常参数的宏,宏定义编译预处理语句的格式如下 : #define 字符串1 字符串2它把字符串1定义为字符串2,字符串1称为字符串2的宏定义,例如,下面是符号常量的宏定义: #define ON 1 #define OFF 0 它把符号常量ON定义为1,OFF定义为0。符号常量经过宏定义后,就可以在程序中作为常量使用。在宏定义语句中,可以使用已经定义过的符号常量定义新的符号常理。例如: #define WID 40 #define LEN (WID+20) 其中第二个宏定义中使用了第一个宏定义的符号常量WID。在执行编译预处理时,程序中出现的所有符号常量WID都将被40置换。1、不带参数的宏定义:用一个指定的标识符(即名字)来代表一个字符串。一般形式:#define 标识符 字符串例:#define PI 3.14159说明:(1)宏名一般习惯用大写字母表示。(2)使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量。(3)宏定义是用宏名代替一个字符串,也就是作简单的置换,不作正确性检查。(4)宏定义不是C语句,不必在行末加分号. #define PI 3.14159; area=PI*r*r; 展开: area=3.14159;*r*r; 出现语法错误(5)#define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束。(6)可以用#undef命令终止宏定义的作用域。 格式:#undef 宏名7)在进行宏定义时,可以引用已定义的宏名,可以层层置换。 #define R 3.0 #define PI 3.14159 #define L 2*PI*R #define S PI*R*R main( ) printf(“L=%fnS=%fn”,L,S); (8)对程序中用双括号括起来的字符串内的字符,即使与宏名相同,也不进行置换。(9)宏定义是专门用于预处理命令,只作字符替换。2、带参数的宏定义:一般形式: #define 宏名(参数表) 字符串#define MULT2(X) X*X 其中,MULT2(X)称为带参数的宏,X是它的形式参数。该宏定义把MULT2(X)定义为X*X。在此定义后,MULT2(X)就可以用在程序中代替定义它的运算表达式X*X。它的形式参数的使用特性类似于函数的形式参数。在程序中需要计算某个数的平方值时,可以使用这个已定义 的宏,例如:a=10;c=MULT2(a); 在进行编译预处理时,带参数的宏用它的定义置换,其中的形式参数用实际使用的实际参数置换。因此,上面的赋值表达式置换后的形式是:c=a*a; 其中定义式中的形式参数X被实际参数a置换,该运算表达式的结果是100。当程序中需要计算某两个变量和的平方时,如果使用上面定义的带参数的宏的话,如下所示:w=6;v=4;c=MULT2(w+v); 进行编译预处理后,上面的赋值表达式置换后的形式是: c=w+v*w+v; 它的运算顺序与预定的顺序完全不同,计算结果是34。如果上面的宏定义改为下列形式: #define MULT2(X) (X)*(X)上面的赋值表达式置换后就成为: c=(w+v)*(w+v); 它的运算结果就正确了。这里又一次看到在定义式中使用必要圆括号的重要性。 第六章 构造数据类型学习内容:6.1 枚举类型6.2数组6.3结构体6.4位域与位运算6.5共同体6.6 typedef目的要求:掌握结构体的定义和使用掌握一维数组定义初始化掌握选择排序、气泡排序、插入排序的解题方法掌握二维数组定义初始化掌握字符数组和字符串的区别如何利用字符数组来存放字符串掌握共同体的定义和使用重点难点:二维数组使用字符数组的应用字符串的存放结构体的应用重点难点详解:二维数组使用二维字符数组的每一行可以看作一维字符数组,即二维字符数组的每一行可以存放一个字符串,于是二维字符数组又称为字符串数组. #include void main()int i,j;char diamond55= , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*;for(i=0;i5;i+) for(j=0;j5;j+) printf(%c,diamondij); printf(n); 字符数组的应用一、字符数组的定义:char a19, a1010; 二初始化:1、将逐个字符赋给数组中个元素。 static char a4=h,o,w,!2.可直接将一C字符串赋予某一字符数组。 static char str8=”program”;三字符数组的引用。可以引用字符数组中每一个元素,得到一个字符。%c可以对整体处理。%s四、字符串和字符串结束标志字符串的结束标志是0,这是系统自动加上的。在初始化时,注意: static char c4=b,o,y;与 static char c4=“boy”; 有区别。字符串的存放1、puts()函数:输出字符串(以0结尾)。例、 static char c6=China; printf、puts均以0结尾. printf(%sn,c); printf需要格式控制符%s puts(c); puts不需要格式控制符,且自动换行 2、gets()函数:输入字符串到数组。例、 static char str12; gets(str); 注意:gets()、puts()一次只能输入输出一个字符串。而scanf()、printf()可以输入输出几个字符串。例:#include “stdio.h” main() char str80; gets(str); puts(str); 注意:scanf():输入字符串使用“%s”,输入的字符串中不能包含0字符(空格),否则输入结束,输入的字符数组名不要加入“&”,一个scanf()语句一次可以输入多个字符串。Printf(): 输出字符串使用“%s”,输出的字符串中不能包含0字符,否则输出结束,一个prinft()语句一次可以输出多个字符串。 gets():使用gets(字符数组名)形式,输入字符串中可以包含0字符,但一个gets()一次只可以输入一个字符串。 puts():使用puts(字符数组名)形式,输出字符串可以包含0字符,但一个gets()一次只可以输出一个字符串。3、strcat():连接字符串。 strcat(字符串1,字符串2); 把“字符串2”连接到“字符串1”的后面。4、strcpy():字符串拷贝。 strcpy(字符串1,字符串2); 把“字符串2”的值拷贝到“字符串1”中 不能用赋值语句将一个字符串常量直接赋给一个字符数组,应使用strcpy()函数。5、strcmp():字符串比较。比较“字符串1”、“字符串2”,例、 strcmp(str1,str2); strcmp(China, Korea); strcmp(str1, Beijing); 比较规则:逐个字符比较ASCII码,直到遇到不同字符或0,比较结果是该函数的返回值。6、strlwr():将字符串中的大写字母转换为小写字母(lwr:lowercase小写)。7、strupr():将字符串中的小写字母转换为大写字母(upr:uppercase大写)。 注意:以上函数均是库函数,使用时必须用#include语句包含头文件。#include “string.h”结构体的应用:结构体是由不同数据类型的若干数据集合而成。在程序中使用结构体时,一般不允许把结构体作为一个整体参加操作处理,而应通过对结构体的各个成员项的引用来实现各种运算和操作。1.引
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年环保产业项目可行性研究评估报告
- 成人教育终身学习体系构建与平台运营中的远程教育技术发展趋势报告
- 工业互联网平台数字签名技术规范与工业互联网平台数据治理报告
- 社会实践自我鉴定总结范文
- 大型公司办公室管理制度
- 泵站配电安全管理制度
- 2025年四川省遂宁市中考生物真题(原卷版)
- 土溪镇三公经费管理制度
- 加装电梯出入口管理制度
- 分公司劳务派遣管理制度
- 2019年盲样考核方案汇总
- 天医门符法修炼与祝由移病法
- 义务教育科学课程标准(2022年版)
- 美国CLIA88质量要求
- 货物运输托运单
- 年公开选拔副科级领导干部试题及答案
- 喉镜使用简单介绍PPT课件
- 赴美国自由行旅行英文行程单模板(面签)
- 不停车称重系统
- 中国重汽集团章丘工业园简介-12页word资料
- 检验科生物安全审批记录
评论
0/150
提交评论