广东工业大学 Anyviewce C语言 第十章
仅供参考
广东工业大学 Anyviewce C语言 习题七.
广东工业大学 Anyviewce C语言 习题八.
广东工业大学 Anyviewce C语言 习题九.
广东工业大学 Anyviewce C语言 习题十.
广东工业大学 Anyviewce C语言 习题十一.
/*
【习题10.011】数组s的前n个元素存放给定的字符序列,数组t的前n个元素存放s的逆序列。
注意:数组的下标从0开始。
*/
void func(char s[], char t[], int n)
{
int i;
for(i=0;i<n;i++)
{
t[n-i-1]=s[i];
}
}
/*
【习题10.012】s是给定字符串的起始地址,t是求得s的逆串的起始地址
*/
void func(char *s, char *t)
{
int i,n;
for(n=0;s[n]!='\0';n++)
;
for(i=0;i<n;i++)
{
t[n-i-1]=s[i];
}
}
/*
【习题10.015】s1为字符串的起始地址,s2为新字符串的起始地址,n为字符串的长度。
要求:s1串不能发生改变,s2串存放新的字符串。
*/
void func(char *s1, char *s2, int n)
{
int i,j;
char t;
strcpy(s2,s1);
for (i=1;i<n-1;i++)
{
for (j=2;j<n-i;j++)
{
if (s2[j]>s2[j-1])
{
t=s2[j];
s2[j]=s2[j-1];
s2[j-1]=t;
}
}
}
}
【习题10.011】
别问我为什么是空的…我也想知道他为什么是空的
void func(char *s1, char *s2)
{
}
/**********
【习题10.018】 以字符串s第m(>=0)个字符开始的所有字符,按升序的次序构成字符串t。
**********/
void substr(char *s, int m, char *t)
/* s为字符串的起始地址,
m>=0,
t为新字符串的起始地址,
注意:字符串尾字符之后跟随着一个结束符‘\0’,
即ASCII码为0的字符,结束符不属于字符串。
要求:s串不能发生改变,
t串存放新的字符串。
*/
{
int i,j,n,term;
n=strlen(s);
for(i=m,j=0;i<n;i++,j++)
t[j]=s[i];
n=j+1;//t串的字符长度
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
if(t[j]>t[j+1])
{
term=t[j+1];
t[j+1]=t[j];
t[j]=term;
}
}
/***
【习题10.020】返回字符在串s中首次出现的位置指针
***/
char *match(char *s, char c)
{
int i;
for(i=0;*(s+i)!='\0';i++)
if(*(s+i)==c)
return (s+i);
}
/*
【习题10.033】year是年,yearday是天数,若year和yearday合理,则pmonth和pday是计算得出的月和日,函数返回1,否则,函数返回0。
*/
int month_day(int year, int yearday, int *pmonth, int *pday)
{
int k,leap;
int a[2][13]={
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31},
};//定义数组存放闰年和非闰年每个月的天数
leap=(year%4==0&&year%100!=0)||year%400==0; //闰年判别条件
if((leap==1||leap==0&&yearday<366)&&yearday>0)
{
for(k=1;yearday>a[leap][k];k++)
yearday-=a[leap][k];
*pmonth=k;
*pday=yearday;
return 1;
}
else
return 0;
}
/*
【习题10.044】s是一个数字字符串的地址,函数返回值为由s含有的数字字符转换得到的数(包含正负数情况)
*/
long func(char *s)
{
int i,flag=0;
long n;
int len=strlen(s);
for(i=0,n=0;i<len;i++)
{
if(s[0]=='-')
flag=1;
if(s[i]>='0'&&s[i]<='9')
n=n*10+s[i]-'0';
}
if(flag==1)
n=-n;
return n;
}
/*
【习题10.105】返回s中n(>0)个整数的最大值。
注意:要求在函数中采用指针(而不是下标)来处理数组元素。
*/
int findmax(int s[], int n)
{
int i,t=s[0];
for(i=0;i<n;i++)
if(*(s+i)>t)
t=*(s+i);
return t;
}
/*
【习题10.124】数组s含n(>=3)个整数,返回在s中相邻三个数的和中的最小值。
*/
int min3adj(int s[], int n)
{
int i,sum=*s+*(s+1)+*(s+2),min=sum;
if(n==3)
return sum;//若数组只有三个元素,输出
for(i=1;i<n-1;i++)
{
sum=s[i-1]+s[i]+s[i+1];//对相邻三个元素求和
if(min>sum)
min=sum;
}
return min;
}