/**********
【习题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); 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库2016广工Anyview试题答案-第八章在线全文阅读。
相关推荐: