广工Anyview试题答案第八章.docx_第1页
广工Anyview试题答案第八章.docx_第2页
广工Anyview试题答案第八章.docx_第3页
广工Anyview试题答案第八章.docx_第4页
广工Anyview试题答案第八章.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

/*【习题8.011】请编写函数func(char s, char t, int n),由数组s中长度为n的字符序列构造其逆序列,并存储在数组t中。例如,由给定字符序列s=are求得逆序列t=era;由s=time求得t=emit。*/void func(char s, char t, int n) /* 数组s的前n个元素存放给定的字符序列, 数组t的前n个元素存放s的逆序列。 注意:数组的下标从0开始。*/ for(int i=0;in;i+) ti=sn-i-1;/*【习题8.012】请编写函数func(char*s, char *t),由字符串s构造其逆串t。例如,由给定串s=are求得逆串t=era;由s=time求得t=emit。*/void func(char *s, char *t) /* s是给定字符串的起始地址, t是求得s的逆串的起始地址*/ int n=0; for(int i=0;*(s+i)!=0;i+) n+; for(i=0;in;i+) ti=sn-i-1;/*【习题8.015】对长度为n的字符串s1,除首、尾字符外,将其余字符按ASCII码降序排列,组合成一个新的字符串s2。*/void func(char *s1, char *s2, int n)/* s1为字符串的起始地址, s2为新字符串的起始地址, n为字符串的长度。 要求:s1串不能发生改变, s2串存放新的字符串。*/ for(int i=0;in;i+) *(s2+i)=*(s1+i); if(n4)break; else char t=*(s2+1);int k=1;int j,h; for(i=1;i=n-2;i+) for(j=i;j=n-2;j+) if(t=*(s2+j) t=*(s2+j);h=j; *(s2+h)=s2k+;s2k-1=t;t=s2k; /*【习题8.016】对字符串s1,除首、尾字符外,将其余字符按ASCII码降序排列,组合成一个新的字符串s2。*/void func(char *s1, char *s2) for(int i=0;*(s1+i)!=0;i+) *(s2+i)=*(s1+i); int n=i; if(n4)break; else char t=*(s2+1);int k=1;int j,h; for(i=1;i=n-2;i+) for(j=i;j=n-2;j+) if(t=0)个字符开始的所有字符,按升序的次序构成字符串t。*/void substr(char *s, int m, char *t)/* s为字符串的起始地址, m=0, t为新字符串的起始地址, 注意:字符串尾字符之后跟随着一个结束符0, 即ASCII码为0的字符,结束符不属于字符串。 要求:s串不能发生改变, t串存放新的字符串。*/ int f=0; for(int i=m;si!=0;i+) tf+=si;tf=0; if(m=0|m=1|m=2)break; else char c=t0; int k=0; for(i=0;ti!=0;i+) for(int j=i;tj!=0;j+) if(c=tj)c=tj; tj=tk;tk+=c;c=tk; /*【习题8.020】在字符串s中查找字符c,如果找到,返回字符c首次出现在字符串s中的位置指针;否则,返回空指针NULL。*/char *match(char *s, char c) /* 返回字符在串s中首次出现的位置指针 */ for(int i=0;si!=0;i+) if(*(s+i)=c) return s+i; return NULL;/*【习题8.033】编写函数,计算年份year中第yearday天相应的月和日。例如,调用函数month_day(2000,61,&m,&d)之后,m=3,d=1,即2000年的第61天是3月1日。*/int month_day(int year, int yearday, int *pmonth, int *pday) /* year是年, yearday是天数, 若year和yearday合理, 则*pmonth和*pday是计算得出的月和日,函数返回1; 否则,函数返回0。*/ int date12=31,29,31,30,31,30,31,31,30,31,30,31; if(year%4=0&yearday0&yearday2) *pday=yearday; for(int i=0;i0&yearday2) *pday=yearday; for(int i=0;i*pmonth-1;i+) *pday-=datei; else if(*pmonth=1)*pday=yearday; else *pday=yearday-31;return 1; return 0;/*【习题8.044】请编写一个函数func,通过略去非数字字符,将字符串s转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。*/long func(char *s) /* s是一个数字字符串的地址, 函数返回值为由s含有的数字字符转换得到的数(包含正负数情况) */ int i=0;long t=0;bool meet_negative=false;bool meet_number=false;while(si)if(47(int)si&(int)si0)个整数中的最大值。注意:要求在函数中采用指针(而不是下标)来处理数组元素。*/int findmax(int s, int n) /* 返回s中n(0)个整数的最大值。 注意:要求在函数中采用指针(而不是下标)来处理数组元素。*/ int t=*s; for(int i=0;it)t=*(s+i); return t;/*【习题8.124】请编写一个函数min3adj(int s, int n),数组s中有n(0)个整数,返回在s中相邻三个数的和中的最小值。*/int min3adj(int s, int n) /* 数组s含n(=3)个整数, 返回在s中相邻三个数的和中的最小值。*/ int t=*(s+n-1)+*(s+n-2)+*(s+n-3); for(int i=n-1;i1;i-) if(t*(s+i)+*(s+i-1)+*(s+i-2) t=*(s+i)+*(s+i-1)+*(s+i-2); return t; /*【习题8.132】编写函数,通过指针参数sum将x和y的和赋给相应实际参数。例如,若x=134、y=378,则sum的实参变量被赋值512。*/void func(int x, int y, int *sum) *sum=x+y;/*【习题8.136】编写函数,返回指针参数x和y所指向的变量的值之和。*/int func(int *x, int *y) return *x+*y;/*【习题8.138】编写函数,比较指针参数x和y分别指向的变量,若前者的值较大,则交换两者的值,并返回1;否则无须交换,返回0。*/int func(int *x, int *y) if(*x*y) int t=*x;*x=*y;*y=t;return 1; return 0; /*【习题8.143】假设指针a指向某数组中的一个元素。编写函数,在从元素*a开始的n个元素范围内,向后查找给定值x,一旦找到值等于x的元素,则返回该元素的序号;若找不到,则返回0。例如,假定a指向的10个元素依次为5,6,3,0,-4,8,9,-6,8,-7,若x=5,则返回1;若x=8,则返回6;若y=4,则返回0。*/int func(int n, int *a, int x) for(int i=0;in;i+) if(*(a+i)=x) return i+1; return 0;/*【习题8.146】假设指针a指向某数组中的一个元素。编写函数,对从元素*a开始的n个元素,统计并返回值为x的元素个数(若不存在这样的元素,则返回0)。*/int func(int n, int *a, int x) int t=0; for(int i=0;in;i+) if(*(a+i)=x)t+; if(t=0)return 0; return t;/*【习题8.203】编写函数,返回指针参数s所指向的字符串的长度。例如,若该串为I am a student.,则函数返回值是15。注意:字符串结束符是0,不计入长度。不允许调用库函数strlen()。*/int func(char *s) for(int i=0;*(s+i)!=0;i+) return i;/*【习题8.212】编写函数,在指针参数s所指向的字符串中顺序查找由c指定的字符。一旦找到,则返回该字符在串中的序号(串的首个字符的序号为1),否则返回0。例如,若该串为I am a student.,c=t,则函数返回值为9。注意:字符串结束符是0,不允许调用字符串库函数。*/int func(char *s, char c) for(int i=0;*(s+i)!=0;i+) if(*(s+i)=c) return i+1;/*【习题8.215】编写函数,在指针参数s所指向的字符串中统计并返回由c指定的字符的个数。例如,若该串为I am a student.,c=t,则函数返回值为2。注意:字符串结束符是0,不允许调用字符串库函数。*/int func(char *s, char c) int t=0; for(int i=0;*(s+i)!=0;i+) if(*(s+i)=c) t+; return t;/*【习题8.222】编写函数,复制指针参数s指向的字符串到由指针参数t已经指向的存储区域。注意:字符串结束符是0,不允许调用字符串库函数。*/void func(char *s, char *t) for(int i=0;*(s+i)!=0;i+) *(t+i)=*(s+i);*(t+i)=0;/*【习题8.225】编写函数,由指针参数s指向的字符串头n个字符构造一个字符串,并存储到到由指针参数t已经指向的存储区域。例如,若s指向的字符串为I am a student.,n=4,则t指向的串为I am。注意:字符串结束符是0,不允许调用字符串库函数。*/void func(char *s, int n, char *t) for(int i=0;in;i+) *(t+i)=*(s+i);*(t+i)=0;/*【习题8.228】编写函数,由指针参数s指向的字符串后n个字符构造一个字符串,并存储到到由指针参数t已经指向的存储区域。例如,若s指向的字符串为I am a student.,n=8,则t指向的串为student.。注意:字符串结束符是0,不允许调用字符串库函数。*/void func(char *s, int n, char *t) for(int i=0;*(s+i)!=0;i+) int k=0; for(int j=i-n;*(s+j)!=0;j+) *(t+(k+)=*(s+j);*(t+k)=0;/*【习题8.231】编写函数,由指针参数s指向的字符串中第i个字符开始的n个字符构造一个字符串,并存储到到由指针参数t已经指向的存储区域。例如,若s指向的串为I am a student.,i=8,n=7,则t指向的串为student。注意:字符串结束符是0,不允许调用字符串库函数。*/void func(char *s, int i, int n, char *t) int k=0; for(int j=i-1;kn;j+) *(t+(k+)=*(s+j);*(t+k)=0;/*【习题8.234】编写函数,通过将s字符串中所有小写字母转换成大写字母,构造一个字符串并存储在t已经指向的存储区域,但原来的s串不改变。例如,若s字符串为I am a student.,则构造的t串为I AM A STUDENT.”。*/void func(char *s, char *t) for(int i=0;*(s+i)!=0;i+) if(a=*(s+i)&*(s+i)=z) *(t+i)=(char)(*(s+i)-32); else *(t+i)=*(s+i); *(t+i)=0;/*【习题8.237】编写函数,通过将s字符串中所有大写字母转换成小写字母,构造一个字符串并存储在t已经指向的存储区域,但原来的s串不改变。例如,若s字符串为I Am a Student.,则构造的t串为i am a student.”。*/void func(char *s, char *t) for(int i=0;*(s+i)!=0;i+) if(A=*(s+i)&*(s+i)=Z) *(t+i)=(char)(*(s+i)+32); else *(t+i)=*(s+i); *(t+i)=0;/*【习题8.243】编写函数,在字符串s中顺序查找字符串t,若找到,则返回其出现的位置,否则返回0。例如,设s=I am a student.,若t=stu,则返回值是8;若t=an,则返回值是0。注意:字符串结束符是0,不允许调用字符串库函数。*/int func(char *s, char *t) int k=0; for(int i=0;*(s+i)!=0;i+) if(*(s+i)=*(t+k) if(*(s+i+1)=*(t+k+1) return i+1; return 0;/*【习题8.246】假设字符串中每个连续字母序列称为“单词”。编写函数,在字符串s中顺序获取每个单词,依次存入w指示的二维数组,并返回单词个数。例如,若有s=I am a student,则w=I,am,a,student。注意:字符串结束符是0,不允许调用字符串库函数。*/int func(char *s, char (*w)10) int t=0,h=0,k=0; for(int i=0;*(s+i)!=0;i+) if(A=*(s+i)&*(s+i)=Z)|(a=*(s+i)&*(s+i)=z) k+; if(k=0)return 0; for(i=0;*(s+i)!=0;i+) if(A=*(s+i)&*(s+i)=Z)|(a=*(s+i)&*(s+i)=z) wth+=*(s+i); else wth=0; if(wt0=0) h=0;continue; else t+;h=0; return t; /*【习题8.282】编写函数,查找并返回p指示的二维数组中的元素最大值。例如,二维数组的元素值依次为45,38

温馨提示

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

评论

0/150

提交评论