




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第六次作业:指针(以下题目如无特殊声明,请使用指针技术实现,尽量不要使用数组作为形参,也尽量避免使用数组下标引用数组元素)1. 数组元素循环移位有n个整数,使前面的各整数顺序向后移动m个位置,后面的m个整数则变成最前面的m个数。写一函数实现以上功能。在主函数中输入n及n个整数,输入m (m<n),调用编写的上述函数,然后输出调整后的n个整数。#include<stdio.h>void main()void inv(int *p,int n,int m);int n,m,a20,*p;printf("please input n=");scanf(&quo
2、t;%d",&n);printf("please input %d numbers:",n);p=a;while(p<a+n)scanf("%d",p+);printf("please input m=");scanf("%d",&m);p=a;inv(a,n,m);printf("the new array:n");while(p<a+n)printf("%d ",*p+);putchar('n');void inv(i
3、nt *p,int n,int m)int i;for(i=1;i<=n;i+)*(p+n-i+m)=*(p+n-i);for(i=0;i<m;i+)*(p+i)=*(p+n+i);2. 矩阵元素的排序将一个5×5的整数型矩阵中各元素重新排序。排序规则为,矩阵元素按照从左到右,从上到下的顺序依次递增,即 。要求编写一个函数实现上述排序功能。在主函数中输入该矩阵,调用编写的上述函数,然后输出排序后的矩阵。#include<stdio.h>void main()void inv(int (*x)5);int i,j,a55;int (*p)5;printf(&qu
4、ot;please input an 5*5 array:n");p=a;for(i=0;i<5;i+)for(j=0;j<5;j+)scanf("%d",*(p+i)+j);inv(p);printf("the new array:n");for(i=0;i<5;i+)for(j=0;j<5;j+)printf("%4d",*(*(p+i)+j);putchar('n');putchar('n');void inv(int (*x)5)int i,j,t;for(i=
5、0;i<24;i+)for(j=i+1;j<25;j+)if(*(*x+i)>*(*x+j)t=*(*x+i);*(*x+i)=*(*x+j);*(*x+j)=t;return;3. 星期的查找编写一个程序,输入一个17之间的整数,表示星期几,然后输出相应的文字。例如:如用户输入3,则输出“星期三”。要求:用指针数组的方法来实现。#include<stdio.h>void main()int n;char (*p)3;char a73="一","二","三","四","五&q
6、uot;,"六","七"printf("please input n=");scanf("%d",&n);p=a;printf("星期%sn",p+n-1);4. 字符串库函数的实现请使用指针的方法来实现如下的库函数:Char * strncpy( char *s, char * t, int n) /复制t的前n个字符至sChar * strncat( char *s, char * t, int n) /连接t的前n个字符至s的末尾int strncmp( char *s, char
7、 * t, int n) /比较s和t的前n个字符并请编写一个主函数来调用并测试自己编写的库函数。#include<stdio.h>#include<string.h>char *strncpy(char *s,char *t,int n)int i,length;length=strlen(s);for(i=0;i<n;i+)*(s+i)=*(t+i);if(length<n)*(s+n)='0'return(s);char *strncat(char *s,char *t,int n)int i,length;length=strlen(
8、s);for(i=0;i<n;i+)*(s+i+length)=*(t+i);*(s+length+n)='0'return(s);int strncmp(char *s,char *t,int n)int i;for(i=0;i<n;i+)if(*(s+i)=*(t+i)continue;else if(*(s+i)>*(t+i)return(1);break;else return(-1);break;void main()char a20,b20;int n;scanf("%s%s%d",a,b,&n);printf(&quo
9、t;%sn",strncpy(a,b,n);scanf("%s%s%d",a,b,&n);printf("%sn",strncat(a,b,n);scanf("%s%s%d",a,b,&n);printf("%dn",strncmp(a,b,n);5. 算术练习程序(指针型函数)一位小朋友正在学习两个100以内正整数的简单运算(加法、减法、乘法、除法),请编写一个程序来帮助他学习。该程序调用一个GetRandomExpression(),由它随机返回一个简单的表达式;然后程序提示用户输入表
10、达式的计算结果,并判断答案是否正确。#include<stdio.h>#include<time.h>#include<stdlib.h>int result=1;void GetRanddomExpression(int *num1,char *a,int *num2)int n;srand(time(NULL);*num1=rand()%100+1;*num2=rand()%100+1;n=rand()%4;switch(n)case 0:while(*num2>*num1) *num2=rand()%100+1;result=(*num1)-(*
11、num2);*a='-'break;case 1:while(*num1+*num2)>100)*num2=rand()%100+1;*a='+'result=(*num1)+(*num2);break;case 2:while(*num1*(*num2)>100)*num2=rand()%100+1;*a='*'result=(*num1)*(*num2);break;case 3:while(*num1%*num2!=0)*num2=rand()%100+1;result=(*num1)/(*num2);*a='/'
12、;break;int judge(int answer)if(answer=result)return(1);else return(0);void main()int num1,num2;char a;int answer;while(result!=answer)GetRanddomExpression(&num1,&a,&num2);printf("please input the result of the expression:n%d%c%d=",num1,a,num2);scanf("%d",&answer);
13、if(judge(answer)=1)printf("you are right!");else printf("sorry,it not the right answer.n");6. 数组分区(指针作为函数参数)本题由三个部分构成(1) 编写一个函数CountEvensAndOdds,其功能是统计一个整型数组中奇数和偶数的个数。该函数有4个参数,整数型数组、数组的长度和两个指针(用于返回奇数、偶数的个数)(2) 利用(1)中的CountEvensAndOdds函数,编写一个Partition函数,其功能是找出给定长度的一个整型数组中的所有奇数和偶数,
14、并把它们分别保存在两个新的整型数组中(用C语言的库函数malloc函数动态创建),然后返回这两个新数组及其长度。该函数的参数有6个,整型数组、数组长度、奇数数组及其长度、偶数数组及其长度。(3) 编写主函数,要求能够定义一个数组,并能够用随机数对该数组进行初始化,然后调用(2)中的函数Partition,将原始数组、奇数数组、偶数数组输出。#include <stdio.h>#include<malloc.h>#include<time.h>#include<stdlib.h>void CountEvensAndOdds(int *parr,in
15、t arr_len,int *even_count,int *odds_count)int i;int count_even=0,count_odds=0;for (i=0;i<arr_len;i+) if (*(parr+i)%2)=0)count_even+;else count_odds+;*even_count=count_even;*odds_count=count_odds;void Partition(int *parr,int arr_len,int *even_arr,int *even_len,int *odds_arr,int *odds_len)int even_
16、count,odds_count,i,m=0,n=0;int count_even=0,count_odds=0;CountEvensAndOdds(parr,arr_len,&even_count,&odds_count);*even_arr=(int *)malloc(sizeof(int)*even_count);*odds_arr=(int *)malloc(sizeof(int)*odds_count);for (i=0;i<arr_len;i+)if(*(parr+i)%2)=0)*(*even_arr+m) = *(parr+i);m+;else*(*odd
17、s_arr+n) = *(parr+i);n+;*even_len=m;*odds_len=n;void print_arr(int *parr,int arr_len)int i;for(i=0;i<arr_len;i+) printf("%-3d",*(parr+i);if(i+1)%10=0)printf("n");printf("n");void main()int *parr,arr_len,i,*even_arr,even_len,*odds_arr,odds_len; srand(time(NULL);arr_le
18、n = rand()%50;parr=(int *)malloc(sizeof(int)*arr_len);printf("arr_len=%dn",arr_len);for(i=0;i<arr_len;i+)parri = rand()%100;Partition(parr,arr_len,&even_arr,&even_len,&odds_arr,&odds_len);printf("arr:n");print_arr(parr,arr_len);printf("even_arr len=%dn&quo
19、t;,even_len);printf("even_arr:n");print_arr(even_arr,even_len);printf("odds_arr len=%dn",odds_len);printf("odds_arr:n");print_arr(odds_arr,odds_len);7. 字符串压缩(使用字符指针)编写一个程序,输入一个字符串,然后采用如下的规则对该字符串当中的每一个字符进行压缩:(1) 如果该字符是空格,则保留该字符。(2) 如果该字符是第1次出现或第3次出现或第6次出现,则保留该字符(3) 否则删除该
20、字符。例如,若用户输入occurrence,经过压缩后,字符c的第2次出现被删除,第1和第3次出现仍保留;字符r和e的第2次出现均被删除,因此最后的结果为: occurrence 。#include<stdio.h>#include<malloc.h>#include<string.h>void main()char *p,str50='0'int n,i,j=0,num26=0;gets(str);n=strlen(str);p=(char*)malloc(n*sizeof(char);for(i=0;stri!=0;i+)if(stri=
21、' ')*(p+j+)=stri;else if(numstri-97=0|numstri-97=2|numstri-97=5)*(p+j+)=stri;numstri-97+;else numstri-97+;for(i=0;i<j;i+)printf("%c",*(p+i);putchar('n'); 8. 字符查找(使用指针数组)用一个指针数组存储6种计算机语言FORTRAN、PASCAL、BASIC、C、COBOL、SMALLTALK,根据用户输入的若干个开头字符,显示所有相匹配的计算机语言,例如:输入”BA”,显示”BASIC
22、”;输入”C”,显示”C”和”COBOL”。#include<stdio.h>#include<string.h>void main()char *a6="FORTRAN","PASCAL","BASIC","C","COBOL","SMALLTALK"char b6,*p;int length,i,k;printf("please input some charactors:");scanf("%s",b);l
23、ength=strlen(b);for(i=0;i<6;i+)for(p=b;p<b+length;p+,ai+)if(*p=*ai)k=i;else k=6;break;if(k=i)printf("%sn",ai-length);9. 字符串排序(使用多级指针)用指向指针的指针的方法对于输入的5个字符串进行排序并输出。(假设每个字符串最大长度不超过20)/用指向指针的指针的方法对于输入的5个字符串进行排序并输出。#include<stdio.h>#include<string.h>void sort(char *name,int n)
24、char *temp;int i,j,k;for(i=0;i<n-1;i+)k=i;for(j=i+1;j<n;j+)if(strcmp(namek,namej)>0)k=j;if(k!=i)temp=namei;namei=namek;namek=temp;void print(char *name,int n)int i;for(i=0;i<n;i+)printf("%sn",namei);void main()char *name5;char a520;int n=5,i;printf("please input five str:n
25、");for(i=0;i<n;i+)scanf("%s",ai);namei=*(a+i);printf("nthe new str:n");sort(name,n);print(name,n);10. 最长公共字串(提示使用strstr()库函数)编写一个程序,求给定三个字符串的最长公共子串。假设给定的三个字符串分别为:What is local bus?Name some local bus.A Local bus is high speed I/O bus close to the processor.#include<std
26、io.h>#include<string.h>int str_match(char *s1,char *s2,int len)while(len>0)if(*s1!=*s2)return 0;s1+;s2+;len-;return 1;void main()int i,j,s,l,flag1,flag2;char str360="what the local bus?","Name some local bus.","A Local bus is high speed I/O bus close to the proce
27、ssor." int len3;for(i=0;i<3;i+)leni=strlen(stri);for(l=len0;l>0;l-)for(s=0; s+l-1<len0;s+)flag1=1;for(i=1;i<3;i+)flag2 = 0;for(j=0;j+l-1<leni;j+)if(str_match(str0+s,stri+j,l)flag2=1;break;if(!flag2)flag1=0;break;if(flag1)goto L;L:printf("最长公共子串为:");for(i=0;i<l;i+)pri
28、ntf("%c",*(str0+s+i);putchar('n');/以下为选做题目11. 网络警察作为一名网络警察,你的任务是监视电子邮件,看其中是否有一些敏感的关键词。不过有些狡猾的犯罪嫌疑人会改变某些单词的字母顺序,以逃避检查。请编写一个程序,发现这种调整过顺序的关键词。程序的输入有两行,第一行为关键词列表,第二行为待检查的句子。程序的输出为在该句子中所找到的经过顺序调整的关键词。例如输入:guns mines missilesaameric ssell snugs dan iimsssle ot sit neeemis则输出为:guns missil
29、es#include<stdio.h>#include<string.h>int FindCode(char keyword100, int string_num, char string100)int k,letter126=0,letter226=0;for(k=0;k<string_num;k+)letter1keywordk-97+,letter2stringk-97+;for(k=0;k<26;k+)if(letter1k!=letter2k)break;if(k=26)return 1;return 0;void Part(char keywor
30、d100, char temp100, int *Size)char *p;int i=0,j;p=temp;while(*p!='0')j=0;while(*p!=' '&&*p!='0')keywordij+=*(p+);keywordi+j='0'while(*p=' ')p+;*Size=i;void main()char keyword100100, string100100,temp100;int key_num,string_num;int i,j;gets(temp);Part(keyword,temp,&key_num);gets(temp);Part(string,temp,&string_num);for(i=0;i<key_num;i+)for(j=0;j<string_num;j+)if(FindCode(keywordi,strlen(keywordi),stringj)printf("%s ",keywordi);printf("n");12. 动态三维数组a、编写一个函数CreateGrid(int
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物业公司客服年终总结
- 主管药师个人总结
- 装载租赁合同书
- 公司财务银行卡使用证明书
- 小学排球社团年度总结报告计划
- 智能家居系统设计工作进度计划
- 建筑项目财务审批流程的规范化探讨
- 个人多套房屋赠与合同
- 图书出版发行合同范本
- 2025年客户服务中心工作总结及提升计划
- 课题申报书:医学院校研究生“导学思政”创新实践路径研究
- 2025年游泳教练资格认证考试理论试题集(初级)
- 高二入团考试试题及答案
- 福建省漳州市医院招聘工作人员真题2024
- 湖北省圆创教育教研中心2025届高三三月联合测评物理试题及答案
- 陈仓《我有一棵树》阅读答案
- 铜绞线接地施工方案
- 2025年开封大学单招职业适应性测试题库新版
- 《云南烟草行业》课件
- 2025年中国铁路兰州局集团有限公司招聘笔试参考题库含答案解析
- 2024年北京天文馆志愿者招募考试真题
评论
0/150
提交评论