2016广工Anyview试题答案-第八章
更新时间:2024-06-16 01:42:01 阅读量: 综合文库 文档下载
/**********
【习题8.011】请编写函数func(char s[], char t[], int n),
由数组s中长度为n的字符序列构造其逆序列,并存储在数组t中。 例如,由给定字符序列s=\求得逆序列t=\;由s=\求得t=\。 **********/
voidfunc(char s[], char t[], int n)
/* 数组s的前n个元素存放给定的字符序列, 数组t的前n个元素存放s的逆序列。 注意:数组的下标从0开始。 */ {
for(inti=0;i /********** 【习题8.012】请编写函数func(char*s, char *t),由字符 串s构造其逆串t。例如,由给定串s=\求得逆串t=\; 由s=\求得t=\。 **********/ voidfunc(char *s, char *t) /* s是给定字符串的起始地址, t是求得s的逆串的起始地址 */ { int n=0; for(inti=0;*(s+i)!='\\0';i++) n++; for(i=0;i /********** 【习题8.015】对长度为n的字符串s1,除首、尾字符外,将 其余字符按ASCII码降序排列,组合成一个新的字符串s2。 **********/ voidfunc(char *s1, char *s2, int n) /* s1为字符串的起始地址, s2为新字符串的起始地址, n为字符串的长度。 要求:s1串不能发生改变, s2串存放新的字符串。 */ { for(inti=0;i 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)=s2[k++];s2[k-1]=t;t=s2[k]; } } } /********** 【习题8.016】对字符串s1,除首、尾字符外,将其余字符 按ASCII码降序排列,组合成一个新的字符串s2。 **********/ voidfunc(char *s1, char *s2) { for(inti=0;*(s1+i)!='\\0';i++) *(s2+i)=*(s1+i); int n=i; if(n<4)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)=s2[k++];s2[k-1]=t;t=s2[k]; } } } /********** 【习题8.018】以字符串s第m(>=0)个字符开始的所有字符, 按升序的次序构成字符串t。 **********/ voidsubstr(char *s, int m, char *t) /* s为字符串的起始地址, m>=0, t为新字符串的起始地址, 注意:字符串尾字符之后跟随着一个结束符‘\\0’, 即ASCII码为0的字符,结束符不属于字符串。 要求:s串不能发生改变, t串存放新的字符串。 */ { int f=0; for(inti=m;s[i]!='\\0';i++) t[f++]=s[i];t[f]='\\0'; if(m==0||m==1||m==2){break;} else { char c=t[0]; int k=0; for(i=0;t[i]!='\\0';i++) { for(int j=i;t[j]!='\\0';j++) if(c>=t[j])c=t[j]; t[j]=t[k];t[k++]=c;c=t[k]; } } } /********** 【习题8.020】在字符串s中查找字符c,如果找到,返回字符c 首次出现在字符串s中的位置指针;否则,返回空指针NULL。 **********/ char *match(char *s, char c) /* 返回字符在串s中首次出现的位置指针 */ { for(inti=0;s[i]!='\\0';i++) if(*(s+i)==c) returns+i; return NULL; } /********** 【习题8.033】编写函数,计算年份year中第yearday天相应的月 和日。例如,调用函数month_day(2000,61,&m,&d)之后,m=3, d=1,即2000年的第61天是3月1日。 **********/ intmonth_day(int year, intyearday, int *pmonth, int *pday) /* year是年, yearday是天数, 若year和yearday合理, 则*pmonth和*pday是计算得出的月和日,函数返回1; 否则,函数返回0。 */ { int date[12]={31,29,31,30,31,30,31,31,30,31,30,31}; if(year%4==0&&yearday>0&&yearday<367) {*pmonth=yearday/31+1; if(*pmonth>2) {*pday=yearday; for(inti=0;i<*pmonth-1;i++) *pday-=date[i];} else if(*pmonth==1)*pday=yearday; else *pday=yearday-31;return 1;} else if(year%4!=0&&yearday>0&&yearday<366) {*pmonth=yearday/29+1; date[1]=28; if(*pmonth>2) {*pday=yearday; for(inti=0;i<*pmonth-1;i++) *pday-=date[i];} else if(*pmonth==1)*pday=yearday; else *pday=yearday-31;return 1;} return 0; } /********** 【习题8.044】请编写一个函数func,通过略去非数字字符,将字符串 s转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。 **********/ longfunc(char *s) /* s是一个数字字符串的地址, 函数返回值为由s含有的数字字符转换得到的数(包含正负数情况) */ { { inti=0; long t=0; boolmeet_negative=false; boolmeet_number=false; while(s[i]) { if(47<(int)s[i]&&(int)s[i]<58) { meet_number=true; t*=10; t+=((int)s[i]-48); } if(s[i]=='-'&&meet_number==false) meet_negative=true; i++; } if(meet_negative==true) return -t; return t; } } /********** 【习题8.105】请编写一个函数findmax(int []s, int n),返回数组s中 n(>0)个整数中的最大值。注意:要求在函数中采用指针(而不是下标)来 处理数组元素。 **********/ intfindmax(int s[], int n) /* 返回s中n(>0)个整数的最大值。 注意:要求在函数中采用指针(而不是下标)来处理数组元素。 */ { int t=*s; for(inti=0;i /********** 【习题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(inti=n-1;i>1;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。 **********/ voidfunc(int x, int y, int *sum) { *sum=x+y; } /********** 【习题8.136】编写函数,返回指针参数x和y所指向的 变量的值之和。 **********/ intfunc(int *x, int *y) { return *x+*y; } /********** 【习题8.138】编写函数,比较指针参数x和y分别 指向的变量,若前者的值较大,则交换两者的值, 并返回1;否则无须交换,返回0。 **********/ intfunc(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。 **********/ intfunc(int n, int *a, int x) { for(inti=0;i /********** 【习题8.146】假设指针a指向某数组中的一个元素。 编写函数,对从元素*a开始的n个元素,统计并返回 值为x的元素个数(若不存在这样的元素,则返回0)。 **********/ intfunc(int n, int *a, int x) { int t=0; for(inti=0;i /********** 【习题8.203】编写函数,返回指针参数s所指向的字 符串的长度。例如,若该串为\, 则函数返回值是15。注意:字符串结束符是'\\0',不 计入长度。不允许调用库函数strlen()。 **********/ intfunc(char *s) { for(inti=0;*(s+i)!='\\0';i++){} returni; } /********** 【习题8.212】编写函数,在指针参数s所指向的字 符串中顺序查找由c指定的字符。一旦找到,则返回 该字符在串中的序号(串的首个字符的序号为1), 否则返回0。例如,若该串为\, c='t',则函数返回值为9。注意:字符串结束符是 '\\0',不允许调用字符串库函数。 **********/ intfunc(char *s, char c) { for(inti=0;*(s+i)!='\\0';i++) if(*(s+i)==c) return i+1; } /********** 【习题8.215】编写函数,在指针参数s所指向的字 符串中统计并返回由c指定的字符的个数。例如,若 该串为\,c='t',则函数返回值 为2。注意:字符串结束符是'\\0',不允许调用字符 串库函数。 **********/ intfunc(char *s, char c) { int t=0; for(inti=0;*(s+i)!='\\0';i++) if(*(s+i)==c) t++; return t; } /********** 【习题8.222】编写函数,复制指针参数s指向的字 符串到由指针参数t已经指向的存储区域。注意: 字符串结束符是'\\0',不允许调用字符串库函数。 **********/ voidfunc(char *s, char *t) { for(inti=0;*(s+i)!='\\0';i++) *(t+i)=*(s+i);*(t+i)='\\0'; } /********** 【习题8.225】编写函数,由指针参数s指向的字 符串头n个字符构造一个字符串,并存储到到由指 针参数t已经指向的存储区域。例如,若s指向的 字符串为\,n=4,则t指向的 串为\。注意:字符串结束符是'\\0',不允 许调用字符串库函数。 **********/ voidfunc(char *s, int n, char *t) { for(inti=0;i *(t+i)=*(s+i);*(t+i)='\\0'; } /********** 【习题8.228】编写函数,由指针参数s指向的字 符串后n个字符构造一个字符串,并存储到到由指 针参数t已经指向的存储区域。例如,若s指向的 字符串为\,n=8,则t指向的 串为\。注意:字符串结束符是'\\0', 不允许调用字符串库函数。 **********/ voidfunc(char *s, int n, char *t) { for(inti=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=8, n=7,则t指向的串为\。注意:字符串 结束符是'\\0',不允许调用字符串库函数。 **********/ voidfunc(char *s, inti, int n, char *t) { int k=0; for(int j=i-1;k *(t+(k++))=*(s+j);*(t+k)='\\0'; } /********** 【习题8.234】编写函数,通过将s字符串中所有小写 字母转换成大写字母,构造一个字符串并存储在t已经 指向的存储区域,但原来的s串不改变。例如,若s字 符串为\则构造的t串为\ STUDENT.”。 **********/ voidfunc(char *s, char *t) { for(inti=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字 符串为\则构造的t串为\ student.”。 **********/ voidfunc(char *s, char *t) { for(inti=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=\,若t=\,则返 回值是8;若t=\,则返回值是0。注意:字符串 结束符是'\\0',不允许调用字符串库函数。 **********/ intfunc(char *s, char *t) { int k=0; for(inti=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=\,则w={\\。注意:字符串结束符是'\\0',不 允许调用字符串库函数。 **********/ intfunc(char *s, char (*w)[10]) { int t=0,h=0,k=0; for(inti=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')) w[t][h++]=*(s+i); else { w[t][h]='\\0';; if(w[t][0]=='\\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。 **********/ intfunc(int (*p)[4], int n) /* 求二维数组中的最大值 */ { int t=p[0][0]; for(inti=0;i for(int j=0;j<4;j++) if(t /********** 【习题8.285】编写函数,依次对p指示的二维数组的 每一行元素值求和,并存入数组sum中。例如,若二维 数组的元素值依次为 {{45,38,-6,78},{34,48,70,4},{-9,0,4,20}}, 则sum[0..2]={155,156,15}。 **********/ voidfunc(int (*p)[4], int n, int *sum) /* 求二维数组中各行元素值的和 */ { int j; for(inti=0;i for(*(sum+i)=0,j=0;j<4;j++) *(sum+i)+=p[i][j]; } /********** 【习题8.288】编写函数,依次对p指示的二维数组的 每一列元素值求平均值,并存入数组avg中。例如, 若二维数组的元素值依次为 {{45,38,-6,78},{34,48,70,4},{-9,0,4,20}}, 则avg[0..2]={23.33,28.67,34.00}。 **********/ voidfunc(int (*p)[4], int n, float *avg) /* 求二维数组中各列元素值的平均值 */ { inti=0,j,t=0; for(j=0;j<3;j++) { for(i=0,*(avg+j)=0;i
正在阅读:
《信说》说课稿 Microsoft Word 文档04-15
会计学原理期末考试题(A)07-18
青岛版小学科学六年级上册第三单元教案04-23
继电保护10-31
浅谈生活中的数学美03-21
火烧云作文300字07-13
内存卡无法格式化02-07
民族理论与民族政策课程自测题07-08
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 试题
- 答案
- Anyview
- 2016
- 2010届高考物理总复习 磁场--五年高考题荟萃 2009年高考新题
- 论文正文:铁路运输企业安全文化建设探讨
- 第二十五讲:与圆有关的计算(含详细参考答案)
- 氏族公社的演变
- 高中生物奥林匹克竞赛辅导专题讲座 - 专题九 - DNA技术与人类基
- 化学实验改进与创新研究
- 汽车租赁经营方案
- 最新电大法律文书期末复习指导(完整)知识点复习考点归纳总结
- 校本中华经典诵读教案
- 第十章 配位平衡与配位滴定
- 电机工艺基本知识
- 会计学基础课后习题
- 塔吊安装工安全教育记录
- Pi值的计算(mathematica数学实验报告) - 图文
- 浅谈作文教学论文
- 2017年英国金融管理专业名校申请指南
- 高二地理南亚中亚西亚练习题
- 环境化学计算题
- 2010第六届 宜昌市导游大赛题库
- 排列与组合