收藏 分销(赏)

指针_参考程序.doc

上传人:鼓*** 文档编号:12100689 上传时间:2025-09-12 格式:DOC 页数:7 大小:37.50KB 下载积分:8 金币
下载 相关 举报
指针_参考程序.doc_第1页
第1页 / 共7页
指针_参考程序.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
指针参考程序 编程题: 1、 编写程序,用指针实现读入一行数列,求数列得与,平均值,最大值、最小值,并且打印它们。 #include "stdio、h" #include "limits、h" void main() { int array[80], *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; i<n; i++) { scanf("%d",p); if(*p>max) max= *p; if(*p<min) min= *p; sum=sum + *p; p++; } printf("输入得%d个整数为", n); /*输出所有整数*/ p=array; for(i=0; i<n; i++) printf("%d ",*p++); putchar('\n'); printf("以上整数得累加与为%d\n", sum); printf("以上整数得平均值为%、2f\n", (float)sum/n); printf("以上整数得最大值为%d\n", max); printf("以上整数得最小值为%d\n", min); } 2、 编写字符串插入函数char *strins(char *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, *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); /*至少要移动一次,因此用do~while循环*/ //把s2拷贝插入到s1得前面 p1=s1; p2=s2; while(*p2) *p1++=*p2++; return s1; } void main() { char str1[80],str2[80], *p; 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得子串,如果就是,则返回str1中首次出现子串str2得起始位置,否则,返回NULL值。例如:str1=”I am a student”,str2=”stu”,函数执行后,返回值指向字符‘s’,参数s1, s2不变。 在main函数中输入两个字符串,调用该函数判断第二个字符串就是否为第一个字符串得子串,并输出结果。 #include <stdio、h> char *substr(char *str1, char *str2); void main() { char s1[80], s2[20], *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第二个字符串不就是第一个字符串得子串,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; /*没有匹配得字符串,返回空指针*/ } 4、 编写字符串函数int lenstr(char *str),求字符串str得长度。 在main函数中输入一个字符串,调用该函数计算字符串得长度,并输出结果。 #include <stdio、h> int lenstr(char *str); void main() { char s[80]; printf("请输入一个字符串以回车结束:\n"); gets(s); printf("该字符串得长度为%d\n", 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,函数执行后str=”am a student”。 在main函数中输入一个字符串与一个正整数n,调用该函数将字符串前面得n个字符删除,后续字符前移,并输出结果。 #include <stdio、h> #include "string、h" char * cutstr(char *str, unsigned int n); void main() { char s[80], *p; unsigned int n; printf("请输入一个字符串以回车结束:\n"); gets(s); printf("请输入要删除前面得字符个数: "); scanf("%d", &n); p=cutstr(s,n); printf("删除前面%d个字符后字符串为:%s\n", 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个整数存入数组data[10]中,调用该函数对data进行排序,并输出最后得排序结果。 #include "stdio、h" void sort(int *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 main(void) { int data[10]; int i; printf("请输入10个整数:\n"); for(i=0;i<10;i++) scanf("%d",&data[i]); sort(data, 10); printf("降序排序后得数组为:\n"); for(i=0;i<10;i++) printf("%d ", data[i]); printf("\n"); } 选做题: 编写程序,用指针实现读入字符串s,字符串s1,字符串s2,如果s1就是字符串s得子串,则用s2替换s中得s1,并且打印结果字符串。例如s=”abcde123fghijk123mn45”, s1=”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个字符删除,后续字符前移 //以及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得长度 len1++; p2=s2; while(*p2++) //计算s2得长度 len2++; //把s1中得每个字符顺次向后移动len2个位置,包括结束符'\0' p1=s1+len1; //指向s1得结束符'\0' do { *(p1+len2)= *p1; } while(p1--!=s1); /*至少要移动一次,因此用do~while循环*/ //把s2拷贝插入到s1得前面 p1=s1; p2=s2; while(*p2) *p1++=*p2++; return s1; } 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; } void main() { char s1[80], s2[20], s3[20], *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(q,s2); //在q指向得字符串中查找s2第一次出现得位置 if(p!=NULL) //s2就是q得子串,此时p指向该子串第一次出现得位置 { //用s3替换s2 cutstr(p, len2); //删除p指针开始得子串s2 strins(p, s3) ; //将s3插入p指针指定得位置 } q = p + len3; //继续查找 }while(p!=NULL); //直到q指向得串中没有能够匹配得子串 printf("用字符串s3替换掉子串s2后新得s1串为\n"); puts(s1); }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服