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