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

下载本文档

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

文档简介

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

2、tf("请输入%d个整数",n);p =array;f or(i=0; i<n; i+)sca nf("%d",p);if(*p>max)max= *p;if(*p<mi n)min= *p;sum=sum + *p;p+;printf("输入的%d个整数为,n);/*输出所有整数*/p =array;for(i=0; i<n; i+)prin tf("%d ",*p+);p utchar('n');p rintf("以上整数的累加与为%dn", sum);p ri

3、ntf("以上整数的平均值为%.2fn", (float)sum/n);p rintf("以上整数的最大值为%dn", max);p rintf("以上整数的最小值为%dn", min);2、编写字符串插入函数char *strins(char *s1, char *s2),将字符串s2的内容插入到字符串s1之前,参数s1, s2为指向字符串的指针。函数执行后,返回值为结果字符串的首地址world(即si),参数si为结果字符串中原来子串si的首地址,参数s2不变。例如:s仁 s2= hello ,结果字符串为 helloworld

4、,s1指向字符h'。在main函数中输入两个字符串,调用该函数完成字符串的插入,并输出结果。#include "stdio、h"char *stri ns(char *s1, char *s2)int len仁 0, le n2=0;char *p1,*p2;p1=s1;while(*p1+) /计算 s1 的长度len 1+;p2=s2;while(*p2+) /计算 s2 的长度le n2+;/把s1中的每个字符顺次向后移动Ien2个位置,包括结束符'0'p1=s1+le n1;/指向si的结束符'0'do *(p1+le n2)

5、= *p1; while(p1-!=s1);I*至少要移动一次,因此用dowhile 循环*1II把s2拷贝插入到si的前面p1=s1;p2=s2;while(*p2)*p1+=*p2+;return s1;void mai n()char str180,str280, *p;prin tf("i nput first stri ng:"); gets(str1);prin tf("i nput sec ond stri ng:");gets(str2);prin tf("原来的字串 s1:");puts(str1);p=stri n

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

7、,调用该函数判断第二个字符串就是否为第一个字符串的 子串,并输出结果。#inelude <stdio、h>char *substr(char *str1, char *str2);void mai n()char s180, s220, *p;prin tf("i nput stri ng1:n");gets(s1);prin tf("i nput stri ng2:n");gets(s2);/*s2为要验证的字串*/p=substr(s1, s2);if (p!=NULL)printf("n第二个字符串就是第一个字符串的子串!n&

8、quot;);printf("p指针指向字符 %c!n", *p);elseprintf("n第二个字符串不就是第一个字符串的子串,p为空指针!n");char *substr(char *str1, char *str2)char *p, *q, *s;for(s=str1; *s !='0' ; s+)if (*s = *st/*str1中就是否有与 str2首字符相同的字符 */for(p=s, q=str2; *p && *q ; p+, q+) /*判断接下去的几个字符就是否相同*/if (*p != *q)/*

9、不相同 */break;if (*q='0')/*所有字符都相同*/return s; /*就是子串,返回指向第一个字符的指针 */return NULL; /*没有匹配的字符串,返回空指针*/4、编写字符串函数int lenstr(char *str),求字符串str的长度在main函数中输入一个字符串,调用该函数计算字符串的长度,并输出结果#include <stdio、h>in t le nstr(char *str);void mai n()char s80;prin tf("请输入一个字符串以回车结束:n");gets(s);prin

10、tf("该字符串的长度为 dn", le nstr(s);in t le nstr(char *str)char *p;int len=0;for(p=str; *p ; p+)len+;return len;5、编写字符串函数char * cutstr(char *str, int n),将字符串str中前面的n个字符删除,后续字符前移。函数执行后,参数str,n不变,如果成功,返回值为str首地址,如果未成功, 返回值为 NULL 例如:str= 1 am a student ,n=2,函数执行后 str= am a student 。在main函数中输入一个字符串与一

11、个正整数 n,调用该函数将字符串前面的n个字符删除,后续字符前移,并输出结果#inelude <stdio、h>#inelude "string、h"char * cutstr(char *str, un sig ned int n);void mai n()char s80, *p;un sig ned int n;prin tf("请输入一个字符串以回车结束:n");gets(s);printf(请输入要删除前面的字符个数:");scan f("%d", &n);p=cutstr(s, n);prin

12、tf("删除前面%d个字符后字符串为:sn", n, p); /这里p用s替代结果一样char * cutstr(char *str, un sig ned int n) char *p;if( strlen(str) < n )/*str='0'elsefor(p=str+ n; *p; p+)/*(p-n)=*p;要删除的字符数大于字符串中实际字符个数*/*(p-n)='0'/*后续字符前移*/串结束标志*/return str;6编写一个排序函数sort,将数组按照从大到小的顺序排序,其中有两个形式参数,一个为 指向数组的指针p,

13、另一个为数组的元素个数n。在main函数中输入10个整数存入数组data10中,调用该函数对data进行排序,并输 出最后的排序结果。#i nclude "stdio、h"void sort(i nt *a, int n)/无返回值,在原数组上排序int i, j, temp;for(i=0;i<n-1;i+)/*冒泡排序 */for(j=0;j< n-i-1;j+)if(*(a+j)<*(a+j+1)temp = *(a+j);*(a+j) = *(a+j+1);*(a+j+1) = temp;void mai n(void)int data1O;int

14、 i;printf("请输入10个整数:n");for(i=0;i<10;i+)sca nf("%d", &datai);sort(data, 10);prin tf("降序排序后的数组为:n");for(i=0;i<10;i+)prin tf("%d ", datai);prin tf("n");选做题:编写程序,用指针实现读入字符串s,字符串s1,字符串s2,如果s1就是字符串s的子串,那么 用s2替换s中的s1,并且打印结果字符串。例如s= abcde123fghijk

15、123mn45 , s仁 123 , s2= 88 ,程序执行后 s= abcde88fghijk88mn45 #include <stdio、h>#include <string、h>/利用前面设计的函数/char *strins(char *s1, char *s2)将字符串s2的内容插入到字符串s1之前/char * cutstr(char *str, int n),将字符串str中前面的n个字符删除,后续字符前移II以及c库函数char *strstr(char *s1, char *s2)从字符串si中寻找子串 s2第一次出现的位置,返回指向第一次出现s2的指

16、针,如果没找到返回NULLchar *stri ns(char *s1, char *s2) in t le n1= 0, le n2=0;char *p1,*p2;pi=si;while(*p1+) len 1+;/计算si的长度p2=s2;while(*p2+)/计算s2的长度len 2+;/把si中的每个字符顺次向后移动Ien2个位置,包括结束符'0'p1=s1+len1;/指向 si 的结束符'0'do *(p1+le n2)= *p1; while(p1-!=s1);/*至少要移动一次,因此用dowhile循环*/把s2拷贝插入到s1的前面p1=s1;

17、p2=s2;while(*p2)*p1+=*p2+;return s1;char * cutstr(char *str, un sig ned int n) char *p;要删除的字符数大于字符串中实际字符个数*/*后续字符前移*/if( strlen(str) < n )/*str='0'else for(p=str+ n; *p; p+) *(p-n)=*p;*(p-n)='0'/*串结束标志*/return str;void mai n()char s180, s220, s320, *p, *q;un sig ned int len 2, le n3;puts(请输入字符串gets(s1);puts("请输入字符串gets(s2);puts("请输入字符串gets(s3);len 2=strle n( s2);len 3=strle n( s3);q=s1;s1以回车结束:);s

温馨提示

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

最新文档

评论

0/150

提交评论