广工Anyview试题答案第八章.docx

上传人:s****u 文档编号:12753831 上传时间:2020-05-22 格式:DOCX 页数:12 大小:19.04KB
返回 下载 相关 举报
广工Anyview试题答案第八章.docx_第1页
第1页 / 共12页
广工Anyview试题答案第八章.docx_第2页
第2页 / 共12页
广工Anyview试题答案第八章.docx_第3页
第3页 / 共12页
点击查看更多>>
资源描述
/*【习题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,-6,78,34,48,70,4,-9,0,4,20,则函数返回值为78。*/int func(int (*p)4, int n)/* 求二维数组中的最大值 */ int t=p00; for(int i=0;in;i+) for(int j=0;j4;j+) if(tpij) t=pij; return t;/*【习题8.285】编写函数,依次对p指示的二维数组的每一行元素值求和,并存入数组sum中。例如,若二维数组的元素值依次为 45,38,-6,78,34,48,70,4,-9,0,4,20,则sum0.2=155,156,15。*/void func(int (*p)4, int n, int *sum)/* 求二维数组中各行元素值的和 */ int j; for(int i=0;in;i+) for(*(sum+i)=0,j=0;j4;j+) *(sum+i)+=pij;/*【习题8.288】编写函数,依次对p指示的二维数组的每一列元素值求平均值,并存入数组avg中。例如,若二维数组的元素值依次为 45,38,-6,78,34,48,70,4,-9,0,4,20,则avg0.2=23.33,28.67,34.00。*/void func(int (*p)4, int n, float *avg)/* 求二维数组中各列元素值的平均值 */ int i=0,j,t=0; for(j=0;j3;j+) for(i=0,*(avg+j)=0;in;i+) *(avg+j)+=(float)pij; *(avg+j)/=3.0;
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!