第四十一套:
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;
}