编程题参考答案
注意:本答案中部分代码由原题本身提供,读者只需填写没有提供的部分就行了。
1、void fun(char *w,int m) /*可调用fun1函数左移字符 */
{
int i;
for(i=0;i<m;i++)
fun1(w);
}
2、int fun( STREC *a,STREC *b,int l,int h )
{
int i,j=0;
for(i=0;i<N;i++)
{
if(a[i].s>=l && a[i].s<=h)
{
b[j]=a[i];
j++;
}
}
return j;
}
3、fun( STU a[],STU *s )
{
int i;
*s=a[0];
for(i=1;i<N;i++)
{
if(a[i].s<s->s)
{
*s=a[i];
}
}
}
4、void fun( char *ss )
{
int i=1;
while(ss[i-1] && ss[i])
{
if(ss[i]>='a' && ss[i]<='z') ss[i]+='A'-'a';
i+=2;
}
}
5、float fun ( float h )
{
long i=h*1000;
if(i%10<5) return (i/10)/100.0;
else return (i/10+1)/100.0;
}
6、double fun ( double eps)
{
double i=1,a=1,b=1,c=1,s=0;
while(c>=eps)
{
s+=c;
a*=i;
b*=2*i+1;
c=a/b;
i++;
}
return s*2;
}
7、int fun(int score[],int m,int below[])
{
int i,j=0,s=0;
for(i=0;i<m;i++) s+=score[i];
s/=m;
for(i=0;i<m;i++)
{
if(score[i]<s)
{
below[j]=score[i];
j++;
}
}
return j;
}
8、void fun( char *a )
{
/* 以下代码仅供参考 */
int i=0,k;
while(a[i]=='*') i++;
k=i+1;
while(a[i]!='\0') /* 以下程序段实现非*字符前移 */
{
if(a[k]!='*')
{
a[i]=a[k];
i++;
}
k++;
}
a[i+1]='\0';
}
9、void fun( char *a )
{
/* 以下代码仅供参考 */
char *p,*q;
int n=0;
p=a;
while(*p=='*') /* 统计串头'*'个数n */
{n++; p++;}
q=a;
/* 向前复制字符串,请填写相应的语句完成其功能 */
while(*p) *q++=*p++;
for(;n>0;n--) /* 在串尾补n个'*' */
*q++='*';
*q='\0';
}
10、#include <stdio.h>
void fun( char *a,int n )
{
/* 以下代码仅供参考 */
int i=0,j,k=0;
while(a[k]=='*') k++; /* k为统计*字符个数 */
if(k>n)
{
i=n;j=k;
/* 以下完成将下标为k至串尾的字符前移k-n个位置 */
while(a[j]) a[i++]=a[j++];
a[i]=0;
}
}
11、void fun ( int x,int pp[],int *n )
{
int i;
*n=0;
for(i=1;i<=x;i+=2)
{
if(x%i==0)
{
pp[*n]=i;
(*n)++;
}
}
}
12、void fun(char *s,char t[])
{
int i=0,j=0;
while(s[i])
{
if(i%2!=0 || s[i]%2==0)
{
t[j]=s[i];
j++;
}
i++;
}
t[j]=0;
}
13、void fun(int a,int b,long *c)
{
*c=a/10*100+a%10+b/10*10+b%10*1000;
}
14、double fun( int n)
{
int i;
double s=0;
for(i=1;i<n;i++)
{
if(i%3==0 && i%7==0) s+=i;
}
return sqrt(s);
}
15、void fun(int (*s)[10],int *b,int *n,int mm,int nn)
{
int i,j;
*n=0;
for(i=0;i<mm;i++)
for(j=0;j<nn;j++)
{
b[*n]=s[i][j];
(*n)++;
}
}
16、int fun( STREC a[] )
{
int i,j;
STREC b;
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
if(a[i].s<a[j].s)
{ b=a[i];a[i]=a[j];a[j]=b;}
}
17、double fun ( int w[][N] )
{
double s=0;
int i;
for(i=0;i<N;i++)
s+=w[0][i]+w[N-1][i]+w[i][0]+w[i][N-1];
s-=w[0][0]+w[0][N-1]+w[N-1][0]+w[N-1][N-1];
return s/(N*4-4);
}
18、int fun(int *s,int t,int *k)
{
int i;
*k=0;
for(i=0;i<t;i++)
if(s[i]>s[*k]) *k=i;
}
19、void fun( char *a )
{
int i=0,j=0;
while(a[i])
{
if(a[i]!='*') j=0;
else j++;
i++;
}
a[i-j]=0;
}
20、int fun(int lim,int aa[MAX])
{
/* 以下代码仅供参考 */
int i,j,k=0;
/* 其中变量k用于统计素数个数 */
for(i=2;i<=lim;i++)
{
/* 以下完成判断aa数组中小于或等于lim的素数并统计个数 */
for(j=2;j<i;j++)
if(i%j==0) break;
if(j==i)
{
aa[k]=i;
k++;
}
}
return k;
}
21、void fun(int m,int k,int xx[])
{
/* 以下代码仅供参考 */
int i,j=1,t=m+1;
while(j<=k)
{
/* 以下完成判断素数,并存放到数组xx中 */
for(i=2;i<t;i++)
if(t%i==0) break;
if(t==i)
{
xx[j-1]=i;
j++;
}
t++;
}
}
22、double fun( STREC *h )
{
double a=0;
STREC *p=h->next;
while(p)
{
if(a<p->s) a=p->s;
p=p->next;
}
return a;
}
23、double fun( STREC *a,STREC *b,int *n )
{
int i;
double s=0;
for(i=0;i<N;i++)
s+=a[i].s;
s/=N;
*n=0;
for(i=0;i<N;i++)
if(a[i].s>s)
{
b[*n]=a[i];
(*n)++;
}
return s;
}
24、int fun ( int a[M][N] )
{
int i,s=0;
for(i=0;i<N;i++)
s+=a[0][i]+a[M-1][i];
for(i=1;i<M-1;i++)
s+=a[i][0]+a[i][N-1];
return s;
}
25、void fun(char *s,char t[])
{
int i=0,j=0;
while(s[i])
{
if(i%2==1 && s[i]%2==1)
{
t[j]=s[i];
j++;
}
}
t[j]=0;
}
26、fun(char(*a)[81],int num,char **max)
{
/* 以下代码仅供参考 */
int i,k=0,len,maxlen; /* k为a数组中最长串所在元素的下标,初始为0,maxlen为其串长 */
maxlen=strlen(a[k]);
for(i=1;i<num;i++)
{
/* 以下完成查找最长串 */

len=strlen(a[i]);
if(maxlen<len)
{
k=i;
maxlen=len;
}
}
*max=a[k];
}
27、int fun(char *str)
{
int i,j=0;
while(str[j]) j++;
for(i=0;i<=j/2;i++)
if(str[i]!=str[j-i-1]) break;
if(i>=j/2) return 1;
else return 0;
}
28、int fun(int a[],int n)
{
int i,j=0;
for(i=1;i<n;i++)
{
if(a[i]!=a[j])
{
j++;
a[j]=a[i];
}
}
return j+1;
}
29、void fun(int a[],int n,int *max,int *d )
{
int i;
*d=0;
for(i=1;i<n;i++)
if(a[i]>a[*d]) *d=i;
*max=a[*d];
}
30、int fun( char *s)
{
int i=0,j=0,f=1;
while(s[i])
{
if(s[i]<'a' || s[i]>'z')
{
if(f) j++;
f=0;
}
else
f=1;
i++;
}
return j+1;
}
31、int fun ( int a[][N],int m )
{
int i,j;
for(i=0;i<N;i++)
for(j=i;j<N;j++)
a[i][j]*=m;
}
32、void fun(char s[][N],char *b)
{
int i,j,n=0;
for(i=0; i < N;i++) /* 请填写相应语句完成其功能 */
{
for(j=0;j<M;j++)
{
b[n]=s[j][i];
n++;
}
}
b[n]='\0';
}
33、int fun( STREC *a,STREC *b )
{
int i,j=0,s=a[0].s;
for(i=1;i<N;i++)
if(a[i].s<s) s=a[i].s;
for(i=0;i<N;i++)
if(a[i].s==s)
{
b[j]=a[i];
j++;
}
return j;
}
34、double fun(double x,int n)
{
int i;
double a=1,b=1,s=1;
for(i=1;i<=n;i++)
{
a*=x;
b*=i;
s+=a/b;
}
return s;
}
35、void fun(char *s,char t[])
{
int i=0,j=0;
while(s[i])
{
if(s[i]%2==0)
{
t[j]=s[i];
j++;
}
i++;
}
t[j]=0;
}
36、fun (int a[][M])
{
int i,s=a[0][0];
for(i=0;i<M;i++)
{
if(a[0][i]>s) s=a[0][i];
if(a[1][i]>s) s=a[1][i];
}
return s;
}
37、long fun ( char *p)
{
/* 以下代码仅供参考 */
int i,len,t; /* len为串长,t为正负标识 */
long x=0;
len=strlen(p);
if(p[0]=='-')
{ t=-1; len--; p++; }
else t=1;
/* 以下完成数字字符串转换为一个数字 */
for(i=0;i<len;i++) x=x*10+p[i]-'0';
return x*t;
}
38、void fun(int a,int b,long *c)
{
*c=a/10*100+a%10+b/10*1000+b%10*10;
}
39、int fun(char *str)
{
int i,k=0;
char *p=str,s[81];
while(*p)
{ if(*p!=' ') s[k++]=*p;
p++;
}
for(i=0;i<k;i++) str[i]=s[i];
str[i]='\0';
}
40、void fun(char p1[],char p2[])
{
char *p,*q;
p=p1;
q=p2;
while(*p) p++;
while(*q) *p++=*q++;
*p='\0';
}
41、int fun(int array[3][3])
{
int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<i;j++)
{ t=array[i][j];array[i][j]=array[j][i];array[j][i]=t;}
}
42、void fun(int *w,int p,int n)
{
int i,a[N];
for(i=0;i<=p;i++) a[i]=w[i];
for(i=0;i<n-(p+1);i++) w[i]=w[i+(p+1)];
for(i=0;i<=p;i++) w[n-(p+1)+i]=a[i];
}
43、void fun(char a[M][N],char *b)
{
/* 以下代码仅供参考 */
int i; *b=0;
for(i=0;i<M;i++) strcat(b,a[i]);
}
44、void fun(int a,int b,long *c)
{
*c=a/10*10+a%10*1000+b/10+b%10*100;
}
45、void fun( char *a,int n,int h,int e )
{
int i;
for(i=0;i<n-h-e;i++)
{ a[i]=a[i+h];
}
a[i]=0;
}
46、void fun(int a,int b,long *c)
{
*c=a/10*1000+a%10*10+b/10+b%10*100;
}
47、void fun( int *a,int *b)
{
int i,k;
for(i=0;i<M;i++) b[i]=0;
for(i=0;i<N;i++)
{ k=a[i]/10;
if(k>=10) b[10]++;
else b[k]++;
}
}
48、double fun( int n )
{
int i;
double s;
for(i=1;i<=n;i++)
{ s+=1.0/(i*(i+1));
}
return s;
}
49、float fun(int m,int n)
{ int i;
float m1=1.0,n1=1.0,k=1.0;
for(i=1;i<=m;i++) m1*=i;
for(i=1;i<=n;i++) n1*=i;
for(i=1;i<=m-n;i++) k*=i;
return m1/n1/k;
}
50、void fun(int s[][10],int b[],int *n,int mm,int nn)
{
/* 以下代码仅供参考 */
int i,j,np=0; /* np用作b数组下标 */
for(j=0;j<nn;j++)
for(i=0;i<mm;i++)
b[np++]=s[i][j];
*n=np;
}