收藏 分享(赏)

C语言程序设计课件word版.doc

上传人:cjc2202537 文档编号:5397878 上传时间:2019-02-28 格式:DOC 页数:33 大小:636KB
下载 相关 举报
C语言程序设计课件word版.doc_第1页
第1页 / 共33页
C语言程序设计课件word版.doc_第2页
第2页 / 共33页
C语言程序设计课件word版.doc_第3页
第3页 / 共33页
C语言程序设计课件word版.doc_第4页
第4页 / 共33页
C语言程序设计课件word版.doc_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、程序设计语言一般分为机器语言、汇编语言和高级语言三大类。1机器语言对于计算机来说,一组机器指令就是程序,称为机器语言程序。 2汇编语言为了便于理解与记忆,人们采用能帮助记忆的英文缩写符号(称为指令助记符)来代替机器语言指令代码中的操作码,用地址符号来代替地址码。 3高级语言机器语言和汇编语言都是面向机器的语言,一般称为低级语言。 例 2.1 编写一个 C 程序,其功能是显示字符串 “How do you do!”。其 C 程序如下:#include “stdio.h“main()printf(“How do you do!n“);下面针对一般的 C 程序作几点说明:(1)一个完整的 C 语言程

2、序可以由多个函数组成,但必须包含一个且只能包含一个名为main 的函数(主函数) 。程序总是从 main 函数开始执行。(2)在一个 C 函数模块中,由左右花括号 括起来的部分是函数体,其中的语句系列实现函数的预定功能。(3)C 程序中的每一个语句必须以 “;”结束,但书写格式是自由的。 (4)#include 是编译预处理命令,其作用是将双引号或尖括号括起来的文件内容读到该命令的位置处。 (5)在 C 程序的任何位置处都可以用 /* */作注释,以提高程序的可读性。2.2.1 整型常量及其变量的定义1整型常量在 C 语言中,有 3 种类型的整型常量:基本整型常量、长整型常量、无符号整型常量。

3、在 C 语言中,不管是哪种类型的整型常量,都可以用 3 种数制表示。(1)十进制整型常量。(2)十六进制整型常量。 (3)八进制整型常量。 2整型变量的定义在 C 程序中,用于存放整型数据的变量称为整型变量。在 C 语言中,可以定义基本整型、长整型、短整型和无符号整型等 4 种类型的整型变量。它们的定义方式如下。(1)基本整型变量定义基本整型变量的形式如下:int 变量表列;(2)长整型定义长整型变量的形式如下:long int 变量表列;(3)短整型定义短整型变量的形式如下:short int 变量表列;(4)无符号整型定义无符号基本整型变量的形式如下:unsigned int 变量表列;

4、一个类型说明语句可以同时定义多个同类型的变量,各变量之间用逗号“, ”分隔。 用类型说明语句定义的变量只是说明了为这些变量分配了存储空间,以便用于存放与之相同类型的数据,在未对这些变量赋值前,这些变量中(即存储空间中)的值是随机的。 C 语言允许在定义变量的同时为变量赋初值。 在为整型变量初始化或赋值时,C 编译系统自动将被赋数据转换成与相应变量的类型一致。 由于各种整型变量所占的字节数有限,因此,它们所能存放的整数有一定的范围。 实型常量及其变量的定义1实型(浮点型)常量(1)十进制数形式(2)指数形式(科学记数法)2实型变量的定义在 C 程序中,用于存放实型数据的变量称为实型变量。在 C

5、语言中,实型变量有单精度与双精度两种。单精度 float 双精度 double 字符型常量及其变量的定义1字符型常量 n 换行 r 回车 b 退格 t 制表(横向跳格) 单引号(单撇号) “ 双引号(双撇号) ddd 13 位八进制数所代表的 ASCII 码字符 xhh 12 位十六进制数所代表的 ASCII 码字符 f 走纸换页 反斜杠字符2字符型变量的定义字符型变量的定义方式如下:char 变量表列;数据的输入与输出应包括以下几项: 输入(出)的设备 输入(出)的格式 输入(出)的内容格式输出函数格式输出函数的一般形式如下:printf(*“格式控制 ”,输出表) ;其中格式控制部分要用一

6、对双撇号括起来,它用于说明输出项目所采用的格式。 1整型格式说明符(1)十进制形式 (2)八进制形式(3)十六进制形式2实型格式说明符如果以十进制数形式输出实型数据,其格式说明符为%f 或 %m.nf如果以指数形式输出实型数据,其格式说明符为%e 或 %m.ne3字符型格式说明符字符型数据的格式说明符为%c 或 %mc(1)输出表中各输出项目之间要用“, ”分隔。(2)格式控制中的各格式说明符与输出表中的各输出项目在个数、次序、类型等方面必须一一对应。(3)格式控制中除格式说明符外的其他字符将按原样输出。(4)在输出格式说明符中,如果带有宽度说明,则在左边没有数字的位置上用空格填满(即输出的数

7、字是右对齐) 。但如果在宽度说明前加一个负号() ,则输出为左对齐,即在右边补空格。 格式输入函数格式输入函数的一般形式如下:scanf(“格式控制 ”,内存地址表) ;1整型格式说明符(1)十进制形式 用于输入十进制形式的整型数据。(2)八进制形式用于输入八进制形式的整型数据。(3)十六进制形式用于输入十六进制形式的整型数据。2实型格式说明符用于输入的单精度实型格式说明符为%f 或 %e用于输入的双精度实型格式说明符为%lf3字符型格式说明符用于输入的字符型格式说明符为%c 或 %mc赋值运算赋值运算符为“”。赋值表达式为变量名表达式(1)在 C 语言中, “”为赋值运算符,而不是等号;(2

8、)赋值运算符“”左边必须是变量名,不能是表达式;(3)赋值运算符“”两端的类型不一致时,系统将自动进行类型转换。算术运算在 C 语言中,基本的算术运算符有以下几个: 加法运算符(双目运算符) ,或正值运算符(单目运算符) 。如 xy,x。 减法运算符(双目运算符) ,或负值运算符(单目运算符) 。如 a3,x。* 乘法运算符(双目运算符) 。如 3*x。/ 除法运算符(双目运算符) 。如 x/y。% 模余运算符(双目运算符) 。只适用于整型数据,如 9%4 的值为 1,11%3的值为 2 等。关系运算在 C 语言中,基本的关系运算符有以下 6 个: 小于 小于或等于 大于 大于或等于 等于!

9、不等于结果只有两个:true 或者 false执行 int x2,y3;后表达式 x(y3)的值是( 1 )逻辑运算在 C 语言中,逻辑常量只有两种:值非零表示 “真”,值为零表示“假”。其基本的逻辑运算符有以下 3 个:printf(“X2%fn“,x2);else d sqrt(d)/(2*a) ;pb/(2*a);printf(“X1%f j%fn“,p,d);printf(“X2%f j%fn“,p,d);4.1.1 当型循环结构当型循环结构的流程图如图 4.1 所示。while 循环实现当型循环结构的 C 语句形式为while (表达式) 循环体语句功能:当表达式值0 时,执行循环体

10、,执行完后继续判断表达式值,只有当表达式值0 时才退出循环。例 4.2 从键盘输入各学生成绩,并对 90 分以上(包括 90 分)的学生人数进行计数,直到输入的成绩为负为止,最后输出成绩在 90 分以上的学生人数。其流程图如图 4.3 所示。其中变量 count 为整型,用于对 90 分以上的学生人数进行计数。相应的 C 程序如下:#include “stdio.h“main() int count;float grade;count0;scanf(“%f“,&grade);while (grade0.0) if (grade90.0) countcount1;scanf(“%f“,&grad

11、e);printf(“count%dn“ ,count) ;直到型循环结构直到型循环结构的流程图如图 4.4 所示。do_while 循环do_ while 循环的执行过程是,首先执行循环体,然后判断条件(即计算逻辑表达式) ,如果条件满足(即逻辑表达式值为真) ,则退出循环结构;如果条件不满足(即逻辑表达式值为假) ,则继续执行循环体。实现直到型循环结构的 C 语句形式为do 循环体语句 while(表达式) ;功能:先执行循环体,然后判断表达式值,若表达式值0,则再次执行循环体,如此循环,直到表达式值0 为止。例 4.3 计算并输出下列级数和:直到某项的绝对值小于 为止相应的流程图如图 4

12、.5 所示。其中 f 用于改变每一项的符号,因为这是一个各项符号相间的级数。 )1(3211SUMK104相应的 C 程序如下:#include “stdio.h“main() int k;double sum,d,f;sum1.0; k1;f1.0;do k k1;ff ;d1.0/(k*(k1);sum sumf*d; while(d1.0e 4);printf(“sum%lfn“,sum);当型循环结构与直到型循环结构的区别与联系当型循环结构与直到型循环结构既有共同之处,又有区别。主要体现在以下几个方面。(1)在 while 循环中,其循环体可以一次也不执行(即执行 while 循环结构

13、的一开始,其条件就不满足) 。 (2)不管是 while 循环结构还是 dowhile 循环结构,在循环体内部必须要有能改变条件(即逻辑表达式值 )的语句,否则将造成死循环。 (3)对于有些问题既可以用 while 循环结构来处理,也可以用 dowhile 循环结构来处理。(4)不管是 while 循环结构还是 dowhile 循环结构,其循环体如果包含一个以上的语句,应以复合语句形式出现。C 语言提供的 for 循环属于当型循环结构,其一般形式为for(表达式 1;表达式 2;表达式 3) 循环体语句(组)它等价于下列的当型循环结构:表达式 1;while(表达式 2) 循环体语句表达式 3

14、;下面对 for 循环语句作几点说明:(1)在 for 语句中,三个表达式中的任何一个表达式均可省略,但其中的两个 “;”不能省略。 (2)下列两个循环都是死循环:for(表达式 1;表达式 3) 循环体与for(;) 循环体因为它们都没有用于判断循环是否结束的条件(即表达式 2) 。 (3)for 循环本质上也是当型循环结构,只不过它对于事先可以确定循环次数的问题特别方便。 (4)在 for 循环中,循环体也可以是复合语句(即用一对花括号 括起来的语句组) 。循环的嵌套所谓循环的嵌套是指一个循环体内又包含了另一个完整的循环结构。C 语言允许循环结构嵌套多层。循环的嵌套结构又称为多重循环。例

15、4.6 计算并输出 10 以内(包括 10)所有自然数的阶乘值。即计算1!,2!,3! ,4!,5!,6!,7! ,8!,9! ,10!。采用的方法是,对于 10 以内的每一个自然数分别求它们的阶乘值。其流程图如图 4.7 所示。显然,这是一个二重循环结构。相应的 C 程序如下:#include “stdio.h“main() int n,k;double s;for (n1; n10; nn1) s1.0;for (k1; kn; kk1) ss*k;printf(“%2d!%16.7fn “,n,s) ;break 语句C 语言中的 break 语句有以下两个功能:(1)跳出 switch

16、 结构;(2)退出当前循环结构,包括 while 结构、 dowhile 结构和 for 循环结构。continue 语句continue 语句的功能是结束本次循环的执行,但不退出循环结构。下面举两个例子来说明 continue 语句的使用。例 4.10 输出 100200 之间所有能被 7 或 9 整除的自然数。相应的 C 程序如下:#include “stdio.h“main() int n;for (n100; n200; nn1) if (n%7!0)&(n%9!0) continue; /*结束本次循环,继续进行下次循环*/printf(“%d n“,n);实际上,上述程序等价于#i

17、nclude “stdio.h“main() int n;for (n100; n200; nn1) if (n%70) | | (n%90) printf(“%d n“,n);5.1.1 函数的概念在 C 语言中,函数分为以下两种。(1)标准库函数这种函数用户不必定义,但可直接使用。例如 scanf() , printf() , fabs() , sqrt() ,exp(),sin(),cos()等都是 C 语言中常用的库函数。(2)用户自己定义的函数这种函数用以解决用户的专门问题,一般由用户自己编写。例 5.1 从键盘输入两个正整数 m 与 n(mn),求 的值(即求 ) 。其 C 程序如

18、下:#include “stdio.h“main() /*主函数*/ int m,n;int p(); /*说明本函数中要调用的函数 p()是整型*/scanf(“%d,%d“,&m,&n) ;if (m n) printf(“%dn“,p(m)/p(m n) ;else printf(“mn ! n“);int p(k) /*计算阶乘值的函数*/int k; int s, i;s1;for (i1; ik; ii1) ss*i;return(s);下面对函数作几点说明:(1)一个完整的 C 程序可以由若干个函数组成,其中必须有一个且只能有一个主函数main()。 (2)一个完整 C 程序中的

19、所有函数可以放在一个文件中,也可以放在多个文件中。 在编译命令行中键入各个函数所在的文件名(各文件名之间用空格分隔) 。 在主函数中用 #include 语句将各函数所在的文件包含进来。 (3)C 语言中的函数没有从属关系,各函数之间互相独立,可以互相调用。 函数的定义在 C 语言中,函数定义的一般形式为类型标识符 函数名(形参表列)形参类型说明 说明部分语句部分nmA)!(n在定义 C 函数时要注意以下几点。(1)函数类型标识符同变量类型说明符,它表示返回的函数值类型。 (2)如果省略函数的类型标识符,则默认为是 int 型。 (3)C 语言允许定义空函数。如dummy() (4)函数中返回

20、语句的形式为return(表达式) ;或return 表达式;(5)如果“形参表列”中有多个形式参数,则它们之间要用“, ”分隔。(6)C 语言允许在形参表中直接对形参的类型进行说明。 函数的调用函数调用的一般形式为函数名(实参表列)(1)函数调用可以出现在表达式中(有函数值返回) ;也可以单独作为一个语句(无函数值返回)。(2)实参表中的各实参可以是表达式,但它们的类型和个数应与函数中的形参一一对应。 (3)在调用函数中,通常要对被调用函数的返回值类型进行说明(一般在调用函数的函数体中的说明部分) ,包括函数类型、函数名和一对圆括号。 例 5.2 下列程序的功能是计算输出一个圆台两底面积之和

21、。#include “stdio.h“main() double r1,r2;double q();printf(“input r1 ,r2: “);scanf(“%lf,%lf“ ,&r1, &r2);printf(“s%fn“ ,q(r1 ,r2);double q(x,y)double x,y; double s;s3.1415926*(x*xy*y);return(s);但 C 语言规定,在以下几种情况下可以不在调用函数中对被调用函数作类型说明: 被调用函数为整型或字符型,自动按整型处理。 被调用函数的定义出现在调用函数之前。 在调用函数之前已经由别的函数(它可能也要调用该被调用函数)

22、对被调用函数作了类型说明。(4)C 语言虽不允许嵌套定义函数,但可以嵌套调用函数。 形参与实参的结合方式1地址结合所谓地址结合,是指在一个模块调用另一个模块时,并不是将调用模块中的实参值直接传送给被调用模块中的形参,而只是将存放实参的地址传送给形参。 2数值结合所谓数值结合,是指调用模块中的实参地址与被调用模块中的形参地址是互相独立的,在一个模块调用另一个模块时,直接将实参值传送给形参被存放在形参地址中。 例 5.3 分析下列 C 程序:void swap(x,y)int x,y; int t;tx; xy; yt;return; #include “stdio.h“main() int x,

23、y;scanf(“x%d,y%d“,&x,&y) ;swap(x,y);printf(“x%d,y%dn“,x,y) ;在这个程序中共有两个函数。在主函数中分别为整型变量 x 与 y 输入数据,然后调用函数swap(x, y)。而函数 swap(x,y)的功能是实现变量 x 值与 y 值的交换。但在实际运行该程序时,如果从键盘输入x6,y8则输出的结果为x6,y8即没有达到交换的目的。这是因为在主函数中调用函数 swap()时,只是将实参 x 和y 的值分别传递给了 swap()函数中的形参 x 和 y,但由于主函数中的实参 x 和 y 与函数swap()中的形参 x 和 y 在计算机中的存储

24、地址是不同的,因此,在函数 swap()中虽然交换了形参 x 与 y 的值,但实参 x 与 y 的值实际上没有改变,即它们没有被交换。由此可以看出,在形参与实参为数值结合的情况下,实参与形参在计算机内存中的存储地址不是同一个,因此,即使在被调用函数中改变了形参值,调用函数中的实参值也是不会被改变的。 局部变量与全局变量1局部变量在函数内部定义的变量称为局部变量。函数内部定义的变量只在该函数范围内有效,因此,不同函数中的局部变量可以重名,互不混淆。2全局变量在函数外定义的变量称为全局变量除非十分必要,一般不提倡使用全局变量,其原因有以下几点: 由于全局变量属于程序中的所有函数,因此,在程序的执行

25、过程中,全局变量都需要占用存储空间,即使实际正在执行的函数中根本用不着这些全局变量,它们也要占用存储空间。 在函数中使用全局变量后,要求在所有调用该函数的调用程序中都要使用这些全局变量,从而会降低函数的通用性。 在函数中使用全局变量后,使各函数模块之间的互相影响比较大,从而使函数模块的“内聚性”差,而与其他模块的“耦合性”强。 在函数中使用全局变量后,会降低程序的清晰性,可读性差。动态存储变量与静态存储变量1用户程序的存储分配一般来说,用户程序在计算机中的存储分配如图 5.1 所示。 程 序 区 静 态 存 储 区 动 态 存 储 区 其中:程序区用于存放程序;静态存储区是在程序开始执行时就分

26、配的固定存储单元,如全局变量;动态存储区是在函数调用过程中进行动态分配的存储单元,如函数形参、自动变量、函数调用时的现场保护和返回地址等。2变量的存储类型 数据类型:如整型(int) 、实型( float) 、字符型(char) 、双精度型(double)等。 数据的存储类型:分为自动类型( auto) 、静态类型(static ) 、寄存器类型(register) 、外部类型(extern) 。 例 5.4 计算并输出 15 的阶乘值。其 C 程序如下:int fac(n) int n; static int f1;ff*n;return(f);#include “stdio.h“main(

27、) int i;for (i1; i5; ii 1)printf(“%d!%dn“ ,i,fac(i);下面对静态存储变量作几点说明: 形参不能定义成静态类型。 对局部静态变量赋初值是在编译时进行的,在调用时不再赋初值;而对自动变量赋初值是在调用时进行的,每次调用将重新赋初值。 定义局部静态变量时若不赋初值,则在编译时将自动赋初值 0;但在定义自动变量时若不赋初值,则其初值为随机值。 若无多大必要,尽量不用局部静态变量。3外部变量全局变量如果在文件开头定义,则在整个文件范围内的所有函数都可以使用该变量。一般来说,全局变量有以下几种用法: 在同一文件中,为了使全局变量定义点之前的函数中也能使用该

28、全局变量,则应在函数中用 extern 加以说明。 使一个文件中的函数也能用另一个文件中的全局变量。 利用静态外部变量,使全局变量只能被本文件中的函数引用。 内部函数与外部函数在 C 语言中,函数可以分为内部函数与外部函数。只能被本文件中其他函数调用的函数称为内部函数,内部函数又称为静态函数。定义内部函数的形式如下:static 类型标识符 函数名(形参表)定义外部函数的形式如下:extern 类型标识符 函数名(形参表)人们在解决一些复杂问题时,为了降低问题的复杂程度(如问题的规模等) ,一般总是将问题逐层分解,最后归结为一些最简单的问题。 例 5.5 编写一个 C 函数,对于输入的参数 n

29、,依次打印输出自然数 1 到 n。这是一个很简单的问题,实际上不用递归就能解决,其 C 函数如下:#include “stdio.h“wrt(int n) int k;for (k1;kn ;k) printf(“%dn“,k) ;return;解决这个问题还可以用以下的递归函数来实现:#include “stdio.h“wrt1(int n) if (n! 0) wrt1(n1); printf(“%dn“,n); return;功能:对于输入的参数 n,依次打印输出自然数 1 到 n自己调用自己的过程称为递归调用过程。在 C 语言中,自己调用自己的函数称为递归函数。递归分为直接递归与间接递

30、归两种。所谓直接递归,是指直接调用函数本身。 例 5.6 编写一个函数,其功能是判断给定的正整数是否是素数,若是素数则返回函数值1,否则返回函数值 0。其 C 函数如下:#include “math.h“sushu(int n) int k,i,flag;ksqrt(double)n); i2; flag0;while (i k)&(flag0) if (n%i0) flag 1;ii1;return(!flag);例 5.8 Hanoi 塔问题。相传古代印度有一座 Bramah 庙,庙中有三根插在黄铜板上的宝石柱,在其中的一根柱子上放了 64 个金盘子,大盘在下,小盘在上,称为 Hanoi

31、塔。有一天,庙里的和尚们想把这些盘子从一根柱子上移到另一根柱子上,规定每次只允许移动一个盘子,并且,在移动过程中都不允许出现大盘子压在小盘子上面的现象,但在移动盘子的过程中可以利用三根柱子中的任何一根。为了使问题具有普遍性,假设圆盘数为 n,按直径从小到大依次编号为1,2,n;三根柱子的名称分别为 X,Y,Z。开始时, n 个圆盘按从大到小的顺序(即下面放大圆盘,上面放小圆盘)放在 X 柱子上,现在要将 X 柱子上的 n 个圆盘移到 Z 柱子上,其移动的原则如上所述。这个问题称为 n 阶 Hanoi 塔问题。可以写出 C 程序如下:#include “stdio.h“main() int n;

32、char xX, yY,z Z;void hanoi();printf(“input n“);scanf(“%d“,&n);hanoi(n,x,y,z);void hanoi(n,x,y,z)int n;char x,y,z; void move();if (n1) move(x,n,z) ;else hanoi(n1,x,z ,y);move(x,n,z);hanoi(n1,y,x,z);return;void move(x, n,z)int n;char x,z;printf(“%c(%d)%cn“,x,n ,z);编译预处理功能是 C 语言的一个重要特点。所谓编译预处理,是指 C 语言编

33、译系统首先对程序模块中的编译预处理命令进行处理。C 语言提供的编译预处理命令主要有以下 3 种:(1)宏定义;(2)文件包含命令;(3)条件编译命令。编译预处理命令一般是在函数体的外面。正确使用编译预处理命令,可以编写出易于调试、易于移植的程序模块。文件包含命令文件包含是指一个源文件可以将另一个指定的源文件包括进来。文件包含命令的一般形式为#include 文件名或#include “文件名“其功能是将指定文件中的全部内容读到该命令所在的位置后一起被编译。在使用文件包含命令时,要注意以下几个问题:(1)当#include 命令指定的文件中的内容改变时,包含这个文件的所有源文件都应该重新进行编译

34、处理;(2)一个#include 命令只能指定一个被包含文件,如果需要包含多个文件,则要用多个#include 命令实现;(3)被包含的文件应该是源文件,不能是经编译后的目标文件;(4)文件包含可以嵌套使用,即被包含的文件中还可以使用#include 命令;(5)由#include 命令所指定的文件中可以有任何语言成分,因此,通常可以将经常使用的、具有公用性质的符号常量、带参数的宏定义以及外部变量等集中起来放在这种文件中,以尽量避免一些重复操作。6.1 一维数组6.1.1 一维数组的定义与引用定义一维数组的一般形式如下:类型说明符 数组名常量表达式 ;其中类型说明符是定义数组中各元素的数据类型

35、,常量表达式是说明数组的大小(即数组中元素的个数。数组的说明与变量的说明一样,其作用是为数组分配存储空间。关于数组的说明要注意以下几个问题:(1)数组名的命名规则与变量名相同。(2)说明数组大小的常量表达式必须为整型,并且用方括号括起来(不能用圆括号) 。(3)说明数组大小的常量表达式中可以包含符号常量,但不能是变量。 例 6.1 下面的程序说明了如何对数组定义和引用数组元素:#include “stdio.h“#define N 5main() int i, aN;for (i0; iN; ii1) aii;for (i0; iN; ii1)printf(“%5d“,ai);printf(“

36、n“);在这个程序中,首先定义了一个长度为 5 的整型一维数组 a,然后利用 for 循环对其中的每一个元素(a0a4 )进行赋值,最后利用 for 循环输出这 5 个元素值。在 C 语言中,凡是一般简单变量可以使用的地方都可以使用数组元素。一维数组的初始化在 C 语言中,给数组元素提供数据的方法有以下 3 种。(1)利用赋值语句逐个对数组中的元素进行赋值。(2)利用输入函数逐个输入数组中的各个元素。例如,#include “stdio.h“main() int i, a5;for (i0; i5; ii1) scanf(“%d“,&ai);其中&ai 表示取数组元素 ai的地址。(3)初始化

37、。 下面对静态一维数组的初始化作三点说明:(1)可以只给数组的前若干个元素赋初值,此时后面的元素均将自动赋以初值 0。 (2)在对全部元素赋初值时,说明语句中可以不指定数组长度,其长度默认为与初值表中数据的个数相同。 (3)虽然标准 C 语言规定只能对“静态存储”的数组进行初始化,即除了可以对外部(全局)数组进行初始化外,还可以对用 static 说明的局部数组进行初始化。 例 6.3 分析下列程序的输出结果:#include “stdio.h“main() int k,x5;static int y5;int z50 ,0,0;for (k0; k5; k) printf(“%5d%5d%5

38、d“,xk ,yk ,zk) ;printf(“n“);6.2 二维数组二维数组的定义与引用定义二维数组的一般形式如下:类型说明符 数组名常量表达式 1常量表达式 2;二维数组的初始化与一维数组一样,也可以对静态存储的二维数组进行初始化。在对二维数组进行初始化时要注意以下几点。(1)在分行给二维数组赋初值时,对于每一行都可以只对前几个元素赋初值,后面未赋初值的元素系统将自动赋初值 0;并且,还可以只对前几行元素赋初值。(2)在给全部元素赋初值时,说明语句中可以省略第一维的长度说明。(3)在分行赋初值时,也可以省略第一维的长度说明6.3 字符数组与字符串字符数组的定义与初始化定义字符数组的一般形

39、式如下:char 数组名 常量表达式 ; 一维字符数组char 数组名 常量表达式 1常量表达式 2; 二维字符数组(1)当对字符数组中所有元素赋初值时,数组的长度说明可以省略。 (2)可以只对前若干元素赋初值。 (3)虽然标准 C 语言规定只能对 “静态存储”的字符数组进行初始化,即除了可以对外部(全局) 字符数组进行初始化外,还可以对用 static 说明的局部字符数组进行初始化。 字符串C 语言规定,字符串常量(简称字符串)要用一对双撇号括起来。在一个字符串常量中,最后还包括一个结束符0。 C 语言允许用字符串常量对字符数组进行初始化。字符数组与字符串的输入与输出1输入输出一个字符(格式

40、说明符为 %c)在用于输入时,输入项为数组元素地址。在具体输入时,各字符之间不要分隔,字符也不要用单撇号括起来。在用于输出时,输出项为数组元素。2输入输出一个字符串(格式说明符为 %s)在用格式说明符%s 进行输入输出时,其输入输出项均为数组名。但在输入时,相邻两个字符串之间要用空格分隔,系统将自动地在字符串最后加结束符0。 字符串处理函数下面简单介绍一些常用的字符串处理函数。(1)puts(字符数组名)功能:输出一个字符串到终端。(2)gets(字符数组名)功能:从终端输入一个字符串到字符数组,并返回字符数组的地址。(3)strcat(字符数组 1,字符串 2)功能:将字符串 2 连接到字符

41、串 1 的后面,并返回字符串 1 的地址。(4)strcpy(字符数组 1,字符串 2)功能:字符串 2 拷贝到字符数组 1 中。(5)strcmp (字符串 1,字符串 2)功能:比较字符串。这个函数的返回值如下:若字符串 1字符串 2,则返回值为 0;若字符串 1字符串 2,则返回值为正整数;若字符串 1字符串 2,则返回值为负整数。(6)strlen(字符串)功能:测试字符串长度。(7)大小写转换函数大小写转换函数有以下两个:strlwr(字符串) 将字符串中大写字母转换成小写字母。strupr(字符串) 将字符串中小写字母转换成大写字母。6.4 数组作为函数参数形参数组与实参数组的结合

42、例 6.8 用选择法对无序序列进行排序。 selct(b, n) for i=0 to n2 k=I for j=i+1 to n1 bj bk k=j k i bibk 结 束 返 回 yes no no yes C 程序如下:/* select.c */select(b,n)int n, b; int i,j,k,d ;for (i0; in 2; ii1) ki;for (ji1; jn 1; jj1)if (bjbk) kj ;if (k!i) dbi; bibk; bkd ;/* ex.c */#include “stdio.h“#include “select.c“main() int k;static int s103,5,4,1,9,6,10,56,34,12;printf(“n“);for (k0; k10; kk1) printf(“%4d“,sk) ;printf(“n“);select(s,10);for (k0; k10; kk1) printf(“%4d“,sk) ;

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

当前位置:首页 > 中等教育 > 职业教育

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


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

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

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