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

下载本文档

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

文档简介

1、指针参考程序编程题:1.编写程序,用指针实现读入一行数列,求数列的和,平均值,最大值、最小值,并且打印它们。#include stdio.h #include limits.h void main() 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 canf(%d,&n); printf(请输入 %d 个整数 , n); p=array; f o

2、r(i=0; imax) max= *p; if(*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 *

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

4、*p2; p1=s1; while(*p1+) /计算 s1 的长度len1+; p2=s2; while(*p2+) /计算 s2 的长度len2+; / 把 s1 中的每个字符顺次向后移动len2个位置,包括结束符0 p1=s1+len1; /指向 s1 的结束符 0 do *(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;

5、printf(input first string:); gets(str1); printf(input second string:); gets(str2); printf(原来的字串s1:); puts(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的子

6、串,如果是,则返回 str1 中首次出现子串 str2 的起始位置, 否则,返回 null值。例如:str1= ”i am a student ”,str2= ”stu ”,函数执行后,返回值指向字符s, 参数 s1, s2不变。在 main 函数中输入两个字符串, 调用该函数判断第二个字符串是否为第一个字符串的子串,并输出结果。#include char *substr(char *str1, char *str2); void main() char s180, s220, *p; printf(input string1:n); gets(s1); printf(input string

7、2:n); gets(s2); /*s2为要验证的字串*/ p=substr(s1, s2); if (p!=null) printf(n第二个字符串是第一个字符串的子串!n); printf(p指针指向字符 %c!n, *p); else printf(n第二个字符串不是第一个字符串的子串,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

8、& *q ; p+, q+) /*判断接下去的几个字符是否相同*/ if (*p != *q) /*不相同 */ break; if (*q=0) /*所有字符都相同*/ return s; /*是子串 , 返回指向第一个字符的指针*/ return null; /* 没有匹配的字符串,返回空指针*/ 4. 编写字符串函数 int lenstr(char *str),求字符串 str 的长度。在 main 函数中输入一个字符串,调用该函数计算字符串的长度,并输出结果。#include int lenstr(char *str); void main() char s80; printf

9、(请输入一个字符串以回车结束: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(char *str, int n),将字符串 str 中前面的 n 个字符删除,后续字符前移。函数执行后,参数str ,n 不变,如果成功,返回值为str 首地址,如果未成功,返回值为null 。例如: str= ”i am a student”, n=2,函数执行后st

10、r= ”am a student ”。在 main 函数中输入一个字符串和一个正整数n,调用该函数将字符串前面的n 个字符删除,后续字符前移,并输出结果。#include #include string.h char * cutstr(char *str, unsigned int n); void main() char s80, *p; unsigned int n; printf(请输入一个字符串以回车结束:n); gets(s); printf(请输入要删除前面的字符个数: ); scanf(%d, &n); p=cutstr(s,n); printf(删除前面 %d 个字符后

11、字符串为:%sn, n, p); /这里 p 用 s 替代结果一样 char * cutstr(char *str, unsigned 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; 6. 编写一个排序函数sort ,将数组按照从大到小的顺序排序,其中有两个形式参数,一个为指向数组的指针p,另一个为数组的元素个数n。在 main 函数中输入 10

12、个整数存入数组 data10 中,调用该函数对data 进行排序,并输出最后的排序结果。#include stdio.h void 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+j+1) = temp; void main(void) int data10; int i; printf(请输入 10 个整数: n); for(i=0;i10

13、;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”, 程序执行后 s=”abcde88fghijk88mn45 ”#include #include / 利用前面设计的函数/cha

14、r *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 的指针,如果没找到返回null char *strins(char *s1, char *s2) int len1=0, len2=0; char *p1, *p2; p1=s1; while(*p1+) /计算 s1 的

15、长度len1+; p2=s2; while(*p2+) /计算 s2 的长度len2+; / 把 s1 中的每个字符顺次向后移动len2 个位置,包括结束符 0 p1=s1+len1; /指向 s1 的结束符 0 do *(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 *p; if( strlen(str)

16、 n ) /*要删除的字符数大于字符串中实际字符个数*/ *str=0; else for(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; do p=strstr(

温馨提示

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

评论

0/150

提交评论