*(s2+i)=*(s1+i);
if(n<4)break;
else
{
chart=*(s2+1);intk=1;intj,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];
}
}
}
/**********
【习题】对字符串s1,除首、尾字符外,将其余字符
按ASCII码降序排列,组合成一个新的字符串s2。
**********/
voidfunc(char*s1,char*s2)
{
for(inti=0;*(s1+i)!
='\0';i++)
*(s2+i)=*(s1+i);
intn=i;
if(n<4)break;
else
{
chart=*(s2+1);intk=1;intj,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];
}
}
}
/**********
【习题】以字符串s第m(>=0)个字符开始的所有字符,
按升序的次序构成字符串t。
**********/
voidsubstr(char*s,intm,char*t)
/*s为字符串的起始地址,
m>=0,
为新字符串的起始地址,t
注意:
字符串尾字符之后跟随着一个结束符‘\0',
即ASCII码为0的字符,结束符不属于字符串。
要求:
s串不能发生改变,
t串存放新的字符串。
*/
{
intf=0;
for(inti=m;s[i]!
='\0';i++)
t[f++]=s[i];t[f]='\0';
if(m==0||m==1||m==2){break;}
else
{
charc=t[0];intk=0;
for(i=0;t[i]!
='\0';i++)
{
for(intj=i;t[j]!
='\0';j++)
if(c>=t[j])c=t[j];
t[j]=t[k];t[k++]=c;c=t[k];
}
}
}
/**********
【习题】在字符串s中查找字符c,如果找到,返回字符c
首次出现在字符串s中的位置指针;否则,返回空指针NULL。
**********/
char*match(char*s,charc)
/*返回字符在串s中首次出现的位置指针*/
{
for(inti=0;s[i]!
='\0';i++)
if(*(s+i)==c)
returns+i;
returnNULL;
}
/**********
【习题】编写函数,计算年份year中第yearday天相应的月
和日。
例如,调用函数month_day(2000,61,&m,&d)之后,m=3,
d=1,即2000年的第61天是3月1日。
**********/
intmonth_day(intyear,intyearday,int*pmonth,int*pday)
/*year是年,
yearday是天数,
若year和yearday合理,
则*pmonth和*pday是计算得出的月和日,函数返回1;
。
0否则,函数返回
*/
{
intdate[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];}
elseif(*pmonth==1)*pday=yearday;
else*pday=yearday-31;return1;}
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];}
elseif(*pmonth==1)*pday=yearday;
else*pday=yearday-31;return1;}
return0;
}
/**********
【习题】请编写一个函数func,通过略去非数字字符,将字符串
s转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
**********/
longfunc(char*s)
/*s是一个数字字符串的地址,
函数返回值为由s含有的数字字符转换得到的数(包含正负数情况)
*/
{
{
inti=0;
longt=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;
returnt;
}
}
/**********
【习题】请编写一个函数findmax(int[]s,intn),返回数组s中
n(>0)个整数中的最大值。
注意:
要求在函数中采用指针(而不是下标)来
处理数组元素。
**********/
intfindmax(ints[],intn)
/*返回s中n(>0)个整数的最大值。
注意:
要求在函数中采用指针(而不是下标)来处理数组元素。
*/
{
intt=*s;
for(inti=0;iif(*(s+i)>t)t=*(s+i);
returnt;
}
/**********
【习题】请编写一个函数min3adj(ints[],intn),数组s中
有n(>0)个整数,返回在s中相邻三个数的和中的最小值。
**********/
intmin3adj(ints[],intn)
/*数组s含n(>=3)个整数,
返回在s中相邻三个数的和中的最小值。
*/
{
intt=*(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);
returnt;
}
/**********
【习题】编写函数,通过指针参数sum将x和y的
和赋给相应实际参数。
例如,若x=134、y=378,则sum
的实参变量被赋值512。
**********/
voidfunc(intx,inty,int*sum)
{
*sum=x+y;
}
/**********
【习题】编写函数,返回指针参数x和y所指向的
变量的值之和。
**********/
intfunc(int*x,int*y)
{
return*x+*y;
}
/**********
【习题】编写函数,比较指针参数x和y分别
指向的变量,若前者的值较大,则交换两者的值,
并返回1;否则无须交换,返回0。
**********/
intfunc(int*x,int*y)
{
if(*x>*y)
{intt=*x;*x=*y;*y=t;return1;}
return0;
}
/**********
【习题】假设指针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(intn,int*a,intx)
{
for(inti=0;iif(*(a+i)==x)
returni+1;
return0;
}
/**********
【习题】假设指针a指向某数组中的一个元素。
编写函数,对从元素*a开始的n个元素,统计并返回
值为x的元素个数(若不存在这样的元素,则返回0)。
**********/
intfunc(intn,int*a,intx).
{
intt=0;
for(inti=0;iif(*(a+i)==x)t++;
if(t==0)return0;
returnt;
}
/**********
【习题】编写函数,返回指针参数s所指向的字
符串的长度。
例如,若该串为?
愠?
?
瑳摵湥?
,
则函数返回值是15。
注意:
字符串结束符是'\0',不
计入长度。
不允许调用库函数strlen()。
**********/
intfunc(char*s)
{
for(inti=0;*(s+i)!
='\0';i++){}
returni;
}
/**********
【习题】编写函数,在指针参数s所指向的字
符串中顺序查找由c指定的字符。
一旦找到,则返回
该字符在串中的序号(串的首个字符的序号为1),
否则返回0。
例如,若该串为?
愠?
?
瑳摵湥?
,
c='t',则函数返回值为9。
注意:
字符串结束符是
'\0',不允许调用字符串库函数。
**********/
intfunc(char*s,charc)
{
for(inti=0;*(s+i)!
='\0';i++)
if(*(s+i)==c)
returni+1;
}
/**********
【习题】编写函数,在指针参数s所指向的字
符串中统计并返回由c指定的字符的个数。
例如,若
该串为?
愠?
?
瑳摵湥?
,c='t',则函数返回值
为2。
注意:
字符串结束符是'\0',不允许调用字符
串库函数。
**********/
intfunc(char*s,charc)
{
intt=0;
for(inti=0;*(s+i)!
='\0';i++)
if(*(s+i)==c)
t++;
returnt;
}
/**********
【习题】编写函数,复制指针参数s指向的字
符串到由指针参数t已经指向的存储区域。
注意:
字符串结束符是'\0',不允许调用字符串库函数。
**********/
voidfunc(char*s,char*t)
{
for(inti=0;*(s+i)!
='\0';i++)
*(t+i)=*(s+i);*(t+i)='\0';
}
/**********
【习题】编写函数,由指针参数s指向的字
符串头n个字符构造一个字符串,并存储到到由指
针参数t已经指向的存储区域。
例如,若s指向的
字符串为?
愠?
?
瑳摵湥?
,n=4,则t指向的
串为?
愠屭。
注意:
字符串结束符是'\0',不允
许调用字符串库函数。
**********/
voidfunc(char*s,intn,char*t)
{
for(inti=0;i*(t+i)=*(s+i);*(t+i)='\0';
}
/**********
【习题】编写函数,由指针参数s指向的字
符串后n个字符构造一个字符串,并存储到到由指
针参数t已经指向的存储区域。
例如,若s指向的
字符串为?
愠?
?
瑳摵湥?
,n=8,则t指向的
串为獜畴敤瑮尮。
注意:
字符串结束符是'\0',
不允许调用字符串库函数。
**********/
voidfunc(char*s,intn,char*t)
{
for(inti=0;*(s+i)!
='\0';i++){}
intk=0;
for(intj=i-n;*(s+j)!
='\0';j++)
*(t+(k++))=*(s+j);*(t+k)='\0';
}
/**********
【习题】编写函数,由指针参数s指向的字
个字符构造一个字符串,n个字符开始的i符串中第
并存储到到由指针参数t已经指向的存储区域。
例
如,若s指向的串为?
愠?
?
瑳摵湥?
,i=8,
n=7,则t指向的串为獜畴敤瑮。
注意:
字符串
结束符是'\0',不允许调用字符串库函数。
**********/
voidfunc(char*s,inti,intn,char*t)
{
intk=0;
for(intj=i-1;k*(t+(k++))=*(s+j);*(t+k)='\0';
}
/**********
【习题】编写函数,通过将s字符串中所有小写
字母转换成大写字母,构造一个字符串并存储在t已经
指向的存储区域,但原来的s串不改变。
例如,若s字
符串为Iamastudent.,则构造的t串为IAMA
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';
}
/**********
【习题】编写函数,通过将s字符串中所有大写
字母转换成小写字母,构造一个字符串并存储在t已经
指向的存储区域,但原来的s串不改变。
例如,若s字
符串为IAmaStudent.,则构造的t串为iama
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';
}
/**********
【习题】编写函数,在字符串s中顺序查找字
符串t,若找到,则返回其出现的位置,否则返回0。
例如,设?
?
愠?
?
瑳摵湥?
,若?
獜畴,则返
回值是8;若?
慜屮,则返回值是0。
注意:
字符串
结束符是'\0',不允许调用字符串库函数。
**********/
intfunc(char*s,char*t)
{
intk=0;
for(inti=0;*(s+i)!
='\0';i++)
if(*(s+i)==*(t+k))
if(*(s+i+1)==*(t+k+1))
returni+1;
return0;
}
/**********
【习题】假设字符串中每个连续字母序列称为
“单词”。
编写函数,在字符串s中顺序获取每个单
词,依次存入w指示的二维数组,并返回单词个数。
例如,若有?
?
愠?
?
瑳摵湥屴,则w={I,am,
a,student}。
注意:
字符串结束符是'\0',不
允许调用字符串库函数。
**********/
intfunc(char*s,char(*w)[10])
{
intt=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)return0;
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;}
}
}
returnt;
}/**********指示的二维数【习题】编写函数,查找并返回p组中的元素最大值。
例如,二维数组的元素值依次为,则,0,4,20}}。
函数返回值为78**********/intfunc(int(*p)[4],intn)*//*求二维数组中的最大值{intt=p[0][0];for(inti=0;iif(t
t=p[i][j];
returnt;
}/**********【习题】编写函数,依次对p指示的二维数组的每一行元素值求和,并存入数组sum中。
例如,若二维数组的元素值依次为,0,4,20}},。
则sum[0..2]={155,156,15}**********/voidfunc(int(*p)[4],intn,int*sum)*//*求二维数组中各行元素值的和
{
intj;for(inti=0;i例如,每一列元素值求平均值,并存入数组avg若二维数组的元素值依次为,0,4,20}},
则avg[0..2]={,,}。
**********/
voidfunc(int(*p)[4],intn,float*avg)
/*求二维数组中各列元素值的平均值*/
{
inti=0,j,t=0;
for(j=0;j<3;j++)
{
for(i=0,*(avg+j)=0;i*(avg+j)+=(float)p[i][j];
*(avg+j)/=;
}
}