6 指针_参考程序_第1页
6 指针_参考程序_第2页
6 指针_参考程序_第3页
6 指针_参考程序_第4页
6 指针_参考程序_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、指针参考程序编程题:1. 编写程序,用指针实现读入一行数列,求数列的和,平均值,最大值、最小值,并且打印它们。#include stdio.h#include limits.hvoid main()int array80, *p;int n, i, sum=0, max=INT_MIN, min=INT_MAX; /*符号常量INT_MIN和INT_MAX分别表示int型的最小值和最大值,在limits.h中定义*/printf(请确定要输入的整数个数n ); scanf(%d,&n);printf(请输入%d个整数, n);p=array;for(i=0; imax)max= *p;if(*

2、pmin)min= *p;sum=sum + *p;p+;printf(输入的%d个整数为, n); /*输出所有整数*/p=array;for(i=0; in; i+)printf(%d ,*p+);putchar(n);printf(以上整数的累加和为%dn, sum);printf(以上整数的平均值为%.2fn, (float)sum/n);printf(以上整数的最大值为%dn, max);printf(以上整数的最小值为%dn, min);2. 编写字符串插入函数char *strins(char *s1, char *s2),将字符串s2的内容插入到字符串s1之前,参数s1, s2

3、为指向字符串的指针。函数执行后,返回值为结果字符串的首地址(即s1),参数s1为结果字符串中原来子串s1的首地址,参数s2不变。例如:s1=”world”, s2=”hello”, 结果字符串为”helloworld”,s1指向字符h。在main函数中输入两个字符串,调用该函数完成字符串的插入,并输出结果。#include stdio.hchar *strins(char *s1, char *s2)int len1=0, len2=0;char *p1, *p2;p1=s1;while(*p1+) /计算s1的长度len1+;p2=s2;while(*p2+) /计算s2的长度len2+;/

4、把s1中的每个字符顺次向后移动len2个位置,包括结束符0p1=s1+len1; /指向s1的结束符0do *(p1+len2)= *p1; while(p1-!=s1); /*至少要移动一次,因此用dowhile循环*/把s2拷贝插入到s1的前面p1=s1;p2=s2;while(*p2)*p1+=*p2+;return s1;void main()char str180,str280, *p;printf(input first string:);gets(str1);printf(input second string:);gets(str2);printf(原来的字串s1:);puts

5、(str1);p=strins(str1,str2); printf(插入后的字符串:);puts(str1); /*这里puts(str1)和puts(p)的输出结果一样,因为p指针实际上就是指向str1的第一个元素*/puts(p);3. 编写字符串函数char *substr(char *str1, char *str2),判断字符串str2是否为str1的子串,如果是,则返回str1中首次出现子串str2的起始位置,否则,返回NULL值。例如:str1=”I am a student”,str2=”stu”,函数执行后,返回值指向字符s,参数s1, s2不变。在main函数中输入两个字

6、符串,调用该函数判断第二个字符串是否为第一个字符串的子串,并输出结果。#include char *substr(char *str1, char *str2);void main() char s180, s220, *p; printf(input string1:n); gets(s1); printf(input string2:n); gets(s2); /*s2为要验证的字串*/ p=substr(s1, s2);if (p!=NULL)printf(n第二个字符串是第一个字符串的子串!n);printf(p指针指向字符%c!n, *p);else printf(n第二个字符串不是

7、第一个字符串的子串,p为空指针!n); char *substr(char *str1, char *str2)char *p, *q, *s; for(s=str1; *s !=0 ; s+)if (*s = *str2) /*str1中是否有和str2首字符相同的字符*/ for(p=s, q=str2; *p & *q ; p+, q+) /*判断接下去的几个字符是否相同*/ if (*p != *q) /*不相同*/break; if (*q=0) /*所有字符都相同*/return s; /*是子串, 返回指向第一个字符的指针*/return NULL;/*没有匹配的字符串,返回空指

8、针*/ 4. 编写字符串函数int lenstr(char *str),求字符串str的长度。在main函数中输入一个字符串,调用该函数计算字符串的长度,并输出结果。#include int lenstr(char *str);void main() char s80; printf(请输入一个字符串以回车结束:n); gets(s); printf(该字符串的长度为%dn, lenstr(s);int lenstr(char *str)char *p; int len=0;for(p=str; *p ; p+)len+;return len;5. 编写字符串函数char * cutstr(c

9、har *str, int n),将字符串str中前面的n个字符删除,后续字符前移。函数执行后,参数str,n不变,如果成功,返回值为str首地址,如果未成功,返回值为NULL。例如:str=”I am a student”,n=2,函数执行后str=”am a student”。在main函数中输入一个字符串和一个正整数n,调用该函数将字符串前面的n个字符删除,后续字符前移,并输出结果。#include #include string.hchar * cutstr(char *str, unsigned int n);void main() char s80, *p; unsigned in

10、t n;printf(请输入一个字符串以回车结束:n); gets(s); printf(请输入要删除前面的字符个数: );scanf(%d, &n);p=cutstr(s,n);printf(删除前面%d个字符后字符串为:%sn, n, p); /这里p用s替代结果一样char * cutstr(char *str, unsigned int n)char *p; if( strlen(str) n ) /*要删除的字符数大于字符串中实际字符个数*/*str=0;elsefor(p=str+n; *p; p+) /*后续字符前移*/*(p-n)=*p;*(p-n)=0; /*串结束标志*/r

11、eturn str;6. 编写一个排序函数sort,将数组按照从大到小的顺序排序,其中有两个形式参数,一个为指向数组的指针p,另一个为数组的元素个数n。在main函数中输入10个整数存入数组data10中,调用该函数对data进行排序,并输出最后的排序结果。#include stdio.hvoid sort(int *a, int n) /无返回值,在原数组上排序 int i, j, temp; for(i=0;in-1;i+) /*冒泡排序*/ for(j=0;jn-i-1;j+) if(*(a+j)*(a+j+1) temp = *(a+j); *(a+j) = *(a+j+1); *(a

12、+j+1) = temp; void main(void) int data10; int i; printf(请输入10个整数:n); for(i=0;i10;i+) scanf(%d,&datai); sort(data, 10); printf(降序排序后的数组为:n); for(i=0;i10;i+) printf(%d , datai); printf(n);选做题: 编写程序,用指针实现读入字符串s,字符串s1,字符串s2,如果s1是字符串s的子串,则用s2替换s中的s1,并且打印结果字符串。例如s=”abcde123fghijk123mn45”, s1=”123”, s2=”88

13、”, 程序执行后s=”abcde88fghijk88mn45”#include #include /利用前面设计的函数/char *strins(char *s1, char *s2) 将字符串s2的内容插入到字符串s1之前/char * cutstr(char *str, int n),将字符串str中前面的n个字符删除,后续字符前移/以及c库函数 char *strstr(char *s1, char *s2) 从字符串s1中寻找子串s2第一次出现的位置,返回指向第一次出现s2的指针,如果没找到返回NULLchar *strins(char *s1, char *s2)int len1=0

14、, len2=0;char *p1, *p2;p1=s1;while(*p1+) /计算s1的长度len1+;p2=s2;while(*p2+) /计算s2的长度len2+;/把s1中的每个字符顺次向后移动len2个位置,包括结束符0p1=s1+len1; /指向s1的结束符0do *(p1+len2)= *p1; while(p1-!=s1); /*至少要移动一次,因此用dowhile循环*/把s2拷贝插入到s1的前面p1=s1;p2=s2;while(*p2)*p1+=*p2+;return s1;char * cutstr(char *str, unsigned int n)char *

15、p; if( strlen(str) n ) /*要删除的字符数大于字符串中实际字符个数*/*str=0;elsefor(p=str+n; *p; p+) /*后续字符前移*/*(p-n)=*p;*(p-n)=0; /*串结束标志*/return str;void main() char s180, s220, s320, *p, *q; unsigned int len2, len3;puts(请输入字符串s1以回车结束: ); gets(s1);puts(请输入字符串s2以回车结束: ); gets(s2);puts(请输入字符串s3以回车结束: ); gets(s3);len2=strlen(s2);len3=strlen(s3);q=s1;

温馨提示

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

评论

0/150

提交评论