当前位置:文档之家› 2016广工Anyview试题答案 第十章

2016广工Anyview试题答案 第十章

void func(char s[], char t[], int n)
/* 数组s的前n个元素存放给定的字符序列,
数组t的前n个元素存放s的逆序列。
注意:数组的下标从0开始。
*/
{
for(int i=0;it[n-1-i]=s[i];
t[n]='\0';

}

void func(char *s, char *t)
/* s是给定字符串的起始地址,
t是求得s的逆串的起始地址
*/
{
for(int n=0;s[n]!='\0';n++){}
for(int i=0;it[n-1-i]=s[i];
t[n]='\0';
}

void func(char *s1, char *s2, int n)
/* s1为字符串的起始地址,
s2为新字符串的起始地址,
n为字符串的长度。
要求:s1串不能发生改变,
s2串存放新的字符串。
*/
{
for(int i=0;s1[i]!='\0';i++)
s2[i]=s1[i]; s2[i]='\0';
char c=s2[1]; int k;
for(i=1;i{
for(int j=i;jif((int)c<=(int)s2[j]){c=s2[j];k=j;}
s2[k]=s2[i];s2[i]=c;c=s2[i+1];
}
}

void func(char *s1, char *s2)
{

for(int i=0;s1[i]!='\0';i++)
s2[i]=s1[i]; int n=i;s2[i]='\0';
char c=s2[1]; int k;
for(i=1;i{
for(int j=i;jif((int)c<=(int)s2[j]){c=s2[j];k=j;}
s2[k]=s2[i];s2[i]=c;c=s2[i+1];
}
}

/**********
10.018 以字符串s第m(>=0)个字符开始的所有字符,
按升序的次序构成字符串t。
**********/
void substr(char *s, int m, char *t)
/* s为字符串的起始地址,
m>=0,
t为新字符串的起始地址,
注意:字符串尾字符之后跟随着一个结束符‘\0’,
即ASCII码为0的字符,结束符不属于字符串。
要求:s串不能发生改变,
t串存放新的字符串。
*/
{
for(int i=0;s[i]!='\0';i++)
t[i]=s[i]; t[i]='\0';
int k; char c=t[m];
for(i=m;t[i]!='\0';i++)
{
for(int j=i;t[j]!='\0';j++)
if((int)t[j]<=(int)c){c=t[j];k=j;}
t[k]=t[i];t[i]=c;c=t[i+1];
}
}

char *match(char *s, char c)
/* 返回字符在串s中首次出现的位置指针 */
{
for(int i=0;s[i]!='\0';i++)
if(s[i]==c)
return s+i;
return NULL;
}

int month_day(int year, int yearday, 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(int i=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(int i=0;i<*pmonth-1;i++)
*pday-=date[i];}
else if(*pmonth==1)*pday=yearday;
else *pday=yearday-31;return 1;}
return 0;
}

long func(char *s)
/* s是一个数字字符串的地址,
函数返回值为由s含有的数字字符转换得到的数(包含正负数情况)
*/
{

int sign=1,k=1,h; long t=0;
for(int i=0;s[i]!='\0';i++)
{
if(s[i]=='-')
for(int r=i;s[r]!='\0';r++)
if(47<(int)s[r]&&(int)s[r]<58)
{sign=-1;break;}
if(47<(int)s[i]&&(int)s[i]<58)
{t*=k;h=(int)s[i]-48;t+=h;k=10;}
}
if(sign==-1)return -t;
return t;

}

int findmax(int s[], int n)
/* 返回s中n(>0)个整数的最大值。
注意:要求在函数中采用指针(而不是下标)来处理数组元素。
*/
{
int t=*s,k;
for(int i=0;iif(*(s+i)>t)
{t=*(s+i);k=i;}
return *(s+k);
}

int min3adj(int s[], int n)
/* 数组s含n(>=3)个整数,
返回在s中相邻三个数的和中的最小值。
*/
{
int t=s[0]+s[1]+s[2];
for(int i=0;iif(t>s[i]+s[i+1]+s[i+2])
t=s[i]+s[i+1]+s[i+2];
return t;
}

相关主题
文本预览
相关文档 最新文档