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

第四十一套:

41.1:后移数字字符

char *fun(char  *s)
{
 int  i, j, k, n;    char  *p, *t;
  n=strlen(s)+1;
  t=(char*)malloc(n*sizeof(char));
  p=(char*)malloc(n*sizeof(char));
  j=0; k=0;
  for(i=0; i<n; i++)
  {  if(((s[i]>='a')&&(s[i]<='z'))||((s[i]>='A')&&(s[i]<='Z'))) {
/**********found**********/
       t[j]=s[i]; j++;}
     else
     {  p[k]=s[i]; k++; }
  }
/**********found**********/
  for(i=0; i<k; i++)  t[j+i]=p[i];
/**********found**********/
  t[j+k]= '\0';
  return  t;
}

41.2:交换串中指定内容

void fun (char  *s,  char *t1, char *t2 , char *w)
{
  char   *p , *r, *a;
  strcpy( w, s );
/************found************/
  while ( *w )
  {   p = w;   r = t1;
      while ( *r )
/************found************/
        if ( *r == *p )
        { r++;  p++; }
        else  break;
        if ( *r == '\0' ) a = w;
        w++;
  }
  r = t2;
  while ( *r ){ *a = *r; a++; r++; }
}

41.3:保留合适的字符串

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

第四十二套:

42.1:将参数指定内容写入文本文件

void fun(char  *s, int  a, double  f)
{
/**********found**********/
   FILE* fp;
  char  str[100], str1[100], str2[100];
  int  a1;     double  f1;
  fp = fopen("file1.txt", "w");
  fprintf(fp, "%s  %d  %f\n", s, a, f);
/**********found**********/
  fclose(fp);
  fp = fopen("file1.txt", "r");
/**********found**********/
  fscanf(fp,"%s%s%s", str, str1, str2);
  fclose(fp);
  a1 = atoi(str1);
  f1 = atof(str2);
  printf("\nThe result :\n\n%s %d %f\n", str, a1, f1);
}

42.2:—在数据中找出m位高分者—

typedef struct ss
   { char num[10];
     int s;
   } STU;
STU *fun(STU a[], int m)
{ 
  STU b[N],*t;
  int i, j,k;
/*************found**************/
  t=(STU*)calloc(m,sizeof(STU));//动态分配空间
  for(i=0;i<N;i++) b[i]=a[i];
  for(k=0;k<m;k++)
     { for (i=j=0;i<N;i++)
          if(b[i].s>b[j].s) j=i;
/*************found**************/
      strcpy(t[k].num,b[j].num);//字符或串有时不能直接赋值
      t[k].s=b[j].s;
      b[j].s=0;
     }
return t;
}

42.3:使数组中重复的数消失

int fun(int a[], int n)
{
	int i,j=0;
	for(i=0;i<n;i++)
		if(a[i]!=a[i+1])
			a[j++]=a[i];
  a[j]='\0';
}

第四十三套:

43.1:累加主副对角线的值

int fun(int  t[][N], int  n)
{ 
  int  i, sum;
/**********found**********/
   sum=0;
   for(i=0; i<n; i++)
/**********found**********/
     sum+=t[i][i] ;
   for(i=0; i<n; i++)
/**********found**********/
     sum+= t[i][n-i-1] ;
   return sum;
}

43.2:—在绝对误差内用二分法求方程的解—

double fun( double  m, double  n)
{
/************found************/
    double  r;
    r=(m+n)/2;
/************found************/
    while(fabs(n-m)>0.001)//不超过
    {   if(funx(r)*funx(n)<0)  m=r;
	else  n=r;
	r=(m+n)/2;
    }
    return  r;
}

43.3:删除串中字符间的*—串的经典问题

void  fun( char *a, char *h,char *p )
{
	int i=0;
	char *q=a;
	while(q<h)
	{
		a[i]=*q;
		q++;
		i++;
	}
	while(q<p)
	{
		if(*q!='*')
		{
		a[i]=*q;
		i++;
		}
		q++;
	}
	while(*q)
	{
		a[i]=*q;
		q++;
		i++;
	}
	a[i]='\0';
}

第四十四套:

44.1:在范围内找出各位数字之和为特定值的数

int fun(int  x)
{
 int  n, s1, s2, s3, t;
/**********found**********/
  n=0;
  t=100;
/**********found**********/
  while(t<=x)
  { s1=t%10;  s2=(t/10)%10;  s3=t/100;
    if(s1+s2+s3==15)
    {  printf("%d ",t);
       n++;
    }
/**********found**********/
    t++;
  }
  return n;
}

44.2:镜像字符串(先逆)

void fun (char  *s, char  *t)
{
/************found************/
    int   i,sl;//1和l要区分
    sl = strlen(s);
    for (i=0; i<sl; i++)
/************found************/
       t[i] = s[sl-i-1];
    for (i=0; i<=sl; i++)
	t[sl+i] = s[i];
    t[2*sl] = '\0';
}

44.3:合成新数

void fun(int a, int b, long *c)
{
	*c=(b/10)*1000+(a/10)*100+(b%10)*10+a%10;
}

第四十五套:

45.1:—只保留各串中的前k位字符—

void fun(char  (*ss) [M], int  k)
{ 
  int  i=0  ;
/**********found**********/
  while(i< N) {
/**********found**********/
    ss[i][k]='\0';  i++;  }
}

45.2:计算数学公式(π)

double fun(double  eps)
{  
   double  s,t;     int  n=1;
   s=0.0;
/************found************/
   t=1.0;
   while( t>eps)
   {  s+=t;
      t=t * n/(2*n+1);
      n++;
   }
/************found************/
   return(s*2);
}

45.3:—对于串中前导*的规定—串的经典问题2.0—

void  fun( char *a, int  n )
{
int i=0,k=0 ;
char *t,*p;
p=t=a;
while(*t=='*')
{
	t++;
	k++;
}
if(k>n)
{
while(*p)
{
	a[i]=*(p+k-n);
	p++;
	i++;
}
a[i]='\0';
}
}

第四十六套:

46.1:存入文本,并顺序读出

int fun(char  *fname )
{
   FILE  *fp;      int  i,n;      float  x;
   if((fp=fopen(fname, "w"))==NULL)  return  0;
   for(i=1;i<=10;i++)
/**********found**********/
     fprintf(fp,"%d %f\n",i,sqrt((double)i));
   printf("\nSucceed!!\n");
/**********found**********/
   fclose(fp);
   printf("\nThe data in file :\n");
/**********found**********/
   if((fp=fopen(fname,"r"))==NULL)
      return  0;
   fscanf(fp,"%d%f",&n,&x);
   while(!feof(fp))
    {  printf("%d %f\n",n,x);   fscanf(fp,"%d%f",&n,&x);  }
   fclose(fp);
   return  1;
}

46.2:将n个无序整数从小到大排

void fun ( int  n, int  *a )
{ 
   int  i, j, p, t;
   for ( j = 0; j<n-1 ; j++ )
   {  p = j;
/************found************/
    for ( i=j+1; i<n ; i++ )
      if ( a[p]>a[i] )
/************found************/
         p=i;
    if ( p!=j )
    { t = a[j]; a[j] = a[p]; a[p] = t; }
  }
}

46.3:合成新数

void fun(int a, int b, long *c)
{

	*c=(b%10)*1000+(a/10)*100+(b/10)*10+a%10;

}

第四十七套:

47.1:删去元素中所有位数为偶数的数

void fun(unsigned long  *n)
{
  unsigned long  x=0, i;    int  t;
  i=1;
  while(*n)
/**********found**********/
  { t=*n % 10;
/**********found**********/
    if(t%2!=0)
    { x=x+t*i;  i=i*10;  }
    *n =*n /10;
  }
/**********found**********/
  *n=x;
}

47.2:计算n的阶乘

double fun ( int n )
{ 
  double result = 1.0 ;
/************found************/
  if (n == 0)
    return 1.0 ;
  while( n >1 && n < 170 )
/************found************/
    result *= n--;
  return result ;
}

47.3:串化数

long  fun ( char *p)
{
long n=0;
int flag=1;
while(*p=='-')
{
	p++;
	flag=-1;
}
while(*p=='+')
	p++;
while(*p)
{
	n=n*10+*p-'0';
	p++;
}
return n*flag;
}

第四十八套:

48.1:—矩阵的列转化—

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

48.2:—计算数学公式—

double fun(double q)
{
	int  n;
	double  s,t;
	n=2;
	s=2.0;
	while (s <= q)
	{
		t=s;
	/********found*********/
		s=s+ (double)(n+1)/n;
		n++;
	}
	printf("n=%d\n",n);
	/********found********/
	return t;
}

48.3:Fibonacca序列

int  fun( int  t)
{
	int f0=0,f1=1,f;
	do{
		f=f0+f1;
		f0=f1;
		f1=f;
	}while(f<t);
	return f;
}

第四十九套:

49.1:—特殊排列(一大一小)—

void fun(int a[],int n)
{ 
 int  i, j, max, min, px, pn, t;
/**********found**********/
   for (i=0; i<n-1; i+=2)
   {  max = min = a[i];
      px = pn = i;
/**********found**********/
      for (j=i+1; j<n; j++)//这里是i+1区别与1.
      {  if (max < a[j])
         {  max = a[j]; px = j;  }
         if (min > a[j])
         {  min = a[j]; pn = j;  }
      }
      if (px != i)
      {  t = a[i]; a[i] = max; a[px] = t;
         if (pn == i) pn= px;
      }
      if (pn != i+1)
      {   t = a[i+1]; a[i+1] = min; a[pn] = t; }
   }
}

49.2:每隔五个求一均值

int fun(double  *s, double  *w)
{ 
   int   k,i;    double  sum;
   for(k=2,i=0;i<SIZE;i++)
   {   s[i]=k;   k+=2;   }
/**********found**********/
   sum=0.0;
   for(k=0,i=0;i<SIZE;i++)
   {  sum+=s[i];
/**********found**********/
      if((i+1)%5==0)
      {   w[k]=sum/5;  sum=0;  k++; }
   }
   return  k;
}

49.3:找出低于均分的数据

typedef  struct
{  char  num[10];
   double  s;
} STREC;
double  fun( STREC  *a, STREC *b, int *n )
{
	int i,j=0;
	double av=0.0;
	for(i=0;i<N;i++)
		av+=a[i].s/N;
	for(i=0;i<N;i++)
		if(av>a[i].s)
			b[j++]=a[i];
	*n=j;
	return av;
}

第五十套:

50.1:查询单链表中的特定项值

typedef  struct list
{  int  data;
   struct list  *next;
} SLIST;
SLIST *creatlist(char  *);
void outlist(SLIST  *);
int fun( SLIST  *h, char  ch)
{  SLIST  *p;        int  n=0;
   p=h->next;
/**********found**********/
   while(p!=NULL)
   {   n++;
/**********found**********/
       if (p->data==ch)  return n;
       else  p=p->next;
   }
   return 0;
}

50.2:删除串中所有空白字符(空格,回车等)

void fun ( char *p)
{ 
  int i,t;  char c[80];
/************found************/
   for (i = 0,t = 0; p[i] ; i++)
      if(!isspace(*(p+i))) c[t++]=p[i];
/************found************/
   c[t]='\0';
   strcpy(p,c);
}

50.3:奇位数上的字母转化为大写

void  fun  ( char *ss )
{
	int i;
	for(i=0;ss[i]!='\0';i++)
		if((i%2)&&(ss[i]>='a')&&(ss[i]<='z'))
			ss[i]-=32;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值