C_Lab8-2_指针与一维数组(1).doc

上传人:marr****208 文档编号:132147889 上传时间:2020-05-13 格式:DOC 页数:10 大小:114.50KB
返回 下载 相关 举报
C_Lab8-2_指针与一维数组(1).doc_第1页
第1页 / 共10页
C_Lab8-2_指针与一维数组(1).doc_第2页
第2页 / 共10页
C_Lab8-2_指针与一维数组(1).doc_第3页
第3页 / 共10页
C_Lab8-2_指针与一维数组(1).doc_第4页
第4页 / 共10页
C_Lab8-2_指针与一维数组(1).doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《C_Lab8-2_指针与一维数组(1).doc》由会员分享,可在线阅读,更多相关《C_Lab8-2_指针与一维数组(1).doc(10页珍藏版)》请在金锄头文库上搜索。

1、课程:C语言程序设计 学号: 姓名: 班级:实验8-2 指针与一维数组【知识点回顾】1. 当指针指向数组元素时,可以支持指针运算1) 指针加上整数k:在指向当前元素的基础上,令指针向后移动k个元素(前提,该元素存在)2) 指针减去整数:在指向当前元素的基础上,令指针向后移动k个元素(前提,该元素存在)3) 指针相减:前提是两个指针指向同一个数组中的元素,差值为指针之间的距离(元素个数)4) 指针自增自减:令指针逐元素后移或前移(前提,该元素存在)5) 指针比较:判等运算符=和!=用于判别两个指针是否指向同一元素,、=的使用前提是梁子正指向同一数组时,判定两个指针的位置关系。6) *和+组合:表

2、达式含义*p+ 或 *(p+)自增前表达式的值是*p,然后自增p(*p)+自增前表达式的值是*p,然后自增*p*+p或*(+p)先自增p,自增后表达式的值是*p+*p 或 +(*p)先自增*p,自增后表达式的值是*p【典型例题】1. 例题1,查找数组最大值,注意各实现版本的返回类型差别1) 第一版:返回最大值的函数 #include #define N 10int findMax(int a, int n);int main()int aN,*p,max;/提示用户输入数组元素printf(Enter %d numbers: ,N);/利用指针输入元素for(p=a; pa+N; p+)sca

3、nf(%d,p);/调用函数寻找数组最大值元素max=findMax(a,N);/输出结果printf(The max number in this array is %dn,max);return 0;int findMax(int a, int n)int i,max;max=a0; /初始化最大值/逐元素查找,并更新最大值for(i=1; imax)max=ai;return max; /返回最大值2) 第二版:返回最大值的下标值的函数#include #define N 10int findMax(int a, int n);int main()int aN,*p,max;/提示用户输

4、入数组元素printf(Enter %d numbers: ,N);/利用指针输入元素for(p=a; pa+N; p+)scanf(%d,p);/调用函数寻找数组最大值元素max=findMax(a,N);/输出结果printf(The max number in this array is %dn,amax);return 0;int findMax(int a, int n)int i,max;max=0; /初始化最大值下标/逐元素查找,并更新最大值下标for(i=1; iamax)max=i;return max; /返回最大值下标3) 第三版:返回指针的函数#include #de

5、fine N 10int * findMax(int a, int n);int main()int aN,*p;/提示用户输入数组元素printf(Enter %d numbers: ,N);/利用指针输入元素for(p=a; pa+N; p+)scanf(%d,p);/调用函数寻找数组最大值元素p=findMax(a,N);/输出结果printf(The max number in this array is %dn,*p);return 0;int * findMax(int a, int n)int *p, *pmax; /初始化最大值地址pmax=a;/逐元素查找,并更新最大值地址f

6、or(p=a; p *pmax)pmax=p;return pmax; /返回最大值地址4) 第四版:不返回值,但参数使用了指针的函数#include #define N 10void findMax(int a, int n, int * pmax);int main()int aN,*p,max;/提示用户输入数组元素printf(Enter %d numbers: ,N);/利用指针输入元素for(p=a; pa+N; p+)scanf(%d,p);/调用函数寻找数组最大值元素findMax(a,N,&max);/输出结果printf(The max number in this arr

7、ay is %dn,max);return 0;void findMax(int a, int n, int * pmax)int *p; /初始化最大值地址*pmax=a0;/逐元素查找,并更新最大值地址for(p=a; p *pmax)*pmax=*p;【Q&A】1. Q:如果形参需要传递数组,int * a 和int a使用效果为什么相同?A:前一种形参形如int * a指针声明,是期望实参是地址信息。后者形参int a也是期望实参是数组起始地址,这里形参并不是数组声明,因此并不为数组分配空间,而只是分配一个指针空间,接纳实参传来的数组起始地址而已,从这个意义上来说,两者效果相同。2.

8、Q:编写处理数组的循环时,使用数组下标方式和指针算术运算方式相比,哪个更好些?A:这个问题没有简单的答案。程序设计中,经常看到数组和指针配合紧密,在早期部分机器的C语言指针算术运算会产生执行较快的程序。但在当今的机器上,现代编译器可能会对数组下标方法执行得更好。建议是:两种方法(参考典型范例1的1)中,主函数中和findMax函数中的处理方法)都学习并熟悉,然后在程序设计中采用自然的方法。【实验内容】1. 编写函数int * findMin(int a, int n);当传递长度为n的数组a时,函数将返回指向数组的最小元素的指针。#include#define N 10main() int *

9、 findMin(int a, int n); int *p,aN=2,3,4,7,6,-8,1,67,89,9; p=findMin(a, N); printf(minnuber=%dn,*p); int * findMin(int a, int n) int *pmin=a,*p; for(p=a+1;pa+N;p+) if(*p*pmin) pmin=p; return pmin; 2. 编写程序,用来读一条用户输入消息,然后反向显式这条消息,要求使用指针。程序输出格式如下:Enter a message: Dont worry about me.Reversal is : .em tu

10、oba yrrow tnoD#include#define N 10int main() int lenth(char a) ,l,i; char *p,a=Dont worry about me ; p=a; printf(%sn,p); l=lenth(a) ; for(p=p+l,i=0;il;i+) printf(%c,*(-p); printf(n); int lenth(char a) int l=0,i=0; while(ai+!=0) l+; return l; #include#define N 10int main() int lenth(char a) ,l,i; cha

11、r *p,a=ningbodaxuekejixueyuan; p=a; printf(%sn,p); l=lenth(a) ; for(i=l-1;i=0;i-) printf(%c,*(p+i); printf(n); int lenth(char a) int l=0,i=0; while(ai+!=0) l+; return l; #include#define N 10int main() int lenth(char a) ,l,i; char *p,a=ningbodaxue; p=a; printf(%sn,p); l=lenth(p) ; for(p=p+l,i=0;il;i+

12、) printf(%c,*(-p); printf(n); int lenth(char *p) int l=0,i=0; while(*p+!=0) l+; return l; 3. 编写程序,用来读一条用户输入消息,然后检查这条消息是否回文(信息从左到右的字母和从右到左的字母完全一样,忽略所有不是字母的字符)。程序的输出格式如下:Enter a message: He lived as a devil, eh?Palindrome或者:Enter a message:Madam, I am Adam.Not a palindrome#include#define N 4int main() char *p1,*p2,ch80; p1=p2=ch; gets(p1); for(;*p1 !=0;+p1) if(*p1=a & *p1=A & *p1=Z) *p2+=*p1; *p2=0; p1=ch;p2-; printf(%sn,p1) ; while(p1p2) if(

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号