收藏 分享(赏)

C语言学习,强化总结.ppt

上传人:wjmd390 文档编号:8116487 上传时间:2019-06-09 格式:PPT 页数:95 大小:1.92MB
下载 相关 举报
C语言学习,强化总结.ppt_第1页
第1页 / 共95页
C语言学习,强化总结.ppt_第2页
第2页 / 共95页
C语言学习,强化总结.ppt_第3页
第3页 / 共95页
C语言学习,强化总结.ppt_第4页
第4页 / 共95页
C语言学习,强化总结.ppt_第5页
第5页 / 共95页
点击查看更多>>
资源描述

1、函 数,函数概述,函数的概念,函数其实就是一段可以重复调用的、功能相对独立完整的程序段。,C是函数式语言必须有且只能有一个名为main的主函数C程序的执行总是从main函数开始,在main中结束函数不能嵌套定义,可以嵌套调用,2、函数的分类,从用户角度,标准函数(库函数):由系统提供用户自定义函数,从函数形式,无参数无返回值无参数有返回值有参数无返回值有参数有返回值,使用库函数应注意:1、函数功能2、函数参数的数目和顺序,及各参数意义和类型3、函数返回值意义和类型4、需要使用的包含文件,函数调用和函数说明,函数调用,函数语句:例:printstar ( );printf (“Hello,Wor

2、ld!n”);函数表达式:例: m = max (a, b) * 2;函数参数:例: printf (“%d”, max(a,b);m = max (a, max(b,c);,函数说明对被调用函数要求: 必须是已存在的函数 库函数: #include 用户自定义函数: 函数类型说明函数说明 一般形式: 函数类型 函数名(形参类型 形参名, );或 函数类型 函数名( ); 作用:告诉编译系统函数类型、参数个数及类型,以便检验 函数定义与函数说明不同 函数说明位置:程序的数据说明部分(函数内或外) 下列情况下,可不作函数说明若函数返值是char或int型,系统自动按int型处理被调用函数定义出现

3、在主调函数之前 有些系统(如BC、VC)要求函数说明指出函数返值类型和形参类型,并且对void 和 int 型函数也要进行函数说明,函数参数的传递方式,1、值传递方式,根据实参传递给形参值的不同,通常有值传递方式和地址传递方式两种。,方式:函数调用时,为形参分配单元,并将实参的值复制到形参中;调用结束,形参单元被释放,实参单元仍保留并维持原值。特点: 形参与实参占用不同的内存单元 单向传递,2、地址传递方式,方式:函数调用时,将数据的存储地址作为参数传递给形参特点: 形参与实参占用同样的存储单元 双向传递 实参和形参必须是地址常量或变量,用数组名作为函数参数时还应注意以下几点:形参数组和实参数

4、组的类型必须一致,否则将引起错误。形参数组和实参数组的长度可以不相同,因为在调用时,只传送首地址而不检查形参数组的长度。多维数组也可以作为函数的参数。在函数定义时对形参数组可以指定每一维的长度,也可省去第一维的长度。,除了用数组名作为函数参数来实现参数的地址传递以外,其实还有一种应用更广的地址传递方法,那就是用指针变量来作为函数的形参,其具体使用方法将在第9章作详细讨论。,变量的作用域和生存期,1、作用域和生存期的基本概念,变量的作用域即变量的作用范围(或有效范围)。表现为变量有的可以在整个程序或其它程序中进行引用,有的则只能在局部范围内引用。按其作用域范围可分为两种:即局部变量和全局变量,变

5、量的生存期变量从被生成到被撤消的这段时间。实际上就是变量占用内存的时间。按其生存期可分为两种:即动态变量和静态变量,变量只能在其生存期内被引用,变量的作用域直接影响变量的生存期。作用域和生存期是从空间和时间的角度来体现变量的特性。,2、局部变量作用域和生存期,定义在函数内作定义说明的变量,也称为内部变量 。作用域仅限于函数内,离开函数后不可再引用。生存期从函数被调用的时刻到函数返回调用处的时刻(静态局部变量除外)。,int f1 ( int x, int y ) int z;z = x y ? x : y;return (z); void f2 ( ) printf (“%dn“, z );

6、,3、全局变量作用域和生存期,定义在函数外部作定义说明的变量,也称为外部变量 。它不属于哪一个函数,而属于一个源程序文件。 作用域从定义变量的位置开始到本源文件结束,及有extern说明的其它源文件。生存期与程序相同。即从程序开始执行到程序终止的这段时间内,全局变量都有效。,#include #include int sign ( );/计算数n的平方根 float sqr ( ) if ( n 0 )return (sqrt(n); else return (-1); ,float n = 0;void main ( ) int s;float t;scanf (“%f“, ,定义全局变量,

7、并赋初值,局部变量,局部变量,变量的存储类型,概述,变量是对程序中数据的存储空间的抽象变量的属性 数据类型:变量所持有的数据的性质(操作属性)。规定了它们的取值范围和可参与的运算 。 存储类型: 规定了变量占用内存空间的方式,也称为存储方式。 存储器类型:寄存器、静态存储区、动态存储区auto-自动型register-寄存器型static -静态型extern-外部型,存储类型说明符 数据类型说明符 变量名1,变量名2,变量名n;,变量定义的完整形式应为:,例如:auto char c1, c2; /c1, c2为自动字符变量register i; /i为寄存器型变量static int a,

8、 b; /a, b为静态整型变量extern int x, y; /x, y为外部整型变量,1、自动变量(auto型变量),auto 数据类型说明符 变量名1,变量名2,变量名n;,定义格式,说明,存储类型说明符auto可以省略。自动变量只能在函数内或复合语句中定义,它属于局部变量。,void func ( ) int i, j, k; ,等价于 auto int i, j, k;,auto int k; void func ( ) ,自动变量不可定义在函数外,注意:在函数外部定义的没有带存储类型说明符的全局变量是外部变量,属于静态存储类型。如:int k; /k为外部变量,属静态存储类型vo

9、id func ( ),2、外部变量(extern型变量),外部变量和全局变量是对同一类变量的两种不同角度的提法。全局变是是从它的作用域提出的,外部变量从它的存储方式提出的,表示了它的生存期。它属于静态存储类型。,例: 引用其它文件中的外部变量,原文件prg1.cpp int a, b; /外部变量定义 int max ( ); /外部函数声明void main ( ) int c; a = 4, b = 5; c = max ( );printf (“max = %dn“, c); ,原文件prg2.cpp extern int a, b; /外部变量定义int max ( ) return

10、 (a b ? a : b); ,编译、链接、运行,运行结果:max = 5,3、静态变量(static型变量),静态变量与静态存储类型,静态变量的类型说明符是static。静态变量属于静态存储类型。静态存储类型的变量不一定就是静态变量。例如外部变量虽属于静态存储类型但不一定是静态变量,必须由static加以定义后才能成为静态外部变量,或称静态全局变量。 自动变量可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。,静态局部变量,在局部变量的说明前加上static就构成静态局部变量,例如:static int a, b;static float array5 = 1

11、, 2, 3, 4, 5;,静态全局变量,全局变量(外部变量)的说明之前再冠以static就构成了静态全局变量。全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。当一个源程序由多个源文件组成时,非静态的全局变量可通过外部变量说明使其在整个源程序中都有效。而静态全局变量只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能通过外部变量说明来使用它。,prg1.cpp int a, b; static char ch; void main ( ) ,prg2.cpp extern int a, b; extern char ch; int func (int x, int y

12、) ,外部(全局)变量定义,静态全局变量定义,4、寄存器变量(register型变量),这种变量存放在CPU的寄存器中,使用时,不需要访问内存,而直接从寄存器中读写,这样可提高效率。寄存器变量的说明符是register,属于动态存储类型。,void main ( ) register i, s = 0;for (i = 1; i = 100; i+)s = s + i;printf (“s = %dn“, s); ,几点说明:只有局部自动变量和形式参数才可以定义为寄存器变量。register修饰符是过时的修饰。,函数的嵌套与递归调用,C规定:函数定义不可嵌套,,1、函数的嵌套调用,但可以嵌套调

13、用函数,2、函数递归调用定义:函数直接或间接的调用自身叫函数的递归调用,说明,int f (int x) int y, z;z = f (y);.return (2*z); ,直接递归,间接递归,C编译系统对递归函数的自调用次数没有限制每调用函数一次,在内存堆栈区分配空间,用于存放函数变量、返回值等信息,所以递归次数过多,可能引起堆栈溢出,函数的作用域,1、内部函数,函数一旦定义后就可被其它函数调用。但当一个源程序由多个源文件组成时, 在一个源文件中定义的函数能否被其它源文件中的函数调用呢?为此,语言又把函数分为两类:,如果在一个源文件中定义的函数只能被本文件中的函数调用,而不能被同一源程序其

14、它文件中的函数调用,这种函数称为内部函数。,定义,一般形式,static 类型说明符 函数名(形参表),例如: static int func (int a, int b) return (a b ? a : b); ,内部函数也称为静态函数。但此处静态static的含义已不是指存储类型,而是指对函数的作用域只局限于本文件。因此在不同的源文件中定义同名的静态函数不会引起混淆。,2、外部函数,外部函数在整个源程序中都有效,其定义的一般形式为,extern 类型说明符 函数名(形参表),缺省时,隐含为extern,prg1.cpp extern int func2 ( ); void main (

15、 ) func2 ( ); int func1 (int a, int b) return (a b ? a : b); ,prg2.cpp extern int func1 (int a, int b); static int func2 ( ) int x, y, z;scanf (“%d%d”, ,外部函数说明正确,内部函数定义,引用外部函数,选择结构程序设计,选择结构的程序设计,1. if语句,简单if语句形式,if (表达式)语句;,格式:,执行流程:,例如:下面的程序段是输入两个整数,输出其中的大数。int a, b, max;printf (“input two numbers:

16、 “);scanf (“%d%d“, ,if_else形式,if (表达式)语句1; else语句2;,格式:,执行流程:,例如:下面的程序段同样是输出两个整数中的最大数。int a, b;printf (“input two numbers: “);scanf (“%d%d“, ,1. if语句,if_else_if形式,if(表达式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3; else 语句n;,格式:,执行流程:,例如:下面的程序段是判断输入字符的种类。char c;printf (“Enter a character: “);c = g

17、etchar ( );if (c = 0 ,if语句注意事项,(1) if语句后面的表达式必须用括号括起来 。(2) 表达式通常是逻辑表达式或关系表达式,但也可以是其它任何表达式,如赋值表达式等,甚至也可以是一个变量。只要表达式非零时,表达式的值就为真,否则就是假。(3) 在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用 括起来组成一个复合语句。但要注意的是在之后不能再加分号。(4) 在if语句中,如果表达式是一个判断两个数是否相等的关系表达式,要当心不要将=写成了赋值运算符=。,if (a = 5) 语句; /表达式的值永远为非0

18、,所以其后的语句总是要执行的if (b) 语句; /等价于if (b != 0) 语句;,运行结果:x = 0,运行结果:x != 0,if语句嵌套:一般形式:,语言规定,在缺省 时,else总是和它上面离它最近的未配对的if配对,运行结果:a = 0,运行结果:a = 1,if_else 配对原则,2. switch语句(开关分支语句)一般形式:,switch ( 表达式) case E1:语句组 1;break;case E2:语句组 2;break;.case En:语句组 n;break;default:语句组 ;break; ,执行过程:,int a, b = 4;scanf (“%

19、d“, ,使用switch语句注意事项,(1) case后面语句(组)可加 也可以不加 ,但一般不加 。 (2) 每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象。,switch ( i )case 1: b = b + 1; break; / 可加可不加case 2: b = b - 1; break;,使用switch语句注意事项,(3) 每个case后面必须是“常量表达式”,表达式中不能包含变量。,例:按成绩分成A、B、C、D、E、F几个等级。char score;printf (“Enter Score: “);scanf (“%d“, ,使用switch语句

20、注意事项,(4) case后面的“常量表达式”仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。,#include void main ( )char ch;ch = getch ( ); switch ( ch )case Y : printf (“Yesn“); break;case N : printf (“Non“); break;case A : printf (“Alln“); break;default : printf (“Yes,No or Alln“); ,运行结果:No,/

21、假设输入为:N,#include void main ( )char ch;ch = getch ( ); switch ( ch )case Y : printf (“Yesn“); break;case N : printf (“Non“); case A : printf (“Alln“); break;default : printf (“Yes,No or Alln“); ,/假设输入为:N,运行结果:NoALL,使用switch语句注意事项,(5)多个case子句,可共用同一语句(组)。,例:当a的值是1、2、3时,将b的值加2,当a的值是4、5、6时,将b的值减2。int a,

22、b = 4;scanf (“%d“, ,使用switch语句注意事项,(6) case子句和default子句如果都带有break子句,那么它们之间顺序的变化不会影响switch语句的功能。,#include void main ( ) char ch;ch = getch ( );switch ( ch )case Y : printf (“Yesn“); break;case N : printf (“Non“); break;case A : printf (“Alln“); break;default : printf (“Yes,No or Alln“); break; ,#incl

23、ude void main ( ) char ch;ch = getch ( );switch ( ch )case Y : printf (“Yesn“); break;default : printf (“Yes,No or Alln“); break;case N : printf (“Non“); break;case A : printf (“Alln“); break; ,使用switch语句注意事项,(7) switch语句可以嵌套。,void main ( )int x = 1, y = 0, a = 0, b = 0;switch ( x )case 1: switch (

24、y )case 0: a+; break;case 1: b+; break;case 2: a+; b+; break;case 3: a+; b+;printf (“na = %d, b = %d“, a, b);,运行结果: a = 2,b = 1,循环结构程序设计,循环结构的程序设计,1. while语句,一般形式:,while (表达式) 循环体语句;,执行流程:,其中:while后面的括号( )不能省。while后面的表达式可以是任意类型的表达式,但一般是条件表达式或逻辑表达式。表达式的值是是循环的控制条件。语句部分称为循环体,当需要执行多条语句时,应使用复合语句。,特点:先判断表

25、达式,再执行循环体,(1) 如果while后的表达式的值一开始就为假,循环体将一次也不执行。(2) 循环体中的语句可为任意类型的C语句。 (3) 遇到下列情况,退出while循环:表达式为假(为0)。循环体内遇到break、return或goto语句(break和goto语句将在随后介绍)。,while语句注意事项:,int a = 0, b = 0; while (a 0) /a 0为假,b+不可能执行b+;,int num = 0; /字符计数 while ( 1 ) if (getche ( ) = n) /如果输入的字符是回车符,则返回return;num+; ,(4) 在执行whil

26、e语句之前,循环控制变量必须初始化,否则执行的结果将是不可预知的。(5) 要在while语句的某处(表达式或循环体内)改变循环控制变量,否则极易构成死循环。(6) 允许while语句的循环体又是while语句,从而形成双重循环。,while语句注意事项:,例:计算10! #include void main ( )int i; / i应赋初始值10long s = 1;while (i = 1)s *= i-;printf (“10! = %ldn“, s);,i = 1; while (i 100) /死循环,因为i的值没变化,永远小于100sum += i; printf (“sum =

27、%dn“, sum);,i = 1; while (i = 9)j = 1;while (j = 9)printf (“%d * %d = %dn“, i, j, i * j);j+;i+;,2. do_while语句,一般形式:,do 循环体语句; while(表达式);,执行流程:,其中:while后面的括号( )不能省。while最后面的分号;不能省。while后面的表达式可以是任意类型的表达式,但一般是条件表达式或逻辑表达式。表达式的值是是循环的控制条件。语句部分称为循环体,当需要执行多条语句时,应使用复合语句。,特点:先执行循环体,再判断表达式,do_while语句注意事项:,int

28、 a = 0, b = 0;dob+; while (a 0) ;,(1) 如果do-while后的表达式的值一开始就为假,循环体还是要执行一次。 (2)在if语句、while语句中,表达式后面都不能加分号,而在do-while语句的表达式后面则必须加分号,否则将产生语法错误。(3) 循环体中的语句可为任意类型的C语句。(4) 和while语句一样,在使用do-while语句时,不要忘记初始化循环控制变量,否则执行的结果将是不可预知的。(5) 要在do-while语句的某处(表达式或循环体内)改变循环控制变量的值,否则极易构成死循环。(6) do-while语句也可以组成多重循环,而且也可以和

29、while语句相互嵌套。,3. for语句,一般形式:,for (表达式1;表达式2;表达式3)循环体语句;,执行流程:,其中:for后面的括号( )不能省。表达式1:一般为赋值表达式,给控制变量赋初值。表达式2:关系表达式或逻辑表达式,循环控制条件。表达式3:一般为赋值表达式,给控制变量增量或减量。表达式之间用分号分隔。语句部分称为循环体,当需要执行多条语句时,应使用复合语句。,for语句很好地体现了正确表达循环结构应注意的三个问题:控制变量的初始化。循环的条件。循环控制变量的更新。,for语句注意事项:,例:计算1*2+3*4+5*6+99*100。 int i, j; long sum

30、= 0; for ( i =1, j = 2; i = 99; i = i + 2, j = j + 2 )sum += i *j; printf (“sum = %ldn“, sum);,(1) 表达式1、表达式2、和表达式3可以是任何类型的表达式。比方说,这三个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成。,逗号表达式,逗号表达式,#include void main ( ) int i, sum = 0;i = 1;for ( ; i = 100; i+)sum += i;printf(“sum = %dn“, sum); ,#include void main ( ) i

31、nt i, sum = 0;i = 1;for ( ; i = 100; )sum += i+;printf(“sum = %dn“, sum); ,for语句注意事项:,省掉表达式1,3,省掉表达式1,(2) 表达式1、表达式2、和表达式3都是任选项,可以省掉其中的一个、两个或全部,但其用于间隔的分号是一个也不能省的。,#include void main ( ) int i, sum = 0;i = 1;for ( ; ; )if (i 100) break;sum += i+;printf(“sum = %dn“, sum); ,省掉表达式1,2,3,for语句注意事项:,for (a

32、= 1; ; a+)printf (“,(3) 表达式2如果为空则相当于表达式2的值是真 。,死循环!,(4) 循环体中的语句可为任意类型的C语句。(5) for语句也可以组成多重循环,而且也可以和while语句和do-while语句相互嵌套。(6) 循环体可以是空语句。,例:计算用户输入的字符数(当输入是回车符时统计结束)。 #include void main ( ) int n = 0;printf (“input a string:n“);for ( ; getchar( ) != n; n+) ; printf (“%d“,n); ,表示循环体为空语句,并非表示for语句结束,三种循

33、环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程,(1) while() while() .,(2) do do while( );.while( );,(3) while() do while( );.,嵌套循环的跳转 禁止:从外层跳入内层跳入同层的另一循环向上跳转,4. 循环嵌套,5. break与continue语句,break语句 功能:在循环语句和switch语句中,终止并跳出循环体或开关体 说明: (1) break不能用于循环语句和switch语句之外的任何其它语句之中。 (2) break只能终止并跳出最近一层的结构。,while (表达式1

34、) if (表达式2) break; 语句,do if (表达式2) break; while (表达式1); 语句,for (; 表达式1; ) if (表达式2)break; 语句,方法:通过设置一标志变量tag,然后在每层循环后加上一条语句:if (tag) break; 其值为1表示跳出循环体,为0则不跳出。,for () while ()if () break; while循环后的第一条语句 ,int tag = 0; for () while ()if () tag = 1; break; if ( tag ) break; for循环后的第一条语句,多重循环中,break的使用,

35、continue语句 功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断。 说明: (1) 仅用于循环语句中。 (2) 在嵌套循环的情况下,continue语句只对包含它的最内层的循环体语句起作用。,for () while ()if () continue; while循环后的第一条语句 ,5. goto语句,一般形式:,goto 语句标号; 语句标号: ,语句标号: goto 语句标号;,或,说明:,语句标号是按标识符规定书写的符号,放在某一语句行的前面,标号后加冒号(:)。语句标号起标识语句的作用,与goto 语句配合使用。,作用:,goto语句的作用是在不需

36、要任何条件的情况下直接使程序跳转到该语句标号所标识的语句去执行。,goto语句的应用:,例:求1100的累计和 #include void main ( ) int i = 1, sum = 0; loop: sum += i+;if (i = 100) /如果i小于或等于100goto loop; /转到标号为loop的语句去执行printf (“sum = %dn“, sum); ,(1) goto语句可与条件语句配合使用来实现条件转移,构成循环。(2) 在嵌套循环的情况下,利用goto语句可以直接从最内层的循环体跳出最外层的循环体。,int tag = 0; for () while (

37、)if () goto stop; stop: for循环后的第一条语句,注意:在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。,6. exit( )函数,功能:,说明:,参数status为int型,status的值传给调用进程(一般为操作系统)。按照惯例,当status的值为0或为宏常量EXIT_SUCCESS时,表示程序正常退出;当status的值为非0或为宏常量EXIT_FAILURE时,表示程序出现某种错误后退出。,终止整个程序的执行,强制返回操作系统。,调用形式:,void exit( int status ); 头文件 ,循环结构类

38、型的选择及转换,1. 循环结构类型的选择原则,如果循环次数在执行循环体之前就已确定,一般用for循环;如果循环次数是由循环体的执行情况确定的,一般用while循环或者do-while循环。当循环体至少执行一次时,用do-while循环,反之,如果循环体可能一次也不执行,选用while循环。,2. 循环结构类型之间的相互转换,尽管上面对于循环结构的选择给出了原则性指导意见,但是我们应注意到其实这三种循环结构彼此之间可以相互转换,象前面我们分别用while循环、do-while循环、for循环来求1100的累计和的例子就说明了这一点。,数 组,一维数组在程序中赋值,C语言除了在定义数组变量时用初值

39、列表对数组整体赋值以外,无法再对数组变量进行整体赋值。,例 int a5;a = 1, 2, 3, 4, 5; a = 1, 2, 3, 4, 5; a5 = 1, 2, 3, 4, 5;,错误!,数组定义后,如何对数组进行赋值呢? 只能通过C语句对数组中的数组元素逐一赋值。,使用赋值语句来逐一赋值,例 int a4;a0 = 1; a1 = 2; a2 = 3; a3 = 4; char str80;str0 = b; str1 = y; str2 = e; str3 = 0;/将数组str赋值为一字符串“bye“,这种方法是一种简单而且行之有效的方法,它适用于长度较小的数组或对长度较大的数

40、组部分元素赋值,而且可对每个数组元素赋不同的值。,一维数组在程序中赋值,使用循环语句来逐一赋值,例如,将数组a的各元素赋值成奇数序列。int a10, i;for (i = 0; i 10; i+)ai = 2* i + 1;,例如,接受用户键盘输入赋值给数组各元素。int a10, i;for (i = 0; i 10; i+)scanf(“%d“, ,判断下列赋值是否正确?int a3;scanf (“%d%d%d“, a);,这种方法是在编程中普遍使用的一种方法,它适用于对某数组元素进行有规律的赋值或接受用户通过键盘输入对数组元素的赋值 。,一维数组在程序中赋值,使用memset函数来赋

41、值,memset函数原型:,void *memset (void *s, char ch, unsigned n),功能:就是将s为首地址的一片连续的n个字节内存单元都赋值为ch。,例如,将数组str的每个数据单元赋值为a。char str10;memset (str, a, 10);,例如,将数组a的每个数据单元赋值为0(清0)。int a10; memset (a, 0, 10*sizeof(int);,这种方法是适合于字节型数组的整体赋值,或对非字节型数组进行清0 。,一维数组在程序中赋值,使用memcpy函数实现数组间的赋值,memcpy函数原型:,void *memcpy (void

42、 *d, void *s, unsigned n),功能:将s为首地址的一片连续的n个字节内存单元的值拷贝到以d为首地址的一片连续的内存单元中 。,例如,两个数组元素之间的赋值 。int a5 = 1, 2, 3, 4, 5, b5, i;for (i = 0; i 5; i+)bi = ai;,memcpy (b, a, 5* sizeof(int);,注意:在使用memset和memcpy函数时,源程序中要包含头文件“string.h”。在TC或BC下头文件也可用“mem.h” 。,4、一维数组应用举例,【例1】输入一行字符,统计其中各个大写字母出现的次数。,#include #inclu

43、de void main ( void ) char ch; int num26, i;memset (num, 0, 26*sizeof(int); /初始化数组numwhile (ch = getchar( ) != n) /输入字符串,判断统计if (ch = A ,运行结果: AABBCCxyYzEEE A(2) B(2) C(2) D(0) E(3) F(0) G(0) H(0) I(0) J(0) K(0) L(0) M(0) N(0) O(0) P(0) Q(0) R(0) S(0) T(0) U(0) V(0) W(0) X(0) Y(1) Z(0),二维数组在程序中赋值,例:

44、 通过键盘输入对二维数组a各元素赋值 int i, j, a23;for (i = 0; i 2; i+)for (j = 0; j 3; j+)scanf (“%d“, ,例: 调用memset函数把数组a的各元素清0 int a23;memset(a, 0, 6 * sizeof(int);,例: 通过memcpy函数将数组a各元素的值复制到数组b的各元素中 int b23;memcpy(b, a, 6 * sizeof(int);,字符串与数组 1、字符串的本质 字符串是一种以0结尾的字符数组。 如:字符串常量“HELLO“的内存映像,2、字符数组定义,例: char c10, ch34

45、;,字符数组的初始化,逐个字符赋值用字符串常量,判断下列赋值是否等价: char str = “china“; char str = c, h, i, n, a, 0; char str = “china“; char str = c, h, i, n, a; char str10 = “china“; char str10 = c, h, i, n, a;,注意:在用字符数组来存放某个字符串常量时,如果要指定字符数组的大小,那么其大小至少要比字符串的长度大1(多定义一个单元用于存放0)。,字符及字符串操作的常用函数,字符串的输入,格式:gets(字符数组) /应包含的.h文件为stdio.h

46、 功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加0 说明:输入串长度应小于字符数组维数,例:char str80;gets (str);当输入:Ilovechina!(表示空格,表示回车)时,str中的字符串将是:“I love china!“,gets函数,scanf函数,格式:scanf(“%s“, 字符数组) /应包含的.h文件为stdio.h 功能:从键盘输入一以空格或回车结束的字符串放入字符数组中,并自动加0 说明:输入串长度应小于字符数组维数,例:char str80;scanf (“%s“, str);当输入:hellochina时,str将是:“hello“,注意

47、与gets的区别!,scanf函数的使用:,例:利用scanf函数可以连续输入多个字符串,输入时,字符串间用空格分隔。 char str140, str240, str40;scanf (“%s%s%s“, str1, str2, str3);输入:Ilovechina!str1:“I“,str2:“love“,str3:“china!“。,例:使用%ns格式控制符 限制输入的字符个数。 char str10;scanf (“%9s“, str); /最多可读入9个非空格字符到str中,3、字符及字符串操作的常用函数,字符串的输出,格式:puts(字符串地址) /应包含的.h文件为stdio.h 功能:向显示器输出字符串(输出完,换行) 说明:如果是字符数组,则必须以0结束,puts函数,printf函数,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报