实验8 指针及其应用

上传人:痛*** 文档编号:100507378 上传时间:2022-06-02 格式:DOC 页数:12 大小:173KB
收藏 版权申诉 举报 下载
实验8 指针及其应用_第1页
第1页 / 共12页
实验8 指针及其应用_第2页
第2页 / 共12页
实验8 指针及其应用_第3页
第3页 / 共12页
资源描述:

《实验8 指针及其应用》由会员分享,可在线阅读,更多相关《实验8 指针及其应用(12页珍藏版)》请在装配图网上搜索。

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流实验8 指针及其应用.精品文档.实验八 指针及其应用【实验目的】1理解指针概念、求变量地址和指针寻址操作,掌握指针的各种运算方法。2掌握指针作为函数参数,实现函数与被调用函数之间数据传递的方法。3理解指针与数组的关系,掌握运用指针访问数组元素的方法。4理解指针与字符串的关系,掌握运用指针处理字符串的方法。【实验内容】一、读程序,运行程序,解释程序结果。程序1:#include main()int x,y,*pt1,*pt2,t1,t2,t3;x=8;y=4;pt1=&x;pt2=&y;t1=*pt1*pt2 -11;t2=3*-*pt2+*p

2、t1+5;printf(Address of x =%un,pt1);printf(Address of y =%un,pt2);printf(n);printf(x=%d,y=%dn,x,y);printf(t1=%d,t2=%dn,t1,t2);*pt1=*pt2+7;*pt2=*pt1-6;t3=*pt1*pt2+3;printf(n);printf(x=%d,y=%dn,x,y);printf(t3=%dn,t3);程序2:#include main()int *pt, tot=0,i;int x5=6,7,8,9,10;i=0;pt=x;printf(Element Value Ad

3、dressnn);while(i5)printf( x%d %d %un,i,*pt,pt);tot=tot+*pt;i+;pt+;printf(n Total = %dn,tot);printf(n &x0 = %un,&x0);printf(n &x = %un,&x);printf(n x = %un,x);printf(n pt = %un,pt);程序3:#include void swap1(int x,int y)int t;printf(swap1:n);printf(x的地址=%d,x的地址=%dn,&x,&y);printf(swap1交换后:x的值=%d,y的值=%dn,

4、x,y);t=x;x=y;y=t;printf(swap1交换后:x的值=%d,y的值=%dn,x,y);void swap2(int *x,int *y)int t;printf(swap2:n);printf(x的地址=%d,x的地址=%dn,x,y);printf(swap2交换前:x所指变量的值=%d,y所指变量的值=%dn,*x,*y);t=*x;*x=*y;*y=t;printf(swap2交换前:x所指变量的值=%d,y所指变量的值=%dn,*x,*y);void main()int a,b;scanf(%d%d,&a,&b);printf(n);printf(a的地址=%d,b

5、的地址=%dn,&a,&b);printf(调用swap1前:a的值=%d,b的值=%dn,a,b);swap1(a,b);printf(调用swap1后:a的值=%d,b的值=%dn,a,b);swap2(&a,&b);printf(调用swap2后:a的值=%d,b的值=%dn,a,b);二、 修改程序中的错误,并解释。对于教材中的例9.1,编写如下程序:程序1:#include char *a;char *b;char *c;char x,y,z;void assp(char *p, char pref);int main()char prefa, prefb, prefc;printf

6、(please input A,B,Cs prefer:n);scanf(%c%c%c, &prefa, &prefb, &prefc);getchar();assp(a, prefa);assp(b, prefb);assp(c, prefc);printf(please input female X,Y,Zs prefer:n);scanf(%c%c%c, &x, &y, &z);if (*a = a) printf(A is lucky!n);if (*b = b) printf(B is lucky!n);if (*c = c) printf(C is lucky!n);return

7、0;void assp(char *p, char pref)switch (pref) case x: p=&x; break;case y: p=&y; break;case z: p=&z; break;程序2:#include char *a, *b, *c;char *x, *y, *z;char *tpre(char pref);int main()char prefa, prefb, prefc;printf(please input A,B,Cs prefer:n);scanf(%c%c%c, &prefa, &prefb, &prefc);getchar();a=tpre(p

8、refa);b=tpre(prefb);c=tpre(prefc);printf(please input female X,Y,Zs prefer:n);scanf(%c%c%c, &prefa, &prefb, &prefc);x=tpre(prefa);y=tpre(prefb);z=tpre(prefc);if (&a = *a) printf(A is lucky!n);if (&b = *b) printf(B is lucky!n);if (&c = *c) printf(C is lucky!n);return 0;char *tpre(char pref)switch (pr

9、ef) case x: return &x;case y: return &y;case z: return &z;case a: return &a;case b: return &b;case c: return &c;return null;三、 编程题:1. 编写程序,用指针实现读入一行数列,求数列的和,平均值,最大、最小值,并且打印它们。#includevoid max(int a,int n);void avg(int a,int n);void min(int a,int n);int sum(int a,int n);void main()int x10,n;int i=0;i

10、nt *p;p=x;printf(please input a number:);scanf(%d,&n);for(i=0;in;i+)scanf(%d,&xi);sum(x,n);max(x,n);min(x,n);avg(x,n);int sum(int a,int n)int t,temp=0;int sum=0;for(t=0;tn;t+)sum=sum+at;printf(sum=%d,sum);return sum;void max(int a,int n)int t;int *p;p=a;int max=a0;for(t=0;tmax)max=pt;printf(max=%d,m

11、ax);void avg(int a,int n)int avg;avg=sum(a,n)/n;printf(avg=%d,avg);void min(int a,int n)int t;int *p;p=a;int min=a0;for(t=0;tn;t+)if(ptmin)min=pt;printf(min=%d,min);2. 编写字符串插入函数char *strins(char *s1, char *s2),将字符串s2的内容插入到字符串s1之前,参数s1, s2为指向字符串的指针。函数执行后,返回值为结果字符串的首地址(即原s1),参数s1为结果字符串中原来子串s1的首地址(即返回值

12、加字符串s2的长度),参数s2不变。例如:s1=”world”, s2=hello”, 结果字符串为”helloworld”,s1指向字符w。#include #include int strlength( char *s ) int i; for( i=0; *s!=0; i+, s+ ); return i;char *strins( char *s1, char *s2 ) int l1, l2; int i; char *p1, *p2; l1 = strlength( s1 ); l2 = strlength( s2 ); p1 = s1+l1-1; p2 = s1 + l1+l2;

13、 *p2 = 0; p2 -; for( i=0; il1; i+ ) *p2 = *p1; p2 -; p1 -; p1 = s1; p2 = s2; for( i=0; il2; i+ ) *p1 = *p2; p1 +; p2 +; return s1;void main() char s150; char *s2 = hello; strcpy( s1, world ); printf( %sn, strins( s1, s2 ) );#include#includechar *strins(char *s1,char *s2);#define maxlen 80void main()

14、char *p1,*p2;if(p1=(char *)malloc(maxlen)=NULL)printf(worngn);exit(0);if(p2=(char *)malloc(maxlen)=NULL)printf(worngn);exit(0);printf(please input strings:n);gets(p1);printf(please input strings again:n);gets(p2);strins(p1,p2);printf(%s,p2);free(p1);free(p2);char *strins(char *s1,char *s2)int i,k,n,

15、l,j;char *a1;if(a1=(char*)malloc(maxlen)=NULL)printf(worngn);exit(0);*a1=*s2;for(i=0;*s1!=0;i+)s1+;for(k=0;*s2!=0;k+)s2+;a1+;for(n=0;ni;n+)s2+;s2=0;s2-;for(l=0;li;l+)*s2=*s1;s2-;s1-;for(j=0;jk;j+)*s2=*a1;s2-;a1-;return s2;3. 编写字符串函数char *substr(char *str1, char *str2),判断字符串str2是否为str1的子串,如果是,则返回str1

16、中首次出现子串str2的起始位置,否则,返回NULL值。例如:str1=”I am a student”,str2=”stu”,函数执行后,返回值指向字符s,参数s1,s2不变。#includechar *substr(char *str1, char *str2);void main() char str180, str280; char* flag=NULL; int i=0; printf(输入str1n); gets(str1); printf(输入str2n); gets(str2); flag=substr(str1,str2); printf(%dn,flag - str1);

17、if(flag!=NULL) printf(%s,flag); else printf(NULL); char *substr(char *str1, char *str2) char * p = str1; while(*p) if(memcmp(p,str2, strlen(str2) = 0) return p; p+;4. 编写字符串函数int lenstr(char *str),求字符串str的长度。int lenstr(char *str) int i; for( i=0; *str!=0; i+, str+ ); return i;5. 编写字符串函数char * cutstr(

18、char *str, int n),将字符串str中开始的n个字符删除,后续字符前移。函数执行后,参数str,n不变,如果成功,返回值等于str首地址,如果未成功,返回值为NULL。Char *cutstr(char *str,int n)char *p;if(strlen(str)=n)*str=0;ElseFor(p=str+n;*p;p+)*(p-n)=*p;*(p-n)=0;6. 编写程序,用指针实现读入字符串s,字符串s1,字符串s2,如果s1是字符串s的子串,则用s2替换s中的s1,并且打印结果字符串。要求:(1)不用中的函数,使用前面2-5题中的函数实现。(2)用中的字符串函数实

19、现。(3)考虑程序运行效率问题,你能否重新设计新的子函数,并完成程序,使程序尽可能优化。7. 编一程序,从一个3行4列的二维数组中找出最大数所在的行和列,并将最大值及所在行列值打印出来。要求将查找和打印的功能编一个函数,二维数组的输入在主函数中进行,并将二维数组通过指针参数传递的方式由主函数传递到子函数中。200444上海市宝山区上大路98号南区12幢204#includeint max(int x4,int *n,int *j,int *h);void main()int a34,t,k,w,e;int *j=&w;int*h=&e;int *p,*q=&k;p=&a00;printf(please input datas:n);for(t=0;t3;t+)for(p=&at0;p=&at3;p+)scanf(%d,p);max(a,q,j,h);printf(%dn%dn%dn,*q,*j,*h);int max(int x4,int *n,int *d,int *y)int max,t;max=x00;int num;for(t=0;t3;t+)for(num=0;nummax) max=xtnum; *n=max; *d=t;*y=num; return *n;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!