C程序设计PPT学习教案_第1页
C程序设计PPT学习教案_第2页
C程序设计PPT学习教案_第3页
C程序设计PPT学习教案_第4页
C程序设计PPT学习教案_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1C程序设计程序设计第1章 C语言概述第2章 基本数据类型和运算第3章 结构化程序设计第5章 函数第6章 指针第7章 复合结构类型第8章 编译预处理第4章 数组及字符串 附录6.1 指针的基本概念6.2 指针变量的运算6.3 指向数组元素的指针6.4 指向多维数组的指针变量6.5 指向字符串的指针变量6.6指针型函数6.7指针数组6.8二级指针6.9程序举例6.10用指针进行内存动态分配6.11指针数据类型的总结 第9章 位运算第10章 文件第1页/共68页指针教学目标 掌握指针的概念和运算规则 掌握用指针访问变量、一维数组和二维数组 用指针处理字符串的方法第2页/共68页6.1 指针的

2、基本概念1. 指针的概念 2. 指针变量内 存 单 元 的内 存 单 元 的编 号 叫 做 地编 号 叫 做 地址 , 通 常 也址 , 通 常 也把 这 个 地 址把 这 个 地 址称 为称 为 “ 指指针针”。第3页/共68页6.1 指针的基本概念1. 指针的概念 2. 指针变量在语言中,在语言中,允 许 用 一 个允 许 用 一 个变 量 来 存 放变 量 来 存 放指 针 , 这 种指 针 , 这 种变 量 称 为变 量 称 为“ 指 针 变指 针 变量量”。第4页/共68页1. 定义的一般格式 2. 举例说明6.1 指针的基本概念存储类型 类型说明符 *变量名;其中,“*”表示这是一

3、个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。一个指针变量只能指向同一种类型的变量,也就是说,不能定义一个既指向一个整型变量又指向一个双精度型变量的指针变量。第5页/共68页1. 定义的一般格式 2. 举例说明6.1 指针的基本概念例如:int *m1;表示m1是一个指针变量,它的值是某个整型变量的地址;或者说m1指向一个整型变量。至于m1究竟指向哪一个整型变量,应该由指向m1赋予的地址来决定。再例如:static int *m2; /* m2是指向是指向静态整型变量的指针变量静态整型变量的指针变量*/float *m3; /* m3是指向浮点型是指向

4、浮点型变量的指针变量变量的指针变量*/char *m4; /* m4是指向字符型是指向字符型变量的指针变量变量的指针变量*/ 第6页/共68页1. 变量地址表示方法 2. 给指针变量赋地址的方法语言提供了地址运算符“&”,表示变量地址的一般形式为:&变量名变量名;如:&a表示变量a的地址,&b表示变量b的地址。6.1 指针的基本概念3. 例第7页/共68页1. 变量地址表示方法 (1)指针变量初始化的方法。 int a; /*定义整型变量定义整型变量a*/ int *p=&a; /*定义指针定义指针p,并将变量,并将变量a的地址赋的地址赋给指针给指针p*

5、/(2)赋值语句的方法。 int a; /*定义整型变量定义整型变量a*/ int *p; /*定义指针定义指针p*/ p=&a; /*将变量将变量a的的地址赋给指针地址赋给指针p*/6.1 指针的基本概念2. 给指针变量赋地址的方法3. 例第8页/共68页1. 变量地址表示方法 【例6.1】用指针变量访问变量中的数据。#includemain() int a,*p; /*定义整型变量a和整型变量指针p*/p=&a; /*指针p指向变量a*/printf(please enter a number:n,*p);scanf(%d,p); /*为指针p所指的存储单元输入数值*/pr

6、intf(%dn,*p); /*输出指针p所指的存储单元的内容*/6.1 指针的基本概念2. 给指针变量赋地址的方法3. 例1501000ap1000100120002001第9页/共68页2. 取内容运算符*3. 注意事项取地址运算符“&”是单目运算符,其结合性为自右至左,功能是取变量的地址。在scanf函数中,我们已经认识并使用了&运算符。1. 取地址运算符&6.2.1 指针运算符指针运算符6.2 指针变量的运算第10页/共68页2. 取内容运算符*3. 注意事项取内容运算符“*”是单目运算符,其结合性为自右至左,通过“*”可以存取指针所指的存储单元的内容。在“*”

7、运算符之后跟的变量必须是指针变量。需要注意的是指针运算符“*”和指针变量说明中的指针说明符“*”不是一回事。在指针变量说明中,“*”是类型说明符,表示其后的变量是指针类型。而表达式中出现的“*”则是一个运算符,用以表示指针变量所指的内容。1. 取地址运算符&6.2.1 指针运算符指针运算符6.2 指针变量的运算第11页/共68页2. 取内容运算符*3. 注意事项【例6.2】分析下面程序的运行结果。#includemain()int d,x,*p; /*定义整型变量d、x和整型指针p*/d=10;x=19;p=&x; /*将变量x的地址赋给指针p*/printf(d=%dn,*p

8、);1. 取地址运算符&6.2.1 指针运算符指针运算符6.2 指针变量的运算程序的运行结果如下:d=19第12页/共68页2. 取内容运算符*3. 注意事项(1)取地址运算符&表示变量的地址;而取内容运算符*表示指针所指的内容。(2)运算符&只能用于变量和数组元素。(3)*和&都是单目运算符,两者的优先级相同,结合性均是从右到左。(4)&x不能出现在赋值号的左边。(5),因此不能用&取寄存器变量的地址。(6)被赋值的指针变量前不能再加“*”说明符,如写为*p=&a 也是错误的。1. 取地址运算符&6.2.1 指针运算符指针运算符

9、6.2 指针变量的运算第13页/共68页2. 取内容运算符*3. 注意事项【例6.3】通过指针变量访问字符型变量。#includemain() char ch1,ch2;/*定义字符型变量ch1和ch2*/ char *p1,*p2; /*定义字符型指针p1和p2*/ ch1=A; ch2=B; p1=&ch1; /*指针p1指向变量ch1*/ p2=&ch2; /*指针p2指向变量ch2*/ printf(%c,%cn,ch1,ch2);/*输出变量ch1和变量ch2的内容*/ printf(%c,%c,*p1,*p2); /*输出指针p1和p2所指的存储单元的内容*/1.

10、取地址运算符&6.2.1 指针运算符指针运算符6.2 指针变量的运算程序的运行结果为:A,BA,B&ch1&ch2P1P2ch1ch2(a) p1与ch1之间的关系(b) p2与ch2之间的关系第14页/共68页2. 指针中加减运算3. 指针变量的关系运算(1)指针变量初始化赋值时,不要将一个内存地址常量赋给一指针变量。例如:int i=100, x;int *m;:m=&i;1. 赋值运算6.2.2 指针变量的运算6.2 指针变量的运算4. 两指针变量相减第15页/共68页2. 指针中加减运算3. 指针变量的关系运算(2)指针变量和一般变量一样,存放在其中的值

11、是可以改变的,也就是说可以改变指针变量的指向,例如:int i, j;int *p1;int *p2;i=c;j=d;p1=&i;p2=&j;上面的程序语句也可以用下面的图来说明。1. 赋值运算6.2.2 指针变量的运算6.2 指针变量的运算赋值运算结果4. 两指针变量相减第16页/共68页2. 指针中加减运算3. 指针变量的关系运算如果此时有如下的赋值表达式:p2=p1;则指针变量p2与p1就指向了同一个对象i,此时的*p2就等价于i,而不再是j了,这种情况可以用如下的图来说明。1. 赋值运算6.2.2 指针变量的运算6.2 指针变量的运算p2=p1时的情形P1P24. 两指

12、针变量相减第17页/共68页2. 指针中加减运算3. 指针变量的关系运算再例如,如果执行如下的表达式:*p2=*p1;则此时表示把p1指向的内容赋给p2所指的区域,此时可用下图来表示情形。 1. 赋值运算6.2.2 指针变量的运算6.2 指针变量的运算*p2=*p1时的情形P1P24. 两指针变量相减第18页/共68页2. 指针中加减运算3. 指针变量的关系运算(3)如果需要,也可以把数组的首地址赋予指向数组的指针变量。例如:int a8,*pa;pa=a; 也可写为:也可写为:pa=&a0; 也可采取如下初始化赋值的方法:也可采取如下初始化赋值的方法:int a8,*pa=a;1.

13、赋值运算6.2.2 指针变量的运算6.2 指针变量的运算4. 两指针变量相减第19页/共68页2. 指针中加减运算3. 指针变量的关系运算(4)可以把字符串的首地址赋给指向字符类型的指针变量。例如,把字符串“Hello human”赋给指针变量p,方法如下:char *p;p=Hello human;或用初始化赋值的方法写为:char *p=Hello human;1. 赋值运算6.2.2 指针变量的运算6.2 指针变量的运算4. 两指针变量相减第20页/共68页2. 指针中加减运算3. 指针变量的关系运算对于指向数组的指针变量,可以给其加上或减去一个整数n。例如,设p是指向数组m的指针变量,

14、则p+n,p-n,p+,+p,p-,-p都是合法的运算表达式。给指针变量加上或减去一个整数n表示把指针指向的当前位置(指向某数组元素)向前或向后移动n个位置。1. 赋值运算6.2.2 指针变量的运算6.2 指针变量的运算4. 两指针变量相减第21页/共68页2. 指针中加减运算3. 指针变量的关系运算指向同一数组的两个指针变量进行关系运算可表示它们所指数组元素之间的关系。例如:p1=p2; /*表示p1和p2指向同一数组元素*/p1p2; /*表示p1处于高地址位置*/p1y) /*三个数进行大小比较*/max=&x; min=&y; elsemax=&y;min=&a

15、mp;x;if(z*max) max=&z;if(z*min) min=&z;printf(the max is: %dnthe min is: %dn,*max,*min);1. 赋值运算6.2.2 指针变量的运算6.2 指针变量的运算该程序的运行结果如下:please input three numbers:23 34 65 the max is: 65the min is: 23第23页/共68页2. 指针中加减运算4. 两指针变量相减两指针变量也可以进行相减运算,其所得之差是:两个指针所指的数组元素之间相差的元素个数,实际上是两个指针值(地址)相减之差再除以该数组元素的

16、长度(字节数)。 例如:p1和p2 是指向同一整型数组的两个指针变量,设p1的值为1100H,p2的值为1050H,由于整型数组每个元素占2个字节,所以p1-p2的结果为(1100H-1050H)/2=25,因此“p1-p2”表示p1和 p2之间相差25个元素。但是,p1和p2不能进行加法运算,因为指针变量相加是毫无意义的。1. 赋值运算6.2.2 指针变量的运算6.2 指针变量的运算3. 指针变量的关系运算第24页/共68页2. 数组指针变量的说明3. 数组名和数组指针变量作函数参数第一,一个数组是由连续的一块内存单元组成的。其中的数组名就是这块连续内存单元的首地址。第二,一个数组也是由各个

17、数组元素组成的。第三,数组元素的首地址也是指它所占有的几个内存单元的首地址。1.几个数组指针变量的关系6.3 指向数组元素的指针第25页/共68页2. 数组指针变量的说明3. 数组名和数组指针变量作函数参数数组指针变量说明的一般形式为:类型说明符类型说明符 *指针变量名指针变量名;其中,“类型说明符”表示指针变量所指数组的类型;“*”表示其后的变量是指针变量。用数组指针变量访问数组元素有两种方法:第一种方法为下标法,即用mi形式访问数组元素。第二种方法为指针法,即采用*(pm+i)形式,该方法是用间接访问的方法来访问数组元素。1.几个数组指针变量的关系6.3 指向数组元素的指针第26页/共68

18、页2. 数组指针变量的说明3. 数组名和数组指针变量作函数参数【例6.6】采用指针法访问数组元素。#includemain()int m5,i,*pm; pm=m; for(i=0;i5;i+) *pm=i; pm+; pm=m;for(i=0;i5;i+) printf(m%d=%dn,i,*pm); pm+; 1.几个数组指针变量的关系6.3 指向数组元素的指针该程序的运行结果如下:m0=0m1=1m2=2m3=3m4=4第27页/共68页2. 数组指针变量的说明3. 数组名和数组指针变量作函数参数【例6.7】与例6.6的本意相同,但是其实现方式不同。#includemain() int

19、m5,i,*pm=m; for(i=0;i5;) *pm=i; printf(m%d=%dn,i+,*pm+); 1.几个数组指针变量的关系6.3 指向数组元素的指针该程序的运行结果如下:m0=0m1=1m2=2m3=3m4=4第28页/共68页2. 数组指针变量的说明3. 数组名和数组指针变量作函数参数数组名是数组的首地址,实参向形参传送数组名实际上就是传送数组的地址,形参得到该地址后也指向同一数组。指针变量的值也是地址,数组指针变量的值即为数组的首地址,也可作为函数的参数使用。1.几个数组指针变量的关系6.3 指向数组元素的指针第29页/共68页2. 数组指针变量的说明3. 数组名和数组指

20、针变量作函数参数【例6.8】编写求五门课程平均成绩的函数,并编写主函数调用该函数。下图所示为对应的N-S流程图。1.几个数组指针变量的关系6.3 指向数组元素的指针定义浮点型的数组sco5、变量 av 和指针 *spsp=scofor(i=0;i5;i+)将5门课程的成绩依次输入到scoi中av=aver(sp) 输出平均分av的值main函数的N-S流程图定义浮点型变量 av和 s for(i=0;i5;i+)s=s+*pm+av=s/5返回av的值aver函数的N-S流程图第30页/共68页2. 数组指针变量的说明3. 数组名和数组指针变量作函数参数程序代码如下:#includefloat

21、 aver(float *pm); main() float sco5,av,*sp; int i; sp=sco; printf(n please input 5 scores:n); for(i=0;i5;i+) scanf(%f,&scoi); av=aver(sp); printf(average score is %5.2f,av); float aver(float *pm) /*函数aver*/ int i; float av,s=0; for(i=0;i5;i+) s=s+*pm+; av=s/5; return av;1.几个数组指针变量的关系6.3 指向数组元素的指

22、针程序的运行结果如下:please input 5 scores:90 45 56 80 100 第31页/共68页6.4 指向二维数组的指针变量1. 二维数组地址的表示方法 2. 二维数组的指针变量语言允许把一个二维数组分解为多个一维数组来处理。因此二维数组m可分解为三个一维数组,即m0、m1、m2。每个一维数组又含有四个元素。例如m0数组,含有m00、m01、m02、m03四个元素。第32页/共68页6.4 指向二维数组的指针变量1. 二维数组地址的表示方法 2. 二维数组的指针变量【例6.9】用不同的方式输出同一数组元素的数据值的应用举例。#includemain() int m34=0

23、,1,2,3,4,5,6,7,8,9,10,11; printf(%d,%d,%d,%d,%d,n,m,*m,m0,&m0,&m00); printf(%d,%d,%d,%d,%d,n,m+1,*(m+1),m1,&m1,&m10); printf(%d,%d,%d,%d,%d,n,m+2,*(m+2),m2,&m2,&m20); printf(%d,%dn,m1+1,*(m+1)+1); printf(%d,%dn,*(m1+1),*(*(m+1)+1);其运行结果如下:404,404,404,404,404412,412,412,412,41

24、2420,420,420,420,420414,4145,5第33页/共68页6.4 指向二维数组的指针变量1. 二维数组地址的表示方法 2. 二维数组的指针变量二维数组指针变量说明的一般形式为: 类型说明符 (*指针变量名)长度;其中“类型说明符”为所指数组的数据类型。“*”表示其后的变量是指针类型。“长度”表示二维数组分解为多个一维数组时,一维数组的长度,也就是二维数组的列数。“*(p+i)+j”是二维数组i行j 列的元素的地址,而“*(*(p+i)+j)”则是i行j列元素的值。第34页/共68页6.4 指向二维数组的指针变量1. 二维数组地址的表示方法 2. 二维数组的指针变量【例6.1

25、0】二维数组指针变量的应用举例。main() static int m34=0,1,2,3,4,5,6,7,8,9,10,11; int (*p)4; int i,j; p=m; for(i=0;i3;Ifor(j=0;j4;j+) printf(%3d ,*(*(p+i)+j);该程序的运行结果为:0 1 2 3 4 5 6 7 8 9 10 11第35页/共68页6.5 指向字符串的指针变量1. 字符串的表示形式2. 字符串指针变量与字符数组的区别在C语言中,可以用两种方法访问一个字符串。(1)第一种:用字符串指针指向一个字符串。(2)第二种:用字符数组存放一个字符串,然后输出该字符串。第

26、36页/共68页6.5 指向字符串的指针变量1. 字符串的表示形式2. 字符串指针变量与字符数组的区别【例6.11】编程实现:把一个字符串的内容复制到另一个字符串中,要求不能使用strcpy函数。函数cprstr的形参为两个字符指针变量pm和pn。其中,pm指向源字符串,pn指向目标字符串。这里要注意表达式“(*pn=*pm)!=0”的用法。程序代码如下:#includecprstr(char *pm,char *pn) /*定义字符串复制函数cpystr*/ while(*pn=*pm)!=0)pn+;pm+; 第37页/共68页6.5 指向字符串的指针变量1. 字符串的表示形式2. 字符串

27、指针变量与字符数组的区别main()char *pa=Human,b10,*pb;pb=b;cprstr(pa,pb); /*调用字符串复制函数cpystr*/printf(string_a=%snstring_b=%sn,pa,pb);程序的输出结果为:string_a=Humanstring_b=Human第38页/共68页6.5 指向字符串的指针变量1. 字符串的表示形式2. 字符串指针变量与字符数组的区别简化后的程序如下所示:#includecprstr(char *pm,char *pn) while(*pn+=*pm+)!=0);main()char *pa=Human,b10,*

28、pb;pb=b;cprstr(pa,pb); printf(string_a=%snstring_b=%sn,pa,pb);程序的输出结果为:string_a=Humanstring_b=Human第39页/共68页6.5 指向字符串的指针变量1. 字符串的表示形式2. 字符串指针变量与字符数组的区别(1)在对字符数组作初始化赋值时,必须采用外部类型或静态类型。(2)字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中,并以0作为串的结束。(3)字符串指针方式可以根据需要灵活使用。例如,对字符串指针方式:char *m=Hello Hu

29、man;可以改写为另一种方式:char *m;m=Hello Human;第40页/共68页1. 定义的一般形式 2.例 6.6 指针型函数类型说明符 *函数名(形参表) 函数体其中函数名之前加了“*”号表明这是一个指针型函数,即返回值将是一个指针。类型说明符表示了返回的指针值所指向的数据类型。第41页/共68页1. 定义的一般形式 2.例 6.6 指针型函数【例6.12】使用指针函数编写程序,实现求两个数中的较大者。#includeint *max(int a,int b)int *p;if(ab)p=&a;elsep=&b;return p;main() printf(ma

30、x=%d,*(max(12,56);第42页/共68页1. 一般形式 2.例 6.6 指针型函数类型说明符 (*指针变量名)();上面就是函数指针变量定义的一般形式,其中“类型说明符”表示被指函数的返回值的类型。“(* 指针变量名)”表示“*”后面的变量是定义的指针变量。最后的空括号表示指针变量所指的是一个函数。例如: int (*f1)();表示f1是一个指向函数入口的指针变量,该函数的返回值是整型。3.几点注意事项 第43页/共68页1. 一般形式 2.例 6.6 指针型函数【例6.13】编程实现:求两个整数中的较小者,在程序中使用指针形式实现对函数的调用。#includeint min(

31、int a,int b) if(ab) return a;else return b;main()int min(int a,int b);int(*pmin)();int x,y,z;pmin=min; printf(please input two numbers:n);scanf(%d%d,&x,&y);z=(*pmin)(x,y); printf(min_number=%d,z);程序的运行情况为:please input two numbers:3523min_number=233.几点注意事项 第44页/共68页1. 一般形式 2.例 6.6 指针型函数(1)函数调

32、用中“(*指针变量名)”两边的括号不可少,其中的“*”不应该理解为求值运算,在此处它只是一种表示符号。(2)不能让函数指针变量参与算术运算,这是与数组指针变量不同的。应该特别注意的是:函数指针变量和指针型函数这两者在写法和意义上是有区别的。例如,float(*p)()和float*p()是两个完全不同的概念,3.几点注意事项 第45页/共68页6.7 指针数组1. 指针数组的定义2. 指针数组中的字符串指针数组定义的一般形式为:类型说明符 *数组名数组长度说明 例如:int *p3;定义了一个有三个元素的指针数组,每个数组元素(指针变量)都可以指向一个整型变量。第46页/共68页6.7 指针数

33、组1. 指针数组的定义2. 指针数组中的字符串【例6.14】指针数组应用举例。int m33=1,2,3,4,5,6,7,8,9;int *pm3=m0,m1,m2; int *p=m0;main() int i; for(i=0;i3;i+) printf(%d,%d,%dn,mi2-i,*mi,*(*(m+i)+i); for(i=0;i3;i+)printf(%d,%d,%dn,*pmi,pi,*(p+i);该程序的运行结果如下:3,1,15,4,57,7,91,1,14,2,27,3,3第47页/共68页6.7 指针数组1. 指针数组的定义2. 指针数组中的字符串指针数组也常用来表示一

34、组字符串,这时指针数组的每个元素被赋予一个字符串的首地址。指向字符串的指针数组的初始化更为简单。例如,采用指针数组来表示一组字符串,其初始化赋值如下:char *p=Monday,Tuesday, Wednesday,Thursday, Friday,Saturday,Sunday;完成这个初始化赋值之后,p0即指向字符串“Monday” ,p6指向“Sunday”。第48页/共68页6.8 二级指针一级指针是直接指向数据对象的指针,即其中存放的是数据对象,如变量或数组元素的地址。二级指针是指向指针的指针,二级指针并不直接指向数据对象,而是指向一级指针的指针,也就是说,二级指针中存放的是一级指

35、针的地址。下图所示是一级指针和二级指针的示意图。地址值指针变量(a)一级指针值地址地址二级指针一级指针变量(b)二级指针一级指针和二级指针的示意图第49页/共68页6.8 二级指针二级指针的定义格式为:存储类型 数据类型 *指针名;其中,指针名前面有两个*,表示是一个二级指针。例如,有以下定义:int a,*pa,*pb;pa=&a;pb=&pa;则指针pa存放变量a的地址,即指向了变量a,指针pb存放一级指针pa的地址,即指向了pa。因此,pa是一级指针,pb是二级指针。第50页/共68页6.8 二级指针一般情况下,二级指针必须与一级指针联合使用才有意义,不能将二级指针直接指

36、向数据对象。【例6.15】用二级指针访问二维数组。如果有如下定义:int a34;int *p3,*pp;p0=a0;p1=a1;p2=a2;pp=p;第51页/共68页6.8 二级指针可以编制用二级指针访问二维数组的程序如下:#include main() static int a34;static int *p3,*pp;int i,j;p0=a0;p1=a1;p2=a2;p3=a3;pp=p; printf(Please enter the number of a34:n);for(i=0;i3;i+) for(j=0;j4;j+) scanf(%d,ppi+j);for(i=0;i3;

37、i+) for(j=0;j4;j+)printf(%5d,*(*(pp+i)+j); printf(n); 程序的运行情况为:Please enter the number of a34:1 2 3 4 5 6 7 8 9 10 11 12 1 2 3 45 6 7 89 10 11 126.8.3 二级指针的使用二级指针的使用第52页/共68页6.9 程序举例1. 实例一2. 实例二请按水果店里的水果名字(字符的字典顺序)的顺序对水果的名字进行排序,并输出排序后的内容。下图所示为对应的N-S流程图。定义字符型数组nameN5存放水果的名称定义指针数组*pointNfor(j=0;jN;j+)

38、pointj=namejpoint(point,N)sort(point,N)point(point,N)main函数的N-S流程图定义整型变量ifor (i=0; in; i+)输出数组namei中的字符串print函数的N-S流程图第53页/共68页6.9 程序举例1. 实例一2. 实例二请按水果店里的水果名字(字符的字典顺序)的顺序对水果的名字进行排序,并输出排序后的内容。下图所示为对应的N-S流程图。定义字符型指针变量tempfor(i=0; in-1; i+)k=ifor(j=i+1; j0 ?真假k=jk!=i ?真假temp=nameinamei=nameknamek=temps

39、ort函数的N-S流程图第54页/共68页6.9 程序举例1. 实例一2. 实例二#include#include#define N 6 /*定义水果种类的数目,假设为6种*/void sort(char *name,int); /*排序函数sort的说明*/void print(char *name,int); /*输出函数print的说明*/main()static char nameN80=“ orange, banana, apple, peach, grape, tomato;/*定义二维数组存放水果的名称*/第55页/共68页6.9 程序举例1. 实例一2. 实例二 char *p

40、ointN; /*定义指针数组*/ int j;for(j=0;jN;j+) pointj=namej; /*指针数组指向二维数组各行的首地址*/printf(The name of fruit before sorted:n);print(point,N); /*输出排序前的水果名*/sort(point,N); /*调用函数sort对水果名按字典的顺序进行排序*/printf(nThe name of fruit after sorted:n);print(point,N); /*输出排序后的水果名*/第56页/共68页6.9 程序举例1. 实例一2. 实例二void sort(char

41、*name,int n) char *temp; int i,j,k; for(i=0;in-1;i+) k=i; for(j=i+1;j0) k=j; if(k!=i) temp=namei;namei=namek;namek=temp; 第57页/共68页6.9 程序举例1. 实例一2. 实例二void print(char *name,int n) /*定义输出函数print*/ int i; for(i=0;in;i+) printf(%sn,namei);程序运行结果为:程序运行结果为:The name of fruit before sorted:orangebananaapple

42、peachgrapetomatoThe name of fruit after sorted:Applebananagrapeorangepeachtomato第58页/共68页6.9 程序举例1. 实例一2. 实例二用指针数组求两个矩阵a,b的和,将结果存入a,并按矩阵的形式输出。程序代码如下:#include#define ROW 4 /*定义矩阵的行数,假设为4*/#define COL 5 /*定义矩阵的列数,假设为5*/main()/*定义二维数组a并赋初值*/int ROWCOL= 9,22,76,59,10, 80,90,47,35,12, 16,81,50,29,23, 45,

43、57,89,12,15 ;第59页/共68页6.9 程序举例1. 实例一2. 实例二/*定义二维数组b并赋初值*/int bROWCOL= 23,10,17,49,0, 53,17,75,67,5, 69,87,60,21,7, 13,25,37,49,50 ;int *p2; /*定义指针数组*/int i,j;p0=a0; p1=b0; printf(matrix a%d%d is :n,ROW,COL);for(i=0;iROW;i+) for(j=0;jCOL;j+) printf(“ %d,*(p0+j+COL*i); printf(n);第60页/共68页6.9 程序举例1. 实例

44、一2. 实例二printf(matrix b%d%d is:n,ROW,COL);for(i=0;iROW;i+) for(j=0;jCOL;j+) printf(%d,*(p1+j+COL*i);printf(n); printf(The sum of the two matrix is:n); for(i=0;iROW;i+) for(j=0;jCOL;j+) *(p0+j+COL*i )+=*(p1+j+COL*i); printf(%d,*(p0+j+COL*i); printf(n); 程序的输出结果为:程序的输出结果为:matrix a45 is: 9 22 76 59 1080 90 47 35 1216 81 50 29 2345 57 89 12 15matrix b45 is:23 10 17 49 053 17 75 67 569 87 60 21 713 25 37 49 50The sum of the two matrix is:32 32 93 108 10133 107 122 102 17 85 168 110 50 3058 82 126 61 65 第61页/共68页6.10 用指针进行内存动态分配Turbo C主要用两种方法使用内存:

温馨提示

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

评论

0/150

提交评论