一、数字题:
1、根据整型形参m,计算如下公式的值。
y=1+1/(2*2)+1/(3*3)+1/(4*4)+…+1/(m*m)的值。例如,若m=5,则应输出:1.463611。
double fun(int m)
{double y=1.0;int i;for(i=2;i<=m;i++)y+=1.0/(i*i);return(y);}
2、根据形参m,计算列公式的值。T=1-1/2+1/3-1/4+……+(-1)(m+1)/m 例如,若输入5,则应输出0.783333
double fun(int m)
{double t=1.0,j=1.0;int I;for(i=2;i<=m;i++){j= -1*j;t+=j/i;}return t;}
3.根据整型参数m,计算如下公式的值,y=1/(100*100)+1/(200*200)+1/(300*300)+…+1/(m*m).例如,若m=2000,则应输出0.000160.
double fun (int m)
{double y=0, d;int i;
for(i=100;i<=m;i+=100)
{d=(double) i*( double)i;y+=1.0/d;}
return(y);}
4.根据以下公式求n的值。例如 ,给eps输入0.0005时,应当输出
Pi=3.140578.
Pai/2=1+1/3+1/3*2/5+1/3*2/5*3/7+…
double fun(double eps)
{double s,t;int n=1;s=0.0;t=1.0;while(t>=eps){s+=t;t=t*n/(2*n+1);
n++;}return (s*2);}
5.根据形参m,计算下列公式的值。t=1+1/2+1/3+1/4+…1/m.。例如,若输入5,则应输出2.283333.
double fun (int m)
{double t=1.0;int i;
for(i=2;i<=m;i++)t+=1.0/i;return t;}
6.根据整型形参m,计算如下公式的值。
y=1+1/根号(2)+1/根号(3)+……1/根号(n)例如,若m中的值为:5,则应输出:3.231671
#include<math.h>
double fun (int m)
{int i;double t,y=0;
for(i=1;i<=m;i++){t=1/sprt(i);y=y+t;}return y;}
7. 根据整型形参m的值,计算如下公式的值。t=1-1/(2*2)-(3*3)-…-1/(m*m)例如m=5,则应输出0.536389.
double fun (int m)
{double y=1.0;int i;
for (i=2;i<=m;i++)
y-=1.0/(i*i);return(y);}
8. 根据整型形参m,计算如下公式的值.y=1-1/(2*2)+1/(3*3)-1/(4*4)+…+(-1)(m+1)/(m*m)例如:m中的值为5,则应输出0.838611.
double fun (int m)
{double y=1.0;double j=1.0;int i;
for(i=2;i<=m;i++){j=-1*j;y+=j/(i*i);}return(y);}
9.根据整型形参n,计算如下公式的值。A1=1.A2=1/(1+A1),A3=1/(1+A2),An=1/(1+A(n-1)).例如,若n=10,则应输出0.617977.
float fun (int n)
{float A=1;int i;for(i=2;i<=n;i++)A=1.0/(1+A);returnA;}
10.求s=aa…aa-…aaa-aa-a(此处aa…aa表示n个a,a和n的值在1至9之间)。如a=3.n=6,则以上表达式为:s=333333-33333-3333-333-33-3.其值是296298.
long fun (int a,int n)
{int j;long s=0,t=0;
for (j=0;j<n;j++)
t=t*10+a;s=t;
for(j=1;j<n;j++){t=t/10;s=s-t;}return(s);}
11.用下面的公式求∏的近似值,直到最后一项的绝对值小于指定的数(参数num)为止。
∏/4≈1-1/3+1/5-1/7+…例如,输入0.0001,则程序输出3.1414.
float fun(float num)
{int s;float n,t,pi;t=1;
pi=0;n=1;s=1;
while(fabs(t)>=num)
{pi=pi+t;n=n+2;s=-s;t=s/n;}
pi=pi*4;return pi;}
12.计算并输出下列级数的前N项之和SN,直到SN+1大于q为止,q的值通过形参传入。
SA=2/1+3/2+4/3+(N+1)/N。例如,若q的值为50.0,则函数值为49.394948.
double fun(int q)
{int n;double s,t;n=2;s=2.0;
while(s<=q){t=s;s=s+(double)(n+1)/n;n++;}printf(“n=%d\ n”,n);return t;}
13.求S的值。设S=(22/(1*3))*(42/(3*5))*(62/(5*7)*…*(2k2/(2k-1)*(2k+1)).例如,当k为10时,函数的值应为1.533852.
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++;}return s;}
14.计算S=f(f(-1.0)+f(5.0))的值。结果为2488.000000.f(x)函数定义如下:(公式省略)
double f(double x)
{double y;if (x<=2.0)y=2.0*x*x+3.0*x+4.0;else y=-2.0*x*x+3.0*x-4.0;
return y;}
15.计算S=给f(-n)+f(-n+1)+…+f(0)+f(1)+f(2)+…+f(n)的值。例如,当n为5时,函数值应为10.407143.f(x)函数定义如下;(函数省略)
double f(double x)
{if(x= =0.0||x= =2.0)
return0.0;else if(x<0.0)return
(x-1)/(x-2);
else return(x+1)/(x-2);}
double fun(int n)
{int i;double s=0.0,y;
for(i=-n;i<=n;i++){y=f(1.0*i);s+=y;}return s;}
16.按以下递归公式求函数值。函数省略。
例如,当给n输入5时,函数值为18.
fun(int n){int c;if(n==1)c=10;else c=fun(n-1)+2;return(c);}
17.计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的 值。其中x和y不相等,z和y不等。例如,当x的值为9,y的值为11,z的值为15时,函数值为-3.50.
#define FU(m,n)(m)/(n)
float fun(float a.float b,float c)
{float value;
value=FU(a+b,a-b)+FU(c+b,c-b);return(value);}
18.用二分法求方程2x3 -4x2+3x-6=0的一个根,并要求绝对误差不超过0.001.例如,若给m输入-100,给n输入90,则函数求得的一个根值为2.000.
double funx(double x)
{return (2*x*x*x-4*x*x*+3*x-6);}
double fun(double m,double n)
{double r;r=(m+n)/2;
while(fabs(n-m)>0.001)
{if(funx(r)*funx(n)<0) m=r;
else n=r;r=(m+n)/2;}return r;}
19.传入一个整数m,计算如下公式的值,t=1/2-1/3-…-1/m.例如,若输入5,则应输出-0.283333.
double fun (int m)
{double t=1.0;int i;
for(i=2;i<=m;i++)t=t-1.0/i;return t;}
20.求出以下分数序列的前n项之和;1/2,2/3,3/5,5/8,8/13,13/21…和值通过函数值返回main函数。例如,若n的值为:5,则应输出:3.007051.
double fun(int n)
{int i;double t,s,a,b,c;
s=0;a=1;b=2;for(i=0;i<n;i++){t=a/b;s=s+t;c=a+b;a=b;b=c;}return s;}
21.求出以下分数序列的前n项之和。2/1,3/2,5/3,8/5,13/8,21/13,……和值通过函数值返回主函数。例如,若输入5,则应输出8.391667.
double fun (int n)
{int a=2,b=1,c,k;double s=0.0;for(k=1;k<=n;k++){s=s+1.0*a/b;c=a;a+=b;b=c;}return(s);}
22.计算1+2+3+……+n的和值。
float fun (int n)
{double t;if (n==1)return(1);else t=fun(n-1)+n;return t;}
23.应用递归算法求某数a的平方根。求平方根的迭代公式如下:x1=(x0+a/x0)/a.例如,2的平方根为1.414214.
doube fun(double a,double x0)
{double x1,y;
x1=(x0=a/x0)/2.0;if(fabs (x1 -x0)>=0.00001)
y=fun (a,x1);
else y=x1;return y; }
24.求k!(k<13),例如,若k =10,则应输出3628800.
long fun (int k)
{if(k>0)return(k*fun(k-1));else if (k==0) return 1;}
25.计算整数n 阶乘。
double fun (int n)
{double result=1.0;
If(n==1||n==0)return 1;
While (n>1&&n<170)result*=n--;return result;}
26.计算正整数num 的各位上的数字之积,例如,若输入:252,则输出应该是:20.
long fun(long num)
{long k=1;
do {k*=num%10;num/=10;}while (num);return(k); }
27.计算正整数num的各位之平方和。例如,输入352,则输出应该是38;若输入328,则输出应该是77.
long fun (long num)
{long k=0;do {k+=(num%10)* (num%10);num/=10;}while (num);return(k);}
28.计算并输出high 以内的素数之和。high由主函数传给fun函数。若high的值为100,则函数的值为1060.
int fun (int high)
{int sum=0,n=0,j,yes;while (high>=2){yes=1;for(j=2;j<=high/2;j++)
if (high%j==0){yes=0;break;}if(yes){sum+=high;n++;}high--;}return sum;}
29.计算并输出k以内最大的6个能被7或11整除的自然数之和。若k的值为500,则函数的值为2925.
int fun (int k)
{intm=0,mc=0,j;
while((k>=2)&&(mc<6))
{if ((k%7==0)||
(k%11==0)){m+=k;mc++;}k--;}return m;}
30.数列中,第一项为3,后一项都比前一项的值增5.下列给定程序中,函数的功能是:计算前n(4≤n≤50)项的累积和。在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数里。如,当n的值为20时,该数列为3,8,13,18,23,28,…,93,98.符合此条件的累加值应为42,126,366,570,1010.
int fun (int n,int *a)
{int i,j=0,k,sum;sum=0;for (k=3,i=0;i<n;i++,k+=5)
{sum=sum+k;if (sum%4==2)a[j++]=sum;}return j++;}
31.读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数理化2310.则应输出:2、3、7、11.
isPrime (int n)
{int i,m;m=1;for (i=2;i<n;i++)if (!(n%i)){m=0;break;}return(m);}
32.将长整型数中每一位上为偶数的数依次逆向取出,构成一个新数放在t中。高位在低位,低位在高位。当s中的数为25846513时,t中的数为6482.
void fun(long s,long *t)
{int d;long s1=1.i=1;*t=0;
while(s/i>0) i=i*10;i=i/10;
while (s>0)
{d=s/i;if(d%2==0){*t=d*s1+*t;s1*=10;}s=s%i;i=i/10;}}
33.已知一个数列从0项开始的前3项:0,0,1,以后的各项都是其相邻的前3项之和。函数fun的功能是:计算并输出该数列前n项的和sum。N的值通过形参传入。例如,当n=10时,程序输出结果应为96.000000.
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+=s;s0=s1;s1=s2;s2=s;}return sum;}
34.计算并输出k以内最大的10个能被13或17整除的自然数之和。例如,若k的值为500,则函数的值为4622.
int fun (int k)
{int m=0,mc=0,j;while ((k>=2)&&(mc<10)){if((k%13==0)||(k%17==0))
{m=m+k;mc++;}k--;}return m;}
35.通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如,变量a中的值原为8,b中的值原为3,b中的值为8.
int fun (int *x,int y){int t;t=*x;*x=*y;;return (t);}
36.实现两个整数的交换。例如给a和b分别输入60和65,输出为:a=65 b=60.
void fun (int *a,int *b){int t;t=*b;*b=*a;*a=t;}
37.将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。当s中的数为87653142时,t中数为8642.
void fun (long s,long *t){int d;long s1=1;*t=0;
while(s>0){d=s%10;if(d%2==0){*t=d*s1+*t;s1*=10;}s/=10;}}
38.从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。例如,当s中的数为7654321时,t中的数为642.
void fun (long s,long *t)
{long s1=10;s/=10;*t=
s%10;while (s>0)
{s=s/100;*t=s%10*s1+*t;s1=s1*10;}}
39. 从低位开始取出长整型变量s中奇数上的数,依次构成一个新数放在t中。例如,当s中的数为7654321时,t中的数为7531.
void fun (long s,long *t)
{long s1=10;*t=s%10;while (s>10)
{s=s/100;*t=s%10*s1+*t;s1=s1*10;}}
40. 将长整型数中每一位上为奇数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。当s中的数为87653142时,t中数为7531.
void fun (long s,long *t){int d;long s1=1;*t=0;
while(s>0){d=s%10;if(d%2!=0){*t=d*s1+*t;s1*=10
;}s/=10;}}
41.求出两个数的最大公约数,并作为函数值返回。例如,若给num1和num2输入49和21,则输出最大公约数为27.
int fun (int a,int b)
{int r,t;if(a<b){t=a;a=b;b=t;}r=a%b;
while (r!=0){a=b;b=r;r=a%b;}return (b);}
42.求三个数的最小公倍数。例如,给变量x1、x2、x3分别输入15,11,2,则输出结果应当是330.
fun (int x,int y,int z)
{int j,t,n,m;j=1;t=j%x;m=j%y;n=j%z;
while (t!=0||m!=0||n!=0)
{j=j+1;t=j%x;m=j%y;n=j%z;}return j;}
43.求广义斐波那契数的第n项。1,1,1,3,5,9,17,31,……项值通过函数值返回main函数。例如,若n=15,则应输出:2209.
long fun (int n)
{long a=1,b=1,c=1,
d=1,k;for (k=4;k<=n;k++)
{d=a+b+c;a=b;b=c;c=d;}return d;}
44.用递归算法斐波那契级数列中第n项的值从第1项起,斐波那契级数序列为1,1,1,2,3,5,8,13,21…例如,若给n输入7,该项的斐波那契级数值为13.
long fun (int g)
{switch (g){case 0:return 0;switch(g) case1:case 2:return1;}return (fun (g-1)+fun (g-2));}
45.统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数;并把该整数中各位上最大的数值作为函数值返回。例如,若输入无符号整数30800,则数字值为零的数为3,各位上数字值最大的是8.
int fun (unsigned n,int *zero)
{int count=0,max=0,t;
do {t=t%10;if(t==0)
count++;if(max<t)max =t;n=n/10;}while (n);*zero=count;return max;}
46.从3个红球,5个白球,6个黑球中任意取出8个作为一组,进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15.程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。
int fun()
{int i,j,k,sum=0;
printf(“\nTheresult :\n\n”);for (i=1;i<=3;i++)
{for (j=1;j<=5;j++)
{k=8-i-j;if ((k>=1&&k<=6}&&(i!=0)&&(j!=0)|| (k==0)){sum=sum+1;
Printf (“red:%4d white:%4d black:%4d\n”,I,j,k);}}} return sum;}
47.求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3为值为625.
long fun (int x,int y,long *p)
{int i; long t=1;for (i=1;i<=y;i++)t=t*x;*p=t;t=t%1000;return t;}
48.根据输入的3个边长(整数值),判断能否构成三角形:若能构成三角形则返回l,若不能,则返回0。
int fun(int a,int b,int c)
{if (a+b>c&&b+c>a&&
a+c>b){if (a==b&&b==c)
return 3;else if (a==b||b==c||a==c)return 2;else return1; }else return 0;}
49.为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。
void fun (int a,int *b,int*c)
{inti,j,d,y;for (i=3;i<=a/2;i=i+2){y=1;for(j=2;j<=sprt ((double)i);j++)
if (i%j==0)y=0;if(y==1){d=a-i;for (j=2;j<=sprt
((double)d);j++)
if(d%j==0)y=0;if (y==1){*b=i;*c=d;}}}}
50.找到一个大于给定整数m且紧随m的素数,并作为函数值返回。
int fun(int m)
{int i,k;for (i=m+1;;i++)
{for(k=2;k<i;k++)if (i%k==0)break;if (k>=i)return (i);}}
51.求输入的两个数中较小的数。例如:输入5 10,结果为min is 5.
int fun(int x,int y)
{int z;z=x<y?x:y;return 0;}
52.判断一个整数m是否是素数,若是返回1,否则返回0.
int fun (int m)
{intk=2;while (k<=m&&(m%k)) k++;
if(m==k)return1;else return 0;}
53.将十进制正整数m转换成k(2≤k≤9)进制数,并按位输出。例如,若输入8和2,则应输出1000。
fun (int m,int k)
{int aa[20],i;
for (i=0;m;i++)
{aa[i]=m%k;m/=k;}
for (;i;i--)
printf(“%d”,aa[i-1]);}
54.把输入的十进制数以十六进制数的形式输出。
main ()
{charb[17]={“0123456789ABCDEF”};
int c[64] ,d,i=0,base=16;long n;
printf(“Enter a number:\n”);scanf(“%ld”,&n);do{c[i]=n%base;i++;n=n/base;}
while (n!=0);printf (“Transmite new base:\n”) for (--i;i>=0;--i)
{d=c[i];printf(“%c”,b[d]);}printf(“\n”);}
55.将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。若输入77777,则输入出是32767.
int fun(char *p)
{int n;n=*p-‘0’;p++;
while(*p!=0){n=n*8+*p-‘0’;p++;}return (n);}
56.计算证整数num的各位上的数字之积。例如,若输入253,则输出应该是20.
long fun (long num)
{long k=1;do {k*=num%10;mum/=10;}while (num);return (k);}
57.计算并输出high以内最大的10个素数之和。若high的值为100,则函数的值为732.
int fun (int high)
{int sum=0,n=0,j,yes;
while ((high>=2)&&
(n<10)){yes =1;for (j=2;
j<=high /2;j++)
if (high%j==0){yes=0;
break;}if(yes){sum+=high;n++;}high--;}return sum;}
58.从整数1到55之间,选出能被3整除、且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定,函数中a1放个位数,a2放十位数。
fun (int *b)
{intk,a1,a2,i=0;for(k=10;k<55;k++){a2=k/10;a1=k-a2*10;
if ((k%3==0&&a2==5)||
(k%3==0&&a1==5)){b[i]=k;i++;}}return i;}
59.把主函数中输入的3个数,最大的放在a中,最小的放在c中。例如,输入的数为:55 12 34,输出结果应当是:a=55.0,b=34.0,c=12.0.
void fun (float *p,float *q,float *s)
{float *k;if (*p>*q){*k=*p;*p=*q;*q=*k;}if (*s>*p){*k=*s;
*s=*p;*p=*k;}if(*q>*p)
{*k=*q;*q=*p;*p=*k;}}
60.计算n的5次方的值,通过形参指针传回主函数;计算该值的个位、十位、百位上数字之和作为函数值返回。如,7的5次方是16807,其低3位数的和值是15.
int fun(int n,int *value)
{intd,s,i;d=1;s=0;for (i=1;i<=5;i++)d=d*n;*value=d;
for (i=1;i<=5;i++)
{s=s+d%10;d=d/10;}return s;}
61.求两个形参的乘积和商数,并通过形参返回调用程序。例如输入:61.82和12.65,输出为:c=782.023000,d=4.886957.
void fun (double a,double b,double *x,double *y){*x=a*b;*y=a/b;}
62.输入两个双精度数,函数返回它们的平方和的平方根值。例如:输入:22.936和14.121,输出为:y=26.934415.
double fun (double *a,double *b)
{double c;
c=sqrt((*a)*(*a)+(*b)*
(*b));return c;}
63.求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积。例如输入圆的半径值:19.527 输出为:s=598.950017.
float fun (float r){return 3.14159*r*r/2;}
64.判断两个指针所指存储单元中的值的符号是否相同;若相同函数返回1,否则返回0.这两个存储单元中的值都不为0.
fun (double *a,double *b)
{if(*a**b>0.0)return 1;else return 0;}
65.求两数平方根之和,作为函数值返回。例如,输入12和20,输出结果是:y=7.936238.
double fun (double *a,double *b)
{double c;c=sqrt(*a)+sqrt (*b);return c;}
66.判断两个整数m和n是否互质(既是否有公共的因子)(m≠1,n≠1).方法是:用2到t(t取m和n中较小的那个数)之间的数分别去除m和n,若m和n能同时被某个数除尽,则m和n不互质;否则它们互质。例如,若输入187和85,则应输出N0(表示它们不互质,它们有公因子17)。若输入89和187,则应输出Yes(表示它们互质)。
int IsThat(int m,int n)
{int k,t,mk=1;t=m;if (m>n)t=n;for (k=2;k<=t;k++)
if (m%k==0&&n%k==0)
{mk=0;break;}return (mk);}
main ()
{int m,n;clrscr();printf (“\nPlease enter 2 number:\n”)scanf (“^%d %d”,&m,&n);
if (IsThat(m,n)) printf (“Yes\n”);else printf (“No\n”);}
67.判断一个整数m是否是素数,若是返回1,否则返回0.
int fun (int m)
{intk=2;while (k<=m&&(m%k))k++;if (m==k)return 1;else return 0;}
68.求两个形参的乘积和商数,并通过形参返回调用程序。例如输入:61.82和12.65,输出为:c=782.023,d=4.886957.
void fun (double a,double b,double*x,double*y){*x=a*b;*y=a/b;
二、数组题
69.找出100至n(不大于1000)之间三位数字相等的所有整数。
int fun (int *s,int n)
{inti,j,k,a,b,c;j=0;for (i=100;i<n;i++){k=i;a=k%10;k/=10;b=k%10;k/=10;c=k;
if(a==b&&a==c)s[j++]=i;}return j;}
70.找出100~n(不大于1000)之间百位数字加十位数字等于个位数字的所有整数。
int fun (int *s,int n)
{inti,j,k,a,b,c;j=0;for (i=100;i<n;i++){k=i;a=k%10;k/=10;b=k%10;k/=10;c=k/10;if(a==b+c)s[j++]=i;}return j;}
71.求出数组中最大数和次最大数,并把最大数和a[0]中的数对调、次最大数和a[1]中的数对调。例如数组中原有的数为:7、10、12、0、3、6、9、11、5、8,输出的结果为:12、11、7、0、3、6、9、10、5、8.
int fun (int *a,int n)
{inti,m,t,k;for (i=0;i<2;i++){m=i;for (k=i;k<n;k++)if (a[k]>a[m])m=k;
t=a[i];a[i]=a[m];a[m]=t;}}
72.计算数组元素中值为正数的平均值(不包括0)。例如:数组中元素中的值依次为39,-47,21,2,-8,15,0,则程序的运行结果为19.250000.
double fun (int x[ ])
{double sum=0.0;int c=0,i=0;while (x[i]!=0)
{if (x[i]>0)
{sum+=x[i].c++;}i++;}sum/=sum/c;return sum;}
73. 计算数组元素中值为负数的平均值(不包括0)。例如:数组中元素中的值依次为43,-47,-21,53,-8,12,0,则程序的运行结果为-25.333333.
double fun(int x[])
{double sum=0.0;int c=0
,i=0;while(x[i]!=’\0’)
{if(x[i]<0)} {sum+=x[i].c++;}i++;}sum=sum/c;return sum;}
}
74.用选择法对数组中的n个元素按从大到小的顺序进行排序。
void fun (int a[],int n)
{inti,j,t,p;for (j=0;j<n-1;j++){p=j;for (i=j+1;i<n;i++) if (a[i]>a[p])p=j;t=a[p];a[p]=a[j];a[j]=t;}}
75.读入一个整数m(5≤m≤20),函数getarr调用函数rnd获得m个随机整数,函数sortpb将这m个随机整数从小到大排序。例如,若输入整数7,则应输出:3,10,17,28,32,36,47.
sortpb (int n,int *a)
{int i,j,p,t;for (j=0;j<n-1;j++){p=j;for (i=j+1;i<n;i++)
if(a[p]>a[i])p=i;if (p!=j){t=a[j];a[j]=a[p];a[p]=t;}}}
76.给定n个实数,输出平均值,并统计平均值以上(含平均值)的实数个数。例如n=8时,输入193.199,195.673,195.757,196.051,196.092,196.596,196.579,196.763,所得平均值为195.838745,在平均值以上的实数个数应为5.
int fun (float x[],int n)
{int j,c=0;float xa=0.0;for (j=0;j<n;j++)xa +=x[j]/n;
printf(“ave=%f\n”, xa)for (j=0;j<n;j++)if(x[j]>= xa)c++;return c;}
77.读入一个整数m(1≤m≤20)和m位学生的学号、数学课考分和计算机课考分,并从中查找第一个数学课考分<80且计算机课考分<70的学生,若有则输出他的学号和两门课分数,否则输出“Not found!”.
int Find (int n,struct student ss[])
{int i;for (i=0;i<n;i++)if ((ss[i].math<80)&&(ss[i].cmpt<70))break;return ((i==n)?-1:i);}
main ()
{int i,m;struct student tt[M];printf (…);scanf(“%d”,&m);printf (…);
for(i=0;i<m;i++)…}
78.从n个学生的成绩中统计出高于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,输入8名学生的成绩:85,65.5,69,95.5,87,55,62.5,75,则高于平均分的学生人数为4(平均分为74.312500)。
int fun (float *s,in n,float *aver)
{float ave,t=0.0;int count=0,k,i;for (k=0;k<n;k++)t+=s[k];aver =t/n;
for(i=0;i<n;i++)if(s[i]>ave
)count++;*aver=ave;return count;}
79. 从n个学生的成绩中统计出低于平均分的学生人数,人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,输入8名学生的成绩:80.5,60,72,90.5,98,51.5,88,64则低于平均分的学生人数为4(平均分为75.5625)。
int fun (float *s,int n,float *aver)
{float ave,t=0.0;int count=0,k,i;for(k=0;k<n;i++) t+=s[k];ave=t/n;
for(i=0;i<n;k++) if (s[i]<ave)count++;*aver=ave;return count; }
80.使数组中的元素的值缩小5倍。
float m[10];
void fun (void)
{int j;printf (“In subfunc after calling \n”);
for (j=0;j<10;j++){printf (“%f”,m[j]/5);}}
81. .使数组中的元素的值增加10倍。
float m[10];
void fun (void)
{int j;printf (“In subfunc after calling \n”);
for (j=0;j<10;j++){printf (“%d”,m[j]*10);}}
82.删除w所指数组中下标为k的元素中的值。
arrout (int *w,int m)
{int k;for(k=0;k<m;k++)
printf (“%d”,w[k]);printf (“\n”);}
83.假如整数数列中的数不重复,删除数列中值为X的元素。N中存放的是数列中元素的个数。
fun (int *a,int n,int x)
{int p=0,i;a[n]=x;while (x!=a[p] )p=p+1;if (p==n)return -1;else {for (i=p;i<n;i++)
a[i]=a[i+1];return n-1;}}
84.按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每5个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。
fun (double *s,double *w)
{int k,i;double sum;for (k=2,i=0;i<SIZE;i++)
{s[i]=k;k+=2;}sum=0.0;for (k=0,i=0,i<SIZE;i++)
{sum+=s[i];if((i+1)%5==0){w[k]=sum/5;sum=0;k++;}}return k;}
85.N个有序整数数列已放在一维数组中,函数的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,则返回其下标值;反之,则返回-1.折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大于中间位置元素中的值,则下一次的查找范围放在中间中间位置之后得元素中;反之,下次查找范围落在中间位置之前的元素中。直到low>high,查找结束。
int fun (int a[],int m)
{int low=0,high=N-1,mid;while (low<=high)
{mid=(low+high)/2;if (m<a[mid])high =mid-1;
else if (m>a[mid])
low=mid+1;else return(mid);}return (-1);}
{printf (“%3d”,m[j]=m[j]*10);}
86.在x数组中放入n个采样值,计算并输出差值。(函数省略)
float fun(float x[],int n)
{int j;float xa=0.0,s;for (j=0;j<n;j++)xa+=x[j]/n;s=0;for (j=0;j<n;j++)
S+=(x[j]-xa)*(x[j]-xa)/n;return s;}
87.先读入整数m,再读入m个从小到大的整数,最后再读入一个整数k并将k插入到该改整数数列中,插入后的数列仍然按从小到大的顺序排列。例如,若先输入4,然后输入4个从小到大排列的整数:-1,1,7,98最后输入待插入的数19,则输出结果应为:-1,1,7,19,98.
void InSort (int *n,int vv[],int k)
{int k=0,j;while (k>vv[i]&&i<*n)i++;if (i<*n)for (j=*n;j>i;j--)
vv[j]=vv[j-1];vv[i]=k;++*n;}
main()
{int aa[M].i,k,m;clrscr();printf(“\nPlease enter a number:\n”);
scanf (“%d”,&m);printf (“\nPlease enter %d numbers:\n”,m);
for(i=0;i<m;i++)scanf (“%d”,&aa[i]); printf (“\nPlease enter another numbers:\n”);
scanf (“%d”,&k);InSort(&m,aa,k);for (k=0;k<m;k++)printf(“%d”,aa[k]);}
88.读入一个整数m(4≤m≤10),例如4,程序将自动在a[0]至a[3]四个数组元素中分别放入1,4,9,16,且按逆序输出此4个元素:16,9,4,1。
main ()
{inta[M]={0},i=0,j,m;printf(…);scanf(“%d”,&m);for(j=0;j<m;j++)a[j]=(j+1)*(j+1);printf(“\nTheoutput:\n”);for(i=m-1;i>=0;i--)printf (“%4d”,*(a+i));}
89.根据形参m的值(2≤m≤9),在m行m列的二维数组中存放如下所示的数据,由主函数输出。例如,若输入2,则输出1 2
2 4输入4,则输出1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16
void fun (int (*a)[M],int m)
{intj,k;for (j=0;j<m;j++)for (k=0;k<m;k++)a[j][k]=(k+1)*(j+1);}
90.先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之积。
int fun()
{int a[3][3],mul;int i,j;mul=1;for (i=0;i<3;i++){for(j=0;j<3;j++)scanf (“%d”,&a[i][j]);}
for (i=0;i<3;i++)
mul=mul*a[i][j];printf (“Mul=%d\n”,mul);}
91.先从键盘上输出一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之和。
int fun()
{int a[3][3],sum;int i,j; sum=0;for (i=0;i<3;i++)
{for(j=0;j<3;j++)scanf (“%d”,&a[i][j]);}
for (i=0;i<3;i++) sum = sum +a[i][j];printf (“Sum =%d\n”, sum);}
92.输出M行N列整数方阵然后求两条对角线上的各元素的和返回此和数。
int fun (int n,int xx[][M])
{int i,j,sum=0;printf (“\nThe %d x %d matrix:\n”,M,M);for (i=0;i<M;i++)
{for (j=0;j<M;j++)printf (“%4d”,xx[i][j]);
printf (“\n”);for (i=0;i<n;i++)sum+=xx[i][j]+xx[i][n-i-1];return (sum);}
93. 输出M行N列整数方阵然后求两条对角线上的各元素的平方和返回此和数。
int fun (int n,int xx[][M])
{int i,j,sum=0;printf (“\nThe %d x %d matrix:\n”,M,M);for (i=0;i<M;i++)
{for (j=0;j<M;j++)printf (“%4d”,xx[i][j]);
printf(“\n”);for (i=0;i<n;i++)sum+=xx[i][j]*xx[i][n-i-1]*xx[i][n-i-1];
return (sum);}
94.给一维数组a输入任意4个整数,并按如下的规律输出。例如输入1,2,3,4,程序运行后输出以下方阵:4 1 2 3
3 4 1 2
2 3 4 1
1 2 3 4
int fun(int *a)
{inti,j,k,m;printf (“Enter4number:”);
for(i=0;i<m;i++)scanf(“%d”,&a[i]);printf (“\n\nThe result :\n\n”);
for(i=M;i>0;i--){k=a[m-1];for(j=M-1;j>0;j--)a[j]=a[j-1];a[0]=k;
for(m=0;m<M;m++)printf (“%d”,a[m]);printf(“\n”);}
三、字符题
95.逐个比较a,b两个字符串对应位置中的字符,把ASCII值小或相等的字符依次存放到c数组中,形成一个新的字符串。例如:a中的字符串为fshADfg,b中的字符串为sdAEdi,则c中的字符串应为fdAADf.
void fun (char *p,char *q,char *c)
{intk=0;while(*p||*q){if(*p>=*q)c[k]=*q;elsec[k]=*p;if(*p)p++;if(*q)q++;k++;}}
96.将字符串s中位于偶数位置的字符或ASCII码为奇数的字符放入字符串t中(规定第一个字符放在第0位中)。例如:字符串中的数据位ADFESHDI,则输出应当是AFESDI。
void fun (char *s,char t[ ])
{int i,j=0;for (i=0;i<strlen (s);i++)if (i%2==0||s[i]%2!=0)t[j++]=s[i];t[j]=’\0’;}
97.读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码降序排序后输出。例如:输入dafhc,则应输出hfdca.
void fun (char t[ ])
{charc;inti,j;for (i=0;i<strlen(t)-1;i++)for (j=i+1;j<strlen (t);j++)
if (t[i]<t[j]){c=t[j];t[j]=t[i];t[i]=c;}}
98.依次取出字符串中所有的字母,形成新的字符串,并取代原字符串。
void fun(char *s)
{int i,j;for (i=0,j=0;s[i]!=’\0’;i++)if((s[i]>=’A’&&s[i]<=’z’)||(s[i]>=’a’&&s[i]<=’z’))
s[j++]=s[i];s[j]=’\0’;}
99.在字符串str中找出ASCII码值最小的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动,例如,调用fun函数之前给字符串输入fagAgBDh,调用后字符串中的内容为AfaggBDh.
void fun(char *p)
{char min,*q;int i=0;min=p[i];while (p[i]!=0){
if(min <p[i]){q=p+i; min =p[i];}i++;}while (q>p)
{*q=*(q-1);q--;}p[0]= min.;}
100.在字符串str中找出ASCII码值最小的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动,例如,调用fun函数之前给字符串输入ABCDeFGH,,调用后字符串中的内容为eABCDFGH..
void fun(char *p)
{char max,*q;int i=0;max=p[i];while (p[i]!=0){
if(max<p[i]){q=p+i;max=p[i];}i++;}while (q>p)
{*q=*(q-1);q--;}p[0]=max.;}
101.将字符串tt中的大写字母都改为对应的小写字母,其他字符不变。若输入“Ab,cD”,则输出“ab,cd”.
char *fun (char tt[ ])
{inti;for(i=0;tt[i];i++){if((tt[i]>=’A’)&&(tt[i]<=’Z’))tt[i]+=32;}return(tt);}
102.将字符串tt中的小写字母都改为对应的大写字母,其他字符不变。若输入“edS,dAd”,则输出“EDS,DAD”.
char *fun (char tt[ ])
{int i;for (i=0;tt[i];i++)
{if((tt[i]>=’a’)&&(tt[i]<=’Z’))tt[i]-=32;}return(tt);}
103.将(1≤m≤10)个字符串反着连接起来,组成一个新串,放入pt所指字符串中,例如:把3个串DEG,ac,df反着串联起来,结果是dfacDEG.
void fun (char str[ ][10],int m,char *pt)
{intk,q,i,j=0;for(k=m-1;k>=0;k--){q=strlen(str[k]);j+=q;for(i=0;i<q;i++)pt[i]=str[k][i];pt+=q;pt[0]=0;}pt-=j;}
104.用冒泡法对6个字符串按由大到小的顺序进行排序。
void fun (char *pstr[6])
{inti,j;char*p;for (i=0;i<5;i++)for (j=i+1;j<6;j++)if (strcmp(*(pstr+i),*(pstr+j))<0)
{p=*(pstr+i);*(pstr+i)=*(pstr+j);*(pstr+j)=p;}}
105.利用插入排序法对字符串中的字符按从大到小的顺序进行排序插入法的基本方法是先先对字符串中的头两个元素进行排序然后把第3个字符插入到前两个字符中插入后前3个字符依然有序再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。
void insert(char *aa)
{inti,j,n;charch;n=strlen(aa);for (i=1;i<n;i++)
{ch=aa[i];j=i-1;while ((j>=0)&&(ch>aa[j]))
{aa[j+1]=aa[j];j--;}aa[j+1]=ch;}}
106.从字符串s删除所有大写字母‘F’。
void fun(char *s)
{inti,j;for(i=j=0;s[i]!=’\0’;i++)if(s[i]!=’F’)s[j++]=s[i];s[j]=’\0’;}
107.依次取出字符串中所有的数字字符,形成新的字符串并取代原字符串。
void fun (char *s)
{inti,j;for(i=0,j=0;s[i]!=’\0’;i++)if(s[i]>=’0’&&s[i]<=’9’)s[j++]=s[i];s[j]=’\0’;
108.将s所指字符串中最后一次出现的、t1所指子串替换成t2所指子串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同,例如,当s所指字符串中的内容为abcdabfabc,t1所指子串中的内容为:ab,t2所指子串中的内容为99时,结果,在w所指的数中的内容为abcdabf99c.
void fun(char *s,char *t1,char *t2,char *w)
{inti;char *p,*r,*a;strcpy(w,s); while (*w){p=w;r=t1;while (*r) if (*r==*p){r++;p++;}
else break;if (*r==’\0’)a=w;w++;}r=t2;while (*r)(*a=*r;a+;r++)}
109. 将s所指字符串中出现的t1所指字符串替换成t2所指字符串,所形成的新字符串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同,例如,当s所指字符串中的内容为abcdabfab,t1所指子串中的内容为:ab,t2所指子串中的内容为99时,结果,在w所指的数中的内容为99cd99f99.
void fun(char *s,char *t1,char *t2,char *w)
{inti;char *p,*r,*a;strcpy(w,s); while (*w){p=w;r=t1;while (*r) if (*r==*p){r++;p++;}
else break;if (*r==’\0’){a=w;r=t2;} while (*r)(*a=*r;a++;r++;}w+=strlen(t2);}else w++;}}
110.求出字符串中最后一次出现的子符串的地址,通过函数值返回,若未找到,则函数值为NULL。如,当字符串中的内容为abcdabfabcdx,t中的内容为ab时,输出应是abcdx。但字符串中的内容为为abcdabfabcdx,t中的内容为abd时,则程序输出未找到的信息:Not found!
char *fun(char *s,char *t)
{char *p,*r,*a;a=NULL;while (*s){p=s;r=t;while (*r)if (*r==*p){r++;p++;}else break;if(*r==’\0’)a=s;s++;}return a;}
111.判断字符ch是否与str所指字符串中的某个字符相同;若相同则什么也不做,若不同,则将其插在串的最后。
void fun (char *str,char ch)
{while (*str &&*str !=ch) str++;f(*str ==’\0’){str[0]=ch;str[1]=’\0’;}}
112.从s所指字符串中,找出t所指字符串的个数作为函数值返回。例如当s所指字符串中的内容为abcdabfab,t所指字符串的内容为ab,则函数返回整数3.
int fun (char *s,char *t)
{int n;char *p,*r;n=0;while (*s){p=s;r=t;while (*r)if (*r==*p){r++;p++;}
else break;if (*r==’\0’)n++;s++;}return n;}
113.在字符串的最前端加入n个*号,形成新串,并且覆盖原串。注意:字符串的长度最长允许79.
void fun (char *s,int n)
{char a[80],*p,int i,p=s;for (i=0;i<n;i++)a[i]=’*’;do {a[i]=*p;i++;p++;}
while (*p);a[i]=’\0’,strcpy(s,a);}
114将s所指字符串中的字母转换为按字母序列的后续字母(但Z转化为A,z转化为a),其他字符不变。
void fun (char *s)
{while(*s){if (*s>=’A’&&*s<=’Z’||*s>=’a’&&*s<=’z’){if (*s==’Z’) *s=’A’;
else if (*s==’z’),*s=’a’;else *s+=1;}s++;}}
115.将从键盘上输入的每个单词的第一个字母写为大写字母,输入时各单词必须用空格隔开,用‘.’结束输入。
int fun (char *c,int status)
{if (*c==’ ’) return 1;else {if (status &&*c<=’z’ &&*c>=’a’)*c+=’A’-‘a’;return 0;}}
116.读入一个英文文本行,将其中每个单词的第一个字母忙乱成大写,然后输出此文本行(这里的“单词“是指由空格隔开的字符串)。例如,若输入I am a student to take the examination,则应输出I Am Student To Take The Examination.
#include “stdio.h”
void upfst (char *p)
{int k=0;for (;*p;p++) if(k){if (*p==’ ‘)k=0; else if (*p!=’’)
{k=1;*p=toupper(*p);}}
117.将p所指字符串中每个单词的最后一个字母改成大写(这里的“单词“是指有空格隔开的字符串)。例如,若输入:I am a student to take the examination,则应输出I aM A studenT tO takE thE examinatioN.
void fun(char *p)
{int k=0;for (;*p;p++) if(k){if(*p==’ ‘){k=0;
*(p-1)=
toupper(*(p-1));}}else k=1;}
118.计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。
int fun (char *s,char *t)
{intn;char *p,*r;n=0;while (*s){p=s;r=t;while (*r)if (*r==*p){r++;p++;
else break;if(*r==’\0’)n++;s++;}return n;}}
119.从N个字符串中找出最长的那个串,并将其地址作为函数值返回。
char *fun (char (*sq)[M])
{int i;char *sp;sp=sq[0];for (i=0;i<N;i++)if (strlen(sp)<strlen(sq[i]))sp=sq[i];return sp;}
120.将s所指字符串中的正序和反序进行连接,形成一个新串在t所指的数组中。例如,当s所指字符串为ABCD时,则t所指字符串中的内容应为ABCDDCBA.
void fun (char *s,char *t)
{int i,d;d=strlen(s);for (i=0;i<d;i++)t[i]=s[i];for (i=0;i<d;i++)t[d+i]=s[d-1-i];t[d+i]=’\0’;}
121.先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。例如:当s中的字符串为ABCDE时,则t中的字符串应为EDCBAABCDE。
void fun (char *s,char *t)
{int i,s1;s1=strlen(s);for (i=0;i<s1;i++)t[i]=s[s1-1-i];for (i=0;i<s1;i++)
t[s1+i]=s[i];t[2*s1]=’\0’;}
122.将m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指字符串中,例如,把3个串abc,CD,EF串联起来,结果是abcCDEF.
Void fun (char str[ ][10],int m,char *pt)
{int k,q,i,j=0;for (k=0;k<m;k++){q=strlen(str[k]);j+=q;for (i=0;i<q;i++)
pt [i]=str[k][i];pt+=q;
pt[0]=0;}pt-=j;}
123、分别将a,b字符串中字符倒序,然后按排列的顺序交叉合并到c所指数组中,过长的剩余的字符接在c所指的数组的
尾部,例如:若a所指字符串中的内容为:abcdef,b所指字符串中的内容为:1234,则c所指数组中的内容应该为:g4f3e2d1cba.
若a所指字符串中的内容为:1234,b所指字符串中的内容为:abcdef,则c所指数组中的内容应该为:4g3f2e1dcba
Void fun(char *a, char *b, char *c)
{char s1[100],s2[100],*sa,*sb;strcpy(s1,a); strcpy(s2,b);myswap(s1); myswap(s2);sa=s1;sb=s2;while(*sa||*sb){if(*sa){*c=*sa;c++;
sa++; if(*sb){*c=*sb;c++;sb++;}}*c=0;}
124、首先将a字符串中字符按逆序存放,然后和b字符串中字符,按排列的顺序交叉合并到c所指数组中,过长的剩余的字符接在c所指的数组的尾部,例如:若a所指字符串中的内容为:abcdef,b所指字符串中的内容为:1234,则c所指数组中的内容应该为:g1f2e3d4cba. 若a所指字符串中的内容为:1234,b所指字符串中的内容为:abcdef,则c所指数组中的内容应该为:4a3b2c1defg
fun(char *a, char *b, char *c)
{char *ap,*at,ch;ap=a;at=a+strlen(a)-1;whiel(ap<=at){ch=*ap;*ap=*at;*at=ch;ap++;at++;} while(*a||*b){if(*a){*c=*a;c++;a++; if(*b){*c=*b;c++;b++;}}*c=0;}}
125、分别将a,b字符串中字符倒序,然后按排列的顺序交叉合并到c所指数组中,过长的剩余的字符接在c所指的数组的
尾部,例如:若a所指字符串中的内容为:abcdef,b所指字符串中的内容为:1234,则c所指数组中的内容应该为:g4f3e2d1cba.
void myswap(char *s)
{char *sp,*st,ch; sp=s;st=s+strlen(s)-1;while(sp<=st){ch=*sp;*sp=*st;*st=ch;sp++;st++;}}
Void fun(char *a, char *b, char *c)
{char s1[100],s2[100],*sa,*sb;strcpy(s1,a); strcpy(s2,b);myswap(s1); myswap(s2);sa=s1;sb=s2;while(*sa||*sb){if(*sa){*c=*sa;c++;
sa++; if(*sb){*c=*sb;c++;sb++;}}*c=0;}
126、首先将b字符串中字符按逆序存放,然后将a字符串中字符和a字符串中字符,按排列的顺序交叉合并到c所指数组中,过长的剩余的字符接在c所指的数组的尾部,例如:若a所指字符串中的内容为:abcdef,b所指字符串中的内容为:1234,则c所指数组中的内容应该为:a4b3c2d1efg, 若a所指字符串中的内容为:1234,b所指字符串中的内容为:abcdef,则c所指数组中的内容应该为:1g2f3e4dcba
void fun(char *a, char *b, char *c)
{int i,j;char ch;i=0;
j=strlen(b)-1;while(i<j){ch=b[i]; b[i]= b[j]; b[j]=ch;i++;j--;} while(*a||*b){if(*a){*c=*a;c++;a++; if(*b)
{*c=*b;c++;b++;}}*c=0;}}
127、将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。例如,当a所指字符串中的内容为“abcdefg”,b所指字符串中的内容为“1234”时; c所指数组中的内容应该为”a1b2c3d4efg”;而当a所指字符串中的内容为“1234”,b所指字符串中的内容为“abcdefg”时, c所指数组中的内容应该为“1a2b3c4defg”.。
fun(char *a,char *b,char *c)
{while(*a&&*b){*c=*a;c++;a++;*c=*b;c++;b++;}
if(*a=’\0’)
while(*b){*c=*b;c++;b++;}
else
while(*a){*c=*a;c++;a++;}
*c=’\0’;}
128、统计字符串中各元音字母(即A,E,I,O,U)的个数。注意:字母不分大小写。例如,输入THIs is a boot,则应输出是1 0 2 2 0。
void fun(char *s,int num[5])
{int k,i=5;
for(k=0;k<i;k++)num[k]=0;
for(;*s;s++){i=-1;
switch(*s)
{case’a’;case’A’;{i=0;break;}
case’e’;case’E’;{i=1;break;}
case’i’;case’I’;{i=2;break;}
case’o’;case’O’;{i=3;break;}
case’u’;case’U’;{i=4;break;}}
if(i>=0)num[i]++;}}
129、将字符串p中所有字符复制到字符串b中,要求每复制3个字符之后插入一个空格,例如,在调用函数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串b中的内容则为ABC DEF GHI JK。
void fun(char *p,char *b)
{int i,k=0;
while(*p)
{i=0;
while(i<3&&*p)
{b[k]=*p;k++;p++;i++;}
if(*p){b[k++]=’ ‘;}}
b[k]=’\0’;}
130、统计字符串substr在字符串str中出现的次数。若字符串为aaas lkaaas,子字符串为as,则应输出2。
fun(char *str,char *substr)
{int i,j,k,num=0;
for(i=0;str[i];i++)
for(j=i,k=0;substr[k]==str[j];k++,j++)
if(substr[k+1]= =’\0’)
{num++;break;}return num;}
131、删除字符串s中所有空白字符(包括Tab字符、回车符及换行符)。输入字符串时用‘#’结束输入。
fun(char *p)
{int i,t;char c[80];
for(i=0,t=0;p[i];i++)
if(!isspace(*(p+i)))c[t++]=p[i];c[t]=’\0’;strcpy(p,c);
132、此函数的功能是从字符串s中,删除所有小写字母‘C’。
void fun(char *s)
{inti,j;for(i=j=0;s[i]!=’\0’;i++)if(s[i]!=’c’)s[j++]=s[i];s[j]=’\0’;}
133、逐个比较a、b两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存入到c数能中,形成一个新的字符串。例如,若a中的字符串为:aBCDeFgH,,b中的字符串为:Abcd,则c中的字符串应为:aBcdeFgH.
void fun{char *p,char *q,char*c}
{int k=0;
while(*p||*q){if(*p<=*q)c[k]=*q;else c[k]=*p;
if(*p) p++;
if(*q) q++;k++;}}
134、分别统计字符串中大写字母和小写字母的个数。例如:给字符串s输入:AaaaBBb123CCccccd,则应输出结果:
upper=6,lower=8.
Void fun(char *s,int *a,int *b)
{while(*s){if(*s>=’A’&&*s<=’Z’)(*a)++; if(*s>=’a’&&*s<=’z’)(*b)++;}}
135、将字符串s中位于奇数位置的字符或ASCII码为偶数的字符放入字符串t中(规定第一个字符放在第0位中)。例如:
将字符串中的数据为AABBCCDDEEFF,输出的应当是:ABBCDDEFF
Void fun(char *s,char t[])
{int i,j=0;for(i=0;i<strlen(s);i++)if(i%2==0||s[i]%2= =0)t[j++]=s[i];t[j]=’\0’;}
136、比较两个字符串,将长的那个字符串的首地址作为函数返回。
char *fun(char *s,char *t)
{int s1=0,t1=0;char *ss,*tt;ss=s;tt=t;while(*ss){s1++;ss++;} while(*tts){t1++;tt++;}if(t1>s1)return t;else return s;}
137、首先将大写字母转换为对应小写字母;若小写字母为a~u,则将其转换为其后第5个字母,若小写字母为v~z,使其值减21,转换为后的小写字母作为函数值返回.例如:若形参是字母A,则转换为小写字母f,若形参是字母W,则转换为小写字母b。
char fun(char c)
{ if(c>=’A’&&c<=’Z’)c=tolower(c); if(c>=’a’&&c<=’u’)c=c+5;else if(c>=’v’&&c<=’z’)c=c-21;return c;}
139、将字符串中的内容按逆序输出,但不改变字符串中的内容,例如:若字符串为abcd,则应输出dcba。
fun(char *a)
{if(*a){fun(a+1)printf(“%c”,*a);}}
140、读入字符串(长度<20),将该字符串中的所有字符升序排序后输出,例如:若输入为edcba,则应输出abcde。
Void fun(char t[])
{char c;int i,j;for(i=strlen(t)-1;i;i--)for(j=0;j<i;j++)if(t[j]> t[j+1]){c= t[j]; t[j]= t[j+1]; t[j+1]=c;}}
141、交换主函数中两个字符串中的内容,例如:若a所指字符串中的内容为:123456,b所指字符串中的内容为:abcde
程序运行后,a所指字符串中的内容为:abcde,b所指字符串中的内容为: 123456
void *fun(char *a,char *b)
{charc[N];int i;for(i=0;a[i];i++)c[i]=a[i]; c[i]=0; for(i=0;b[i];i++)a[i]=b[i]; a[i]=0; for(i=0;c[i];i++)b[i]=c[i]; b[i]=0;}
四、结构体、文件题
142、建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。
Int fun(NODE *h)
{int sum=0; NODE *p;p=h->next;while(p!=NULL){if(p->data%2= =0)sum+=p->data ; p=p->next;}return sum;}
143、函数creatlink的功能是:创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。
NODE *creatlink(int n,int m)
{NODE *h=NULL,
*p,*s;int i;s=( NODE *)malloc(sizeof(NODE ));h=p;p=s;for(i=1;i<n;i++){s=(NODE*)malloc(sizeof(NODE ));
s->data=rand()%(m-1);s->next=p->next; p->next =s;p= p->next ;}return h;}
144、下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值,函数fun 的作用是求出单向链表
结点(不包括头结点)数据域中的最大值,并作为函数值返回。
int fun(NODE *h)
{int max= -1; NODE *p;p=h->next;while(p){if(p->data>max)max= p->data ; p=p->next;} return max;}
145、对N名学生的学习成绩,按从高到低的顺序找出前m(m≤10)名学生,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。
STU *fun(STU a[],int m)
{STUb[N],*t;inti,j,k;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;t[k]=b[j];t[k].s=b[j].s;b[j].s =0;}return t;}