全国二级C语言21~30套试题汇编——————编程练习题

第二十一套:

21.1:字符转值求和

int fun(char  *s)
{
      
int  sum=0;
  while(*s) {
     
/**********found**********/
    if( isdigit(*s) )  sum+= *s- '0' ;
/**********found**********/
    s++;
  }
/**********found**********/
  return  sum ;
}

21.2:特定自然数之和

int fun(int k)
{
      
 int m=0,mc=0,j;
 while((k>=2)&&(mc<10))
 {
     
/*************found**************/
      if((k%13==0)||(k%17==0))
        {
      m=m+k;mc++;}
         k--;
/*************found**************/
  }
  return m;
}

21.3:特定自然数之和的平方根

double  fun( int  n)
{
     
	int i;
	double s=0.0;
	for(i=21;i<=n;i++)
		if(i%21==0)
		s+=i;
	return sqrt(s);
}

第二十二套:

22.1:找出字符串中出现频率最高的字符

void fun(char  *s)
{
     
 int  k[26]={
     0},n,i,max=0;    char  ch;
  while(*s)
  {
      if( isalpha(*s) ) {
     
/**********found**********/
      ch=tolower(max);
      n=ch-'a';
/**********found**********/
      k[n]+= 1 ;
    }
    s++;
/**********found**********/
    if(max<k[n]) max= k[n] ;
  }
  printf("\nAfter count :\n");
  for(i=0; i<26;i++)
     if (k[i]==max) printf("\nletter  \'%c\' :  %d times\n",i+'a',k[i]);
}

22.2:计算数学公式

float fun(int k)
{
      
  int n; float s, w, p, q;
  n=1;
  s=1.0;
  while(n<=k)
   {
      
	  w=2.0*n;
      p=w-1.0;
      q=w+1.0;
      s=s*w*w/p/q;
      n++;
   }
/*************found**************/
  return s;
}

22.3:计算数学公式

double fun(int n)
{
     
	int i;
	double s=0.0;
	for(i=1;i<=n;i++)
		s+=(1.0)/(i*(i+1));
	return s;
}

第二十三套:

23.1:由长到短排列字符串

void fun(char  (*ss)[M])
{
      
char  *ps[N],*tp;    int  i,j,k;
  for(i=0; i<N; i++) ps[i]=ss[i];
  for(i=0; i<N-1; i++) {
     
/**********found**********/
    k= i ;
    for(j=i+1; j<N; j++)
/**********found**********/
       if(strlen(ps[k]) < strlen(ps[j]) ) k=j;
/**********found**********/
    tp=ps[i];  ps[i]=ps[k]; ps[k]= tp ;
  }
  printf("\nThe string after sorting by length:\n\n");
  for(i=0; i<N; i++)  puts(ps[i]);
}

23.2:数列计算(平方根之和)

double fun(int n)  
{
     
double sum, s0, s1, s2, s; int k;
 sum=1.0;
 if (n<=2) sum=0.0;
 s0=0.0; s1=0.0; s2=1.0;
 for (k=4;k<=n;k++)
    {
      s=s0+s1+s2;
      sum+=sqrt(s);
      s0=s1;s1=s2;s2=s;
    }
/*************found**************/
 return sum;
}

23.3:计算数学公式(级数和)

double fun(double x, int n)
{
     
	int i;
	double s0=1.0,s1=1.0;
	for(i=1;i<=n;++i)
	{
     
		s1*=i;
		s0+=pow(x,i)/s1;
	}
	return s0;
}

第二十四套:

24.1:计算数学公式

double f1(double  x)
{
       return x*x;  }
double f2(double  x, double  y)
{
       return  x*y;  }
/**********found**********/
double fun(int  i, double  x, double  y)
{
      if (i==1)
/**********found**********/
    return f1(x);
  else
/**********found**********/
    return  f2(x, y);
}

24.2:找出较长的字符串

char * fun(char *s,char *t)
{
     
  int s1=0,t1=0;
  char *ss,*tt;
  ss=s;
  tt=t;
  while(*ss)
  {
     
	s1++;
  /*************found**************/
	ss++;
  }
    while(*tt)
  {
     
	t1++;
/*************found**************/
	tt++;
  }
  if(t1>s1)
	return t;
  else
	return s;
}

24.3:变更字符串

void fun (char  *w,int  m)
{
     
	int i,j;
	char t;
	for(i=0;i<m;i++)
	{
     
		t=w[0];
		for(j=1;w[j]!='\0';j++)
			w[j-1]=w[j];
		w[j-1]=t;
	}
  
}

第二十五套:

25.1:按学号对学生进行排序

typedef struct student 
{
     
  long  sno;
  char  name[10];
  float  score[3];
} STU;
void fun(char  *filename)
{
     
 FILE  *fp;      int  i, j;
  STU  s[N], t;
/**********found**********/
  fp = fopen(filename, "rb");
  fread(s, sizeof(STU), N, fp);
  fclose(fp);
  for (i=0; i<N-1; i++)
    for (j=i+1; j<N; j++)
/**********found**********/
      if (s[i].sno > s[j].sno)
      {
       t = s[i];  s[i] = s[j];  s[j] = t;  }
  fp = fopen(filename, "wb");
/**********found**********/
  fwrite(s, sizeof(STU), N, fp); 
  fclose(fp);
}

25.2:组合新串

void  fun (  char  s[], int  n )
{
     
   char  a[80] , *p;
   int  i;
/**********found***********/
   p=s;
   for(i=0; i<n; i++)  a[i]='*';
   do
   {
       a[i]=*p;
      i++;
   }
/**********found***********/
   while(*p++);
   a[i]=0;
   strcpy(s,a);
}

25.3:分段存贮年龄

void fun(int *a,  int *b)
{
     
	int i,j;
	for(i=0;i<M;i++)
		b[i]=0;
	for(j=0;j<N;j++)
		if(a[j]>=100)
			b[10]++;
		else
			b[a[j]/10]++;
}

第二十六套:

26.1:以中间数来替换小值

int fun(int  x[])
{
      
 int  i,j,k,t,mid,b[N];
   for(i=0;i<N;i++) b[i]=x[i];
   for(i=0;i<=N/2;i++)
   {
       k=i;
      for(j=i+1;j<N;j++) if(b[k]>b[j])  k=j;
      if(k != i )
      {
       
/**********found**********/
        t=b[i]; b[i]=b[k]; b[k]=t;
      }
   }
/**********found**********/
   mid=b[N/2];
   for(i=0; i<N; i++)
/**********found**********/
     if(x[i] < mid) x[i]=mid;
   return  mid;
}

26.2:删除b中小于10的数据

int  fun( int *b )
{
     
/**********found**********/
   int  t[N] ,i, num=0;
   for(i=0; i<N; i++)
     if(b[i]>=10)
/**********found**********/
       t[num++]=b[i];
/**********found**********/
    for(i=0; i<num; i++)
      b[i]=t[i];
    return( num );
}

26.3:统计串中数字字符个数

int fun(char  *s)
{
     
	int i,j=0;
	for(i=0;s[i]!='\0';i++)
		if(s[i]>='0'&&s[i]<='9')
			j++;
	return j;
}

第二十七套:

27.1:输出数据(每行5个)

void fun( int *a,  int n )
{
     
  int  i;
   for(i=0; i<n; i++)
   {
     
/**********found**********/
     if( i%5==0 )
/**********found**********/
           printf("\n");
/**********found**********/
      printf("%d  ",a[i]);
   }
}

27.2:中值替换(逐行)

int findmid(int  a, int  b, int  c)
{
      
 int  t;
   t = (a>b)?(b>c?b:(a>c?c:a)):((a>c)?a:((b>c)?c:b));
/**********found**********/
   return  t;
}
void fun(int  x[])
{
      
 int  i,a,b,c,t[N];
/**********found**********/
   for(i=0;i<N;i++) t[i]=x[i];
   for(i=0;i<N-2;i++)
   {
       a=t[i];b=t[i+1];c=t[i+2];
/**********found**********/
      x[i+1]=findmid(a,b,c);
   }

27.3:查找数组中下标的位置

int  fun( int *s, int x)
{
     
	int i;
	for(i=0;i<N;i++)
		if(s[i]==x)
			return i;
	return -1;
}

第二十八套:

28.1:链接单向链表,并输出数据

typedef  struct  list
{
      
   char  data;
   struct list  *next;
} Q;
void fun( Q *pa, Q *pb, Q *pc)
{
      
   Q  *p;
/**********found**********/
   pa->next=pb;
   pb->next=pc;
   p=pa;
   while( p )
   {
     
/**********found**********/
      printf("  %c",p->data );
/**********found**********/
      p=p->next ;
   }
   printf("\n");
}

28.2:统计特定字符的个数

void  fun( int  *s, int  n )
{
     
/**********found**********/
   int  i,  one=0, zero=0 ;
   for(i=0; i<n; i++)
/**********found**********/
   switch( s[i] )
   {
     
/**********found**********/
      case  0  :  zero++;break;
      case  1  :  one ++;
   }
   printf( "one : %d    zero : %d\n", one,  zero);
}

28.3:复制字符串

void  fun( char  *a , char  *s)
{
     
	int i,j=0;
	for(i=0;s[i]!='\0';i++)
		a[j++]=s[i];
	a[j]='\0';
}

第二十九套:

29.1:狐狸抓兔子

void  fun( int *a , int  n )
{
      
   int  i, t;
   for( i=0; i<n; i++ )
/**********found**********/
      a[i]=0;
   i=0;  
/**********found**********/
   t=1;
   while( i<n )
   {
       a[i]= 1;
      t++;
/**********found**********/
      i=i+t;
   }
}

29.2:统计在串中出现次数最多的字符

void fun(char  a[])
{
      
   int  b[26], i, n,max;
   for (i=0; i<26; i++)
/**********found**********/
      b[i] = 0;
   n= strlen(a);
   for (i=0; i<n; i++)
      if (a[i] >='a' && a[i]<='z')
/**********found**********/
         b[a[i] - 'a']++;
      else  if (a[i] >='A' && a[i]<='Z')
         b[a[i] -'A']++;
   max = 0;
   for (i=1; i<26; i++)
/**********found**********/
     if (b[max] < b[i])
       max=i;
   printf("出现次数最多的字符是 :  %c\n", max + 'a');
}

29.3:将数字字符串转化成长整型整数

long  fun( char  *s )
{
     
	 int i,sum=0,len;
	 len=strlen(s);
	 for(i=0;i<len;i++)
	 {
     
		 sum=sum*10+*s-'0';
		 s++;
	 }
	 return sum;
}

第三十套:

30.1:统计变量中整型出现的次数

void fun( int  m, int  a[10])
{
      
  int  i;
  for (i=0; i<10; i++)
/**********found**********/
    a[i] = 0;
  while (m > 0)
  {
     
/**********found**********/
     i = m%10;
     a[i]++;
/**********found**********/
     m = m/10;
  }
}

30.2:找出矩阵中每行的最小值

void fun(int  a[][N], int  b[])
{
     
	int  i, j;
    for (i=0; i<N; i++)
    {
     
/**********found**********/
        b[i] = a[i][0];
/**********found**********/
        for (j=1; j<N; j++)
/**********found**********/
           if ( b[i] > a[i][j] )
               b[i] = a[i][j];
    }
}

30.3:去掉最高低值后的平均值

double fun(double  a[ ] , int  n)
{
     
	int i;
	double max,min,sum=0.0;
	max=min=a[0];
	for(i=0;i<n;i++)
	{
     
		sum+=a[i];
		if(max<a[i])
			max=a[i];
		if(min>a[i])
			min=a[i];
	}
	sum=sum-min-max;
	return sum/(n-2);
}

你可能感兴趣的:(全国二级C语言,二级C语言,计算机技术与理论,编程语言)