一、 数字题
1、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位依次放在c个位和十位上,b的十位和个位依次放在c的百位和千位上。如当a=16,b=35,则c=5361
Void fun (int a,int b,long*c)
{*c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10;}
2、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个数依次放在c数的千位和十位上,b数的十位和个数依次放在c数的百位和个位上。例如:当a=45,b=12,调用该函数后,c=4152。
Void fun (int a,int b,long *c)
{*c=(a/10*1000+(b/10)*100+(a%10)*10+(b%10);}
3、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的千位和十位上。例如,当a=45,b=12,调用该函数后,c=1524
Void fun (int a,int b,long*c)
{*c=(b/10)*1000+(a%10)*100+(b%10)*10+(a/10);}
4、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的个位和百位上。例如,当a=45,b=12,调用该函数后,c=5241。
Void fun(int a,int b,long*c)
{*c=a%10*1000+b%10*100+a/10*10+b/10;}
5、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的个位和百位上。例如,当a=45,b=12,调用该函数后,c=4251。
Void fun (int a,int b,long *c)
{*c=a/10*1000+b%10*100+a%10*10+b/10;}
6、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上。例如,当a=45,b=12,调用该函数后,c=2514。
Void fun (int a,int b,long *c)
{*c=(b%10*1000+(a%10)*100+(b/10)*10+(a/10); }
7、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的千位和十位上。例如,当a=45,b=12,调用该函数后,c=1425。
Void fun (int a,int b,long*c)
{*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);}
8、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。例如,当a=45,b=12,调用该函数后,c=2415.
Void fun(int a,int b,int*c)
{*c=(b%10)*1000+(a/10)*100+(b/10)*10+(a%10);}
9、 将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。例如,当a=45时,b=12,调用该函数后,c=5142。
Void fun(int a,int b,int*c)
{*c=a%10*1000+b/10*100+a/10*10+b%10;}
10、 求n以内(不包括n)同时能被5与11整除的所有自然数之和的平方根s并作为函数值返回。如:n为1000时,函数值应为s=96.979379。
double fun(int n)
{double s=0.0;int i;
for(i=0;i<n;i++)
If(i%5 = =0&&i%11= =0)s=s+i;
s=sqrt(s);return s;}
11、 计算并输出给定整数n的所有因子(不包括1与自身)的平方和(规定n的值不大于100)。如:n的值为56,则输出为sum=1113。
long fun(int n)
{int i;long s=0;
for(i=2;i<=n-1;i++)
if(n%i= =0)s+=i*i;return s;}
12、 求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回。若n为1000时,s=153.909064
double fun(int n)
{double s=0;int i;
for(i=0;i<n;i+ +)
if (i%3= = 0&&i%7= = 0)s+=1;s=sqrt(s); return s;}
13、 计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。如,若给n输入20后,则输出为s=0.583333.
double fun(int n)
{int i;double sum=0;
for(i=1;i<=n;i+ +)
If(i%5= = 0||i%9= =0)sum+=1.0/i; return sum;}
14、 计算并输出3到n之间所有素数的平方根之和。如,若给n输入100后,则输出为sum=148.874270
double fun (int n)
{int m,k,i;double s=0;
for(m=3;m<=n;m++){k=aqrt(m);
for(i=2;i<=k;i+ +)
If(m%i= =0)break;
If(i>=k+1)s+=sqrt(m);}return s:}
15、 判断整数X是否是同构数。若是同构数,函数返回1;否则返回0。
int fun(int x)
(if(x<10)return (! ((x*x-x)%10));
else return (! ((x*x-x)%100));}
106、用筛选法求出100之内的素数
Void fun (int *pt)
{int i,j,flag;*pt=2;*pt++;
for(i=3;i<100;i++){flag=1;
for(j=2;j<i;j+ +)
If(i%j= =0)flag=0;
If(flag){*pt=i;*pt++;}}*pt=0;}
16、 返回小蚕需要多少天才能爬到树顶(树高k厘米,小蚕每天白天向上爬m厘米,每天晚上因睡觉向下滑n厘米,爬到顶后不再下滑)(n<m<k)。例如,若分别输入253、71、29给k、m、n,则输出结果为:6。
int day(int k,int m,int n)
{int days,height=0;
for(days=1;;days++){height+=m;if(height>=k)return days;height-=n;}}
17、 求Fibonacci数列中小于t的最大的一个数,结果由函数返回。其中数列F(n)的定义为F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)例如:t=1000时,函数值为987。
int fun(int t)
{int a=1,b=1,c=0,i;
do{c=a+b;a=b;b=c;}while(c<t);
c=a;return c;}
18、 求Fibonacci数列中大于T的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2 ) 例如,当t=1000时,函数值为1597。
int fun(int t)
{int a=1,b=1,c=0,i;
for(i=4;i<=t;i+ +)
{if(c<t) {c=a+b;a=b;b=c; }
else break;}return c;}
19、 W是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。例如:w值为5923,则函数返回923;若w值为923,则函数返回23。
unsigned fun(unsigned w)
{if(w>=10000) return w%10000;
If(w>=1000) return w%1000;
If(w>=100) return w%100;
If(w>=10)return w%10;}
20、 对变量h中的值保留两位小数,并对第三位进行四舍五入(规定h中的值为正数)。例如:若h值为8.32433,则函数返回8.32;若h值为8.32533,则函数返回8.33。
float fun (float h)
{long t;t=(h*1000+5)/10;
Return (float)t/100;}
21、 利用以下所示的简单迭代方法求方程cos(x)-x=0的一个实根。Xn-1=cos(xn)迭代步骤如下:(1)取x1初值为0.0;(2)x0=x1,把x1的值赋给x0;(3)x1=cos(x0),求出一新的x1;(4)若x0-x1的绝对值小于0.000001,则招待步骤(5),否则执行步骤(2);(5)所求z1就是方程cos(x)-x=0的一个实根作为函数值返回。输出结果Root=0.739085
Root=0.739085.
float fun0
{float x1=0.0,x0; do{x0=x1;x1=cos(x0);}while(fabs(x0-x1)>=le-6);
Return x1;}
22、 根据以下公式计算s,计算结果通过形指针sn传回;s通过形参传入。SN=1/1-1/3+1/5-1/7+……(-1)^n/(2n-1)例如:若n的值为11时,S=0.764601
void fun(float*sn,int n)
{int i;float s=1;*sn=0;
for(i=0;i<=n;i++)
{*sn=*sn+s*(1.0/(2*i+1));s=-s;}}
23、 S=(1+1/2)+(1/3+1/4)+……+(1 (2n-1)+1/2n)如:若给n输入12后 则输出为S=3.775958。n的值要求大于1但不大于100。
double fun(int n)
{int i;double s=0.0;
for(i=1;i<=n;i++)
s=s+(1.0/(2*i-1)+1.0/(2*1));return s;}
24、 计算:s=(1-1n(1)-1n(2)- (3)-…1n(m))2s作为函数值返回。在C语言中可调用log(n)函数 求ln(n)。log函数的引用说明是double log( double x).如,若 的值为15,则函数值为723。57080
double fun(int m)
{int i;double s=1.0;
for(i=1;i<=m;i++)s=s-log(i);
return(s*s);}
25、 计算下列级数,和值由函数值返回。S=1-x+x2/2!-x2/3!+……+(-1* n/n!.如当n=15,x=0.5时,值为 0.606531.
Double fun(double x,int n)
{int i,j=1;double s=1.0,s1=1.0;
For(i=1;i<=n;i++){j=-1*j;s1=s1*i;
S=s+j*pow(x,i)/s1;}return s;}
26、 根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。
S=1+1/(1+2)+1/(1+2+3)+……+1/(1+2+3+……+n)。若n的值为11时,值为1.833333。
float fun(int n)
{int i,s1=0;float s=0.0;
for (i=1;i<=n;i++){s1=s1+i;
s=s+1.0/s1;}return s;}
27、 根据以下公式求P的值,结果由函数值带回。m与n为两个正数且要求m>n。P=m!/(n!(m-n)!) 例如:m=12,n=8时,运行结果为495.000000。
float fun (int m int n)
{int i;double p=1.0;
for(i=1;i<=m;i++) p=p*i;
for(i=1;i<=n;i++) p=p/i;
for(i=1;i<=m-n;i++)p=p/i;
return p;}
28、 求p的值(要求满足精度0.005,即某项小于0.005时停止迭代)。
p/2=1+1/3+1*2/(3*5)+1*2*3/(3*5*7)+1*2*3*4/(3*5*7*9)+…+1*2*3*…*n/(3*5*7*…*(2n+1)),如果输入精度0.0005,则程序输出3.140578。
double fun(double eps)
{double s=1.0,s1=1.0;int n=1;while(s1>=eps){s1=s1*n/(2*n+1);
s=s+s1;n++;}return 2*s;}
29、 S=1/(1×2)+1/(2×3)+……+1/(n×(n+1))例如,当n=10时,函数值为0.909091。
double fun(int n)
{int i;double s=0.0;for(i=1;i<=n;i++)s=s+1.0/(i*(i+1));return s;}
30、 计算并输出给定10个数的方差。
S=[ ∑(xk-x2) ]0.5
其中x2=
K=1
例如,给定的10个数为95.0,89.0,76.0,95.0,88.0,72.0,85.0,81.0,90.0,56.0,则输出为S=11.730729。
Double fun(double x[10])
{double x1=0.0,s=0.0;int i;
for(i=0;i<10;i++)x1=x1+x[i];
x1=x1/10;
for(i=0;i<10;i++)
s+=(x[i]-x1)*(x[i]-x1);
return sqrt(s/10);}
31、 S=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)-1/2n)。例如,若给n输入8后,则输入为S=0.662872。
double fun(int n)
{int i;double s=0.0;
for(i=1;i<=n;i++)
s=s+(1.0/(2*i-1)-1.0/(2*i));
Return s;}
32、 计算s=(1n(1)+1n(2)+1n(3)+…+1n(m))0.5.可调用log(n)函数求ln(n)。若m的值为20,则函数值为6.506583。
double fun(int m)
{int i;double s=0.0;
for(i=1;i<=m;i++)s=s+log(i);
return sqrt(s);}
33、 计算下列和值由函数值返回。S=1+x+x2/2!+x3/3!+…+xn/n!例如,当n=10,x=0.3时,函数值为1.349859。
S=1+x+x2/2!+x3/3!+……xn/n!例如,当n=10,x=0.3时,函数值为1.349859。
double fun(double x,int n)
{int i;double s=1.0,s1=1.0;
for(i=1;i<=n;i++){s1=s1*i;
s=s+pow(x,i)/s1;}return s;}
34、 S=1+(1+20.5)+(1+20.5+30.5)+…+(1+20.5+30.5)+…+(1+20.5+30.5+…+n0.5)如,若给n输入20后,则输出为S=534.188884。
double fun(int n)
{int i;double s=0.0,s1=0.0;
for(i=1;i<=n;i++)
{s1=s1+pow(i,0.5);s=s+s1;}
return s;}
35、 Sn=1+1/1!+1/2!+1/3!+1/4!+…+1/n!如,若给n输入15,则输出为s=2.718282.
double fun(int n)
{double t,sn=1.0;int i,j;
for(i=1;i<=n;i++)
t=1.0;for(j=1;j<=i;j++)t*=j;
sn+=1.0/t;}return sn;}
36、 计算并输出当x<0.97时下列多项 式的值,直到[Sn-Sn-1]<0.000001为止。
Sn=1+0.5x+(0.5*(0.5-1))/2!*x3(0.5*(0.5-1)*(0.5-2))/3!*x3+…+(0.5*(0.5-1)*(0.5-2))*…(0.5-n+1))/n!*xn.若给x输入0.21后,则输出为s=1.100000。
double fun(double x)
{double
S1=1.0,p=1.0,sum=0,s0,t=1;
int n=1;do{s0=s1;sum+=s0;t*=n;p*=(0.5-n+1)*x;s1=p/t;n++;}while(fabs(s1-s0)>=le-6);return sum;}
二、数组题
37、 求出一个2×M整型二维数组中最大元素的值,并将此值返回调用函数。
fun (int a[][M])
{int i,j,max=a[0][0];
for(i=0;i<2;i++)
for(j=0;j<M;j++)
if(max<a[i][j])max=a[i][j];
return max;}
38、 求出一个4×M整型二维数组中最小元素的值,并将此值返回调用函数。
fun (int a[][M])
{int i,j,min=a[0][0];
for(i=0;i<4;i++)
for(j=0;j<M;j++)
If(min>a[i][j])min=a[i][j];
Return min;}
39、 求出二维数组每列中最大元素,并依次放入PP所指的一维数组中。
void fun(int tt[M][N],int pp[N])
{int i,j,max;
for(j=0;j<N;j++){max=tt[0][j];
for(i=0;i<M;i++)
If(tt[i][j]>max)max=tt[i][j];pp[j]=max;}}
40、 程序定义了N×N的二维数组,给数组周边元素置0值。
fun (int w[][N])
{int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i= =0︳︳i= =N-1︳︳j= =0︳︳j==N-1)
W[i][j]=0;}
41、 程序定义了N×N的二维数组,使数组中第一行元素中的值与倒数第一行元素中的值对调、第二行元素中的值与倒数第二行元素中的值对调、……、其他依次类推。
例如:a数组中的值为
0 11 12 7 9
1 9 7 4 5
20 13 18 3 1
14 5 6 8 2
15 9 17 4 1
则返回主程序后a数组中的值应为
15 9 17 4 1
14 5 6 8 2
20 13 18 3 1
1 9 7 4 5
0 11 12 7 9
int fun(int a[][N])
{int i,j,k;
for(i=0;i<N/2;i++)
for(j=0;j<N;j++)
{k=a[i][j];a[i][j]=a[N-i-1][j];a[N-i-1][j]=k;}}
42、程序定义了N×N的二维数组,使数组中第一行元素中的值与最后一列元素中的值对调、第二列元素中的值与倒数第二列元素中的值对调、……、其他依次类推。例如:a数组中的值为
0 11 12 7 9
1 9 7 4 5
20 13 18 3 1
14 5 6 8 2
15 9 17 4 1
则返回主程序后a数组中的值应为
9 7 12 11 0
5 4 7 9 1
1 3 18 13 20
2 8 6 5 14
1 4 17 9 15
Int fun(int a[][N])
{int i,j,k;
For(i=0;i<N/2;i++)
For(j=0;j<N;j++)
{k=a[j][i];a[j][i]=a[j][N-i-1];a[j][N-i-1]=k;}}
43、下列程序定义了N×N的二维数组,并在主函数中自动赋值。编写函数:使数字右上半三角元素中的值乘m。例如,若m的值为2,a数组中的值为
a=1 9
2 7
则返回主程序后a数组的值应为
2 18
2 14
int fun(int a[][N],int m)
{int i,j;
for(i=0;i<N;i++)
for(j=I;j<N;j++)a[i][j]*=m;}
44、程序定义了N×N的二维数组,使数组左下半三角元素中的值加上n。如:若n的值为3,a数组中值为
a= 2 5 4
1 6 9
5 3 7
则返回主程序后a数组中的值应为
5 5 4
4 9 9
8 6 10
fun (int a[][N],int n)
{int i,j;
for(i=0;i<N;i++)
for(j=0;j<=i;j++)
a[i][j]=a[i][j]+n;}
45、下列程序N×N的二维数组 ,并在主函数中赋值。编写函数:求出数组周边元素的平方和并作为函数值返回给主函数中的s。例如:若a数组中的值为
a=0 1 2 7 9
1 11 21 5 5
2 21 6 11 1
9 7 9 10 2
5 4 1 4 1
则返回主程序后的s值310.
int fun (int w[][N])
{int i,j,k=0;int s=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i= =0||i==N-1||j= =0||j= =N-1)
s=s+w[i][j]*w[i][j];return s;}
46、下列程序N×N的二维数组 ,并在主函数中赋值。求出数组周边元素的平均值并作为函数值返回给主函数中的s。若a数组中的值为
a =0 1 2 7 9
1 9 7 4 5
2 3 8 3 1
4 5 6 8 2
5 9 1 4 1
则返回主程序后的s值应为3.375。
double fun (int w[][N])
{int i,j,k=0;double av=0.0;
for(i=0;i<N;i++)
for(i=0;i<N;j++)
if(i= =0||i= =N-1||j= =0||j= =N-1)
{av=av+w[i][j];k++;}return av/k;}
47、求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。例如:若二维数组中的值为
1 3 5 7 9
2 9 9 9 4
6 9 9 9 8
1 3 5 7 0
则函数值为61。
int fun(int a [M][N])
{int i,j,sum=0;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if(i= =0||i= =M-1||j= =0||j= =N-1)
sum=sum+a[i][j];return sum;}
48、实现矩阵(3行3列)的转置(即行列互换)。例如,若输入下面的矩阵:
100 200 300
400 500 600
700 800 900
则程序输出:
100 400 700
200 500 800
300 600 900
int fun (int array[3][3])
{int i,j,t;
for(i=0;i<3;i++)
for(j=i+1;j<3;j++){t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;}}
49、实现B=A+A’,即把矩阵加上A的转置,存放在矩阵B中。
输入下面矩阵: 1 2 3
4 5 6
7 8 9
其转置矩阵为: 1 4 7
2 5 8
3 6 9
则程序输出:2 6 10
6 10 14
10 14 18
Void fun(int a[3][3],int b[3][3])
{int i,j;
for(i=0;i<3;i++)
for(j=0;i<3;j++)
b[i][j]=a[i][j]+a[j][i];}
50、将M行N列的二维数组中的数据按列的顺序依次放到一维数组中,例如,二维数组中的数据为:
33 33 33 33
44 44 44 44
55 55 55 55
则一维数组中的内容应该是
33,44,55,33,44,55,33,44,55,33,44,55。
Void fun(int (*s)[10],int *b,int *n,int ㎜ int m)
{int x,y;
For(x=0;x<nn;x++)
For(y=0,y<mm;y++)
{b[x*mm+y]=*(s[y]+x);(*n)++;}}
51、将M行N列的二维数组中的数据,按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。若二维数组中的数据为:
33 33 33 33
44 44 44 44
55 55 55 55
则一维数组中的内容应该是
33,33,33,33,44,44,44,44,55,55,55,55.
Void fin (int (*s)[10],int*b, int*n, int mm, int m)
{int i,j,k=0;
for(i=0;i<mm;i++)
for(j=0;j<nn;j++)b[k++]=s[i][j];
*n=k;}
52、求出一个M×N二维数组每行元素的和数,并依次放入一个一维数组中传回主函数。例如,若有以下二维数组:
6 10 2 10 16
17 15 15 8 6
4 18 11 19 12
0 12 1 3 7
则输出:44,61,64,23
fun (int a[][N],int b[])
{int i,j,sum=0,n=0,
for(i=0;i<M;i++)
{for(j=0;j<N;j++)sum+=a[i][j];
b[n++]=sum;sum=0;}}
53输出一个如下的n阶方阵。变量n文件c9670503.In中。例如若读入4或5,则分别输出1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13
或
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
25 24 23 22 21
Void Mtrx(int)
{int a[M]={0},d=0,I,j,k;} *fp;
Fp=fopen(“dat52.dat”,”w”);
For(i=1;i<=n;i++)
{for(j=0;j<n;j++){d+;a[j] if(i%2) for(k=0;k<n;k++)
{printf(“%3d” ,
a[k]);fprintf(fp,”%3d”,a[k]);}
else for(k=n-1;k>=0;k--)
{print(“\n”);fprintf(fp,”\n)
Fclose(fp);}
54、求数组的最小元素在数组中下标存放在k所指的存储单元中。如输 234,345,753,134,436,458,100, 5,760则输出结果为6,100。
int fun(int *s,int t,int )
{inti;*k=0;for(i=0;i<t;i++)if(s[*k]>s[i])*k=i;}
55、找出一维数组元素中最大的值和它所在的下标,最大值和它所在的下标通过形参传回。数组元素中的值已居主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
Void fun(int a[],int n, int*max,int*d)
{int i;*max=a[0];*d=0;
for(i=0;i<n;i++)
if (*max<a[i]){*max=a[i];*d=i;}}
56、把20个随机数存入一个数组,然后输出该数组中的最小值。
int fun(int list[],int size)
{int x,i;x=0;
for(i=1;i<size;i++)
if(list[x]>list[i])x=i;return x;}
57、将数组xx(有n个元素)的前k个元素(k<n)移到数组的尾部,变为后k个元素,但是数组的这两段(原前k个元素为一段、另外的n-k个元素为一段)中元素的顺序不得改变。例如,若输入:7和 1 2 3 4 5 6 7,再输入:5,则输出应为:6 7 1 2 3 4 5。
Void Move(int n,int xx[],int k)
{int i,j,t;
for(i=0;i<k;i++){t=xx[0];
for(j=1;j<n;j++)
xx[j-1]=xx[j];xx[n-1]=t;}}
58、移动一维数组中的内容,若数组中有n个整数,要求把下标从p到n-1(p≤n-1)的数组元素平移到数组的前面,一维数组中的原始内容为
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,P的值为6。移动后,一维数组中的内容应为7,8,9,10,10,11,12,13,14,15,1,2,3,4,5,6。
void fun(int *w,int p,int n)
{int i,j,t;
for(i=p;i<=n-1;i++){t=w[n-1];
for(j=n-2;j>=0;j- -)
W[j+1]=w[j];w[0]=t;}}
59、移动一维数组中的内容,若数组中有n个整数,要求把下标从0到P(P≤n-1)的数组元素平移到数组的最后,如一维数组中的原始内容应为1,2,3,4,5,6,7,8,9,10,10,11,12,13,14,15,P为3移动后一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。
Void fun(int *w,int p,int n)
{int i,j,t;
For(i=0;i<=p;i++){t=w[0];
For(j=1;j<n;j++)
w[j-1]=w[j];w[j-1]=t;}}
60、删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。若一维数组中的数据是:
2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10删除后,数组中的内容应该是:2,3,4,5,6,7,8,9,10。
Int fun(int a[],int n)
{int i,j=1;
for(i=1;i<n;i++)
if(a[j-1]!=a[i])a[j++]=a[i];return j;}
61、求出能整除X且不是奇数的各整数,并按从小到大的顺序放在PP所指的数组中,这些除数的个数通过形参n返回。若X中的值为24,则有6个数符合要求,它们是2,4,6,8,12,24。
void fun(int x,int pp[],int*n)
{int i,j=0;
For(i=2;i<=x;i=i+2)
If(x%i= =0)pp[j++]=i;*n=j;}
62、求出能整除X且不是偶数的各整数,并按从小到大的顺序放在PP所指的数组中,这些除数个数通过形参n返回。若X中的值为30,则有4个数符合要求,它们是1,3,5,15。
void fun (int x,int pp[],int*n)
{int i,j=0;
for(i=1;i<x;i=i+2)
if(x%i= =0)pp[j++]=i;*n=j;}
63、将大于整数m且紧靠m的k个非素数存入所指的数组中。如,若输入15,5,则应输出16,18,20,21,22。
void fun(int m,int k,int xx[])
{int i,j,n;
for(i=m+1,n=0;n<k;i++)
for(j=2;j<i;j++)
if(i%j= =0){xx[n++]=i;break;}}
64、求出1到1000之内能被5或13整除、但不能同时被5和13整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。
void fun(int *a,int *n)
{int i,j=0;
for(i=1;i<=1000;i++)
if((i%5= =0||i%13= =0)&& i %65 !=0)
a[j++]=i;*n=j}
65、求出1到m(含m)之内能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。若传给m的值为50,输出7,11,14,21,22,28,33,35,42,44,49
void fun(int m,int *a,int *n)
{int i,j=0;
for(i=1;i<=m;i++)
If(i%7= =0||i%11= =0)a[j++]=i;*n=j;}
66、求出1到1000之内能被7或11整除的所有整数,但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过a返回这些数的个数。
void fun(int *a,int *n)
{int i,j=0;
for(i=1;i<=1000;i++)
if((i%7= =0||i%11= =0)&&i%77!=0)
a[j++]=i;*n=j;}
67、将大于整数m且紧靠m的k个素数存入所指的数组中。例如,若输入17,5则应输出19,23,29,31,37。
void fun(int m,int k,int xx[])
{int i,j,n;
for(i=m+1,n=0;n<k;i++)
{for(j=2;j<I;j++)if(i%j==0)break;
If(j>=i)xx[n++]=i;}}
68、求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。
int fun(int lim,int aa[MAX])
{int i,j,k=0;
for(i=2;i<=lim;i++)
{for(j=2;j<i;j++)if(i%j= =0)break;
if(j>=i)aa[k++]=i;}return k;}
69、将所有大于1小于整数m的非素数存入XX所指数组,非素数的个数通过K传回。例如,输入17,则应输出4,6,8,9,10,12,14,15,16。
void fun(int m,int*k,int xx[])
{int i,j,n=0;
for(i=4;i<m;i++)
{for(j=2;j<i;j++)if(i%j= =0)break;
if(j<i)xx[n++]=i;}*k=n;}
70、将所有大于1小于整数m的素数存入XX所指数组中,系数的个数通过k传回。输入25,则应输出2,3,5,7,11,13,17,19,23.
void fun(int m,int*k,int xx[])
{int i,j,t,n=0;
for(i=2;i<m;i++)
{t=1;for(j=2;j<1;j++)
if(i%j= =0){t=0;break;}
if(t= =1)xx[n++]=i;}*k=n;}
71、m个人的成绩存放在score数组中,编写函数;将高于平均分的分数作为函数值返回,将高于平均分的分数放在up所指的数组中。如,当score数组中的数据为
24,35,88,76,90,54,59,66,96时,函数返回的人数应该是5,up中的数据应为88,76,90,66,96。
int fun(int score[],int m,int up[])
{int i,j=0;float av=0.0;
for(i=0;i<m;i++)av=av+score[i]/m;
for(i=0;i<m;i++)
if(score[i]>av)up[j++]=score[i];
return j;}
72、m个人的成绩存放在score数组中,编写函数;将低于平均分的分数作为函数值返回,将低于平均分的分数放在below所指的数组中,当score数组中的数据为
10,20,30,40,50,60,70,80,90时,函数返回的人数应该是4,below中的数据应为10,20,30,40.
int fun(int score[],int m,int below[])
{int i,j=0;float av=0.0;
for(i=0;i<m;i++)
av+= score[i]
av=av/m;
for(i=0;i<m;i++)
if(score[i]<av)below[j++]=score[i];
return j;}
73、计算n门课程的平均分,计算结果作为函数值返回。若有5门课程的成绩是90.5,72,80,61.5,55则函数的值为71.80
float fun(float *a,int n)
{float av=0.0;int i;
for(i=0;i<n;i++)av=av+a[i];
Return (av/n);}
74、统计各年龄段的人数。N个龄通过调用随机函数获得,并放在主函数的age数组中。要求函数把0至9岁年龄段的人数在d[0]中,把10至19岁年龄段的人数放在d(1)中,把20至29岁年龄段的人数放在d[2]中,依次类推,把100岁(含100)以上年龄的人数都放在d[10]中。结果在主函数中输出。
void fun(int *a,int*b)
{int i,j;
for(j=0;j<M;j++)b[j]=0;
for(i=0;i<N;i++)
if(a[i]>=100)b[10]++;
else b[a[i]/10]++;}
75、分别求出数组中所奇数之和以及所有偶数之和。形参n给出数组中数据的个数;利用指针odd返回奇数之和,利用指针even返回偶数之和。例如,数组中的值依次为:1,9,2,3,11,6;则利用用指针odd返回奇数之和24;利用指针even返回偶数之和8。
fun(int*a,int n,int*odd,int*even)
{int i;*odd=*even=0;
for(i=0;i<n;i++)
if(a[i]%2==1)*odd+=a[i];
else*even+=a[i];}
76、删除bb数组中所有值为Y的元素。
void fun(int bb[],int *n,int y)
{int i,pos=*n-1;
for(;pos>=0;pos--)
if(bb[pos]= =y)
{for(i=os;i<*n-1;i++)
bb[i]=bb[i+1];(*n)- -;}}
77、求出数组dd中前k个数的小数的部分的和,并返回此值。若输入4和101.91、213.87、345.79、420.83,则输出3.4。
double Acc(int k,double dd[])
{int i,a;double b,sum=0;
for(i=0;i<k;i++){a=dd[i];
b=dd[i]-a;result+=b;}return sum;}
78、求出数组PP中n个数的整数部分的和,并返回此值。若输入4和11.91、23.87、35.79、40.83,则输出109.0,整数部分的值应小于10的16次方。
Double Pbt(int n,double pp[])
{int i,a;double sum=0;
for(i=0;i<n;i++){a=pp[i];sum+=a;}
return sum;}
79、计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:S=35.951014。
double fun(double x[9])
{int i;double avg=0.0,sum=0.0;
for(i=0;i<8;i++){avg=(x[i]+x[i+1])/2;
sum+=sqrt(avg);}return sum;}
三、字符题
80、将字符串ss中所有下标为偶数位置上的字母转化为大写(若该位置上不是字母,则不转换)。若输入abc4Efg,则应输出AbC4EfG.
void fun( char *ss)
{int i;
for(i=0;ss[i]!’\0’;i++)
{if(i%2= =0&&ss[i]>=’a’&&ss[i]<=’z’)
ss[i]=ss[i]-32;}}
81、将ss所指字符串中所有下标为偶数位置的字母转换为小写(若该位置上不是字母,则不转换)。若输入ABC4efG,则应输出aBc4efg.
void fun(char *ss)
{int i;
for(i=0;ss[i]!=’\0’;i++)
{if(i%2==0&&ss[i]>=’A’&&ss[i]<=’Z’)
ss[i]=ss[i]!+32;}
82、将s所指字符串中下标为偶数同时ASCII值也为偶数的字符删除,s中剩余的字符形成一个新串放在t所指的数组中。例如,若s所指字符串中的内容为“ABCDEFG12345”,最后t所指的数组中的内容应是“ABCDEFG135”。
void fun(char *s,char t[])
{int i,slenth,n=0;
slenth=strlen(s);
for(i=0;i<slenth;i++)
{if(s[i]%2==0&&i%2==0)
else t[n++]=s[i];}t[n]= '\0';}
83、将s所指字符串中下标为奇数、同时ASCII值也为奇数的字符删除,串中剩余的字符形成一个新串放在t所指的数组中。例如:若s所指串中的内容为“ABCDEFG12345”,最后,t所指的数组中的内容是“ABCDEFG24”。
void fun(char *s,char t[])
{int i,slenth,n=0;
slenth=strlen(s);
for(i=0;i<slenth;i++)
{if(i%2!=0&&s[i]%2!=0);
else t[n++]=s[i];}t[n]=’\0’;}
84、将s所指字符串中下标为奇数同时ASCII值为奇数的字符删除,s中剩余的字符形成的新串放在t所指的数组中。例如,若s所指字符串中的内容为”ABCDEFG12345”最后,t所指的数组中的内容应是“ACEG12345”。
Void fun(char*s,char t[])
{int i,slenth,n=0;
slenth=strlen(s);
for(i=0;i<slenth;i++)
{if(i%2!=0&&s[i]%2==0);
else t[n++]=s[i];}t[n]=’\0’;}
85、将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s中剩余的字符形成的新串放在t所指的数组中。例如,若s所指字符串中的内 容为”ABCDEFG12345”,则在t所指数组中的内容应是BDF12345。
void fun(char*s,char t[])
{int i,j=0,n=
strlen(s);
for(i=0;i<n;i++)
if(!(i%2==0&&s[i]%2!=0))
t[j++]=s[i];t[j]=’\0’;}
86、将s所指字符中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。例如,当s所指字符串中的内容为ABCDEFGHIJK,则在t所指数组中的内容应是BDFHJ.
void fun(char *s,char t[])
{int i,j=0,k=strlen(s);
For(i=1;i<k;i=i+2)t[j++]=s[i];t[j]=’\0’;}
87、将s所指字符中下标为奇数的字符删除,串中剩余字符形成的新串放在t所指数组中。例如,当s所指字符串中的内容为siegAHdied,则在t所指数组中的内容应是seAde.
Void fun(char*s,char t[])
{int i,j=0,k=strlen(s);
For(i=1;i<k;i=i+2)t[j++]=s[i];t[j]=’\0’;}
88、将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一新串放在t所指的数组中。例如,若 所指字符串中的内容为ABCDEFG12345,最后t所指的数组 内容应是ACEG135。
89、将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一新串放在t所指的数组中。若s 所指字符串中的内容为ABCDEFG1234 ,最后t所指的数组 的内容应是BDF24。
Void fun(char*s,char t[])
{int i,j=0,
n=strlen(s);
For(i=0;i<n;i++)
If(s[i]%2==0)
t[j++]=s[i];t[j]=’\0’;}
90、将s所指字符串中除了下标为奇娄,同时ASCII值也为奇数的字符外,其余的全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。若s所指字符串中的内容为ABCDEFG12345,最后t所指的数组中的内容应是135。
Void fun(char*s,char t[])
{int i,j=0,n;n=
strlen(s);
For(i=0;i<n;i++)
If(i%2!=0&&s[i]%2!=0)
T[j++]=s[i];t[j]=’\0’;}
91、将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。若s所指字符串中的内容为ABCDEFG123456,最后t所指的数组中的内容应是246。
Void fun(char *s,char t[])
{int i,j=0;
for(i=0;s[i]!=’\0’;i++)
if(i%2= =0&&s[i]%2= =0)
t[j++]=s[i];t[j]=’\0’;}
92、将s所指字符串中除了下标为偶数、同时ASCII码值为奇数的字符之外,其余的所有字符删除,串中剩余字符形成的一个新串放在t所指的数组中。例如,若s所指字符串中的内容为ABCDEFG12345,最后t所指的数组中的内容应是ACEG。
Void fun(char *s,char t[])
{int i,j=0;
for (i=0;s[i]!=’\0’
;i++)
{if(i%2==0&&s[i]2!=0)
t[j++]=s[i];}t[j]=’\0’;}
93、将s所指字符串中除了下标为奇数、同时ASII值为偶数的字符外,其余的全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。例如,若S所指字符串中的内容为edB2A4Dsdg,最后t所指数组中的内容应是d24。
void fun(char*s,char t[])
{int i,j=0;
for(i=0;s[i]!='\0';i++)
if(i%2!=0&&s[i]%2==0)
t[j++]=s[i];t[j]='\0';}
94、除了尾部的*号之外,将字符串中其他*号全部删除。形参p已指向字符串中最后一个字母。(不得使用字符串函数)例如,若字符串中的内容为****A*BC*DEF*G******,删除后,字符串中的内容应当是ABCDEFG******.
void fun(char *a,char *p)
{char*t=a;
for(;t<=p;t++)
if(*t!='*')*(a++)=*t;
for(;*t!='\0';t++)
*(a++)=*t;*a='\0';}
95、删除字符串中所有的*号(不得使用字符串函数)。例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是ABCDEFG。
void fun(char *a)
{int i,j=0;
for(i=0;a[i]!='\0';i++)
if(a[i]!='*')a[j++]=a[i],a[j]='\0';}
96、除了字符前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串中第一个字母,形参P已指向字符串中最后一个字母。(不得使用字符串函数)。若字符串中的内容为***A*BC*DEF*G********,删除后,字符串中的内容则应当是****ABCDEFG********。
void fun(char *a,char *h,char *p)
{int i=0;char *q=a;
while(q<h){a[i++]=*q;q++;}
while(q<p)
{if(*q!='*')a[i++]=*q;q++;}
while(*q){a[i++]=*q;q++;}
a[i]='\0';}
97、除了字符串前导的*号之外,将串中其他*号全部删除。(不得使用字符串函数)。例如,若字符串中的内容为****A*BC*DEF*G********,删除后,字符串中的内容则应当是****ABCDEFG。
void fun(char *a)
{int i=0;char *p=a;
while(*p&&*p=='*')
{a[i++]=*p;p++;}
while(*p)
{if(*p!='*')a[i++]=*p;p++;}
a[i]='\0';}
98、将字符串尾部的*号全部删除,前面和中间的*号不删除。例如,若字符串中的内容为***A*BC*DEF*G*******,删除后的内容则应当是****A*BC*DEF*G。
void fun (char *a)
while(*a!='\0')a++;a--;
while(*a=='*')a--;*(a+1)='\0';}
99、只删除字符串前导和尾部的*号,串中字母之间的*都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。(不得 使用字符串函数)例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G。
void fun(char *a,int n,int h,int e)
{int i,j=0;
for(i=h;i<n-e;i++)
a[i++]=a[i];a[j]='\0';}
100、将字符串中的前导*号全部删除,中间和后面的*号不删除。例如,若字符串中的内容为****A*BC*DEF*G*******,删除后的内容则应当是A*BC*DEF*G*******。
void fun(char *a)
{char *p=a;while(*p=='*'p++;
for(;*p!='0';p++,a++)
*a=*p;*a='\0';}
101、使字符串中前部的*号不得多余n个;若多余n个,则删除多余的*号,若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。例如,若字符串中的内容为****A*BC*DEF*G*******;若n的值为2,删除后,字符串中的内容则应当是****A*BC*DEF*G*******。n的值为4,则字符串中的内容为****A*BC*DEF*G*******。n的值在主函数中输入。(不得使用字符串函数)。
void fun(char *a,int n )
{int i=0,k=0;char *p,*t;
p=t=a;while(*t=='*'){k++;t++;}
if(k>n){while(*p){a[i]=*(p+k-n);
i++;p++;}a[i]='\0';}}
102、使字符串中尾部的*号不得多于n个;若多于n个,则删除多余*号;若少于或等于n个,则什么也不做字符串中间和前面的*号不删除。例如,字符串中的内容为***A*BC*DEF*G*******,若n的值为4,删除后,字符串中的内容则应当是***A*BC*DEF*G****;若n的值为7,则字符串中的内容仍为****A*BC*DEF*G****; n的值在主函数中输入。
void fun(char *a,int n)
{int i=0,k=0;char *p,*t;p=t=a;
while(*t)t++;t--;
while(*t=='*'){k++;t--;}t++;
if(k>n){while(*p&&p<t+n){a[i++]=*p;
p++;}a[i]='\0';}
103、将字符串中的前导*号全部移到字符串的尾部。若字符串中的内容为********A*BC*DEF*G****,移动后,字符串中的内容应当是A*BC*DEF*G***********.
void fun(char *a)
{int i=0,n=0;char *p=a;
while(*p=='*'){n++,p++;}
while(*p){a[i++]=*p;p++;}
while(n!=0){a[i++]='*';n--;}
a[j]='\0';}
104、从字符串中删除指定的字符。同一字母的大、小写按不同字符处理。例如:若程序执行时输入字符串为turbo c and borland c++从键盘上输入字符n,则输出后变为turbo c ad borlad c++。如果输入的字符在字符串中不存在,字符串照原样输出。
int fun(char s[],int c)
{int i=0;char *p;p=s;
while(*p){if(*p!=c){s[i++]=*p;p++;}
s[i]='\0';}
105、删除一个字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b 所指的数组中,n中存放指定的下标。例如,输入一个字符串world,然后输入3,则调用该函数后的结果为word。
void fun(char a[],char b[],int n)
{int i,k=0;
for(i=0;a[i]!='\0';i++)
if(i!=n)b[k++]=a[i];b[k]='\0';}
106、删除字符串规定下标开始的n个字符。例如,字符串内容为HellolloWorld!,k中的值为:5,n中的值为3,则调用该函数的结果为:Hello World!
void fun(char *a,int k,int n)
{int i;i=k;
while(a[i-1]!='\0')
{a[i]=a[i+n];i=i+1;}}
107、删除字符串中的数字字符。例如输入字符串:48CTYP9E6,则输出:CTYPE.
void fun(char *s)
{int i,j=0;char str[100],*p;p=s;
while(*p!='\0')}
{if(*p<'0')||*p>'9')
str[j++]=*p;p++;}str[j]='\0';p=s;
for(i=0;i<j;i++)
p[i]=str[i];p[i]='\0';}
108、删除字符串中的所有空格。如:输入asd af aa z67,则输出为asdafaaz67.
int fun (char *str)
{int i,j=0;
for(i=0;str[i]!='\0';i++)
if(str[i]!='')str[j++]=str[i];
str[j]='\0'}
109、把字符串中的内容逆置。例如:字符串中原有的字符串为abcdefg,则调用该函数后,串中的内容为gfedcba。
fun(char *s)
{char ch;int i=0,n;
n=strlen(s)-1;
while(i<(n+1)/2)
{ch=s[i];s[i]=s[n];s[n]=ch;i++;n--;}}
110、判断字符串是否为回文?若是则函数返回1,主函数中输出YES,否则返回0,主函数中输出NO。回文是指顺读和倒读都一样的字符串。例如,字符串LEVEL是回文,而字符串123312就不是回文。
int fun(char *str)
{int i,n=0,fg=1;char *p=str;
while(*p){n++;p++;}
for(i=0;i<n/2;i++)
if(str[i]==str[n-1-i]);
else{fg=0;break;}return fg;}
111、在字符串中的所有数字字符前加一个$字符。例如,输入A1B23CD45,则输出为:A$1B$2$3CD$4$5.
void fun(char *s)
{charp[80];int i=0,j=0;
while(s[i]!='/0')
{if((s[i]>='0'&&(s[i]<='9'))
{p[j]='$';p[j+1]=s[i];j=j+2;}
else {p[j]=s[i];j=j+1;}i++;}
p[j]='\0';strcpy(s,p);}
112、统计在tt字符串中’a’到’z’26个字母各自出现的次数,并依次放在pp所指数组中。例如:当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:33322110000000000000000000。
void fun(char*tt,int pp[])
{int i;
for(i=0;i<26;i++)pp[i]=0;
for(;*tt!='\0';tt++)
if(*tt>='a'&&*tt<='z')
pp[*tt-'a']++;}
113、统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。
int fun(char *s)
{int i,j=0;
for(i=0;s[i]!='/0';i++)
if(s[i]!=''&&(s[i+1]==''||s[i+1]=='\0'))
i++;return j;}
114、统计字符串S在字符串str中出现的次数。例如,若输入字符串“12 123 12345”和“23”,则应输出2(表示字符串“23”在字符串“12 123 12345”中出现了两次)。若输入字符串“33333”和“33”,则应输出4(表示字符串“33”在字符串“33333”出现了四次)。
int MySearch(char* str;char* s)
{char *p;int n=0;
for(;*str;)
if((p=strstr(str,s))!=NULL)
{n++;str=p+1;}
else str++;return(n);}
115、统计一个长度为2的字符串在另一个字符串中出现的次数。如假定输入的字符串为asd asasdfg asd as zx67 asd mklo,子字符串为as,则应当输出6。
int fun(char *str, char *substr)
{int i,j=0;
for(i=0;str[i+1]!='\0';i++)
if(str[i]==substr[0]&&str[i+1]==substr[1])
j++;return j;}
116、将一个数字字符串转换为一个整数(不得调用字符串函数)。例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。
long fun(char *p)
{long n=0;int flag=1;
if(*p=='-'){p++;flag=-1;}
else if(*p=='+')p++;
while(*p!='\0'){n=n*10+*p-'0';p++;}
return n*flag;}
117、将字符串tt中的小写字母都改为对应的大写字母,其它字符不变并返回修改后的字符串。例如:若输入字符串“Ab、cD”,则输出字符串“AB,CD”。
char* EXUL(char tt[])
{for(;*tt;tt++)
if((*tt>='a'&&(*tt <='z'))*tt=32;}
118、把字符串中所有的字符前移一个位置,串中的第一个字符移到最后。例如:原有的字符串为:Mn.123xyZ,则调用该函数后,串中的内容为:n.123xyZM。
fun(char *s)
{int i,length;
char tmp;length=strlen(s);
if(length==0)return;tmp=s[0];
for(i=0;i<length-1;i++)
s[i]=s[i+1];s[length-1]=tmp;}
119、把字符串中所有的字母改写在该字母的下一个字母,最后一个字母z改写成字母a。大写字母仍为大写字母,小写字母仍为小写字母,其他的字符不变。例如,原有的字符串为;Mn.123xyZ,则调用该函数后,串中的内容为:No.123yzA。
fun(char *s)
{int i,length;
length=strlen(s);
for(i=0;i<length;i++)
{if(!((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&}s[i]<='Z')))continue;
switch(s[i])
{case'z':s[i]='a';break;
case'Z':s[i]='A';break;
defaule:s[i]+1;break;}}}
120、将字符串ss中所有下标奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入“abc4EFG”,则应输出“aBc4EFG”.
void fun(char *ss)
{int i,n=0;char *p=ss;
while(*p){n++;p++;}
for(i=0;i<n;i++)
if((ss[i]>='a'&&ss[i<='z’)&&(i%2!=0)
ss[i]=ss[i]-32;ss[i]='\0';}
121、将字符串tt中的每个单词的首字符改为对应的大写字母,首字符后的字母都改为对应的小写字母,其它字符不变并返回修改后的字符串。例如,若输入“ab,cD Boy!”,则应输出字符串为:“Ab, Cd Boy!”.
charEXUL(char tt[])
{int isfirst=1;int i ,
Lenhth;length=strlen(tt);
For(i=0;i<length;i++)
{if(tt[i]>=’a’&&tt[i]<=’z’){tt[i]=isfirst?(tt[i]+’A’-‘a’);tt
122、移动字符串中的内容,移动 则是把第1到第m个字符,平移到 串的最后,把第m+1到最后的字到字符串的前部。例如,字符串 有的内容为ABCDEFGHIJK,m的 移动后,字符串中的内容应该 DEFGHIJKABC.
void fun (char *w,int m)
{int i,j;char t;
for(i=1;i<=m;i++){t=w[0];
for(j=1;w[j]!='\0';j++)
w[j-1]=w[j];w[j-1]=t;}}
123、将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。例如若二维数组中的数据为:
W W W W
S S S S
H H H H
则字符串中的内容应是WSHWSHWSHWSH.
void fun(char (*s)[N],char *b)
{int i,j,k=0;
for(i=0;i<N;i++)
for(j=0;j<M;j++)b{k++}=s[j][i];
b[k]='\0';}
124、将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。例如,若字符串数组中的M个字符串为
AAAA
BBBBBBB
CC
则合并后的字符串内容应该是
AAAABBBBBBBCC
Void fun(char a[M][N],char *b)
{int i,j,k=0;
for(i=0;i<M;i++)
for(j=0;a[i][j]!='\0';j++)
b[k++]=a[i][j];b[k]='\0';}
125、求出SS所指字符串中指定字符的个数,并返回此值。例如,若输入字符串123412132,输入字符1,则输出3。
int fun(char *ss, char c)
{int i=0;
for(;*ss!='\0';ss++)
if(*ss==c)i++;return i;}
126、实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后;若分别输入下面两个字符串FirstString和SecondString则程序输出:
irstStringSecondString
void fun(char p1[],char p2[])
{int i,j;
for(i=0;p1[i]!='\0';i++);
for(j=0;p2[j]!='\0';j++)
p1[i++]=p2[j];p1[i]='\0';}
127、对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。例如:若原来的字符串为CEAedca,则排序后输出为CedcEAa.
int fun(char *s, int num)
{char t;int i,j;
for(i=1;i<num-2;i++)
for(j=i+1;j<num-1;j++)
if(s[i]<s[j])
{t=s[i];s[i]=s[j];s[j]=t;}}
128、从传入的num个字符中找出最长的一个字符串并通过形参指针max传回该串地址(用****作为结束输入的标志)。
fun(char (*a)[81],int num,char *max)
{int i=0;max=a[0];
for(i=0;i<num;i++)
if(strlen(max)<strlen(a[i]))
max=a[i];return max;}
129、比较两个字符串的长度,(不得调用字符串长度的函数),函数返回较短的字符串。若两个字符串长度相等,则返回第1个字符串。例如,输入nanjing<CR>nanchang<CR>(<CR>为回车键),函数将返回nanjing。
char *fun(char *s,char *t)
{int i,j;
for(i=0;s[i]!='\0';i++);
for(j=0;t[j]!='\0';j++);
if(i<=j)return s;else return t;}
130、比较两个字符串的长度,(不得调用C语言提供的求字符串的函数),函数返回较长的字符串。若两个字符串长度相等,则返回第1个字符串。例如,输入beijing<CR>shanghai<CR>(<CR>为回车键),函数将返回shanghai。
char *fun(char *s,char *t)
{int i,j;
for (i=0;s[i]!='\0';i++);
for(j=0;t[j]!='\0';j++);
if(i>=j)return s;else return t;}
四、结构题
131、N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。找出学生的最低分,由函数值返回。
double fun(STREC *h)
{double min=h->s;
while(h!=NULL)
{if(min>h->s) min>h->s;h->h->next;}
return min;}
132、N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指 链表的头节点。的出学生的最高分,由函数值返回。
double fun(STREC *h)
{ double max=h->s;
while(h!=NULL)
{if(max>h->s) max=h->s; h->h->next;}return max;}
133、已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。
fun(STU a[],STU *s)
{int i;*s=a[0];
for(i=0,i<N;i++)
if(s->s<a[i].s)*s=a[i];}
134、已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。
fun(STU a[], STU *S)
{int i;*s=a[0];
for(i=0,i<N;i++)
if(s->s<a[i].s)*s=a[i];}
135、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,把分数最低的学生数据放在b所指的数组中。注意:分数低的学生可能不只一个函数返回分数最高学生的人数。
int fun (STREC *a, STREC *b)
{int i,j=0,min=
a[0].s;
for(i=0;i<N;i++)
if(min>a[i].s)min=a[i].s;
for(i=0;i<N;i++)
if(min==a[i].s)b[j++]=a[i];
return j;}
136、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数:把分数最高的学生数据放在h所指的数组中。注意:分数高的学生可能不只一个函数返回分数最高学生的人数。
int fun (STREC *a, STREC *b)
{int i,j=0,min=
a[0].s;
for(i=0;i<N;i++)
if(max<a[i].s)max=a[i].s;
for(i=0;i<N;i++)
if(max==a[i].s)b[j++]=a[i];return j;}
137、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数;返回指定学号的学生数据,指定的序号在主函数中输入。若没找到指定的学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。
STREC fun(STREC *a, char *b)
{int i;STREC str={"\0",-1};
for(i=0;i<N;i++)
if(strcmp(a[i].num,b)==0)
str=a[i];return str;}
138、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数;返回指定成绩的学生数据,指定的成绩在主函数中输入。若没找到指定的成绩,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。
STREC fun(STREC *a, int b)
{int i;STREC str={"\0",-1};
for(i=0;i<N;i++)
if(a[i].s==b)str=a[i];
return str;}
139、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数;把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。
double fun(STREC*a, STREC*b,int*n)
{int i,j=0;double av=0.0;
for(i=0;i<N;i++)av=av+a[i].s;
av=av/N;
for(i=0;i<N;i++)
if(a[i].s<av) b[j++]=a[i];
*n=j;return av;}
140、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数:把高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。
double fun(STREC *a,STREC *b,int *n)
{int i;double av=0.0;*n=0;
for(i=0;i<N;i++)av=av+a[i].s;
av=av/N;
for(i=0;i<N;i++)
if(av<=a[i].s){b[*n]=a[i];*n=*n+1;}
return av;}
141、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数:把高于等于平均分的学生数据放在b所指的数组中,低于平均分的学生数据放在c所指的数组中,高于等于平均分的学生人数通过形参n传回,低于平均分的学生人数通过形参n传回,低于平均分的学生人数通过形参m传回,平均分通过函数值返回。
double fun(STREC *a,STREC *b,STREC *c,int *n,int*m)
{int i;double av=0.0;*n=0;*m=0;
for(i=0;i<N;i++)
av=av/N;
for(i=0;i<N;i++)
if(av<=a[i].s){b[*n]=a[i];*n=*n+1;}
else{c[*m]=a[i];*m=*m+1;}
return av;}
142、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数;按分数的高低排列学生的记录,低分在前。
int fun (STREC a[])
{int i,j;STREC t;
for(i=1;i<N;i++)
for(j=0;j<N-1;j++)
if(a[j].s>a[j+1].s)
{t=a[j];a[j]=a[j+1];a[j+1]=t;}}
143、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数;按分数的高低排列学生的记录,高分在前。
int fun(STREC a[])
{int i,j;STREC t;
for(i=1;i<N;i++)
for(j=0;j<N-1);j++)
if(a[j];s<a[j+1].s)
{t=a[j];a[j]=a[j+1];a[j+1]=t;}}
144、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数:把指定分数范围之外的学生数据放在b所指的数组中,分数范围之外的学生人数由函数值返回。例如,输入的分数是80和89,则应当把分数低于80和高于89的学生数据进行输出,不包含80分和89分的学生数据。主函数中把80放在low中,把89放在heigh中。
int fun (STREC *a,STREC *b,int 1,int h)
{int i,j=0;
for(i=0;i<N;i++)
of((a[i].s>=0&&a[i].s<1)||(a[i].s<=100))
b[j++]=a[i];return j;}
145、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数;把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。若输入的分数是60和69,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。主函数中把60放在low中,把69放在heigh中。
int fun(STREC *a,STREC *b,int 1, int h)
{int i,j=0;
for(i=0;i<N;i++)
if(a[i].s>=1&&a[i].s<=h)
b[j++]=a[i];return j;}
146、某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。编写函数,求出该学生的平均分放在记录的ave成员中。若学生的成绩是
85.5,76,69.5,85,91,72,64.5,87.5,则他的平均分应当是78.875。
void fun(STREC *p)
{int i;p->ave=0.0;
for(i=0;i<N;i++)p->ave+=p->s[i];
p->ave=p->ave/N;}
147、N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。编写函数:求出平均分,由函数值返回。例如,若学生的成绩是85,76,69,91,72,64,87,则平均分应当是78.625。
double fun(STREC *h)
{double av=0.0;STREC *p=h->next;
while(p!=NULL){av=av+p->s;
p=p->next;}return av/N}