c语言上机题库

2019-08-29 00:17

2011-3-26内部保密资料 编程 一、数字题: 1将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的千位和十位上。例如,当a=45,b=12,调用该函数后,c=1425。

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

2将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的个位和百位上。例如,当a=45,b=12,调用该函数后,数值返回。若n为1000时,s=153.909064。 double fun(int n) {double s=0;int i; for(i=0;i

if(i%3==0&&i%7==0)s+=i; 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之间所有素数的平方根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;}}

23S=(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++)

{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=(ln(1)+ln(2)+ln(3)+?

0.5

+ln(m))。可调用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计算下列和值由函数值返回。23n

S=1+x+x/2!+x/3!+?+x/n!例如,当n=10,x=0.3时,函数值为1.349859。 double fun(double x, int n) c=4251。

void fun(int a,int b,long *c) {*c=a/10*1000+b*100+a*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)*100+(b)*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*1000+b*100+a/10*10+b/10;}

5将两个两位数的正整数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+(b);} 6将两个两位数的正整数a、b全并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上。例如,当a=45,b=12,调用该函数后,c=2514。

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

7将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位依次放在c个位和十位上,b的十位和个位依次放在c的百位和千位上。如当a=16,b=35,则c=5361。

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

{*c=(b)*1000+(b/10)*100+(a)*10+a/10;} {*c=(b/10)*1000+(a/10)*100+(b)*10+(a);} 8将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的十位和千位上。例如,当a=45,b=12,调用该函数后,c=2415。

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

{*c=(b)*1000+(a/10)*100+(b/10)*10+(a);} 9将两个两位数的正整数a,b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上,b数的十位和个位数依次放在c数的百位和个位上。例如,当a=45时,b=12,调用该函数后,c=5142。

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

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

if(i%5==0&&i==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输入100后,则输出为sum=148.874270。 double fun(int n) {int m,k,i;double s=0;

for(m=3;m<=n;m++){k=sqrt(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))); else return (!((x*x-x)0));} 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

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

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

19w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。例如:w值为5923,则函数返回923;若w值为923,则函数返回23。 unsigned fun(unsigned w)

{if(w>=10000) return w000; if(w>=1000)return w00; if(w>=100)return w0; if(w>=10) return w;}

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)所求x1就是方程cos(x)-x=0的一个实根作为函数值返回。输出结果Root=0.739085。 float fun()

{float x1=0.0,x0; do{x0=x1;x1=cos(x0);

}while(fabs(x0-x1)>=1e-6);

s=s+(1.0/(2*i-1)+1.0/(2*i)); return s;}

24计算:s=(1-ln(1)-ln(2)-ln(3)-?

-ln(m))2

s作为函数值返回。在C语言中可调用log(n)函数求ln(n)。log函数的引用说明是double log(double x)。如,若m的值为15,则函数值为723.570801。 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!-x3/3!+?+(-1*x)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求π的值(要求满足精度0.005,即某项小于0.005时停止迭代)。

π/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;}

29S=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个数的方差。

0.5

1 10 S=

(xK-x’)

10 K=1

1 10 其中x’= xK

10

K=1

例如,给定的10个数为

95.0,89.0,76.0,65.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);} 31S=(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=1.0,s1=1.0; for(i=1;i<=n;i++){s1=s1*i; s=s+pow(x,i)/s1;}return s;}

34S=1+(1+20.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;}

35sn=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为止。

S=1+0.5x+(0.5*(0.5-1))/2!*x2

n+(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)>=1e-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

if(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

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

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

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

{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

{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

for(j=i;j

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

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

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

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

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加上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;j<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 mm,int nn) {int x,y;

for(x=0;x

{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 fun (int (*s)[10], int *b, int *n, int mm, int nn) {int i,j,k=0;

for(i=0;i

for(j=0;j

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

{for(j=0;j

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 n )

{int a[M]={0},d=0,i,j,k;FILE *fp ; fp=fopen(\for(i=1;i<=n;i++)

{for(j=0;j

fprintf(fp,\else for(k=n-1;k>=0;k--) {printf(\

fprintf(fp,\

printf(\fclose(fp);}

54求数组的最小元素在数组中的下标并存放在k所指的存储单元中.如输入:

234,345,753,134,436,458,100,321,135,760则输出结果为6,100。

int fun(int *s,int t,int *k) {int i;*k=0;

for(i=0;is[i])*k=i; return s[*k];}

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

if(*max

56把20个随机数存入一个数组,然后输出该数组中的最小值。

int fun(int list[],int size) {int x,i;x=0;

for(i=1;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

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,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

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

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

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

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= =0) && ie !=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==0)a[j++]=i;*n=j;}

66求出1到1000之内能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。 void fun(int *a,int *n) {int i,j=0;

for(i=1;i<=1000;i++)

if((i%7==0||i==0)&&iw!=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

{for(j=2;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)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

{for(j=2;j

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

{t=1;for(j=2;j

71m个人的成绩存放在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

if(score[i]>av)up[j++]=score[i]; return j;}

72m个人的成绩存放在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

if(score[i]

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

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

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

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

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 Pdt( int n, double pp[] ) {int i,a;double sum=0;

for(i=0;i

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所指字符串中的内容为\,最后t所指的数组中的内容应是\。 void fun(char *s, char t[])

{int i,slenth,n=0;slenth=strlen(s); for(i=0;i

{if(s[i]%2==0&&i%2==0) ; else t[n++]=s[i];}t[n]='\\0';}

83将s所指字符串中下标为奇数、同时ASCII值也为奇数的字符删除,串中剩余的字符形成一个新串放在t所指的数组中。例如:若s所指串中的内容为\,最后,t所指的数组中的内容是\。 void fun(char *s,char t[])

{int i,slenth,n=0;slenth=strlen(s); for(i=0;i

else t[n++]=s[i];}t[n]='\\0';}

84将s所指字符串中下标为奇数同时ASCII值为偶数的字符删除,s中剩余字符形成的新串放在t所指的数组中。例如,若s所指字符串中的内容为:\,最后t所指的数组中的内容应是:\。 void fun(char *s, char t[])

{int i,slenth,n=0;slenth=strlen(s); for(i=0;i

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

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

87将s所指字符串中下标为奇数的字符删除,串中剩余字符形成的新串放在t所指数组中。例如,当s所指字符串中的内容为

siegAHdied,则在t所指数组中的内容应是seAde。

void fun(char *s,char t[ ]) {int i,j=0,k=strlen(s);

for(i=0;i

88将s所指字符串中ASCⅡ值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。例如,若s所指字符串中的内容为ABCDEFG12345,最后t所指的数组中的内容应是ACEG135。

void fun(char *s, char t[]) {int i=0;

for(;*s!='\\0';s++)

if(*s%2==1)t[i++]=*s;t[i]='\\0';}

89将s所指字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。若s所指字符串中的内容为ABCDEFG12345,最后t所指的数组中的内容应是BDF24。

void fun(char *s,char t[]) {int i,j=0,n=strlen(s); for(i=0;i

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

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所指字符串中除了下标为偶数、同时ASCⅡ码值为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在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所指字符串中除了下标为奇数、同时ASCII值为偶数的字符外,其余的全部删除,串中剩余字符所形成的一个新串放在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

{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

a[j++]=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

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[i]=’\\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个字符。例如,字符串内容为:Hellollo World!,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

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--;}}

字符串为: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

s[i]=s[i+1];s[length-1]=tmp;}

119把字符串中所有的字母改写在该字母的下一个字母,最后一个字母z改写成字母a。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(i=0;i

if(min>a[i].s)min=a[i].s; for(i=0;i

if(min==a[i].s)b[j++]=a[i]; return j;}

136学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数:把分数最高的学生数据放在h所指的数组中。注意:分数高的学生可能不只一个,函数返回分数最高学生的人数。 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

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)

{char p[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')) j++;return j;}

114统计字符串s在字符串str中出现的次数。例如,若输入字符串\123 12345\和\,则应输出2(表示字符串\在字符串\123 12345\中出现了两次)。若输入字符串\和\,则应输出4(表示字符串\在字符串\出现了四次)。 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中的小写字母都改为对应的大写字母,其它字符不变并返回修改后的字符串。例如:若输入字符串\,则输出字符串\。

char* EXUL(char tt[] ) {for(;*tt;tt++)

if((*tt >= 'a')&&(*tt <= 'z')) *tt-=32;}

118把字符串中所有的字符前移一个位置,串中的第一个字符移到最后。例如:原有的

大写字母仍为大写字母,小写字母仍为小写字母,其他的字符不变。例如,原有的字符串为:Mn.123xyZ,则调用该函数后,串中的内容为:No.123yzA。 fun(char *s)

{int i,length;length=strlen(s); for(i=0;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;

default:s[i]=s[i]+1;break;}}}

120将字符串ss中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。例如,若输入\,则应输出\。

void fun(char *ss)

{int i,n=0;char *p=ss; while(*p){n++;p++;} for(i=0;i

if((ss[i]>=’a’&&ss[i]<=’z’)&&(i%2!=0)) ss[i]=ss[i]-32;ss[i]=’\\0’;}

121将字符串tt中的每个单词的首字符改为对应的大写字母,首字符后的字母都改为对应的小写字母,其它字符不变并返回修改后的字符串。例如,若输入字符串:\bOY!\,则输出字符串为:\。 char* EXUL(char tt[])

{int isfirst=1;int i,length; length=strlen(tt); for(i=0;i

{if(tt[i]>= 'a'&&tt[i]<='z')

{tt[i]=isfirst?(tt[i]+'A'-'a'):tt[i]; isfirst=0;}

else if(tt[i]>='A'&&tt[i]<='Z') {tt[i]=isfirst?tt[i]:(tt[i]-'A'+'a'); isfirst=0;}else isfirst=1;} return tt;}

122移动字符串中的内容,移动的规则是把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后,字符串中的内容应该是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

for(j=0;j

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

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(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

{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

if(strlen(max)

129比较两个字符串的长度,(不得调用字符串长度的函数),函数返回较短的字符串。若两个字符串长度相等,则返回第1个字符串。例如,输入nanjing nanchang 为回车键),函数将返回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个字符串。例如,输入

beijingshanghai (为回车键),函数将返回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;} 四、结构体题: 131N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。找出学生的最低分,由函数值返回。 double fun(STREC *h) {double min=h->s; while(h!=NULL)

{if(min>h->s)min=h->s;h=h->next;} return min;}

132N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。找出学生的最高分,由函数值返回。 double fun(STREC *h) {double max=h->s; while(h!=NULL)

{if(maxs)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

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

if(s->s

135学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,把分数最低的学生数据放在b所指的数组中。注意:分数低的学生可能不只一个函数返回分数最低学生的人数。

int fun (STREC *a, STREC *b) {int i,j=0,min=a[0].s;

int fun (STREC *a, STREC *b) {int i,j=0,max=a[0].s; for(i=0;i

if(max

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={\for(i=0;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={\for(i=0;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

for(i=0;i

if(a[i].s

140学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数:把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。 double fun (STREC *a,STREC *b, int *n) {int i;double av=0.0;*n=0; for(i=0;i

for(i=0;i

if(av<=a[i].s){b[*n]=a[i];*n=*n+1;} return av;}

141学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数:把高于等于平均分的学生数据放在b所指的数组中,低于平均分的学生数据放在c所指的数组中,高于等于平均分的学生人数通过形参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

for(i=0;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;ia[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{t=a[j];a[j]=a[j+1];a[j+1]=t;}}

144学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数:把指定分数范围之外的学生数据放在b所指的数组中,分数范围之外的学生人数由函数值返回。例如,输入的分数是80和89,则应当把分数低于80和高于89的学生数据进填空题: 一、数字题: 1用函数指针指向要调用的函数,规定在_2_处使f指向函数f1,在_3_处使f指向函数f2。行输出,不包含80分和89分的学生数据。主函数中把80放在low中,把89放在heigh中。 int fun (STREC *a,STREC *b,int l, int h ) {int i,j=0;

for(i=0;i

if((a[i].s>=0&&a[i].sh&&a[i].s<=100)) b[j++]=a[i];return j;}

145学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,编写函数:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。若输入的分数是60和69,则应当把分数在60到69的学生数据进行输出,包含{float a,b,c,disc,x1,x2;clrscr(); do{printf(\scanf(\disc=b*b-4*a*c; 60分和69分的学生数据。主函数中把60放在low中,把69放在heigh中。

int fun(STREC *a,STREC *b,int l, int h) {int i,j=0;

for(i=0;i

if(a[i].s>=l&&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。 double fun(int n)

{double s=1.0,s1=0.0;int k; for(k=2;k<=n;k++)

{s1=s;s+=(2*k-1)/s1;}return s;}

void fun(STREC *p) {int i;p->ave=0.0;

for(i=0;iave+=p->s[i]; p->ave=p->ave/N;}

147N名学生的成绩已在主函数中放入一个带头节点的链表结构中,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;} printf(\

25使从键盘上输入一个整数n,输出n对应的斐波那契数列。 main()

当调用正确时,程序输出:

x1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000

double fun(double a, double b) {double (*f)();double r1,r2;

f=f1;r1=f(a);f=f2;r2 = (*f)(a,b); return r1+r2;}

2用函数指针指向要调用的函数,规定在_2_处使f指向函数f1,在_3_处使f指向函数f2。当调用正确时,程序输出:

x1=5.000000,x2=3.000000,x1*x1+x1*x2=40.000000

double fun(double x, double y) {if(i==1)return f1(x); else return f2(x,y); }

3将形参n所指变量中各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。例如,输入一个数:27638496,新的数:为739。

void fun(unsigned long *n)

{unsigned long x=0,i;int t;i=1; while(*n){t=*n;

if(t%2!=0){x=x+t*i;i=i*10;} *n=*n/10;}*n=x;}

4将形参n所指变量中各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。例如,输入一个数:27638496,新的数为64862。 unsigned long fun(unsigned long n) {unsigned long x=0;int t; while(n) {t=t;

if(i%2==0)x=10*x+t; n=n/10;}return x;}

5将形参n所指变量中各位上为偶数的数取出,并按原来从高位到低位的顺序组成一个新的数,并作为函数值返回。例如,输入一个数:27638496,新的数为26846。 unsigned long fun(unsigned long n) {unsigned long x=0,s,i;int t; s=n;i=1; while(s) {t=s;

if(i%2==0)x=x+t*i;i=i*10;} s=s/10;}return x;}

6求方程ax2

+bx+c=0的根。例如,当a=1,b=2,c=1时,方程的两个根分别是:x1=-1.00,x2=-1.00。 main()

{float a,b,c,disc,x1,x2,p,q; scanf(\disc=b*b-4*a*c;clrscr();

printf(\******the result *******\\n\); if(disc>=0)

{x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf(\1=%6.2f,x2=%6.2f\\n\,x1,x2);} else{p=-b/(2*a);

q=sqrt(fabs(disc))/(2*a); printf(\printf(\2=%6.2f-%6.2f i\\n\p,q);}}

7输出方程组A+B=56,A+2B=72的一组正整数解。结果是:A=40,B=16。 main()

{int i,j;clrscr(); for(i=0;i<100; i++) for(j=0;j<100; j++)

if(i+j==56&&i+2*j==72) printf(\

8求方程ax2

+bx+c=0的两个实数根。例如,当a=1,b=2,c=1时,方程的两个根分别是x1=-1.00, x2=-1.00。 main()

if(disc<0)

printf(\}while(disc<0);

printf(\******the result*******\\n\; x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a);

printf(\nx1=%6.2f\\nx2=%6.2f\\n\,x1,x2);}

9判断一个数的个位数字和百位数字之和是否等于其十位上的数字,是则返回“yes!”,否则返回“no!”。 char *fun(int n)

{int g,s,b;g=n;s=n/10; b=n/100;

if((g+b)==s)return″yes!″; else return″no!″;

10输入一个长整数,如果这个数是负数,则取它的绝对值,并显示出来。例如,输入:-3847652,结果为:3847652。 main()

{long int n;clrscr();

printf(\scanf(″%ld″,&n);

printf(\if(n<0)n=-n;printf(\printf(″%ld″, n);}

11计算如下公式的值。A1=1,A2=

1/(1+A1),A3=1/(1+A2),?,AN=1/(1+AN+1)若n=10,则应输出:0.618056。 float fun(int n) {float A=1;int i;

for(i=1;i<=n;i++)A=1.0/(1+A); return A;} 12计算并输出下列级数的前N项之和SN,直到SN+1大于q为止。SN=2/1+3/2+4/3 +?N+1/N例如,若q的值为50.0,则函数值为50.416687。

double fun(double q)

{int n;double s;n=2;s = 2.0;

while(s<=q){s=s+(double)(n+1)/n; n++;}printf(\return s;} 13计算S=f(-n)+f(-n+1)+?

+f(0)+f(1)+f(2)+?+f(n)的值。当n为5时,S的值为:10.407143。

┌(x+1)/(x-2) x>0

f(x) =┤0 x=0 或 x=2 └(x-1)/(x-2) x<0 float f(double x)

{if(x==0.0||x==2.0)return 0.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;} 14求1+2!+3!+...+N!的和。若N=6则和为873。 main()

{int i,n;long s=0,t=1;

clrscr();printf(\scanf(\

for(i=1;i<=n;i++){t=t*i;s=s+t;} printf(\

15计算Sn=1/1-1/3+1/5-1/7+?1/(2n+1)的值。若n的值为15时,输出的结果是:S=0.769788,N=15。

void fun(float *sn,int n) {int i,j=1;float s=0.0; for(i=0;i<=n;i++)

{s=s+j*1.0/(2*i+1);j*=-1;}*sn=s;} main()

{int n=15;float s;fun(&s,n); printf(\16计算SN的值:SN=1/1+3/1+5/4+?+(2N-1)/(SN-1)当N=50时,SN=71.433699。

17计算S的值:s=13/31*35/53*57/75

*?

*(2k-1)2k+1/(2k+1)

2k-1

当k=5时,s=338.215158。 double fun(int n)

{double s=1;double f=0.0; double p=0.0;int i=0;int k; for(k=1; k<=n;k++) {f=2*k-1;p=2*k+1;

for(i=1;i<2*k+1;i++)f*=2*k-1; for(i=1;i<2*k-1;i++)p*=2*k+1; s*=f/p;}return s;} 18计算下式:S=3/22-5/42+7/62

-?

+(-1)n-1*(2n+1)/(2n)2,直到(2n+1)/2n2

的绝

对值小于等于10-3

,并把计算结果作为函数值返回。例如,若E的值为1E-3,函数值为0.551690。

double fun(double e) {int i,k;double s,t,x; s=0;k=1;i=2;x=3/4; while(x>e)

{s=s+k*x;k=k*(-1);t=2*i;

x=(2*i+1)/(t*t);i++;}return s;} 19求P的值p=m!/(n!*(m-n)!)例如:m=11,n=4时,运行结果为330.000000。 long jc(int m) {long s=1;int i;

for(i=1;i<=m;i++)s=s*i;return s;} float fun(int m,int n) {float p;

p=1.0*jc(m)/jc(n)/jc(m-n); return p;} 20计算S的值:s=(1*3)/22+(3*5)/42

+

(5*7)/62+?+(2*n-1)*(2*n+1)/(2+n)2

例如,当形参N的值为10时,函数返回9.612558。

double fun(int n)

{int i;double s,t;s=0; for(i=1;i<=n;i++) {t=2.0*i;

s=s+(2.0*i-1)*(2.0*i+1)/(t*t);} return s;}

21计算S的值:s=(1*3)/22-(3*5)/42

+

(5*7)/62

-?

+(-1)n-1(2*n-1)*(2*n+1)/(2+n)

2

例如,当形参N的值为10时,函数返回-0.204491。

double fun(int n)

{int i,k;double s,t;s=0;k=1; for(i=1;i<=n;i++) {t=2*i;

s=s+k*(2*i-1)*(2*i+1)/(t*t); k=k*(-1);}return s;

22计算下式:S=1/22+3/42+5/62

+?+(2N-1)

/(2N)

2

double fun(double e)

{int i;double s,x;s=0;i=0;x=1.0; while(x>e){i++;

x=(2.0*i)/((2.0*i)*(2.0*i)); s=s+x;}return s;} 23判断某一个年份是否为闰年。例如,1900年不是闰年,2004是闰年。 int fun(int n) {int flag=0;

if(n%4==0){if(n0!=0)flag=1;} if(n@0==0)flag=1;return flag;} 24从键盘输入3个整数,然后找出最大的数并输出。例如,输入12,45,43,最大值为45。 main()

{int a,b,c,max;clrscr();

printf(\scanf(\printf(\if(a>b)max=a;else max=b; if(max

{int i,n=0;scanf(\for(i=0;i

printf(\int fun(int n)

{if(n==0) return 0; else if(n==1)return 1;

else return fun(n-1)+fun(n-2);}

26找出100至x(x≤999)之间各位上的数字之和为15的所有整数,然后输出;符合条件的整数个数作为函数值返回。当n值为500时,各位数字之和为15的整数有:159、168、177??共有26个。 fun(int x)

{int n,s1,s2,s3,t;n=0;t=100; while(t<=x)

{s1=t;s2=(t/10);s3=t/100; if(s1+s2+s3==15){printf(\n++;}++t;}return n;}

27找出100-999之间(含100和999)所有整数中各位上数字之和为X(X为一个正整数)的整数,然后输出。符合条件的整数个数作为函数值返回。例如:当X值为5时,满足条件的数为:104、113、122、131、140、203、212、221、230、302、311、320、401、410、500共有15个。

int fun(int x)

{int n,s1,s2,s3,t;n=0;t=100; while(t<=999)

{s1=t;s2=(t/10);s3=t/100; if(s1+s2+s3==x){printf(“%d”,t); n++;}t++;}return n;}

28打印出1~1000中满足:个位数字的立方等于其本身所有数。本题的结果为:1,64,125,216,729 main()

{int i,g;clrscr();

for(i=1;i<1000;i++){g=i; if(g*g*g==i)printf(\

29打印出满足个位的数字、十位上的数字和百位上的数字都相等的所有三位数。本题的打印结果为:111,222,333,444,555,666,777,888,999。 main()

{int g,s,b;clrscr(); for(g=1;g<10;g++) for (s=1;s<10;s++) for(b=1;b<10;b++) {if(g==s&&s==b)

printf(\

30求两个正整数m和n的最大公约和最小公倍数。 main()

{int a,b,n,m,t;clrscr();

printf(\scanf(\

if(n

printf(\

printf(\31从键盘输入只有两个整数参与运算的一个四则运算式,然后计算出它的值。注意数字全部为正整数。例如,输入308*28,结果为8624.000000。 main()

{int a=0,b=0,flag=1,fg=1; float result;char *p,ch; char str[10];clrscr();

printf(\gets(str);p=str; while(*p)

{if(*p>='0'&&*p<='9'&&flag==1) a=a*10+*p-'0';

else if(fg){ch=*p;flag=2;fg=0;} if(*p>='0'&&*p<='9'&&flag==2)


c语言上机题库.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:土木工程造价任务书2015年

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: