6 指针 - 参考程序
更新时间:2023-09-25 03:09:01 阅读量: 综合文库 文档下载
指针参考程序
编程题:
1. 编写程序,用指针实现读入一行数列,求数列的和,平均值,最大值、最小值,并且打印它们。
#include \#include \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(\
printf(\请输入%d个整数\ p=array; for(i=0; i scanf(\ if(*p>max) max= *p; if(*p sum=sum + *p; p++; } printf(\输入的%d个整数为\输出所有整数*/ p=array; for(i=0; i printf(\ putchar('\\n'); printf(\以上整数的累加和为%d\\n\ printf(\以上整数的平均值为%.2f\\n\ printf(\以上整数的最大值为%d\\n\ printf(\以上整数的最小值为%d\\n\ } 2. 编写字符串插入函数char *strins(char *s1, char *s2),将字符串s2的内容插入到字 符串s1之前,参数s1, s2为指向字符串的指针。函数执行后,返回值为结果字符串的首地址(即s1),参数s1为结果字符串中原来子串s1的首地址,参数s2不变。例如:s1=”world”, s2=”hello”, 结果字符串为”helloworld”,s1指向字符‘h’。 在main函数中输入两个字符串,调用该函数完成字符串的插入,并输出结果。 #include \ 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(\ gets(str1); printf(\ 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 char *substr(char *str1, char *str2); void main() { char s1[80], s2[20], *p; printf(\ gets(s1); printf(\ gets(s2); /*s2为要验证的字串*/ p=substr(s1, s2); if (p!=NULL) { printf(\第二个字符串是第一个字符串的子串!\\n\ printf(\指针指向字符%c!\\n\} else printf(\第二个字符串不是第一个字符串的子串,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 void main() { char s[80]; printf(\请输入一个字符串以回车结束:\\n\gets(s); printf(\该字符串的长度为%d\\n\} 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 char * cutstr(char *str, unsigned int n); void main() { char s[80], *p; unsigned int n; printf(\请输入一个字符串以回车结束:\\n\gets(s); printf(\请输入要删除前面的字符个数: \scanf(\ p=cutstr(s,n); printf(\删除前面%d个字符后字符串为:%s\\n\这里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 \ void sort(int *a, int n) //无返回值,在原数组上排序 { int i, j, temp; for(i=0;i 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(\ sort(data, 10); printf(\降序排序后的数组为:\\n\ for(i=0;i<10;i++) printf(\ printf(\} 选做题: 编写程序,用指针实现读入字符串s,字符串s1,字符串s2,如果s1是字符串s的子串,则用s2替换s中的s1,并且打印结果字符串。例如s=”abcde123fghijk123mn45”, s1=”123”, s2=”88”, 程序执行后s=”abcde88fghijk88mn45” #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的指针,如果没找到返回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); }
正在阅读:
6 指针 - 参考程序09-25
英雄联盟的市场营销策略分析05-06
生物化学答案12-10
低压铸造铝合金轮毂T4热处理工艺探索08-26
有关秋天的小学生一年级作文06-14
有关读书的好句好段02-11
新人教版地理必修2《工业的区位因素与区位选择》word学案05-02
我国中小企业融资难的原因及对策分析05-17
8BUnit5错题整理09-20
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 指针
- 参考
- 程序
- 新疆信发煅烧工艺操作规程
- 2018最新版-岭南版小学二年级上册全册美术教学计划及教案
- 长沙市小微企业创业创新核心服务机构情况一览表 - 图文
- 计算机导论期中试卷(b)
- 人教版三年级下册数学《位置与方向》教学设计
- 思政简答题
- 2元人民币整捆价格惊人 - 图文
- 小学四年级英语下册课程纲要
- 时隔一个月 肯德基又涨价
- 马克思主义基本原理概论(第一章)
- 设计概论试卷A
- 用SPSS对数据进行分析
- 墩柱安全技术交底
- 热工过程自动调节
- 18春北语《综合英语》(II)作业4
- 2011年浙江省高考理综化学7+4模拟卷(16)
- 2016-2022年中国直销银行行业市场分析及发展趋势预测报告
- 关于提高丧葬补助费和一次性抚恤金标准的通知
- 古代女子服饰发髻称谓
- 苏教版2013新版二年级数学复习题 - 图文